"""
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
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 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?"
)
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):
@staticmethod
def _on_close(*args, **kwds):
+ if self._osso is not None:
+ self._osso.close()
gtk.main_quit()
def _change_loggedin_status(self, newStatus):
# 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
import gobject
import gtk
+import gtk_toolbox
+
def make_ugly(prettynumber):
"""
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
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) + ("", ))
#!/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):
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])