From b105a2a9e9068463eaad97b402209e3b944b6501 Mon Sep 17 00:00:00 2001 From: René 'Necoro' Neumann Date: Sun, 22 Jun 2008 21:18:29 +0200 Subject: First mail window draft --- portato/gui/exception_handling.py | 5 + portato/gui/templates/MailInfoWindow.glade | 185 +++++++++++++++++++++++++++++ portato/gui/windows/mailinfo.py | 30 +++++ 3 files changed, 220 insertions(+) create mode 100644 portato/gui/templates/MailInfoWindow.glade create mode 100644 portato/gui/windows/mailinfo.py (limited to 'portato/gui') diff --git a/portato/gui/exception_handling.py b/portato/gui/exception_handling.py index 29cd4e6..5d5eb17 100644 --- a/portato/gui/exception_handling.py +++ b/portato/gui/exception_handling.py @@ -21,6 +21,7 @@ from StringIO import StringIO from ..helper import debug, error from .dialogs import file_chooser_dialog, io_ex_dialog +from .windows.mailinfo import MailInfoWindow # for the i18n from ..constants import LOCALE_DIR, APP @@ -53,6 +54,7 @@ class UncaughtExceptionDialog(gtk.MessageDialog): self.format_secondary_text(_("It probably isn't fatal, but should be reported to the developers nonetheless.")) self.add_button(_("Show Details"), 1) + self.add_button(_("Send..."), 3) self.add_button(gtk.STOCK_SAVE_AS, 2) self.add_button(gtk.STOCK_CLOSE, gtk.RESPONSE_CLOSE) @@ -103,6 +105,9 @@ class UncaughtExceptionDialog(gtk.MessageDialog): else: debug("Nothing to save") + elif resp == 3: + debug("Send bug per mail") + MailInfoWindow(self, self.text) else: break self.destroy() diff --git a/portato/gui/templates/MailInfoWindow.glade b/portato/gui/templates/MailInfoWindow.glade new file mode 100644 index 0000000..6d72295 --- /dev/null +++ b/portato/gui/templates/MailInfoWindow.glade @@ -0,0 +1,185 @@ + + + + + + Send Bug Mail ... + GTK_WIN_POS_CENTER + True + GDK_WINDOW_TYPE_HINT_DIALOG + True + True + + + True + + + True + 4 + 2 + + + True + <b><u>Additional Information</u></b> + +(all optional) + True + GTK_JUSTIFY_CENTER + + + 2 + + + + + True + True + + + 1 + 2 + 1 + 2 + + + + + True + True + + + 1 + 2 + 2 + 3 + + + + + True + 0 + Email address: + True + + + 2 + 3 + 5 + + + + + True + 0 + Name: + True + + + 1 + 2 + 5 + + + + + True + 0 + Comments / +what did you do to hit the bug? + + + 3 + 4 + 5 + + + + + True + 0 + 0 + GTK_SHADOW_IN + + + True + True + + + + + + label_item + + + + + 1 + 2 + 3 + 4 + + + + + + + True + True + GTK_BUTTONBOX_SPREAD + + + True + True + True + gtk-cancel + True + 0 + + + + + + True + True + True + 0 + + + + True + 2 + + + True + 1 + gtk-ok + + + + + True + 0 + _Send + True + True + + + 1 + + + + + + + 1 + + + + + 1 + + + + + + diff --git a/portato/gui/windows/mailinfo.py b/portato/gui/windows/mailinfo.py new file mode 100644 index 0000000..45b4273 --- /dev/null +++ b/portato/gui/windows/mailinfo.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +# +# File: portato/gui/windows/mailinfo.py +# This file is part of the Portato-Project, a graphical portage-frontend. +# +# Copyright (C) 2008 René 'Necoro' Neumann +# This is free software. You may redistribute copies of it under the terms of +# the GNU General Public License version 2. +# There is NO WARRANTY, to the extent permitted by law. +# +# Written by René 'Necoro' Neumann + +from __future__ import absolute_import + +import gtk + +from .basic import AbstractDialog +from ...helper import debug + +class MailInfoWindow (AbstractDialog): + + def __init__ (self, parent, tb): + + AbstractDialog.__init__(self, parent) + self.window.show_all() + + def cb_cancel_clicked (self): + + self.close() + return True -- cgit v1.2.3-70-g09d2 From fcd88477de3b0fddb695693f3580c9a243d02296 Mon Sep 17 00:00:00 2001 From: René 'Necoro' Neumann Date: Sun, 22 Jun 2008 23:40:10 +0200 Subject: Implemented the mail sending --- portato/gui/exception_handling.py | 7 +++-- portato/gui/windows/mailinfo.py | 59 ++++++++++++++++++++++++++++++++++++++- 2 files changed, 63 insertions(+), 3 deletions(-) (limited to 'portato/gui') diff --git a/portato/gui/exception_handling.py b/portato/gui/exception_handling.py index 5d5eb17..9a593c1 100644 --- a/portato/gui/exception_handling.py +++ b/portato/gui/exception_handling.py @@ -21,7 +21,6 @@ from StringIO import StringIO from ..helper import debug, error from .dialogs import file_chooser_dialog, io_ex_dialog -from .windows.mailinfo import MailInfoWindow # for the i18n from ..constants import LOCALE_DIR, APP @@ -44,6 +43,8 @@ class GtkThread (Thread): finally: del type, val, tb +from .windows.mailinfo import MailInfoWindow + class UncaughtExceptionDialog(gtk.MessageDialog): """Original idea by Gustavo Carneiro - original code: http://www.daa.com.au/pipermail/pygtk/attachments/20030828/2d304204/gtkexcepthook.py.""" @@ -107,7 +108,9 @@ class UncaughtExceptionDialog(gtk.MessageDialog): debug("Nothing to save") elif resp == 3: debug("Send bug per mail") - MailInfoWindow(self, self.text) + self.destroy() + MailInfoWindow(None, self.text) + return else: break self.destroy() diff --git a/portato/gui/windows/mailinfo.py b/portato/gui/windows/mailinfo.py index 45b4273..ebecf35 100644 --- a/portato/gui/windows/mailinfo.py +++ b/portato/gui/windows/mailinfo.py @@ -13,18 +13,75 @@ from __future__ import absolute_import import gtk +import smtplib +import time from .basic import AbstractDialog +from ..exception_handling import GtkThread from ...helper import debug +from ...constants import VERSION class MailInfoWindow (AbstractDialog): + TO = "bugs@portato.necoro.net" def __init__ (self, parent, tb): AbstractDialog.__init__(self, parent) + + self.tb = tb self.window.show_all() - def cb_cancel_clicked (self): + def set_data (self): + name = self.tree.get_widget("nameEntry").get_text() + addr = self.tree.get_widget("mailEntry").get_text() + if not addr: + addr = self.TO + + if name: + fro = "%s <%s>" % (name, addr) + else: + fro = addr + + commentBuffer = self.tree.get_widget("commentEntry").get_buffer() + text = commentBuffer.get_text(*commentBuffer.get_bounds()) + + if text: + text += "\n\n===========\n" + + text += self.tb + + message = """From: %s +To: %s +Subject: %s +%s""" % ( fro, self.TO, ("[Bug Report] Bug in Portato %s" % VERSION), text) + + self.addr = addr + self.message = message + + def send (self): + debug("Connecting to server") + server = smtplib.SMTP("mail.necoro.eu") + debug("Sending mail") + try: + try: + server.sendmail(self.addr, self.TO, self.message) + except smtplib.SMTPRecipientsRefused, e: + info(_("An error occurred while sending. I think we where greylisted. The error: %s") % e) + info(_("Wait 60 seconds and try again.")) + time.sleep(60) + server.sendmail(self.addr, self.TO, self.message) + debug("Sent") + finally: + server.quit() + + def cb_cancel_clicked (self, *args): + + self.close() + return True + + def cb_send_clicked (self, *args): + self.set_data() + GtkThread(target = self.send, name = "Mail Send Thread").start() self.close() return True -- cgit v1.2.3-70-g09d2 From e021fff1ef2be1327b3edc2bb43332753a1fff16 Mon Sep 17 00:00:00 2001 From: René 'Necoro' Neumann Date: Mon, 23 Jun 2008 22:02:44 +0200 Subject: Moved GtkThread to gui.utils --- portato/gui/exception_handling.py | 24 +----------------------- portato/gui/utils.py | 23 +++++++++++++++++++++-- portato/gui/windows/mailinfo.py | 2 +- portato/gui/windows/main.py | 3 +-- portato/plugins/new_version.py | 2 +- 5 files changed, 25 insertions(+), 29 deletions(-) (limited to 'portato/gui') diff --git a/portato/gui/exception_handling.py b/portato/gui/exception_handling.py index 9a593c1..eadf124 100644 --- a/portato/gui/exception_handling.py +++ b/portato/gui/exception_handling.py @@ -16,34 +16,12 @@ from __future__ import absolute_import, with_statement import gtk, pango, gobject import sys, traceback -from threading import Thread from StringIO import StringIO from ..helper import debug, error from .dialogs import file_chooser_dialog, io_ex_dialog - -# for the i18n -from ..constants import LOCALE_DIR, APP -import gettext - -class GtkThread (Thread): - def run(self): - # for some reason, I have to install this for each thread ... - gettext.install(APP, LOCALE_DIR, unicode = True) - try: - Thread.run(self) - except SystemExit: - raise # let normal thread handle it - except: - type, val, tb = sys.exc_info() - try: - sys.excepthook(type, val, tb, thread = self.getName()) - except TypeError: - raise type, val, tb # let normal thread handle it - finally: - del type, val, tb - from .windows.mailinfo import MailInfoWindow +from .utils import GtkThread class UncaughtExceptionDialog(gtk.MessageDialog): """Original idea by Gustavo Carneiro - original code: http://www.daa.com.au/pipermail/pygtk/attachments/20030828/2d304204/gtkexcepthook.py.""" diff --git a/portato/gui/utils.py b/portato/gui/utils.py index 0a2930b..6e04814 100644 --- a/portato/gui/utils.py +++ b/portato/gui/utils.py @@ -14,19 +14,38 @@ from __future__ import absolute_import, with_statement # some stuff needed import re +import sys import logging +import gettext from collections import defaultdict -from threading import RLock +from threading import Thread, RLock from functools import wraps # some backend things from ..backend import flags, system, set_system from ..helper import debug, info, set_log_level -from ..constants import USE_CATAPULT +from ..constants import USE_CATAPULT, APP, LOCALE_DIR # parser from ..config_parser import ConfigParser +class GtkThread (Thread): + def run(self): + # for some reason, I have to install this for each thread ... + gettext.install(APP, LOCALE_DIR, unicode = True) + try: + Thread.run(self) + except SystemExit: + raise # let normal thread handle it + except: + type, val, tb = sys.exc_info() + try: + sys.excepthook(type, val, tb, thread = self.getName()) + except TypeError: + raise type, val, tb # let normal thread handle it + finally: + del type, val, tb + class Config (ConfigParser): def __init__ (self, cfgFile): diff --git a/portato/gui/windows/mailinfo.py b/portato/gui/windows/mailinfo.py index ebecf35..93d2be4 100644 --- a/portato/gui/windows/mailinfo.py +++ b/portato/gui/windows/mailinfo.py @@ -17,7 +17,7 @@ import smtplib import time from .basic import AbstractDialog -from ..exception_handling import GtkThread +from ..utils import GtkThread from ...helper import debug from ...constants import VERSION diff --git a/portato/gui/windows/main.py b/portato/gui/windows/main.py index b675d17..8e5eafb 100644 --- a/portato/gui/windows/main.py +++ b/portato/gui/windows/main.py @@ -30,11 +30,10 @@ from ...constants import CONFIG_LOCATION, VERSION, APP_ICON, ICON_DIR from ...backend.exceptions import PackageNotFoundException, BlockedException # more GUI stuff -from ..utils import Database, Config +from ..utils import Database, Config, GtkThread from ..queue import EmergeQueue from ..session import SESSION_VERSION, SessionException, OldSessionException, NewSessionException from ..wrapper import GtkTree, GtkConsole -from ..exception_handling import GtkThread from ..views import LogView, HighlightView, InstalledOnlyView from ..dialogs import (blocked_dialog, changed_flags_dialog, io_ex_dialog, nothing_found_dialog, queue_not_empty_dialog, remove_deps_dialog, diff --git a/portato/plugins/new_version.py b/portato/plugins/new_version.py index 462d67c..fe69292 100644 --- a/portato/plugins/new_version.py +++ b/portato/plugins/new_version.py @@ -7,7 +7,7 @@ import gobject from portato.helper import debug, warning from portato import get_listener from portato.constants import VERSION, APP_ICON, APP -from portato.gui.exception_handling import GtkThread +from portato.gui.utils import GtkThread def find_version (rev): try: -- cgit v1.2.3-70-g09d2 From 0392a7dcbaa08cbc73e091422bf6f68dbfa8d7f6 Mon Sep 17 00:00:00 2001 From: René 'Necoro' Neumann Date: Mon, 23 Jun 2008 22:30:43 +0200 Subject: Finished send_mail work --- portato/gui/templates/MailInfoWindow.glade | 117 +++++++++++++++++------------ portato/gui/windows/mailinfo.py | 3 +- 2 files changed, 68 insertions(+), 52 deletions(-) (limited to 'portato/gui') diff --git a/portato/gui/templates/MailInfoWindow.glade b/portato/gui/templates/MailInfoWindow.glade index 6d72295..743c81c 100644 --- a/portato/gui/templates/MailInfoWindow.glade +++ b/portato/gui/templates/MailInfoWindow.glade @@ -1,10 +1,12 @@ - + Send Bug Mail ... GTK_WIN_POS_CENTER + 450 + 230 True GDK_WINDOW_TYPE_HINT_DIALOG True @@ -17,41 +19,57 @@ True 4 2 + 10 - + True - <b><u>Additional Information</u></b> - -(all optional) - True - GTK_JUSTIFY_CENTER + True + GTK_POLICY_NEVER + GTK_POLICY_AUTOMATIC + GTK_SHADOW_IN + + + 50 + True + True + + + 1 2 + 3 + 4 + 5 - + True - True + 0 + Comments / +what did you do to hit the bug? - 1 - 2 - 1 - 2 + 3 + 4 + GTK_FILL + 5 - + True - True + 0 + Name: + True - 1 - 2 - 2 - 3 + 1 + 2 + GTK_FILL + GTK_FILL + 5 @@ -64,62 +82,58 @@ 2 3 + GTK_FILL + GTK_FILL 5 - + True - 0 - Name: - True + True - 1 - 2 + 1 + 2 + 2 + 3 + GTK_FILL + GTK_FILL 5 - + True - 0 - Comments / -what did you do to hit the bug? + True - 3 - 4 + 1 + 2 + 1 + 2 + GTK_FILL 5 - + True - 0 - 0 - GTK_SHADOW_IN - - - True - True - - - - - - label_item - - + <b><u>Additional Information</u></b> + +(all optional) + True + GTK_JUSTIFY_CENTER - 1 2 - 3 - 4 + GTK_FILL + + 5 + @@ -176,6 +190,9 @@ what did you do to hit the bug? + False + False + 5 1 diff --git a/portato/gui/windows/mailinfo.py b/portato/gui/windows/mailinfo.py index 93d2be4..8e476c6 100644 --- a/portato/gui/windows/mailinfo.py +++ b/portato/gui/windows/mailinfo.py @@ -12,13 +12,12 @@ from __future__ import absolute_import -import gtk import smtplib import time from .basic import AbstractDialog from ..utils import GtkThread -from ...helper import debug +from ...helper import debug, info from ...constants import VERSION class MailInfoWindow (AbstractDialog): -- cgit v1.2.3-70-g09d2