From ef27a57e0d507c5be37b0e065b5a729670552bdb Mon Sep 17 00:00:00 2001 From: Robert Tari Date: Sat, 22 Aug 2020 20:19:03 +0200 Subject: Use server configuration templates + set minimum folder list height --- ayatanawebmail/application.py | 34 +--- ayatanawebmail/common.py | 4 +- ayatanawebmail/dialog.py | 202 +++++++++++++-------- .../schemas/org.ayatana.webmail.gschema.xml | 23 +-- po/ayatanawebmail.pot | 146 ++++++++------- 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(''+_('Choose an account')+'') 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(''+_('Server data')+'') - infolabel = Gtk.Label(xalign=0, margin_top=5, hexpand=True) - infolabel.set_markup(''+_('Account data')+'') 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(''+_('Links')+'') - 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 @@ Message action Action to perform when a message is activated. - - 'https://mail.example.com' - Home - URL or command for the "Home" link. - - - 'https://mail.example.com/compose' - Compose - URL or command for the "Compose" link. - - - 'https://mail.example.com/inbox' - Inbox - URL or command for the "Inbox" link. - - - 'https://mail.example.com/sent' - Sent - URL or command for the "Sent" link. + + ['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&_mbox=INBOX\thttps://mail.example.com/?_task=mail&_action=compose\thttps://mail.example.com/?_task=mail&_mbox=Sent\thttps://mail.example.com/?_task=mail&_mbox=INBOX\t&_uid=$MSG_UID'] + Webmail server templates + Stores the list of predefined settings for certain webmail servers. 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 \n" "Language-Team: LANGUAGE \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 "" -- cgit v1.2.3