From bc02aab93e78089ff48e381c0ced0a6dbb116efa Mon Sep 17 00:00:00 2001 From: Jiri Moskovcak Date: Fri, 13 Mar 2009 13:50:07 +0100 Subject: Added error reporting over dbus to daemon, error handling in gui, about dialog --- src/Daemon/CrashWatcher.cpp | 1 + src/Daemon/DBusServerProxy.h | 8 ++++++++ src/Gui/CCDBusBackend.py | 14 ++++++++++---- src/Gui/CCMainWindow.py | 18 ++++++++++++++++++ src/Gui/ccgui.glade | 42 ++++++++++++++++++++++++++++++++++++++++-- 5 files changed, 77 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/Daemon/CrashWatcher.cpp b/src/Daemon/CrashWatcher.cpp index 21c7908..47e13c9 100644 --- a/src/Daemon/CrashWatcher.cpp +++ b/src/Daemon/CrashWatcher.cpp @@ -170,6 +170,7 @@ dbus_map_report_info_t CCrashWatcher::CreateReport(const std::string &pUUID,cons } catch(std::string err) { + Error(err); std::cerr << err << std::endl; } return retval; diff --git a/src/Daemon/DBusServerProxy.h b/src/Daemon/DBusServerProxy.h index a8ed9ab..8ed1e5b 100644 --- a/src/Daemon/DBusServerProxy.h +++ b/src/Daemon/DBusServerProxy.h @@ -113,6 +113,14 @@ public: wi << arg1; emit_signal(sig); } + + void Error(const std::string& arg1) + { + ::DBus::SignalMessage sig("Error"); + ::DBus::MessageIter wi = sig.writer(); + wi << arg1; + emit_signal(sig); + } private: diff --git a/src/Gui/CCDBusBackend.py b/src/Gui/CCDBusBackend.py index 1966dfd..fe0e3f5 100644 --- a/src/Gui/CCDBusBackend.py +++ b/src/Gui/CCDBusBackend.py @@ -16,6 +16,8 @@ class DBusManager(gobject.GObject): gobject.signal_new ("crash", self ,gobject.SIGNAL_RUN_FIRST,gobject.TYPE_NONE,()) # signal emited when new analyze is complete gobject.signal_new ("analyze-complete", self ,gobject.SIGNAL_RUN_FIRST,gobject.TYPE_NONE,(gobject.TYPE_PYOBJECT,)) + # signal emited when smth fails + gobject.signal_new ("error", self ,gobject.SIGNAL_RUN_FIRST,gobject.TYPE_NONE,(gobject.TYPE_PYOBJECT,)) # binds the dbus to glib mainloop DBusGMainLoop(set_as_default=True) self.proxy = None @@ -27,6 +29,8 @@ class DBusManager(gobject.GObject): self.proxy.connect_to_signal("Crash",self.crash_cb,dbus_interface=CC_IFACE) # BT extracting complete self.acconnection = self.proxy.connect_to_signal("AnalyzeComplete",self.analyze_complete_cb,dbus_interface=CC_IFACE) + # Catch Errors + self.acconnection = self.proxy.connect_to_signal("Error",self.error_handler_cb,dbus_interface=CC_IFACE) else: raise Exception("Proxy object doesn't exist!") @@ -34,10 +38,12 @@ class DBusManager(gobject.GObject): def disconnected(*args): print "disconnect" - def error_handler(self,*args): - print "Error" - #for arg in args: - # print "error %s" % arg + def error_handler_cb(self,arg): + self.emit("error",arg) + + def error_handler(self,arg): + # used to silently ingore dbus timeouts + pass def dummy(*args): # dummy function for async method call to workaround the timeout diff --git a/src/Gui/CCMainWindow.py b/src/Gui/CCMainWindow.py index 0e73cf1..440bd3c 100644 --- a/src/Gui/CCMainWindow.py +++ b/src/Gui/CCMainWindow.py @@ -81,11 +81,29 @@ class MainWindow(): self.wTree.get_widget("bDelete").connect("clicked", self.on_bDelete_clicked, self.dlist) self.wTree.get_widget("bReport").connect("clicked", self.on_bReport_clicked) self.wTree.get_widget("miQuit").connect("activate", self.on_bQuit_clicked) + self.wTree.get_widget("miAbout").connect("activate", self.on_miAbout_clicked) + # connect handlers for daemon signals self.ccdaemon.connect("crash", self.on_data_changed_cb, None) self.ccdaemon.connect("analyze-complete", self.on_analyze_complete_cb, self.pBarWindow) + self.ccdaemon.connect("error", self.error_cb) # load data #self.load() + + def on_miAbout_clicked(self, widget): + dialog = self.wTree.get_widget("about") + result = dialog.run() + dialog.hide() + + + def error_cb(self, daemon, message=None): + # try to hide the progressbar, we dont really care if it was visible .. + try: + gobject.source_remove(self.timer) + self.pBarWindow.hide() + except Exception, e: + pass + gui_error_message("Unable to get report!\n%s" % message) # call to update the progressbar def progress_update_cb(self, *args): diff --git a/src/Gui/ccgui.glade b/src/Gui/ccgui.glade index a2093d1..8a8c2a7 100644 --- a/src/Gui/ccgui.glade +++ b/src/Gui/ccgui.glade @@ -1,6 +1,6 @@ - + Automatic Bug Reporting Tool @@ -40,7 +40,7 @@ True - + True gtk-about True @@ -205,4 +205,42 @@ + + 5 + About ABRT + False + GTK_WIN_POS_CENTER_ON_PARENT + GDK_WINDOW_TYPE_HINT_DIALOG + False + ABRT + (C) 2009 Red Hat, Inc. + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. + Anton Arapov <aarapov@redhat.com> +Jiri Moskovcak <jmoskovc@redhat.com> +Zdenek Prikryl <zprikryl@redhat.com> + True + + + True + 2 + + + + + + True + GTK_BUTTONBOX_END + + + False + GTK_PACK_END + + + + + -- cgit