ErorDisplay overkill now in effect
authorepage <eopage@byu.net>
Thu, 3 Sep 2009 02:09:08 +0000 (02:09 +0000)
committerepage <eopage@byu.net>
Thu, 3 Sep 2009 02:09:08 +0000 (02:09 +0000)
git-svn-id: file:///svnroot/gc-dialer/trunk@432 c39d3808-3fe2-4d86-a59f-b7f623ee9f21

src/dc_glade.py
src/gtk_toolbox.py
src/gv_backend.py
src/gv_views.py

index 4d16c74..5069e5a 100755 (executable)
@@ -42,7 +42,7 @@ import gtk_toolbox
 def getmtime_nothrow(path):
        try:
                return os.path.getmtime(path)
-       except StandardError:
+       except Exception:
                return 0
 
 
@@ -327,7 +327,7 @@ class Dialcentral(object):
                                        self.refresh_session()
                                        serviceId = self._defaultBackendId
                                        loggedIn = True
-                               except StandardError, e:
+                               except Exception, e:
                                        logging.exception('Session refresh failed with the following message "%s"' % e.message)
 
                        if not loggedIn:
@@ -335,7 +335,7 @@ class Dialcentral(object):
 
                        with gtk_toolbox.gtk_lock():
                                self._change_loggedin_status(serviceId)
-               except StandardError, e:
+               except Exception, e:
                        with gtk_toolbox.gtk_lock():
                                self._errorDisplay.push_exception()
 
