aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Tari <robert@tari.in>2020-08-22 20:19:03 +0200
committerRobert Tari <robert@tari.in>2020-08-22 20:19:03 +0200
commitef27a57e0d507c5be37b0e065b5a729670552bdb (patch)
tree6482cf378de8dd4f0ada90add62ca1674f1f90cd
parenteb462c2b52cbcad84f27340d69c3ce5ddd811f65 (diff)
downloadayatana-webmail-ef27a57e0d507c5be37b0e065b5a729670552bdb.tar.gz
ayatana-webmail-ef27a57e0d507c5be37b0e065b5a729670552bdb.tar.bz2
ayatana-webmail-ef27a57e0d507c5be37b0e065b5a729670552bdb.zip
Use server configuration templates + set minimum folder list height
-rwxr-xr-xayatanawebmail/application.py34
-rwxr-xr-xayatanawebmail/common.py4
-rwxr-xr-xayatanawebmail/dialog.py202
-rwxr-xr-xdata/usr/share/glib-2.0/schemas/org.ayatana.webmail.gschema.xml23
-rwxr-xr-xpo/ayatanawebmail.pot146
5 files changed, 204 insertions, 205 deletions
diff --git a/ayatanawebmail/application.py b/ayatanawebmail/application.py
index f8c41a6..ebb83b7 100755
--- a/ayatanawebmail/application.py
+++ b/ayatanawebmail/application.py
@@ -33,7 +33,7 @@ from gi.repository import Gio, GLib, Gtk, Notify
from socket import error as socketerror
from dbus.mainloop.glib import DBusGMainLoop
from babel.dates import format_timedelta
-from ayatanawebmail.common import g_oTranslation, g_oSettings, openURLOrCommand, g_lstAccounts, g_dctDefaultURLs
+from ayatanawebmail.common import g_oTranslation, g_oSettings, openURLOrCommand, g_lstAccounts
from ayatanawebmail.idler import Idler
from ayatanawebmail.dialog import PreferencesDialog, MESSAGEACTION
from ayatanawebmail.actions import DialogActions
@@ -727,33 +727,11 @@ class AyatanaWebmail(object):
strLogin = dctAttributes['username']
strPasswd = key.get_secret().decode('utf-8')
strFolders = dctAttributes['folders']
- strHome = g_oSettings.get_string('home')
- strCompose = g_oSettings.get_string('compose')
- strInbox = g_oSettings.get_string('inbox')
- strSent = g_oSettings.get_string('sent')
- strInboxAppend = ''
-
- try:
-
- strHome = dctAttributes['home']
- strCompose = dctAttributes['compose']
- strInbox = dctAttributes['inbox']
- strSent = dctAttributes['sent']
-
- except KeyError:
-
- pass
-
- try:
-
- strInboxAppend = dctAttributes['InboxAppend']
-
- except KeyError:
-
- if strInbox == g_dctDefaultURLs['Inbox']:
- strInboxAppend = '/$MSG_THREAD'
-
- pass
+ strHome = dctAttributes['home']
+ strCompose = dctAttributes['compose']
+ strInbox = dctAttributes['inbox']
+ strSent = dctAttributes['sent']
+ strInboxAppend = dctAttributes['InboxAppend']
g_lstAccounts.append({'Host': strHost, 'Port': nPort, 'Login': strLogin, 'Passwd': strPasswd, 'Folders': strFolders, 'Home': strHome, 'Compose': strCompose, 'Inbox': strInbox, 'Sent': strSent, 'InboxAppend': strInboxAppend})
diff --git a/ayatanawebmail/common.py b/ayatanawebmail/common.py
index cc7c43b..47a17e2 100755
--- a/ayatanawebmail/common.py
+++ b/ayatanawebmail/common.py
@@ -19,8 +19,6 @@ except IOError:
g_oTranslation = gettext.NullTranslations()
g_oTranslation.install()
-
-g_dctDefaultURLs = {'Home': 'https://mail.example.com', 'Compose': 'https://mail.example.com/compose', 'Inbox': 'https://mail.example.com/inbox', 'Sent': 'https://mail.example.com/sent'}
g_oSettings = Gio.Settings.new('org.ayatana.webmail')
g_lstAccounts = []
@@ -80,7 +78,7 @@ def resolveURL(strURL):
def openURLOrCommand(strURL):
- if strURL in g_dctDefaultURLs:
+ if strURL in ['Home', 'Compose', 'Inbox', 'Sent']:
strURL0 = g_lstAccounts[0][strURL]
diff --git a/ayatanawebmail/dialog.py b/ayatanawebmail/dialog.py
index 953b56a..6690ef0 100755
--- a/ayatanawebmail/dialog.py
+++ b/ayatanawebmail/dialog.py
@@ -9,7 +9,7 @@ import ayatanawebmail.imaplib2 as imaplib
import os.path
from socket import error as socketerror
from gi.repository import Gtk, GdkPixbuf, Gdk
-from ayatanawebmail.common import g_oSettings, getDataPath, g_dctDefaultURLs
+from ayatanawebmail.common import g_oSettings, getDataPath
from ayatanawebmail.appdata import APPVERSION, APPURL, APPDESCRIPTION, APPAUTHOR, APPYEAR, APPTITLE
import webbrowser
@@ -52,56 +52,30 @@ def utf7dec(lstInput):
return ''.join(lstResult)
-class ComboEntry(Gtk.ButtonBox):
+class Entry(Gtk.Entry):
def __init__(self, strId, **kwargs):
- Gtk.ButtonBox.__init__(self, orientation=Gtk.Orientation.HORIZONTAL, layout_style=Gtk.ButtonBoxStyle.EXPAND, **kwargs)
-
- self.oComboBoxText = Gtk.ComboBoxText()
- self.oComboBoxText.append('HTTP:', _('Web page'))
- self.oComboBoxText.append('Exec:', _('Command'))
- self.oEntry = Gtk.Entry()
- self.oEntry.set_icon_from_icon_name(Gtk.EntryIconPosition.SECONDARY, 'gtk-revert-to-saved-ltr')
- self.oEntry.connect('icon-press', self.onReset)
- self.oComboBoxText.set_active_id('HTTP:')
- self.pack_start(self.oComboBoxText, False, False, 0)
- self.pack_start(self.oEntry, True, True, 0)
- self.set_homogeneous(False)
- self.strId = strId
-
- def onReset(self, oWidget, nPosition, oEvent):
-
- self.setText(g_dctDefaultURLs[self.strId]);
+ Gtk.Entry.__init__(self, **kwargs)
+ self.set_tooltip_text(_('If this string starts with http:// or https://, the application will open it in your browser - otherwise, it will be run as a command'))
def setText(self, strText):
- self.oEntry.set_text(strText[5:] if strText.startswith('Exec:') else strText)
- self.oComboBoxText.set_active_id('Exec:' if strText.startswith('Exec:') else 'HTTP:')
-
- def getText(self):
+ if strText.startswith('Exec:'):
- return ('Exec:' if self.oComboBoxText.get_active_id() == 'Exec:' else '') + self.oEntry.get_text()
+ strText = strText[5:]
-class EntryReset(Gtk.Entry):
+ self.set_text(strText)
- def __init__(self, oComboEntry, **kwargs):
-
- Gtk.Entry.__init__(self, **kwargs)
-
- self.set_icon_from_icon_name(Gtk.EntryIconPosition.SECONDARY, 'gtk-revert-to-saved-ltr')
- self.connect('icon-press', self.onReset)
- self.oComboEntry = oComboEntry
- self.set_tooltip_text(_('Append an additional string - you can use the $MSG_THREAD and $MSG_UID placeholders.'))
+ def getText(self):
- def onReset(self, oWidget, nPosition, oEvent):
+ strText = self.get_text()
- strText = ''
+ if not strText.startswith('http://') and not strText.startswith('https://'):
- if self.oComboEntry.oComboBoxText.get_active_id() == 'HTTP:' and self.oComboEntry.getText() == g_dctDefaultURLs['Inbox']:
- strText = '/$MSG_THREAD'
+ strText = 'Exec:' + strText
- self.set_text(strText);
+ return strText
class FileChooserButtonEx(Gtk.ButtonBox):
@@ -162,7 +136,7 @@ class PreferencesDialog(Gtk.Dialog):
self.set_position(Gtk.WindowPosition.CENTER)
self.set_property('width-request', 640)
self.set_property('height-request', 480)
- self.oNotebook = Gtk.Notebook(vexpand=True, margin_left=5, margin_top=5, margin_right=5)
+ self.oNotebook = Gtk.Notebook(vexpand=True, margin_left=5, margin_top=5, margin_right=5, margin_bottom=5)
self.oNotebook.append_page(self.pageAccounts(), Gtk.Label(_('Accounts')))
self.oNotebook.append_page(self.pageOptions(), Gtk.Label(_('Options')))
self.oNotebook.append_page(self.pageSupport(), Gtk.Label(_('Support')))
@@ -172,12 +146,12 @@ class PreferencesDialog(Gtk.Dialog):
oContentArea.add(self.oNotebook)
self.oButtonConnect = self.get_widget_for_response(100)
self.oButtonApply = self.get_widget_for_response(Gtk.ResponseType.APPLY)
- self.lstDicts = [{'Host': 'imap.example.com', 'Port': '993', 'Login': '', 'Passwd': '', 'Folders': 'INBOX', 'InboxAppend': '/$MSG_THREAD'}]
- self.lstDicts[0].update(g_dctDefaultURLs)
+ self.lstDicts = [{'Host': self.lServers[0]['host'], 'Port': self.lServers[0]['port'], 'Login': '', 'Passwd': '', 'Folders': 'INBOX', 'InboxAppend': self.lServers[0]['message'], 'Home': self.lServers[0]['home'], 'Compose': self.lServers[0]['compose'], 'Inbox': self.lServers[0]['inbox'], 'Sent': self.lServers[0]['sent']}]
self.set_keep_above(True)
self.show_all()
self.bInit = True
self.nIndex = 0
+ self.bIgnoreServerChange = False
def onResponse(self, oWidget, nResponse):
@@ -248,11 +222,19 @@ class PreferencesDialog(Gtk.Dialog):
self.strCustomSound = g_oSettings.get_string('custom-sound')
self.bMergeConversation = g_oSettings.get_boolean('merge-messages')
self.nMessageAction = g_oSettings.get_enum('message-action')
+ self.lServers = []
+
+ for sServer in g_oSettings.get_strv('servers'):
+
+ lValues = sServer.split('\t')
+ lValues.append('\t'.join(lValues[1:]))
+ dServer = dict(zip(['name', 'host', 'port', 'home', 'compose', 'sent', 'inbox', 'message', 'raw'], lValues))
+ self.lServers.append(dServer)
+
+ self.lServers[0]['name'] = _('Custom')
def pageAccounts(self):
- acclabel = Gtk.Label(xalign=0, hexpand=True)
- acclabel.set_markup('<b>'+_('Choose an account')+'</b>')
self.sb = Gtk.SpinButton.new_with_range(1, 1, 1)
self.sb.set_numeric(True)
self.sb.set_update_policy(Gtk.SpinButtonUpdatePolicy.IF_VALID)
@@ -265,6 +247,14 @@ class PreferencesDialog(Gtk.Dialog):
accbox.pack_start(self.sb, True, True, 0)
accbox.pack_end(self.rmbtn, False, False, 0)
accbox.pack_end(self.addbtn, False, False, 0)
+ self.pComboBoxTextServer = Gtk.ComboBoxText()
+ self.pComboBoxTextServer.connect('changed', self.onComboBoxTextServerChanged)
+
+ for dServer in self.lServers:
+
+ self.pComboBoxTextServer.append(None, dServer['name'])
+
+ self.pComboBoxTextServer.set_active_id('custom')
self.EntryHost = Gtk.Entry(hexpand=True)
self.EntryHost.connect('changed', lambda w: self.updateUI())
self.EntryPort = Gtk.Entry(hexpand=True)
@@ -273,53 +263,53 @@ class PreferencesDialog(Gtk.Dialog):
self.EntryLogin.connect('changed', lambda w: self.updateUI())
self.EntryPassword = Gtk.Entry(visibility=False, caps_lock_warning=True, hexpand=True)
self.EntryPassword.connect('changed', lambda w: self.updateUI())
- srvlabel = Gtk.Label(xalign=0, margin_top=5, hexpand=True)
- srvlabel.set_markup('<b>'+_('Server data')+'</b>')
- infolabel = Gtk.Label(xalign=0, margin_top=5, hexpand=True)
- infolabel.set_markup('<b>'+_('Account data')+'</b>')
self.oListStore = Gtk.ListStore(str, str, bool)
oTreeView = Gtk.TreeView(self.oListStore, headers_visible=False, activate_on_single_click=True, margin_left=5, margin_top=5, margin_right=5, margin_bottom=5)
- oTreeView.set_property('height-request', 200)
oTreeView.connect('row-activated', self.onFolderActivated)
oTreeViewColumnBool = Gtk.TreeViewColumn('bool', Gtk.CellRendererToggle(), active=2)
oTreeViewColumnBool.get_cells()[0].set_property('xalign', 1.0)
oTreeView.append_column(Gtk.TreeViewColumn('folder', Gtk.CellRendererText(), text=1))
oTreeView.append_column(oTreeViewColumnBool)
oFrame = Gtk.ScrolledWindow(shadow_type=Gtk.ShadowType.IN, hexpand=True, vexpand=True)
+ oFrame.set_property('height-request', 200)
oFrame.add(oTreeView)
- oLabelLinks = Gtk.Label(xalign=0, margin_top=5, hexpand=True)
- oLabelLinks.set_markup('<b>'+_('Links')+'</b>')
- self.oEntryHome = ComboEntry('Home', hexpand=True)
- self.oEntryCompose = ComboEntry('Compose', hexpand=True)
- self.oEntryInbox = ComboEntry('Inbox', hexpand=True)
- self.oEntrySent = ComboEntry('Sent', hexpand=True)
- self.oEntryInboxAppend = EntryReset(self.oEntryInbox)
+ self.oEntryHome = Entry('Home', hexpand=True)
+ self.oEntryHome.connect('changed', lambda w: self.updateUI())
+ self.oEntryCompose = Entry('Compose', hexpand=True)
+ self.oEntryCompose.connect('changed', lambda w: self.updateUI())
+ self.oEntryInbox = Entry('Inbox', hexpand=True)
+ self.oEntryInbox.connect('changed', lambda w: self.updateUI())
+ self.oEntrySent = Entry('Sent', hexpand=True)
+ self.oEntrySent.connect('changed', lambda w: self.updateUI())
+ self.oEntryInboxAppend = Gtk.Entry(hexpand=True)
+ self.oEntryInboxAppend.connect('changed', lambda w: self.updateUI())
+ self.oEntryInboxAppend.set_tooltip_text(_('The application will append this string to "Inbox" to access a specific message - you can use the $MSG_THREAD and $MSG_UID placeholders'))
oGrid = Gtk.Grid(row_spacing=5, column_spacing=5, vexpand=True)
- oGrid.attach(srvlabel, 0, 0, 3, 1)
- oGrid.attach(Gtk.Label(_('Host:'), xalign=0, margin_right=5), 0, 1, 1, 1)
- oGrid.attach(self.EntryHost, 1, 1, 2, 1)
- oGrid.attach(Gtk.Label(_('Port:'), xalign=0, margin_right=5), 0, 2, 1, 1)
- oGrid.attach(self.EntryPort, 1, 2, 2, 1)
- oGrid.attach(infolabel, 0, 3, 3, 1)
- oGrid.attach(Gtk.Label(_('Login:'), xalign=0, margin_right=5), 0, 4, 1, 1)
- oGrid.attach(self.EntryLogin, 1, 4, 2, 1)
+ oGrid.attach(Gtk.Label(_('Account:'), xalign=0, margin_right=5), 0, 0, 1, 1)
+ oGrid.attach(accbox, 1, 0, 1, 1)
+ oGrid.attach(Gtk.Label(_('Server:'), xalign=0, margin_right=5), 0, 1, 1, 1)
+ oGrid.attach(self.pComboBoxTextServer, 1, 1, 1, 1)
+ oGrid.attach(Gtk.Label(_('Host:'), xalign=0, margin_right=5), 0, 2, 1, 1)
+ oGrid.attach(self.EntryHost, 1, 2, 1, 1)
+ oGrid.attach(Gtk.Label(_('Port:'), xalign=0, margin_right=5), 0, 3, 1, 1)
+ oGrid.attach(self.EntryPort, 1, 3, 1, 1)
+ oGrid.attach(Gtk.Label(_('Username:'), xalign=0, margin_right=5), 0, 4, 1, 1)
+ oGrid.attach(self.EntryLogin, 1, 4, 1, 1)
oGrid.attach(Gtk.Label(_('Password:'), xalign=0, margin_right=5), 0, 5, 1, 1)
- oGrid.attach(self.EntryPassword, 1, 5, 2, 1)
+ oGrid.attach(self.EntryPassword, 1, 5, 1, 1)
oGrid.attach(Gtk.Label(_('Folders:'), xalign=0, margin_right=5), 0, 6, 1, 1)
- oGrid.attach(oFrame, 1, 6, 2, 1)
- oGrid.attach(oLabelLinks, 0, 7, 3, 1)
- oGrid.attach(Gtk.Label(_('Home:'), xalign=0, margin_right=5), 0, 8, 1, 1)
- oGrid.attach(self.oEntryHome, 1, 8, 2, 1)
- oGrid.attach(Gtk.Label(_('Compose:'), xalign=0, margin_right=5), 0, 9, 1, 1)
- oGrid.attach(self.oEntryCompose, 1, 9, 2, 1)
+ oGrid.attach(oFrame, 1, 6, 1, 1)
+ oGrid.attach(Gtk.Label(_('Home:'), xalign=0, margin_right=5), 0, 7, 1, 1)
+ oGrid.attach(self.oEntryHome, 1, 7, 1, 1)
+ oGrid.attach(Gtk.Label(_('Compose:'), xalign=0, margin_right=5), 0, 8, 1, 1)
+ oGrid.attach(self.oEntryCompose, 1, 8, 1, 1)
+ oGrid.attach(Gtk.Label(_('Sent:'), xalign=0, margin_right=5), 0, 9, 1, 1)
+ oGrid.attach(self.oEntrySent, 1, 9, 1, 1)
oGrid.attach(Gtk.Label(_('Inbox:'), xalign=0, margin_right=5), 0, 10, 1, 1)
oGrid.attach(self.oEntryInbox, 1, 10, 1, 1)
- oGrid.attach(self.oEntryInboxAppend, 2, 10, 1, 1)
- oGrid.attach(Gtk.Label(_('Sent:'), xalign=0, margin_right=5), 0, 11, 1, 1)
- oGrid.attach(self.oEntrySent, 1, 11, 2, 1)
+ oGrid.attach(Gtk.Label(_('Message:'), xalign=0, margin_right=5), 0, 11, 1, 1)
+ oGrid.attach(self.oEntryInboxAppend, 1, 11, 1, 1)
page = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=5, border_width=10, vexpand=True)
- page.add(acclabel)
- page.add(accbox)
page.add(oGrid)
oScrolledWindow = Gtk.ScrolledWindow()
oScrolledWindow.add(page)
@@ -461,12 +451,29 @@ class PreferencesDialog(Gtk.Dialog):
bHasFolderSelection = [oRow for oRow in self.oListStore if oRow[2]]
bHasAccountData = all([oWidget.get_text() for oWidget in [self.EntryHost, self.EntryPort, self.EntryLogin, self.EntryPassword]])
bHasMultipleAccounts = len(self.lstDicts) > 1
+ bHasLinkData = all([oWidget.get_text() for oWidget in [self.oEntryHome, self.oEntryCompose, self.oEntryInbox, self.oEntrySent, self.oEntryInboxAppend]])
self.oButtonConnect.set_sensitive(bHasAccountData)
- self.oButtonApply.set_sensitive(bHasFolderSelection and bHasAccountData)
+ self.oButtonApply.set_sensitive(bHasFolderSelection and bHasAccountData and bHasLinkData)
self.rmbtn.set_sensitive(bHasMultipleAccounts)
- self.addbtn.set_sensitive(bHasFolderSelection and bHasAccountData)
- self.sb.set_sensitive(bHasFolderSelection and bHasAccountData and bHasMultipleAccounts)
+ self.addbtn.set_sensitive(bHasFolderSelection and bHasAccountData and bHasLinkData)
+ self.sb.set_sensitive(bHasFolderSelection and bHasAccountData and bHasMultipleAccounts and bHasLinkData)
+
+ nServerActive = 0
+
+ for nServer, dServer in enumerate(self.lServers):
+
+ if dServer['raw'] == self.EntryHost.get_text() + '\t' + self.EntryPort.get_text() + '\t' + self.oEntryHome.get_text() + '\t' + self.oEntryCompose.get_text() + '\t' + self.oEntrySent.get_text() + '\t' + self.oEntryInbox.get_text() + '\t' + self.oEntryInboxAppend.get_text():
+
+ nServerActive = nServer
+
+ break
+
+ if self.pComboBoxTextServer.get_active() != nServerActive:
+
+ self.bIgnoreServerChange = True
+ self.pComboBoxTextServer.set_active(nServerActive)
+ self.bIgnoreServerChange = False
def run(self):
@@ -489,8 +496,8 @@ class PreferencesDialog(Gtk.Dialog):
def onAddAccount(self, btn):
self.updateAccounts()
- self.lstDicts.append({'Host': 'imap.example.com', 'Port': '993', 'Login': '', 'Passwd': '', 'Folders': 'INBOX', 'InboxAppend': '/$MSG_THREAD'})
- self.lstDicts[-1].update(g_dctDefaultURLs)
+ nServer = self.pComboBoxTextServer.get_active()
+ self.lstDicts.append({'Host': self.lServers[nServer]['host'], 'Port': self.lServers[nServer]['port'], 'Login': '', 'Passwd': '', 'Folders': 'INBOX', 'InboxAppend': self.lServers[nServer]['message'], 'Home': self.lServers[nServer]['home'], 'Compose': self.lServers[nServer]['compose'], 'Inbox': self.lServers[nServer]['inbox'], 'Sent': self.lServers[nServer]['sent']})
self.sb.set_range(1, len(self.lstDicts))
self.sb.set_value(len(self.lstDicts))
self.updateUI()
@@ -561,6 +568,41 @@ class PreferencesDialog(Gtk.Dialog):
self.oEntrySent.setText(self.lstDicts[nIndex]['Sent'])
self.oEntryInboxAppend.set_text(self.lstDicts[nIndex]['InboxAppend'])
+ nServerActive = 0
+
+ for nServer, dServer in enumerate(self.lServers):
+
+ if dServer['raw'] == self.EntryHost.get_text() + '\t' + self.EntryPort.get_text() + '\t' + self.oEntryHome.get_text() + '\t' + self.oEntryCompose.get_text() + '\t' + self.oEntrySent.get_text() + '\t' + self.oEntryInbox.get_text() + '\t' + self.oEntryInboxAppend.get_text():
+
+ nServerActive = nServer
+
+ break
+
+ if self.pComboBoxTextServer.get_active() != nServerActive:
+
+ self.bIgnoreServerChange = True
+ self.pComboBoxTextServer.set_active(nServerActive)
+ self.bIgnoreServerChange = False
+
+ def onComboBoxTextServerChanged(self, pComboBoxText):
+
+ if not self.bIgnoreServerChange:
+
+ nServer = self.pComboBoxTextServer.get_active()
+
+ if self.lServers[nServer]['raw'] != self.EntryHost.get_text() + '\t' + self.EntryPort.get_text() + '\t' + self.oEntryHome.get_text() + '\t' + self.oEntryCompose.get_text() + '\t' + self.oEntrySent.get_text() + '\t' + self.oEntryInbox.get_text() + '\t' + self.oEntryInboxAppend.get_text():
+
+ self.EntryHost.set_text(self.lServers[nServer]['host'])
+ self.EntryPort.set_text(self.lServers[nServer]['port'])
+ self.EntryLogin.set_text('')
+ self.EntryPassword.set_text('')
+ self.oListStore.clear()
+ self.oEntryHome.setText(self.lServers[nServer]['home'])
+ self.oEntryCompose.setText(self.lServers[nServer]['compose'])
+ self.oEntryInbox.setText(self.lServers[nServer]['inbox'])
+ self.oEntrySent.setText(self.lServers[nServer]['sent'])
+ self.oEntryInboxAppend.set_text(self.lServers[nServer]['message'])
+
def updateAccounts(self):
if self.bInit:
diff --git a/data/usr/share/glib-2.0/schemas/org.ayatana.webmail.gschema.xml b/data/usr/share/glib-2.0/schemas/org.ayatana.webmail.gschema.xml
index c90b4a3..4cc5dd9 100755
--- a/data/usr/share/glib-2.0/schemas/org.ayatana.webmail.gschema.xml
+++ b/data/usr/share/glib-2.0/schemas/org.ayatana.webmail.gschema.xml
@@ -46,25 +46,10 @@
<summary>Message action</summary>
<description>Action to perform when a message is activated.</description>
</key>
- <key type="s" name="home">
- <default>'https://mail.example.com'</default>
- <summary>Home</summary>
- <description>URL or command for the "Home" link.</description>
- </key>
- <key type="s" name="compose">
- <default>'https://mail.example.com/compose'</default>
- <summary>Compose</summary>
- <description>URL or command for the "Compose" link.</description>
- </key>
- <key type="s" name="inbox">
- <default>'https://mail.example.com/inbox'</default>
- <summary>Inbox</summary>
- <description>URL or command for the "Inbox" link.</description>
- </key>
- <key type="s" name="sent">
- <default>'https://mail.example.com/sent'</default>
- <summary>Sent</summary>
- <description>URL or command for the "Sent" link.</description>
+ <key type="as" name="servers">
+ <default>['Custom\timap.example.com\t993\thttps://mail.example.com\thttps://mail.example.com/compose\thttps://mail.example.com/sent\thttps://mail.example.com/inbox\t/$MSG_UID', 'Google\timap.gmail.com\t993\thttps://mail.google.com/mail/\thttps://mail.google.com/mail/#compose\thttps://mail.google.com/mail/#sent\thttps://mail.google.com/mail/#inbox\t/$MSG_THREAD', 'RoundCube\tmail.example.com\t993\thttps://mail.example.com/?_task=mail&amp;_mbox=INBOX\thttps://mail.example.com/?_task=mail&amp;_action=compose\thttps://mail.example.com/?_task=mail&amp;_mbox=Sent\thttps://mail.example.com/?_task=mail&amp;_mbox=INBOX\t&amp;_uid=$MSG_UID']</default>
+ <summary>Webmail server templates</summary>
+ <description>Stores the list of predefined settings for certain webmail servers.</description>
</key>
</schema>
</schemalist>
diff --git a/po/ayatanawebmail.pot b/po/ayatanawebmail.pot
index 4a3c732..f454cec 100755
--- a/po/ayatanawebmail.pot
+++ b/po/ayatanawebmail.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ayatana-webmail 20.8.16\n"
"Report-Msgid-Bugs-To: https://github.com/AyatanaIndicators/ayatana-webmail/issues\n"
-"POT-Creation-Date: 2020-08-21 01:36+0200\n"
+"POT-Creation-Date: 2020-08-22 20:15+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -59,232 +59,228 @@ msgid "Clear"
msgstr ""
#: ayatanawebmail/application.py:218
-#: data/usr/share/applications/ayatana-webmail.desktop:192
+#: data/usr/share/applications/ayatana-webmail.desktop:35
msgid "Settings"
msgstr ""
-#: ayatanawebmail/application.py:979
+#: ayatanawebmail/application.py:957
msgid "No subject"
msgstr ""
-#: ayatanawebmail/application.py:1132
+#: ayatanawebmail/application.py:1110
msgid "Connection error"
msgstr ""
-#: ayatanawebmail/application.py:1133
+#: ayatanawebmail/application.py:1111
#, python-brace-format
msgid "Unable to connect to account \"{accountName}\", the application will now exit."
msgstr ""
-#: ayatanawebmail/application.py:1158
+#: ayatanawebmail/application.py:1136
#, python-format
msgid "You have %d unread mail"
msgid_plural "You have %d unread mails"
msgstr[0] ""
msgstr[1] ""
-#: ayatanawebmail/application.py:1185
+#: ayatanawebmail/application.py:1163
#, python-format
msgid "from %(t0)s, %(t1)s and others"
msgstr ""
-#: ayatanawebmail/application.py:1187
+#: ayatanawebmail/application.py:1165
#, python-format
msgid "from %(t0)s and %(t1)s"
msgstr ""
-#: ayatanawebmail/application.py:1189
+#: ayatanawebmail/application.py:1167
#, python-format
msgid "from %s"
msgstr ""
-#: ayatanawebmail/application.py:1202
+#: ayatanawebmail/application.py:1180
#, python-format
msgid "New mail from %s"
msgstr ""
-#: ayatanawebmail/dialog.py:62
-msgid "Web page"
+#: ayatanawebmail/dialog.py:60
+msgid "If this string starts with http:// or https://, the application will open it in your browser - otherwise, it will be run as a command"
msgstr ""
-#: ayatanawebmail/dialog.py:63
-msgid "Command"
-msgstr ""
-
-#: ayatanawebmail/dialog.py:95
-msgid "Append an additional string - you can use the $MSG_THREAD and $MSG_UID placeholders."
-msgstr ""
-
-#: ayatanawebmail/dialog.py:116 ayatanawebmail/dialog.py:130
+#: ayatanawebmail/dialog.py:90 ayatanawebmail/dialog.py:104
msgid "(None)"
msgstr ""
-#: ayatanawebmail/dialog.py:158
+#: ayatanawebmail/dialog.py:132
msgid "Ayatana Webmail Preferences"
msgstr ""
-#: ayatanawebmail/dialog.py:166
+#: ayatanawebmail/dialog.py:140
msgid "Accounts"
msgstr ""
-#: ayatanawebmail/dialog.py:167
+#: ayatanawebmail/dialog.py:141
msgid "Options"
msgstr ""
-#: ayatanawebmail/dialog.py:168
+#: ayatanawebmail/dialog.py:142
msgid "Support"
msgstr ""
-#: ayatanawebmail/dialog.py:169
+#: ayatanawebmail/dialog.py:143
msgid "About"
msgstr ""
-#: ayatanawebmail/dialog.py:230
+#: ayatanawebmail/dialog.py:204
msgid "Please visit the following link and enable access for less secure apps:"
msgstr ""
-#: ayatanawebmail/dialog.py:232
+#: ayatanawebmail/dialog.py:206
msgid "Access blocked by Google"
msgstr ""
-#: ayatanawebmail/dialog.py:236
+#: ayatanawebmail/dialog.py:210
msgid "Failed to connect to mail account. The returned error was:"
msgstr ""
-#: ayatanawebmail/dialog.py:237
+#: ayatanawebmail/dialog.py:211
msgid "Connection failure"
msgstr ""
-#: ayatanawebmail/dialog.py:255
-msgid "Choose an account"
+#: ayatanawebmail/dialog.py:234
+msgid "Custom"
msgstr ""
-#: ayatanawebmail/dialog.py:260
+#: ayatanawebmail/dialog.py:242
msgid "Add"
msgstr ""
-#: ayatanawebmail/dialog.py:262
+#: ayatanawebmail/dialog.py:244
msgid "Remove"
msgstr ""
-#: ayatanawebmail/dialog.py:277
-msgid "Server data"
+#: ayatanawebmail/dialog.py:286
+msgid "The application will append this string to \"Inbox\" to access a specific message - you can use the $MSG_THREAD and $MSG_UID placeholders"
msgstr ""
-#: ayatanawebmail/dialog.py:279
-msgid "Account data"
+#: ayatanawebmail/dialog.py:288
+msgid "Account:"
msgstr ""
-#: ayatanawebmail/dialog.py:291
-msgid "Links"
+#: ayatanawebmail/dialog.py:290
+msgid "Server:"
msgstr ""
-#: ayatanawebmail/dialog.py:299
+#: ayatanawebmail/dialog.py:292
msgid "Host:"
msgstr ""
-#: ayatanawebmail/dialog.py:301
+#: ayatanawebmail/dialog.py:294
msgid "Port:"
msgstr ""
-#: ayatanawebmail/dialog.py:304
-msgid "Login:"
+#: ayatanawebmail/dialog.py:296
+msgid "Username:"
msgstr ""
-#: ayatanawebmail/dialog.py:306
+#: ayatanawebmail/dialog.py:298
msgid "Password:"
msgstr ""
-#: ayatanawebmail/dialog.py:308
+#: ayatanawebmail/dialog.py:300
msgid "Folders:"
msgstr ""
-#: ayatanawebmail/dialog.py:311
+#: ayatanawebmail/dialog.py:302
msgid "Home:"
msgstr ""
-#: ayatanawebmail/dialog.py:313
+#: ayatanawebmail/dialog.py:304
msgid "Compose:"
msgstr ""
-#: ayatanawebmail/dialog.py:315
+#: ayatanawebmail/dialog.py:306
+msgid "Sent:"
+msgstr ""
+
+#: ayatanawebmail/dialog.py:308
msgid "Inbox:"
msgstr ""
-#: ayatanawebmail/dialog.py:318
-msgid "Sent:"
+#: ayatanawebmail/dialog.py:310
+msgid "Message:"
msgstr ""
-#: ayatanawebmail/dialog.py:356
+#: ayatanawebmail/dialog.py:346
msgid "Mark message as read"
msgstr ""
-#: ayatanawebmail/dialog.py:357
+#: ayatanawebmail/dialog.py:347
msgid "Open message in browser/Execute command"
msgstr ""
-#: ayatanawebmail/dialog.py:358
+#: ayatanawebmail/dialog.py:348
msgid "Ask me what to do"
msgstr ""
-#: ayatanawebmail/dialog.py:368
+#: ayatanawebmail/dialog.py:358
msgid "Enable notifications:"
msgstr ""
-#: ayatanawebmail/dialog.py:370
+#: ayatanawebmail/dialog.py:360
msgid "Play sound when a message is received:"
msgstr ""
-#: ayatanawebmail/dialog.py:372
+#: ayatanawebmail/dialog.py:362
msgid "Merge messages from the same conversation:"
msgstr ""
-#: ayatanawebmail/dialog.py:374
+#: ayatanawebmail/dialog.py:364
msgid "Hide count when zero:"
msgstr ""
-#: ayatanawebmail/dialog.py:376
+#: ayatanawebmail/dialog.py:366
msgid "When a message is activated:"
msgstr ""
-#: ayatanawebmail/dialog.py:379
+#: ayatanawebmail/dialog.py:369
msgid "Execute this command when a message is received:"
msgstr ""
-#: ayatanawebmail/dialog.py:386
+#: ayatanawebmail/dialog.py:376
msgid "Custom sound to play:"
msgstr ""
-#: ayatanawebmail/dialog.py:402
+#: ayatanawebmail/dialog.py:392
msgid "Report a bug"
msgstr ""
-#: ayatanawebmail/dialog.py:404
+#: ayatanawebmail/dialog.py:394
msgid "Request a feature"
msgstr ""
-#: ayatanawebmail/dialog.py:406 ayatanawebmail/dialog.py:409
+#: ayatanawebmail/dialog.py:396 ayatanawebmail/dialog.py:399
#, python-brace-format
msgid "It's a good idea to add the {labelname} label to your issue."
msgstr ""
-#: ayatanawebmail/dialog.py:407
+#: ayatanawebmail/dialog.py:397
msgid "Ask a question"
msgstr ""
-#: ayatanawebmail/dialog.py:410
+#: ayatanawebmail/dialog.py:400
msgid "Help translate"
msgstr ""
-#: ayatanawebmail/dialog.py:412
+#: ayatanawebmail/dialog.py:402
msgid "Source code"
msgstr ""
-#: ayatanawebmail/dialog.py:414
+#: ayatanawebmail/dialog.py:404
msgid "Home page"
msgstr ""
-#: ayatanawebmail/dialog.py:434
+#: ayatanawebmail/dialog.py:424
msgid "translator-credits"
msgstr ""
@@ -292,7 +288,7 @@ msgstr ""
msgid "Ayatana Webmail (service)"
msgstr ""
-#: data/etc/xdg/autostart/ayatana-webmail-autostart.desktop:38
+#: data/etc/xdg/autostart/ayatana-webmail-autostart.desktop:5
msgid "Display notifications about new mail"
msgstr ""
@@ -300,22 +296,22 @@ msgstr ""
msgid "Ayatana Webmail"
msgstr ""
-#: data/usr/share/applications/ayatana-webmail.desktop:39
+#: data/usr/share/applications/ayatana-webmail.desktop:5
msgid "Webmail notifications and actions for any desktop"
msgstr ""
-#: data/usr/share/applications/ayatana-webmail.desktop:74
+#: data/usr/share/applications/ayatana-webmail.desktop:15
msgid "Mark all as read"
msgstr ""
-#: data/usr/share/applications/ayatana-webmail.desktop:112
+#: data/usr/share/applications/ayatana-webmail.desktop:20
msgid "Compose Mail"
msgstr ""
-#: data/usr/share/applications/ayatana-webmail.desktop:152
+#: data/usr/share/applications/ayatana-webmail.desktop:25
msgid "Sent"
msgstr ""
-#: data/usr/share/applications/ayatana-webmail.desktop:228
+#: data/usr/share/applications/ayatana-webmail.desktop:30
msgid "Inbox"
msgstr ""