"""
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
__pretty_app_name__ = "DialCentral"
__app_name__ = "dialcentral"
- __version__ = "0.9.2"
+ __version__ = "0.9.6"
__app_magic__ = 0xdeadbeef
_glade_files = [
self._recentViews = None
self._contactsViews = None
- for path in Dialcentral._glade_files:
+ for path in self._glade_files:
if os.path.isfile(path):
self._widgetTree = gtk.glade.XML(path)
break
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)}
self._accountViews[self._selectedBackendId].enable()
self._recentViews[self._selectedBackendId].enable()
self._contactsViews[self._selectedBackendId].enable()
- finally:
- gtk.gdk.threads_leave()
# Setup maemo specifics
try:
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({
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")
if not self._deviceIsOnline:
warnings.warn("Attempted to login while device was offline")
return False
- elif self._phoneBackends is None:
+ 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?"
)
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)
+ self._errorDisplay.push_exception_with_lock(e)
- 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):
error_dialog.connect("response", close, self)
error_dialog.run()
- @staticmethod
- def _on_close(*args, **kwds):
+ def _on_close(self, *args, **kwds):
+ if self._osso is not None:
+ self._osso.close()
gtk.main_quit()
def _change_loggedin_status(self, newStatus):
bearer = event.get_bearer_type()
if status == conic.STATUS_CONNECTED:
- self._window.set_sensitive(True)
self._deviceIsOnline = True
backgroundLogin = threading.Thread(target=self.attempt_login, args=[2])
backgroundLogin.setDaemon(True)
backgroundLogin.start()
elif status == conic.STATUS_DISCONNECTED:
- self._window.set_sensitive(False)
self._deviceIsOnline = False
self._defaultBackendId = self._selectedBackendId
self._change_loggedin_status(self.NULL_BACKEND)
try:
loggedIn = self._phoneBackends[self._selectedBackendId].is_authed()
except RuntimeError, e:
- warnings.warn(traceback.format_exc())
loggedIn = False
- self._errorDisplay.push_message(e.message)
+ self._errorDisplay.push_exception(e)
return
if not loggedIn:
self._phoneBackends[self._selectedBackendId].dial(number)
dialed = True
except RuntimeError, e:
- warnings.warn(traceback.format_exc())
- self._errorDisplay.push_message(e.message)
+ self._errorDisplay.push_exception(e)
except ValueError, e:
- warnings.warn(traceback.format_exc())
- self._errorDisplay.push_message(e.message)
+ self._errorDisplay.push_exception(e)
if dialed:
self._dialpads[self._selectedBackendId].clear()