@@ -558,172 +558,210 @@ class Dialcentral(object):
 
                @note Hildon specific
                """
-               if memory_low:
-                       for backendId in self.BACKENDS:
-                               self._phoneBackends[backendId].clear_caches()
-                       self._contactsViews[self._selectedBackendId].clear_caches()
-                       gc.collect()
+               try:
+                       if memory_low:
+                               for backendId in self.BACKENDS:
+                                       self._phoneBackends[backendId].clear_caches()
+                               self._contactsViews[self._selectedBackendId].clear_caches()
+                               gc.collect()
 
-               if save_unsaved_data or shutdown:
-                       self._save_settings()
+                       if save_unsaved_data or shutdown:
+                               self._save_settings()
+               except Exception, e:
+                       self._errorDisplay.push_exception()
 
        def _on_connection_change(self, connection, event, magicIdentifier):
                """
                @note Hildon specific
                """
-               import conic
-
-               status = event.get_status()
-               error = event.get_error()
-               iap_id = event.get_iap_id()
-               bearer = event.get_bearer_type()
-
-               if status == conic.STATUS_CONNECTED:
-                       if self._initDone:
-                               self._spawn_attempt_login(2)
-               elif status == conic.STATUS_DISCONNECTED:
-                       if self._initDone:
-                               self._defaultBackendId = self._selectedBackendId
-                               self._change_loggedin_status(self.NULL_BACKEND)
+               try:
+                       import conic
+
+                       status = event.get_status()
+                       error = event.get_error()
+                       iap_id = event.get_iap_id()
+                       bearer = event.get_bearer_type()
+
+                       if status == conic.STATUS_CONNECTED:
+                               if self._initDone:
+                                       self._spawn_attempt_login(2)
+                       elif status == conic.STATUS_DISCONNECTED:
+                               if self._initDone:
+                                       self._defaultBackendId = self._selectedBackendId
+                                       self._change_loggedin_status(self.NULL_BACKEND)
+               except Exception, e:
+                       self._errorDisplay.push_exception()
 
        def _on_window_state_change(self, widget, event, *args):
                """
                @note Hildon specific
                """
-               if event.new_window_state & gtk.gdk.WINDOW_STATE_FULLSCREEN:
-                       self._isFullScreen = True
-               else:
-                       self._isFullScreen = False
+               try:
+                       if event.new_window_state & gtk.gdk.WINDOW_STATE_FULLSCREEN:
+                               self._isFullScreen = True
+                       else:
+                               self._isFullScreen = False
+               except Exception, e:
+                       self._errorDisplay.push_exception()
 
        def _on_key_press(self, widget, event, *args):
                """
                @note Hildon specific
                """
-               if event.keyval == gtk.keysyms.F6:
-                       if self._isFullScreen:
-                               self._window.unfullscreen()
-                       else:
-                               self._window.fullscreen()
+               try:
+                       if event.keyval == gtk.keysyms.F6:
+                               if self._isFullScreen:
+                                       self._window.unfullscreen()
+                               else:
+                                       self._window.fullscreen()
+               except Exception, e:
+                       self._errorDisplay.push_exception()
 
        def _on_clearcookies_clicked(self, *args):
-               self._phoneBackends[self._selectedBackendId].logout()
-               self._accountViews[self._selectedBackendId].clear()
-               self._recentViews[self._selectedBackendId].clear()
-               self._messagesViews[self._selectedBackendId].clear()
-               self._contactsViews[self._selectedBackendId].clear()
-               self._change_loggedin_status(self.NULL_BACKEND)
-
-               self._spawn_attempt_login(2, True)
+               try:
+                       self._phoneBackends[self._selectedBackendId].logout()
+                       self._accountViews[self._selectedBackendId].clear()
+                       self._recentViews[self._selectedBackendId].clear()
+                       self._messagesViews[self._selectedBackendId].clear()
+                       self._contactsViews[self._selectedBackendId].clear()
+                       self._change_loggedin_status(self.NULL_BACKEND)
+
+                       self._spawn_attempt_login(2, True)
+               except Exception, e:
+                       self._errorDisplay.push_exception()
 
        def _on_notebook_switch_page(self, notebook, page, pageIndex):
-               self._reset_tab_refresh()
-
-               didRecentUpdate = False
-               didMessagesUpdate = False
-
-               if pageIndex == self.RECENT_TAB:
-                       didRecentUpdate = self._recentViews[self._selectedBackendId].update()
-               elif pageIndex == self.MESSAGES_TAB:
-                       didMessagesUpdate = self._messagesViews[self._selectedBackendId].update()
-               elif pageIndex == self.CONTACTS_TAB:
-                       self._contactsViews[self._selectedBackendId].update()
-               elif pageIndex == self.ACCOUNT_TAB:
-                       self._accountViews[self._selectedBackendId].update()
-
-               if didRecentUpdate or didMessagesUpdate:
-                       if self._ledHandler is not None:
-                               self._ledHandler.off()
+               try:
+                       self._reset_tab_refresh()
+
+                       didRecentUpdate = False
+                       didMessagesUpdate = False
+
+                       if pageIndex == self.RECENT_TAB:
+                               didRecentUpdate = self._recentViews[self._selectedBackendId].update()
+                       elif pageIndex == self.MESSAGES_TAB:
+                               didMessagesUpdate = self._messagesViews[self._selectedBackendId].update()
+                       elif pageIndex == self.CONTACTS_TAB:
+                               self._contactsViews[self._selectedBackendId].update()
+                       elif pageIndex == self.ACCOUNT_TAB:
+                               self._accountViews[self._selectedBackendId].update()
+
+                       if didRecentUpdate or didMessagesUpdate:
+                               if self._ledHandler is not None:
+                                       self._ledHandler.off()
+               except Exception, e:
+                       self._errorDisplay.push_exception()
 
        def _set_tab_refresh(self, *args):
-               pageIndex = self._notebook.get_current_page()
-               child = self._notebook.get_nth_page(pageIndex)
-               self._notebook.get_tab_label(child).set_text("Refresh?")
+               try:
+                       pageIndex = self._notebook.get_current_page()
+                       child = self._notebook.get_nth_page(pageIndex)
+                       self._notebook.get_tab_label(child).set_text("Refresh?")
+               except Exception, e:
+                       self._errorDisplay.push_exception()
                return False
 
        def _reset_tab_refresh(self, *args):
-               pageIndex = self._notebook.get_current_page()
-               child = self._notebook.get_nth_page(pageIndex)
-               self._notebook.get_tab_label(child).set_text(self._originalCurrentLabels[pageIndex])
+               try:
+                       pageIndex = self._notebook.get_current_page()
+                       child = self._notebook.get_nth_page(pageIndex)
+                       self._notebook.get_tab_label(child).set_text(self._originalCurrentLabels[pageIndex])
+               except Exception, e:
+                       self._errorDisplay.push_exception()
                return False
 
        def _on_tab_refresh(self, *args):
-               self._refresh_active_tab()
-               self._reset_tab_refresh()
+               try:
+                       self._refresh_active_tab()
+                       self._reset_tab_refresh()
+               except Exception, e:
+                       self._errorDisplay.push_exception()
                return False
 
        def _on_sms_clicked(self, number, message):
-               assert number, "No number specified"
-               assert message, "Empty message"
                try:
-                       loggedIn = self._phoneBackends[self._selectedBackendId].is_authed()
-               except StandardError, e:
-                       loggedIn = False
-                       self._errorDisplay.push_exception()
-                       return
+                       assert number, "No number specified"
+                       assert message, "Empty message"
+                       try:
+                               loggedIn = self._phoneBackends[self._selectedBackendId].is_authed()
+                       except Exception, e:
+                               loggedIn = False
+                               self._errorDisplay.push_exception()
+                               return
 
-               if not loggedIn:
-                       self._errorDisplay.push_message(
-                               "Backend link with grandcentral is not working, please try again"
-                       )
-                       return
+                       if not loggedIn:
+                               self._errorDisplay.push_message(
+                                       "Backend link with grandcentral is not working, please try again"
+                               )
+                               return
 
-               dialed = False
-               try:
-                       self._phoneBackends[self._selectedBackendId].send_sms(number, message)
-                       dialed = True
-               except StandardError, e:
-                       self._errorDisplay.push_exception()
-               except ValueError, e:
-                       self._errorDisplay.push_exception()
+                       dialed = False
+                       try:
+                               self._phoneBackends[self._selectedBackendId].send_sms(number, message)
+                               dialed = True
+                       except Exception, e:
+                               self._errorDisplay.push_exception()
 
-               if dialed:
-                       self._dialpads[self._selectedBackendId].clear()
+                       if dialed:
+                               self._dialpads[self._selectedBackendId].clear()
+               except Exception, e:
+                       self._errorDisplay.push_exception()
 
        def _on_dial_clicked(self, number):
-               assert number, "No number to call"
                try:
-                       loggedIn = self._phoneBackends[self._selectedBackendId].is_authed()
-               except StandardError, e:
-                       loggedIn = False
-                       self._errorDisplay.push_exception()
-                       return
+                       assert number, "No number to call"
+                       try:
+                               loggedIn = self._phoneBackends[self._selectedBackendId].is_authed()
+                       except Exception, e:
+                               loggedIn = False
+                               self._errorDisplay.push_exception()
+                               return
 
-               if not loggedIn:
-                       self._errorDisplay.push_message(
-                               "Backend link with grandcentral is not working, please try again"
-                       )
-                       return
+                       if not loggedIn:
+                               self._errorDisplay.push_message(
+                                       "Backend link with grandcentral is not working, please try again"
+                               )
+                               return
 
-               dialed = False
-               try:
-                       assert self._phoneBackends[self._selectedBackendId].get_callback_number() != "", "No callback number specified"
-                       self._phoneBackends[self._selectedBackendId].dial(number)
-                       dialed = True
-               except StandardError, e:
-                       self._errorDisplay.push_exception()
-               except ValueError, e:
-                       self._errorDisplay.push_exception()
+                       dialed = False
+                       try:
+                               assert self._phoneBackends[self._selectedBackendId].get_callback_number() != "", "No callback number specified"
+                               self._phoneBackends[self._selectedBackendId].dial(number)
+                               dialed = True
+                       except Exception, e:
+                               self._errorDisplay.push_exception()
 
-               if dialed:
-                       self._dialpads[self._selectedBackendId].clear()
+                       if dialed:
+                               self._dialpads[self._selectedBackendId].clear()
+               except Exception, e:
+                       self._errorDisplay.push_exception()
 
        def _on_menu_refresh(self, *args):
-               self._refresh_active_tab()
+               try:
+                       self._refresh_active_tab()
+               except Exception, e:
+                       self._errorDisplay.push_exception()
 
        def _on_paste(self, *args):
-               contents = self._clipboard.wait_for_text()
-               self._dialpads[self._selectedBackendId].set_number(contents)
+               try:
+                       contents = self._clipboard.wait_for_text()
+                       self._dialpads[self._selectedBackendId].set_number(contents)
+               except Exception, e:
+                       self._errorDisplay.push_exception()
 
        def _on_about_activate(self, *args):
-               dlg = gtk.AboutDialog()
-               dlg.set_name(constants.__pretty_app_name__)
-               dlg.set_version("%s-%d" % (constants.__version__, constants.__build__))
-               dlg.set_copyright("Copyright 2008 - LGPL")
-               dlg.set_comments("Dialcentral is a touch screen enhanced interface to your GoogleVoice/Grandcentral account.  This application is not affiliated with Google in any way")
-               dlg.set_website("http://gc-dialer.garage.maemo.org/")
-               dlg.set_authors(["<z2n@merctech.com>", "Eric Warnke <ericew@gmail.com>", "Ed Page <edpage@byu.net>"])
-               dlg.run()
-               dlg.destroy()
+               try:
+                       dlg = gtk.AboutDialog()
+                       dlg.set_name(constants.__pretty_app_name__)
+                       dlg.set_version("%s-%d" % (constants.__version__, constants.__build__))
+                       dlg.set_copyright("Copyright 2008 - LGPL")
+                       dlg.set_comments("Dialcentral is a touch screen enhanced interface to your GoogleVoice/Grandcentral account.  This application is not affiliated with Google in any way")
+                       dlg.set_website("http://gc-dialer.garage.maemo.org/")
+                       dlg.set_authors(["<z2n@merctech.com>", "Eric Warnke <ericew@gmail.com>", "Ed Page <edpage@byu.net>"])
+                       dlg.run()
+                       dlg.destroy()
+               except Exception, e:
+                       self._errorDisplay.push_exception()
 
 
 def run_doctest():
index cb27d7b..18c3801 100644 (file)
@@ -188,7 +188,7 @@ def comap(function, target):
                        item = yield
                        mappedItem = function(*item)
                        target.send(mappedItem)
-               except StandardError, e:
+               except Exception, e:
                        target.throw(e.__class__, e.message)
 
 
@@ -214,7 +214,7 @@ def queue_sink(queue):
                try:
                        item = yield
                        queue.put((None, item))
-               except StandardError, e:
+               except Exception, e:
                        queue.put((e.__class__, str(e)))
                except GeneratorExit:
                        queue.put((GeneratorExit, None))
@@ -521,7 +521,7 @@ class PopupCalendar(object):
                try:
                        self._calendar.select_month(self._displayDate.month, self._displayDate.year)
                        self._calendar.select_day(self._displayDate.day)
-               except StandardError, e:
+               except Exception, e:
                        logging.exception(e.message)
 
 
@@ -572,7 +572,7 @@ class QuickAddView(object):
                        self._taskNameEntry.set_text("")
 
                        self._signalSink.stage.send(("add", name))
-               except StandardError, e:
+               except Exception, e:
                        self._errorDisplay.push_exception()
 
        def _on_add_edit(self, *args):
@@ -581,13 +581,13 @@ class QuickAddView(object):
                        self._taskNameEntry.set_text("")
 
                        self._signalSink.stage.send(("add-edit", name))
-               except StandardError, e:
+               except Exception, e:
                        self._errorDisplay.push_exception()
 
        def _on_add_pressed(self, widget):
                try:
                        self._addToEditTimerId = gobject.timeout_add(1000, self._on_add_edit)
-               except StandardError, e:
+               except Exception, e:
                        self._errorDisplay.push_exception()
 
        def _on_add_released(self, widget):
@@ -595,7 +595,7 @@ class QuickAddView(object):
                        if self._addToEditTimerId is not None:
                                gobject.source_remove(self._addToEditTimerId)
                        self._addToEditTimerId = None
-               except StandardError, e:
+               except Exception, e:
                        self._errorDisplay.push_exception()
 
        def _on_paste(self, *args):
@@ -605,13 +605,13 @@ class QuickAddView(object):
                        if addedText:
                                entry += addedText
                        self._taskNameEntry.set_text(entry)
-               except StandardError, e:
+               except Exception, e:
                        self._errorDisplay.push_exception()
 
        def _on_clear(self, *args):
                try:
                        self._taskNameEntry.set_text("")
-               except StandardError, e:
+               except Exception, e:
                        self._errorDisplay.push_exception()
 
 
index 6aab60e..21b8ddc 100644 (file)
@@ -132,7 +132,7 @@ class GVDialer(object):
 
                try:
                        self._grab_account_info()
-               except StandardError, e:
+               except Exception, e:
                        logging.exception(str(e))
                        return False
 
index c1a0fff..0ec77c5 100644 (file)
@@ -539,44 +539,68 @@ class Dialpad(object):
                pass
 
        def _on_sms_clicked(self, widget):
-               action = PhoneTypeSelector.ACTION_SEND_SMS
-               phoneNumber = self.get_number()
+               try:
+                       action = PhoneTypeSelector.ACTION_SEND_SMS
+                       phoneNumber = self.get_number()
 
-               message = self._smsDialog.run(phoneNumber, "", self._window)
-               if not message:
-                       phoneNumber = ""
-                       action = PhoneTypeSelector.ACTION_CANCEL
+                       message = self._smsDialog.run(phoneNumber, "", self._window)
+                       if not message:
+                               phoneNumber = ""
+                               action = PhoneTypeSelector.ACTION_CANCEL
 
-               if action == PhoneTypeSelector.ACTION_CANCEL:
-                       return
-               self.number_selected(action, phoneNumber, message)
+                       if action == PhoneTypeSelector.ACTION_CANCEL:
+                               return
+                       self.number_selected(action, phoneNumber, message)
+               except Exception, e:
+                       self._errorDisplay.push_exception()
 
        def _on_dial_clicked(self, widget):
-               action = PhoneTypeSelector.ACTION_DIAL
-               phoneNumber = self.get_number()
-               message = ""
-               self.number_selected(action, phoneNumber, message)
+               try:
+                       action = PhoneTypeSelector.ACTION_DIAL
+                       phoneNumber = self.get_number()
+                       message = ""
+                       self.number_selected(action, phoneNumber, message)
+               except Exception, e:
+                       self._errorDisplay.push_exception()
 
        def _on_clear_number(self, *args):
-               self.clear()
+               try:
+                       self.clear()
+               except Exception, e:
+                       self._errorDisplay.push_exception()
 
        def _on_digit_clicked(self, widget):
-               self.set_number(self._phonenumber + widget.get_name()[-1])
+               try:
+                       self.set_number(self._phonenumber + widget.get_name()[-1])
+               except Exception, e:
+                       self._errorDisplay.push_exception()
 
        def _on_backspace(self, taps):
-               self.set_number(self._phonenumber[:-taps])
-               self._reset_back_button()
+               try:
+                       self.set_number(self._phonenumber[:-taps])
+                       self._reset_back_button()
+               except Exception, e:
+                       self._errorDisplay.push_exception()
 
        def _on_clearall(self, taps):
-               self.clear()
-               self._reset_back_button()
+               try:
+                       self.clear()
+                       self._reset_back_button()
+               except Exception, e:
+                       self._errorDisplay.push_exception()
                return False
 
        def _set_clear_button(self):
-               self._backButton.set_label("gtk-clear")
+               try:
+                       self._backButton.set_label("gtk-clear")
+               except Exception, e:
+                       self._errorDisplay.push_exception()
 
        def _reset_back_button(self):
-               self._backButton.set_label(self._originalLabel)
+               try:
+                       self._backButton.set_label(self._originalLabel)
+               except Exception, e:
+                       self._errorDisplay.push_exception()
 
 
 class AccountInfo(object):
@@ -714,7 +738,7 @@ class AccountInfo(object):
                self._callbackList.clear()
                try:
                        callbackNumbers = self._backend.get_callback_numbers()
-               except StandardError, e:
+               except Exception, e:
                        self._errorDisplay.push_exception()
                        self._isPopulated = False
                        return
@@ -748,7 +772,7 @@ class AccountInfo(object):
                                                self._backend.get_callback_number(),
                                        ),
                                )
-               except StandardError, e:
+               except Exception, e:
                        self._errorDisplay.push_exception()
 
        def _update_alarm_settings(self, recurrence):
@@ -762,39 +786,60 @@ class AccountInfo(object):
                        self._minutesEntryButton.set_label("%d Minutes" % self._alarmHandler.recurrence)
 
        def _on_callbackentry_changed(self, *args):
-               text = self.get_selected_callback_number()
-               number = make_ugly(text)
-               self._set_callback_number(number)
+               try:
+                       text = self.get_selected_callback_number()
+                       number = make_ugly(text)
+                       self._set_callback_number(number)
+               except Exception, e:
+                       self._errorDisplay.push_exception()
 
        def _on_notify_toggled(self, *args):
-               if self._applyAlarmTimeoutId is not None:
-                       gobject.source_remove(self._applyAlarmTimeoutId)
-                       self._applyAlarmTimeoutId = None
-               self._applyAlarmTimeoutId = gobject.timeout_add(500, self._on_apply_timeout)
+               try:
+                       if self._applyAlarmTimeoutId is not None:
+                               gobject.source_remove(self._applyAlarmTimeoutId)
+                               self._applyAlarmTimeoutId = None
+                       self._applyAlarmTimeoutId = gobject.timeout_add(500, self._on_apply_timeout)
+               except Exception, e:
+                       self._errorDisplay.push_exception()
 
        def _on_minutes_changed(self, *args):
-               recurrence = hildonize.request_number(
-                       self._window, "Minutes", (1, 50), self._alarmHandler.recurrence
-               )
-               self._update_alarm_settings(recurrence)
+               try:
+                       recurrence = hildonize.request_number(
+                               self._window, "Minutes", (1, 50), self._alarmHandler.recurrence
+                       )
+                       self._update_alarm_settings(recurrence)
+               except Exception, e:
+                       self._errorDisplay.push_exception()
 
        def _on_apply_timeout(self, *args):
-               self._applyAlarmTimeoutId = None
+               try:
+                       self._applyAlarmTimeoutId = None
 
-               self._update_alarm_settings(self._alarmHandler.recurrence)
+                       self._update_alarm_settings(self._alarmHandler.recurrence)
+               except Exception, e:
+                       self._errorDisplay.push_exception()
                return False
 
        def _on_missed_toggled(self, *args):
-               self._notifyOnMissed = self._missedCheckbox.get_active()
-               self.save_everything()
+               try:
+                       self._notifyOnMissed = self._missedCheckbox.get_active()
+                       self.save_everything()
+               except Exception, e:
+                       self._errorDisplay.push_exception()
 
        def _on_voicemail_toggled(self, *args):
-               self._notifyOnVoicemail = self._voicemailCheckbox.get_active()
-               self.save_everything()
+               try:
+                       self._notifyOnVoicemail = self._voicemailCheckbox.get_active()
+                       self.save_everything()
+               except Exception, e:
+                       self._errorDisplay.push_exception()
 
        def _on_sms_toggled(self, *args):
-               self._notifyOnSms = self._smsCheckbox.get_active()
-               self.save_everything()
+               try:
+                       self._notifyOnSms = self._smsCheckbox.get_active()
+                       self.save_everything()
+               except Exception, e:
+                       self._errorDisplay.push_exception()
 
 
 class RecentCallsView(object):
@@ -910,49 +955,55 @@ class RecentCallsView(object):
                pass
 
        def _idly_populate_recentview(self):
-               self._recentmodel.clear()
-               self._isPopulated = True
-
                try:
-                       recentItems = self._backend.get_recent()
-               except StandardError, e:
+                       self._recentmodel.clear()
+                       self._isPopulated = True
+
+                       try:
+                               recentItems = self._backend.get_recent()
+                       except Exception, e:
+                               self._errorDisplay.push_exception_with_lock()
+                               self._isPopulated = False
+                               recentItems = []
+
+                       for personName, phoneNumber, date, action in recentItems:
+                               if not personName:
+                                       personName = "Unknown"
+                               date = abbrev_relative_date(date)
+                               prettyNumber = phoneNumber[2:] if phoneNumber.startswith("+1") else phoneNumber
+                               prettyNumber = make_pretty(prettyNumber)
+                               item = (prettyNumber, date, action.capitalize(), personName)
+                               with gtk_toolbox.gtk_lock():
+                                       self._recentmodel.append(item)
+               except Exception, e:
                        self._errorDisplay.push_exception_with_lock()
-                       self._isPopulated = False
-                       recentItems = []
-
-               for personName, phoneNumber, date, action in recentItems:
-                       if not personName:
-                               personName = "Unknown"
-                       date = abbrev_relative_date(date)
-                       prettyNumber = phoneNumber[2:] if phoneNumber.startswith("+1") else phoneNumber
-                       prettyNumber = make_pretty(prettyNumber)
-                       item = (prettyNumber, date, action.capitalize(), personName)
-                       with gtk_toolbox.gtk_lock():
-                               self._recentmodel.append(item)
 
                return False
 
        def _on_recentview_row_activated(self, treeview, path, view_column):
-               model, itr = self._recentviewselection.get_selected()
-               if not itr:
-                       return
+               try:
+                       model, itr = self._recentviewselection.get_selected()
+                       if not itr:
+                               return
 
-               number = self._recentmodel.get_value(itr, self.NUMBER_IDX)
-               number = make_ugly(number)
-               contactPhoneNumbers = [("Phone", number)]
-               description = self._recentmodel.get_value(itr, self.FROM_IDX)
+                       number = self._recentmodel.get_value(itr, self.NUMBER_IDX)
+                       number = make_ugly(number)
+                       contactPhoneNumbers = [("Phone", number)]
+                       description = self._recentmodel.get_value(itr, self.FROM_IDX)
 
-               action, phoneNumber, message = self._phoneTypeSelector.run(
-                       contactPhoneNumbers,
-                       message = description,
-                       parent = self._window,
-               )
-               if action == PhoneTypeSelector.ACTION_CANCEL:
-                       return
-               assert phoneNumber, "A lack of phone number exists"
+                       action, phoneNumber, message = self._phoneTypeSelector.run(
+                               contactPhoneNumbers,
+                               message = description,
+                               parent = self._window,
+                       )
+                       if action == PhoneTypeSelector.ACTION_CANCEL:
+                               return
+                       assert phoneNumber, "A lack of phone number exists"
 
-               self.number_selected(action, phoneNumber, message)
-               self._recentviewselection.unselect_all()
+                       self.number_selected(action, phoneNumber, message)
+                       self._recentviewselection.unselect_all()
+               except Exception, e:
+                       self._errorDisplay.push_exception()
 
 
 class MessagesView(object):
@@ -1043,46 +1094,52 @@ class MessagesView(object):
                pass
 
        def _idly_populate_messageview(self):
-               self._messagemodel.clear()
-               self._isPopulated = True
-
                try:
-                       messageItems = self._backend.get_messages()
-               except StandardError, e:
-                       self._errorDisplay.push_exception_with_lock()
-                       self._isPopulated = False
-                       messageItems = []
+                       self._messagemodel.clear()
+                       self._isPopulated = True
 
-               for header, number, relativeDate, message in messageItems:
-                       prettyNumber = number[2:] if number.startswith("+1") else number
-                       prettyNumber = make_pretty(prettyNumber)
-                       message = "<b>%s - %s</b> <i>(%s)</i>\n\n%s" % (header, prettyNumber, relativeDate, message)
-                       number = make_ugly(number)
-                       row = (number, relativeDate, header, message)
-                       with gtk_toolbox.gtk_lock():
-                               self._messagemodel.append(row)
+                       try:
+                               messageItems = self._backend.get_messages()
+                       except Exception, e:
+                               self._errorDisplay.push_exception_with_lock()
+                               self._isPopulated = False
+                               messageItems = []
+
+                       for header, number, relativeDate, message in messageItems:
+                               prettyNumber = number[2:] if number.startswith("+1") else number
+                               prettyNumber = make_pretty(prettyNumber)
+                               message = "<b>%s - %s</b> <i>(%s)</i>\n\n%s" % (header, prettyNumber, relativeDate, message)
+                               number = make_ugly(number)
+                               row = (number, relativeDate, header, message)
+                               with gtk_toolbox.gtk_lock():
+                                       self._messagemodel.append(row)
+               except Exception, e:
+                       self._errorDisplay.push_exception_with_lock()
 
                return False
 
        def _on_messageview_row_activated(self, treeview, path, view_column):
-               model, itr = self._messageviewselection.get_selected()
-               if not itr:
-                       return
+               try:
+                       model, itr = self._messageviewselection.get_selected()
+                       if not itr:
+                               return
 
-               contactPhoneNumbers = [("Phone", self._messagemodel.get_value(itr, self.NUMBER_IDX))]
-               description = self._messagemodel.get_value(itr, self.MESSAGE_IDX)
+                       contactPhoneNumbers = [("Phone", self._messagemodel.get_value(itr, self.NUMBER_IDX))]
+                       description = self._messagemodel.get_value(itr, self.MESSAGE_IDX)
 
-               action, phoneNumber, message = self._phoneTypeSelector.run(
-                       contactPhoneNumbers,
-                       message = description,
-                       parent = self._window,
-               )
-               if action == PhoneTypeSelector.ACTION_CANCEL:
-                       return
-               assert phoneNumber, "A lock of phone number exists"
+                       action, phoneNumber, message = self._phoneTypeSelector.run(
+                               contactPhoneNumbers,
+                               message = description,
+                               parent = self._window,
+                       )
+                       if action == PhoneTypeSelector.ACTION_CANCEL:
+                               return
+                       assert phoneNumber, "A lock of phone number exists"
 
-               self.number_selected(action, phoneNumber, message)
-               self._messageviewselection.unselect_all()
+                       self.number_selected(action, phoneNumber, message)
+                       self._messageviewselection.unselect_all()
+               except Exception, e:
+                       self._errorDisplay.push_exception()
 
 
 class ContactsView(object):
@@ -1232,63 +1289,72 @@ class ContactsView(object):
                config.set(sectionName, "selectedAddressbook", str(self._selectedComboIndex))
 
        def _idly_populate_contactsview(self):
-               addressBook = None
-               while addressBook is not self._addressBook:
-                       addressBook = self._addressBook
-                       with gtk_toolbox.gtk_lock():
-                               self._contactsview.set_model(None)
-                               self.clear()
-
-                       try:
-                               contacts = addressBook.get_contacts()
-                       except StandardError, e:
-                               contacts = []
-                               self._isPopulated = False
-                               self._errorDisplay.push_exception_with_lock()
-                       for contactId, contactName in contacts:
-                               contactType = (addressBook.contact_source_short_name(contactId), )
-                               self._contactsmodel.append(contactType + (contactName, "", contactId) + ("", ))
-
-                       with gtk_toolbox.gtk_lock():
-                               self._contactsview.set_model(self._contactsmodel)
-
-               self._isPopulated = True
+               try:
+                       addressBook = None
+                       while addressBook is not self._addressBook:
+                               addressBook = self._addressBook
+                               with gtk_toolbox.gtk_lock():
+                                       self._contactsview.set_model(None)
+                                       self.clear()
+
+                               try:
+                                       contacts = addressBook.get_contacts()
+                               except Exception, e:
+                                       contacts = []
+                                       self._isPopulated = False
+                                       self._errorDisplay.push_exception_with_lock()
+                               for contactId, contactName in contacts:
+                                       contactType = (addressBook.contact_source_short_name(contactId), )
+                                       self._contactsmodel.append(contactType + (contactName, "", contactId) + ("", ))
+
+                               with gtk_toolbox.gtk_lock():
+                                       self._contactsview.set_model(self._contactsmodel)
+
+                       self._isPopulated = True
+               except Exception, e:
+                       self._errorDisplay.push_exception_with_lock()
                return False
 
        def _on_addressbook_combo_changed(self, *args, **kwds):
-               itr = self._booksSelectionBox.get_active_iter()
-               if itr is None:
-                       return
-               self._selectedComboIndex = self._booksSelectionBox.get_active()
-               selectedFactoryId = self._booksList.get_value(itr, 0)
-               selectedBookId = self._booksList.get_value(itr, 1)
-               self.open_addressbook(selectedFactoryId, selectedBookId)
-
-       def _on_contactsview_row_activated(self, treeview, path, view_column):
-               model, itr = self._contactsviewselection.get_selected()
-               if not itr:
-                       return
-
-               contactId = self._contactsmodel.get_value(itr, 3)
-               contactName = self._contactsmodel.get_value(itr, 1)
                try:
-                       contactDetails = self._addressBook.get_contact_details(contactId)
-               except StandardError, e:
-                       contactDetails = []
+                       itr = self._booksSelectionBox.get_active_iter()
+                       if itr is None:
+                               return
+                       self._selectedComboIndex = self._booksSelectionBox.get_active()
+                       selectedFactoryId = self._booksList.get_value(itr, 0)
+                       selectedBookId = self._booksList.get_value(itr, 1)
+                       self.open_addressbook(selectedFactoryId, selectedBookId)
+               except Exception, e:
                        self._errorDisplay.push_exception()
-               contactPhoneNumbers = [phoneNumber for phoneNumber in contactDetails]
 
-               if len(contactPhoneNumbers) == 0:
-                       return
+       def _on_contactsview_row_activated(self, treeview, path, view_column):
+               try:
+                       model, itr = self._contactsviewselection.get_selected()
+                       if not itr:
+                               return
 
-               action, phoneNumber, message = self._phoneTypeSelector.run(
-                       contactPhoneNumbers,
-                       message = contactName,
-                       parent = self._window,
-               )
-               if action == PhoneTypeSelector.ACTION_CANCEL:
-                       return
-               assert phoneNumber, "A lack of phone number exists"
+                       contactId = self._contactsmodel.get_value(itr, 3)
+                       contactName = self._contactsmodel.get_value(itr, 1)
+                       try:
+                               contactDetails = self._addressBook.get_contact_details(contactId)
+                       except Exception, e:
+                               contactDetails = []
+                               self._errorDisplay.push_exception()
+                       contactPhoneNumbers = [phoneNumber for phoneNumber in contactDetails]
+
+                       if len(contactPhoneNumbers) == 0:
+                               return
+
+                       action, phoneNumber, message = self._phoneTypeSelector.run(
+                               contactPhoneNumbers,
+                               message = contactName,
+                               parent = self._window,
+                       )
+                       if action == PhoneTypeSelector.ACTION_CANCEL:
+                               return
+                       assert phoneNumber, "A lack of phone number exists"
 
-               self.number_selected(action, phoneNumber, message)
-               self._contactsviewselection.unselect_all()
+                       self.number_selected(action, phoneNumber, message)
+                       self._contactsviewselection.unselect_all()
+               except Exception, e:
+                       self._errorDisplay.push_exception()