Merging some code in from DoneIt
authorepage <eopage@byu.net>
Thu, 16 Apr 2009 02:24:34 +0000 (02:24 +0000)
committerepage <eopage@byu.net>
Thu, 16 Apr 2009 02:24:34 +0000 (02:24 +0000)
git-svn-id: file:///svnroot/gc-dialer/trunk@272 c39d3808-3fe2-4d86-a59f-b7f623ee9f21

src/dc_glade.py
src/gc_views.py
src/gtk_toolbox.py
src/gv_backend.py

index 01aa86d..c0ad439 100755 (executable)
 
 """
 DialCentral: A phone dialer using GrandCentral
+
+@todo Add logging support to make debugging issues for people a lot easier
 """
 
+
+from __future__ import with_statement
+
 import sys
 import gc
 import os
@@ -147,8 +152,7 @@ class Dialcentral(object):
                import null_views
 
                self._phoneBackends = {self.NULL_BACKEND: null_backend.NullDialer()}
-               gtk.gdk.threads_enter()
-               try:
+               with gtk_toolbox.gtk_lock():
                        self._dialpads = {self.NULL_BACKEND: null_views.Dialpad(self._widgetTree)}
                        self._accountViews = {self.NULL_BACKEND: null_views.AccountInfo(self._widgetTree)}
                        self._recentViews = {self.NULL_BACKEND: null_views.RecentCallsView(self._widgetTree)}
@@ -158,8 +162,6 @@ class Dialcentral(object):
                        self._accountViews[self._selectedBackendId].enable()
                        self._recentViews[self._selectedBackendId].enable()
                        self._contactsViews[self._selectedBackendId].enable()
-               finally:
-                       gtk.gdk.threads_leave()
 
                # Setup maemo specifics
                try:
@@ -209,8 +211,7 @@ class Dialcentral(object):
                        self.GC_BACKEND: gc_backend.GCDialer(gcCookiePath),
                        self.GV_BACKEND: gv_backend.GVDialer(gvCookiePath),
                })
-               gtk.gdk.threads_enter()
-               try:
+               with gtk_toolbox.gtk_lock():
                        unifiedDialpad = gc_views.Dialpad(self._widgetTree, self._errorDisplay)
                        unifiedDialpad.set_number("")
                        self._dialpads.update({
@@ -241,8 +242,6 @@ class Dialcentral(object):
                                        self._widgetTree, self._phoneBackends[self.GV_BACKEND], self._errorDisplay
                                ),
                        })
-               finally:
-                       gtk.gdk.threads_leave()
 
                evoBackend = evo_backend.EvolutionAddressBook()
                fsContactsPath = os.path.join(self._data_path, "contacts")
@@ -285,7 +284,7 @@ class Dialcentral(object):
                if not self._deviceIsOnline:
                        warnings.warn("Attempted to login while device was offline")
                        return False
-               elif self._phoneBackends is None or len(self._phoneBackends) <= 1:
+               elif self._phoneBackends is None or len(self._phoneBackends) < len(self.BACKENDS):
                        warnings.warn(
                                "Attempted to login before initialization is complete, did an event fire early?"
                        )
@@ -299,29 +298,23 @@ class Dialcentral(object):
                        for x in xrange(numOfAttempts):
                                if loggedIn:
                                        break
-                               gtk.gdk.threads_enter()
-                               try:
+                               with gtk_toolbox.gtk_lock():
                                        availableServices = {
                                                self.GV_BACKEND: "Google Voice",
                                                self.GC_BACKEND: "Grand Central",
                                        }
                                        credentials = self._credentials.request_credentials_from(availableServices)
                                        serviceId, username, password = credentials
-                               finally:
-                                       gtk.gdk.threads_leave()
 
                                loggedIn = self._phoneBackends[serviceId].login(username, password)
                except RuntimeError, e:
                        warnings.warn(traceback.format_exc())
                        self._errorDisplay.push_message_with_lock(e.message)
 
