Small step towards null pattern
[gc-dialer] / src / gc_dialer.py
index 7fe6737..45fab6e 100755 (executable)
@@ -50,6 +50,8 @@ class Dialcentral(object):
                os.path.join(os.path.dirname(__file__), "../lib/dialcentral.glade"),
        ]
 
+       _data_path = os.path.join(os.path.expanduser("~"), ".dialcentral")
+
        def __init__(self):
                self._gcBackend = None
                self._clipboard = gtk.clipboard_get()
@@ -65,7 +67,7 @@ class Dialcentral(object):
                                self._widgetTree = gtk.glade.XML(path)
                                break
                else:
-                       self.display_error_message("Cannot find gc_dialer.glade")
+                       self.display_error_message("Cannot find dialcentral.glade")
                        gtk.main_quit()
                        return
 
@@ -118,7 +120,6 @@ class Dialcentral(object):
                backgroundSetup.setDaemon(True)
                backgroundSetup.start()
 
-
        def _idle_setup(self):
                """
                If something can be done after the UI loads, push it here so it's not blocking the UI
@@ -148,19 +149,26 @@ class Dialcentral(object):
                        warnings.warn("No Internet Connectivity API ", UserWarning, 2)
 
                import gc_backend
+               import file_backend
                import evo_backend
                # import gmail_backend
                # import maemo_backend
-               import views
+               import gc_views
 
-               self._gcBackend = gc_backend.GCDialer()
+               cookieFile = os.path.join(self._data_path, "cookies.txt")
+               try:
+                       os.makedirs(os.path.dirname(cookieFile))
+               except OSError, e:
+                       if e.errno != 17:
+                               raise
+               self._gcBackend = gc_backend.GCDialer(cookieFile)
                gtk.gdk.threads_enter()
                try:
-                       self._dialpad = views.Dialpad(self._widgetTree)
+                       self._dialpad = gc_views.Dialpad(self._widgetTree)
                        self._dialpad.set_number("")
-                       self._accountView = views.AccountInfo(self._widgetTree, self._gcBackend)
-                       self._recentView = views.RecentCallsView(self._widgetTree, self._gcBackend)
-                       self._contactsView = views.ContactsView(self._widgetTree, self._gcBackend)
+                       self._accountView = gc_views.AccountInfo(self._widgetTree, self._gcBackend)
+                       self._recentView = gc_views.RecentCallsView(self._widgetTree, self._gcBackend)
+                       self._contactsView = gc_views.ContactsView(self._widgetTree, self._gcBackend)
                finally:
                        gtk.gdk.threads_leave()
 
@@ -178,11 +186,13 @@ class Dialcentral(object):
                else:
                        self.attempt_login(2)
 
+               fsContactsPath = os.path.join(self._data_path, "contacts")
                addressBooks = [
                        self._gcBackend,
                        evo_backend.EvolutionAddressBook(),
+                       file_backend.FilesystemAddressBookFactory(fsContactsPath),
                ]
-               mergedBook = views.MergedAddressBook(addressBooks, views.MergedAddressBook.basic_lastname_sorter)
+               mergedBook = gc_views.MergedAddressBook(addressBooks, gc_views.MergedAddressBook.advanced_lastname_sorter)
                self._contactsView.append(mergedBook)
                self._contactsView.extend(addressBooks)
                self._contactsView.open_addressbook(*self._contactsView.get_addressbooks().next()[0][0:2])
@@ -222,7 +232,7 @@ class Dialcentral(object):
                        try:
                                dialog = self._widgetTree.get_widget("login_dialog")
                                dialog.set_transient_for(self._window)
-                               dialog.set_default_response(0)
+                               dialog.set_default_response(gtk.RESPONSE_CLOSE)
                                dialog.run()
 
                                username = self._widgetTree.get_widget("usernameentry").get_text()
@@ -314,7 +324,6 @@ class Dialcentral(object):
 
        def _on_loginclose_clicked(self, *args):
                self._on_close()
-               sys.exit(0)
 
        def _on_clearcookies_clicked(self, *args):
                self._gcBackend.logout()
@@ -357,18 +366,18 @@ class Dialcentral(object):
                        warnings.warn("Backend Status: Logged in? %s, Authenticated? %s, Callback=%s" % (loggedIn, self._gcBackend.is_authed(), self._gcBackend.get_callback_number()), UserWarning, 2)
                        return
 
+               dialed = False
                try:
-                       callSuccess = self._gcBackend.dial(number)
+                       self._gcBackend.dial(number)
+                       dialed = True
+               except RuntimeError, e:
+                       self.display_error_message(e.message)
                except ValueError, e:
-                       self._gcBackend._msg = e.message
-                       callSuccess = False
+                       self.display_error_message(e.message)
 
-               if not callSuccess:
-                       self.display_error_message(self._gcBackend._msg)
-               else:
+               if dialed:
                        self._dialpad.clear()
-
-               self._recentView.clear()
+                       self._recentView.clear()
 
        def _on_paste(self, *args):
                contents = self._clipboard.wait_for_text()