diff options
-rw-r--r-- | i18n/de.po | 97 | ||||
-rw-r--r-- | i18n/messages.pot | 84 | ||||
-rw-r--r-- | portato/gui/templates/MailInfoWindow.ui | 38 | ||||
-rw-r--r-- | portato/gui/windows/mailinfo.py | 93 |
4 files changed, 194 insertions, 118 deletions
@@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: Portato\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-03-05 21:26+0100\n" -"PO-Revision-Date: 2010-03-05 21:27+0100\n" +"POT-Creation-Date: 2010-03-14 20:01+0100\n" +"PO-Revision-Date: 2010-03-14 20:01+0100\n" "Last-Translator: René 'Necoro' Neumann <necoro@necoro.net>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -243,7 +243,7 @@ msgstr "<b>Autor:</b>" #: portato/gui/templates/PluginWindow.ui:141 #: portato/gui/windows/pkglist.py:59 -#: portato/gui/windows/main.py:830 +#: portato/gui/windows/main.py:843 #: portato/gui/windows/plugin.py:27 msgid "Enabled" msgstr "Aktiviert" @@ -297,15 +297,11 @@ msgstr "" "Kommentare /\n" "Vorgehensweise um den Bug zu erzeugen?" -#: portato/gui/templates/MailInfoWindow.ui:138 -msgid "Attach _Logfile" -msgstr "Hänge _Logdatei an" +#: portato/gui/templates/MailInfoWindow.ui:160 +msgid "These files will be sent:" +msgstr "Die folgenden Dateien werden geschickt:" -#: portato/gui/templates/MailInfoWindow.ui:142 -msgid "Attaches the logfile to the mail. This log only contains debug information." -msgstr "Hängt die Logdatei an die Mail an. In der Datei sind nur Debug-Informationen enthalten." - -#: portato/gui/templates/MailInfoWindow.ui:206 +#: portato/gui/templates/MailInfoWindow.ui:220 msgid "_Send" msgstr "_Send" @@ -350,7 +346,7 @@ msgid "<b>Homepage:</b>" msgstr "<b>Homepage:</b>" #: portato/gui/templates/MainWindow.ui:462 -#: portato/gui/windows/main.py:831 +#: portato/gui/windows/main.py:844 msgid "Installed" msgstr "Installiert" @@ -406,13 +402,13 @@ msgid "Remove the selected package from the queue" msgstr "Löscht das gewählte Paket aus der Queue" #: portato/gui/templates/MainWindow.ui:782 -#: portato/gui/windows/main.py:611 +#: portato/gui/windows/main.py:620 msgid "Queue" msgstr "Queue" #: portato/gui/templates/MainWindow.ui:806 -#: portato/gui/windows/main.py:1240 -#: portato/gui/windows/main.py:1242 +#: portato/gui/windows/main.py:1253 +#: portato/gui/windows/main.py:1255 msgid "Console" msgstr "Konsole" @@ -509,7 +505,7 @@ msgstr "" "Bitte führe <i>emerge --sync && layman -S</i> aus." #: portato/gui/dialogs.py:123 -#: portato/gui/windows/main.py:1289 +#: portato/gui/windows/main.py:1302 #, python-format msgid "No versions of package '%s' found!" msgstr "Keine Version vom Paket '%s' gefunden!" @@ -592,14 +588,15 @@ msgstr "Pakete mit Updates" msgid "World Packages" msgstr "Pakete in \"World\"" -#: portato/gui/windows/mailinfo.py:83 +#: portato/gui/windows/mailinfo.py:144 #, python-format msgid "An error occurred while sending. I think we were greylisted. The error: %s" msgstr "Während des Sendes trat ein Fehler auf. Wahrscheinlich wurden wir ge-greylistet. Der Fehler: %s" -#: portato/gui/windows/mailinfo.py:84 -msgid "Retrying after waiting 60 seconds." -msgstr "Wiederhole den Versuch nach einer 60s Pause." +#: portato/gui/windows/mailinfo.py:145 +#, python-format +msgid "Retrying after waiting %d seconds." +msgstr "Wiederhole den Versuch nach einer %ds Pause." #: portato/gui/windows/splash.py:35 #, python-format @@ -627,7 +624,7 @@ msgid "Package Set" msgstr "Paket-Set" #: portato/gui/windows/preference.py:259 -#: portato/gui/windows/main.py:833 +#: portato/gui/windows/main.py:846 #: portato/db/database.py:49 #: portato/db/database.py:50 msgid "Description" @@ -655,90 +652,90 @@ msgstr "Paket konnte nicht gefunden werden: %s" msgid "Masked by user" msgstr "Vom Benutzer maskiert" -#: portato/gui/windows/main.py:455 +#: portato/gui/windows/main.py:464 msgid "Loading Config" msgstr "Lade Konfiguration" -#: portato/gui/windows/main.py:467 +#: portato/gui/windows/main.py:476 msgid "Creating Database" msgstr "Erstelle Datenbank" -#: portato/gui/windows/main.py:471 +#: portato/gui/windows/main.py:480 msgid "Loading Plugins" msgstr "Lade Plugins" -#: portato/gui/windows/main.py:479 +#: portato/gui/windows/main.py:488 msgid "Building frontend" msgstr "Erstelle Oberfläche" -#: portato/gui/windows/main.py:545 +#: portato/gui/windows/main.py:554 msgid "Restoring Session" msgstr "Lade Session" -#: portato/gui/windows/main.py:555 +#: portato/gui/windows/main.py:564 msgid "Loading Plugin Widgets" msgstr "Lade GUI-Elemente der Plugins" -#: portato/gui/windows/main.py:558 +#: portato/gui/windows/main.py:567 msgid "Finishing startup" msgstr "Erledige letzte Handgriffe :)" -#: portato/gui/windows/main.py:614 +#: portato/gui/windows/main.py:623 msgid "Options" msgstr "Optionen" -#: portato/gui/windows/main.py:630 +#: portato/gui/windows/main.py:639 msgid "Categories" msgstr "Kategorien" -#: portato/gui/windows/main.py:689 +#: portato/gui/windows/main.py:698 msgid "Packages" msgstr "Pakete" -#: portato/gui/windows/main.py:724 +#: portato/gui/windows/main.py:733 #, python-format msgid "Package '%s/%s' is disabled." msgstr "Paket '%s/%s' wurde deaktiviert." -#: portato/gui/windows/main.py:741 +#: portato/gui/windows/main.py:750 msgid "Versions" msgstr "Versionen" -#: portato/gui/windows/main.py:744 +#: portato/gui/windows/main.py:753 msgid "Slot" msgstr "Slot" -#: portato/gui/windows/main.py:832 +#: portato/gui/windows/main.py:845 msgid "Flag" msgstr "Flag" -#: portato/gui/windows/main.py:856 +#: portato/gui/windows/main.py:869 msgid "This is an expanded use flag and cannot be selected" msgstr "Dies ist ein \"Expanded Use Flag\" und kann daher nicht ausgewählt werden." -#: portato/gui/windows/main.py:914 +#: portato/gui/windows/main.py:927 #, python-format msgid "Translating session from version %d to %d." msgstr "Upgrade Session von Version %d auf Version %d." -#: portato/gui/windows/main.py:917 +#: portato/gui/windows/main.py:930 #, python-format msgid "Cannot translate session from version %d to %d." msgstr "Kann Session nicht von Version %d nach %d upgraden." -#: portato/gui/windows/main.py:1425 +#: portato/gui/windows/main.py:1438 msgid "use flags" msgstr "Use Flags" -#: portato/gui/windows/main.py:1437 +#: portato/gui/windows/main.py:1450 msgid "masking keywords" msgstr "Masking Keywords" -#: portato/gui/windows/main.py:1838 +#: portato/gui/windows/main.py:1851 msgid "The portage tree is not existing." msgstr "Der Portage-Tree existiert nicht." -#: portato/gui/windows/main.py:1842 +#: portato/gui/windows/main.py:1855 msgid "The portage tree seems to be empty." msgstr "Der Portage-Tree scheint leer zu sein." @@ -942,22 +939,22 @@ msgstr "Leere Datenbank..." msgid "Populating database..." msgstr "Fülle Datenbank..." -#: portato/session.py:67 +#: portato/session.py:69 #, python-format msgid "Loading '%s' session from %s." msgstr "Lade '%s'-Session von %s." -#: portato/session.py:69 +#: portato/session.py:71 #, python-format msgid "Loading session from %s." msgstr "Lade Session von %s." -#: portato/session.py:141 +#: portato/session.py:139 #, python-format msgid "Saving '%s' session to %s." msgstr "Schreibe '%s'-Session nach %s." -#: portato/session.py:143 +#: portato/session.py:141 #, python-format msgid "Saving session to %s." msgstr "Schreibe Session nach %s." @@ -1115,6 +1112,14 @@ msgstr "Emerge fehlgeschlagen!" msgid "Error Code: %d" msgstr "Fehler-Code: %d" +#~ msgid "Attach _Logfile" +#~ msgstr "Hänge _Logdatei an" +#~ msgid "" +#~ "Attaches the logfile to the mail. This log only contains debug " +#~ "information." +#~ msgstr "" +#~ "Hängt die Logdatei an die Mail an. In der Datei sind nur Debug-" +#~ "Informationen enthalten." #~ msgid "Plu_gins" #~ msgstr "Plu_gins" #~ msgid "_File" diff --git a/i18n/messages.pot b/i18n/messages.pot index 26f1dd1..555837f 100644 --- a/i18n/messages.pot +++ b/i18n/messages.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-03-05 21:26+0100\n" +"POT-Creation-Date: 2010-03-14 20:01+0100\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" @@ -239,7 +239,7 @@ msgid "<b>Author:</b>" msgstr "" #: portato/gui/templates/PluginWindow.ui:141 portato/gui/windows/pkglist.py:59 -#: portato/gui/windows/main.py:830 portato/gui/windows/plugin.py:27 +#: portato/gui/windows/main.py:843 portato/gui/windows/plugin.py:27 msgid "Enabled" msgstr "" @@ -284,16 +284,11 @@ msgid "" "what did you do to hit the bug?" msgstr "" -#: portato/gui/templates/MailInfoWindow.ui:138 -msgid "Attach _Logfile" +#: portato/gui/templates/MailInfoWindow.ui:160 +msgid "These files will be sent:" msgstr "" -#: portato/gui/templates/MailInfoWindow.ui:142 -msgid "" -"Attaches the logfile to the mail. This log only contains debug information." -msgstr "" - -#: portato/gui/templates/MailInfoWindow.ui:206 +#: portato/gui/templates/MailInfoWindow.ui:220 msgid "_Send" msgstr "" @@ -337,7 +332,7 @@ msgstr "" msgid "<b>Homepage:</b>" msgstr "" -#: portato/gui/templates/MainWindow.ui:462 portato/gui/windows/main.py:831 +#: portato/gui/templates/MainWindow.ui:462 portato/gui/windows/main.py:844 msgid "Installed" msgstr "" @@ -387,12 +382,12 @@ msgstr "" msgid "Remove the selected package from the queue" msgstr "" -#: portato/gui/templates/MainWindow.ui:782 portato/gui/windows/main.py:611 +#: portato/gui/templates/MainWindow.ui:782 portato/gui/windows/main.py:620 msgid "Queue" msgstr "" -#: portato/gui/templates/MainWindow.ui:806 portato/gui/windows/main.py:1240 -#: portato/gui/windows/main.py:1242 +#: portato/gui/templates/MainWindow.ui:806 portato/gui/windows/main.py:1253 +#: portato/gui/windows/main.py:1255 msgid "Console" msgstr "" @@ -485,7 +480,7 @@ msgid "" "Please run <i>emerge --sync && layman -S</i>." msgstr "" -#: portato/gui/dialogs.py:123 portato/gui/windows/main.py:1289 +#: portato/gui/dialogs.py:123 portato/gui/windows/main.py:1302 #, python-format msgid "No versions of package '%s' found!" msgstr "" @@ -573,14 +568,15 @@ msgstr "" msgid "World Packages" msgstr "" -#: portato/gui/windows/mailinfo.py:83 +#: portato/gui/windows/mailinfo.py:144 #, python-format msgid "" "An error occurred while sending. I think we were greylisted. The error: %s" msgstr "" -#: portato/gui/windows/mailinfo.py:84 -msgid "Retrying after waiting 60 seconds." +#: portato/gui/windows/mailinfo.py:145 +#, python-format +msgid "Retrying after waiting %d seconds." msgstr "" #: portato/gui/windows/splash.py:35 @@ -608,7 +604,7 @@ msgstr "" msgid "Package Set" msgstr "" -#: portato/gui/windows/preference.py:259 portato/gui/windows/main.py:833 +#: portato/gui/windows/preference.py:259 portato/gui/windows/main.py:846 #: portato/db/database.py:49 portato/db/database.py:50 msgid "Description" msgstr "" @@ -634,90 +630,90 @@ msgstr "" msgid "Masked by user" msgstr "" -#: portato/gui/windows/main.py:455 +#: portato/gui/windows/main.py:464 msgid "Loading Config" msgstr "" -#: portato/gui/windows/main.py:467 +#: portato/gui/windows/main.py:476 msgid "Creating Database" msgstr "" -#: portato/gui/windows/main.py:471 +#: portato/gui/windows/main.py:480 msgid "Loading Plugins" msgstr "" -#: portato/gui/windows/main.py:479 +#: portato/gui/windows/main.py:488 msgid "Building frontend" msgstr "" -#: portato/gui/windows/main.py:545 +#: portato/gui/windows/main.py:554 msgid "Restoring Session" msgstr "" -#: portato/gui/windows/main.py:555 +#: portato/gui/windows/main.py:564 msgid "Loading Plugin Widgets" msgstr "" -#: portato/gui/windows/main.py:558 +#: portato/gui/windows/main.py:567 msgid "Finishing startup" msgstr "" -#: portato/gui/windows/main.py:614 +#: portato/gui/windows/main.py:623 msgid "Options" msgstr "" -#: portato/gui/windows/main.py:630 +#: portato/gui/windows/main.py:639 msgid "Categories" msgstr "" -#: portato/gui/windows/main.py:689 +#: portato/gui/windows/main.py:698 msgid "Packages" msgstr "" -#: portato/gui/windows/main.py:724 +#: portato/gui/windows/main.py:733 #, python-format msgid "Package '%s/%s' is disabled." msgstr "" -#: portato/gui/windows/main.py:741 +#: portato/gui/windows/main.py:750 msgid "Versions" msgstr "" -#: portato/gui/windows/main.py:744 +#: portato/gui/windows/main.py:753 msgid "Slot" msgstr "" -#: portato/gui/windows/main.py:832 +#: portato/gui/windows/main.py:845 msgid "Flag" msgstr "" -#: portato/gui/windows/main.py:856 +#: portato/gui/windows/main.py:869 msgid "This is an expanded use flag and cannot be selected" msgstr "" -#: portato/gui/windows/main.py:914 +#: portato/gui/windows/main.py:927 #, python-format msgid "Translating session from version %d to %d." msgstr "" -#: portato/gui/windows/main.py:917 +#: portato/gui/windows/main.py:930 #, python-format msgid "Cannot translate session from version %d to %d." msgstr "" -#: portato/gui/windows/main.py:1425 +#: portato/gui/windows/main.py:1438 msgid "use flags" msgstr "" -#: portato/gui/windows/main.py:1437 +#: portato/gui/windows/main.py:1450 msgid "masking keywords" msgstr "" -#: portato/gui/windows/main.py:1838 +#: portato/gui/windows/main.py:1851 msgid "The portage tree is not existing." msgstr "" -#: portato/gui/windows/main.py:1842 +#: portato/gui/windows/main.py:1855 msgid "The portage tree seems to be empty." msgstr "" @@ -920,22 +916,22 @@ msgstr "" msgid "Populating database..." msgstr "" -#: portato/session.py:67 +#: portato/session.py:69 #, python-format msgid "Loading '%s' session from %s." msgstr "" -#: portato/session.py:69 +#: portato/session.py:71 #, python-format msgid "Loading session from %s." msgstr "" -#: portato/session.py:141 +#: portato/session.py:139 #, python-format msgid "Saving '%s' session to %s." msgstr "" -#: portato/session.py:143 +#: portato/session.py:141 #, python-format msgid "Saving session to %s." msgstr "" diff --git a/portato/gui/templates/MailInfoWindow.ui b/portato/gui/templates/MailInfoWindow.ui index 4551cdb..e3cdd1f 100644 --- a/portato/gui/templates/MailInfoWindow.ui +++ b/portato/gui/templates/MailInfoWindow.ui @@ -134,25 +134,39 @@ what did you do to hit the bug?</property> </packing> </child> <child> - <object class="GtkCheckButton" id="logCheck"> - <property name="label" translatable="yes">Attach _Logfile</property> + <object class="GtkFrame" id="frame1"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="tooltip_text" translatable="yes">Attaches the logfile to the mail. This log only contains debug information.</property> - <property name="use_underline">True</property> - <property name="active">True</property> - <property name="draw_indicator">True</property> + <property name="label_xalign">0</property> + <property name="shadow_type">none</property> + <child> + <object class="GtkAlignment" id="alignment1"> + <property name="visible">True</property> + <property name="left_padding">12</property> + <child> + <object class="GtkTreeView" id="fileList"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="headers_visible">False</property> + <property name="headers_clickable">False</property> + <property name="enable_search">False</property> + <signal name="row_activated" handler="cb_file_clicked"/> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="label6"> + <property name="visible">True</property> + <property name="label" translatable="yes">These files will be sent:</property> + </object> + </child> </object> <packing> + <property name="right_attach">2</property> <property name="top_attach">4</property> <property name="bottom_attach">5</property> - <property name="x_options">GTK_FILL</property> </packing> </child> - <child> - <placeholder/> - </child> </object> <packing> <property name="padding">5</property> diff --git a/portato/gui/windows/mailinfo.py b/portato/gui/windows/mailinfo.py index 0ee232a..6d6e93b 100644 --- a/portato/gui/windows/mailinfo.py +++ b/portato/gui/windows/mailinfo.py @@ -14,15 +14,41 @@ from __future__ import absolute_import, with_statement import smtplib, socket import time +import gtk, pango from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText +from os.path import basename from .basic import AbstractDialog from ..utils import GtkThread from ..dialogs import mail_failure_dialog from ...helper import debug, info -from ...constants import VERSION +from ...constants import VERSION, CONFIG_LOCATION from ...log import LOGFILE +from ... import session + +class ShowDialog (gtk.Dialog): + + def __init__(self, parent, f): + gtk.Dialog.__init__(self, f, parent, buttons = (gtk.STOCK_CLOSE, gtk.RESPONSE_CLOSE)) + + textview = gtk.TextView() + textview.set_editable(False) + textview.modify_font(pango.FontDescription("Monospace")) + textview.set_size_request(gtk.gdk.screen_width()/2, gtk.gdk.screen_height()/3) + + sw = gtk.ScrolledWindow(); + sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + sw.add(textview) + + self.vbox.add(sw) + + textbuffer = textview.get_buffer() + + with open(f) as text: + textbuffer.set_text(text.read()) + + self.vbox.show_all() class MailInfoWindow (AbstractDialog): TO = "bugs@portato.necoro.net" @@ -30,10 +56,42 @@ class MailInfoWindow (AbstractDialog): def __init__ (self, parent, tb): AbstractDialog.__init__(self, parent) + + self.files = [LOGFILE, CONFIG_LOCATION] + [s._file for s in session.sessionlist] + self.fileList = self.tree.get_widget("fileList") + self.build_file_list() self.tb = tb self.window.show_all() + def build_file_list(self): + store = gtk.ListStore(bool, str) + + for f in self.files: + store.append((True, f)) + + self.fileList.set_model(store) + cell = gtk.CellRendererText() + tCell = gtk.CellRendererToggle() + tCell.set_property("activatable", True) + tCell.connect("toggled", self.cb_file_toggled) + + self.fileList.append_column(gtk.TreeViewColumn(None, tCell, active = 0)) + self.fileList.append_column(gtk.TreeViewColumn(None, cell, text = 1)) + + def cb_file_toggled(self, cell, path): + store = self.fileList.get_model() + store[path][0] = not store[path][0] + return True + + def cb_file_clicked(self, view, path, *args): + store = view.get_model() + f = store[path][1] + + dialog = ShowDialog(self.window, f) + dialog.run() + dialog.destroy() + def set_data (self): self.message = MIMEMultipart() self.message["Subject"] = "[Bug Report] Bug in Portato %s" % VERSION @@ -63,13 +121,15 @@ class MailInfoWindow (AbstractDialog): txtmsg = MIMEText(text, "plain", "utf-8") self.message.attach(txtmsg) - # log - if self.tree.get_widget("logCheck").get_active(): - with open(LOGFILE, "r") as f: - log = MIMEText(f.read(), "plain", "utf-8") - log.add_header('Content-Disposition', 'attachment', filename='portato.log') + # logs + for (active, f) in self.fileList.get_model(): + if active: + debug("Attaching '%s'", f) + with open(f, "r") as text: + log = MIMEText(text.read(), "plain", "utf-8") + log.add_header('Content-Disposition', 'attachment', filename=basename(f)) - self.message.attach(log) + self.message.attach(log) def send (self): try: @@ -77,21 +137,22 @@ class MailInfoWindow (AbstractDialog): server = smtplib.SMTP("mail.necoro.eu") debug("Sending mail") try: - try: - server.sendmail(self.addr, self.TO, self.message.as_string()) - except smtplib.SMTPRecipientsRefused, e: - info(_("An error occurred while sending. I think we were greylisted. The error: %s") % e) - info(_("Retrying after waiting 60 seconds.")) - time.sleep(60) - server.sendmail(self.addr, self.TO, self.message.as_string()) - debug("Sent") + for i in range(5): # try 5 times at max + try: + server.sendmail(self.addr, self.TO, self.message.as_string()) + except smtplib.SMTPRecipientsRefused, e: + info(_("An error occurred while sending. I think we were greylisted. The error: %s") % e) + info(_("Retrying after waiting %d seconds."), 30) + time.sleep(30) + else: + debug("Sent") + break finally: server.quit() except socket.error, e: mail_failure_dialog("%s (Code: %s)" % (e.args[1], e.args[0])) def cb_cancel_clicked (self, *args): - self.close() return True |