-               gtk.gdk.threads_enter()
-               try:
+               with gtk_toolbox.gtk_lock():
                        if not loggedIn:
                                self._errorDisplay.push_message("Login Failed")
                        self._change_loggedin_status(serviceId if loggedIn else self.NULL_BACKEND)
-               finally:
-                       gtk.gdk.threads_leave()
                return loggedIn
 
        def display_error_message(self, msg):
@@ -335,6 +328,8 @@ class Dialcentral(object):
 
        @staticmethod
        def _on_close(*args, **kwds):
+               if self._osso is not None:
+                       self._osso.close()
                gtk.main_quit()
 
        def _change_loggedin_status(self, newStatus):
index 1a76fb2..afc3f2e 100644 (file)
@@ -17,6 +17,8 @@
 # License along with this library; if not, write to the Free Software
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 
+from __future__ import with_statement
+
 import threading
 import time
 import warnings
@@ -25,6 +27,8 @@ import traceback
 import gobject
 import gtk
 
+import gtk_toolbox
+
 
 def make_ugly(prettynumber):
        """
@@ -570,22 +574,16 @@ class RecentCallsView(object):
                        recentItems = self._backend.get_recent()
                except RuntimeError, e:
                        warnings.warn(traceback.format_exc())
-                       gtk.gdk.threads_enter()
-                       try:
+                       with gtk_toolbox.gtk_lock():
                                self._errorDisplay.push_message(e.message)
-                       finally:
-                               gtk.gdk.threads_leave()
                        self._recenttime = 0.0
                        recentItems = []
 
                for personsName, phoneNumber, date, action in recentItems:
                        description = "%s on %s from/to %s - %s" % (action.capitalize(), date, personsName, phoneNumber)
                        item = (phoneNumber, description)
-                       gtk.gdk.threads_enter()
-                       try:
+                       with gtk_toolbox.gtk_lock():
                                self._recentmodel.append(item)
-                       finally:
-                               gtk.gdk.threads_leave()
 
                return False
 
@@ -732,11 +730,8 @@ class ContactsView(object):
                        warnings.warn(traceback.format_exc())
                        contacts = []
                        self._contactstime = 0.0
-                       gtk.gdk.threads_enter()
-                       try:
+                       with gtk_toolbox.gtk_lock():
                                self._errorDisplay.push_message(e.message)
-                       finally:
-                               gtk.gdk.threads_leave()
                for contactId, contactName in contacts:
                        contactType = (addressBook.contact_source_short_name(contactId), )
                        self._contactsmodel.append(contactType + (contactName, "", contactId) + ("", ))
index 195c522..e3ca869 100644 (file)
@@ -1,10 +1,21 @@
 #!/usr/bin/python
 
+import warnings
+import contextlib
 
 import gobject
 import gtk
 
 
+@contextlib.contextmanager
+def gtk_lock():
+       gtk.gdk.threads_enter()
+       try:
+               yield
+       finally:
+               gtk.gdk.threads_leave()
+
+
 class LoginWindow(object):
 
        def __init__(self, widgetTree):
@@ -120,6 +131,10 @@ class ErrorDisplay(object):
                else:
                        self.__show_message(message)
 
+       def push_exception(self, exception):
+               self.push_message(exception.message)
+               warnings.warn(exception, stacklevel=3)
+
        def pop_message(self):
                if 0 < len(self.__messages):
                        self.__show_message(self.__messages[0])
index e73c39c..ac07feb 100644 (file)
@@ -264,6 +264,8 @@ class GVDialer(object):
                        warnings.warn(traceback.format_exc())
                        raise RuntimeError("%s is not accesible" % self._setforwardURL)
 
+               # @bug This does not seem to be keeping on my tablet (but works on the
+               # desktop), or the reading isn't working too well
                self._browser.cookies.save()
                return True