Breaking out some logic and fixing some icons
authorepage <eopage@byu.net>
Tue, 26 May 2009 02:26:09 +0000 (02:26 +0000)
committerepage <eopage@byu.net>
Tue, 26 May 2009 02:26:09 +0000 (02:26 +0000)
git-svn-id: file:///svnroot/gc-dialer/trunk@328 c39d3808-3fe2-4d86-a59f-b7f623ee9f21

src/dc_glade.py
src/dialcentral.glade
src/gc_views.py

index edbf2bc..8b7da96 100755 (executable)
@@ -38,7 +38,6 @@ import base64
 import ConfigParser
 import itertools
 import warnings
-import traceback
 
 import gtk
 import gtk.glade
@@ -284,10 +283,10 @@ class Dialcentral(object):
                fsContactsPath = os.path.join(self._data_path, "contacts")
                fileBackend = file_backend.FilesystemAddressBookFactory(fsContactsPath)
                for backendId in (self.GV_BACKEND, self.GC_BACKEND):
-                       self._dialpads[backendId].dial = self._on_dial_clicked
-                       self._recentViews[backendId].number_selected = self._on_number_selected
-                       self._messagesViews[backendId].number_selected = self._on_number_selected
-                       self._contactsViews[backendId].number_selected = self._on_number_selected
+                       self._dialpads[backendId].number_selected = self._select_action
+                       self._recentViews[backendId].number_selected = self._select_action
+                       self._messagesViews[backendId].number_selected = self._select_action
+                       self._contactsViews[backendId].number_selected = self._select_action
 
                        addressBooks = [
                                self._phoneBackends[backendId],
@@ -317,104 +316,106 @@ class Dialcentral(object):
 
                self.attempt_login(2)
 
-               return False
-
        def attempt_login(self, numOfAttempts = 10, force = False):
                """
                @todo Handle user notification better like attempting to login and failed login
-
-               @note Not meant to be called directly, but run as a seperate thread.
                """
-               assert 0 < numOfAttempts, "That was pointless having 0 or less login attempts"
-
-               if 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?"
-                       )
-                       return False
-
-               with gtk_toolbox.gtk_lock():
-                       if not self._deviceIsOnline:
-                               self._errorDisplay.push_message(
-                                       "Unable to login, device is not online"
-                               )
-                               return False
-
-               loggedIn = False
                try:
-                       username, password = self._credentials
-                       serviceId = self._defaultBackendId
+                       assert 0 <= numOfAttempts, "That was pointless having 0 or less login attempts"
+                       assert self._initDone, "Attempting login before app is fully loaded"
+                       if not self._deviceIsOnline:
+                               raise RuntimeError("Unable to login, device is not online")
 
+                       serviceId = self.NULL_BACKEND
+                       loggedIn = False
                        if not force:
-                               loggedIn, username, password = self._login_by_cookie(username, password)
-                               if not loggedIn:
-                                       loggedIn, username, password = self._login_by_settings(username, password)
+                               self.refresh_session()
+                               serviceId = self._defaultBackendId
+                               loggedIn = True
+
                        if not loggedIn:
-                               loggedIn, username, password = self._login_by_user(username, password, numOfAttempts)
-               except RuntimeError, e:
-                       warnings.warn(traceback.format_exc())
-                       self._errorDisplay.push_exception_with_lock(e)
+                               with gtk_toolbox.gtk_lock():
+                                       loggedIn, serviceId = self._login_by_user(numOfAttempts)
 
-               with gtk_toolbox.gtk_lock():
-                       if loggedIn:
-                               self._credentials = username, password
+                       with gtk_toolbox.gtk_lock():
                                self._change_loggedin_status(serviceId)
-                       else:
-                               self._errorDisplay.push_message("Login Failed")
-                               self._change_loggedin_status(self.NULL_BACKEND)
-               return loggedIn
+               except StandardError, e:
+                       with gtk_toolbox.gtk_lock():
+                               self._errorDisplay.push_exception(e)
+
+       def refresh_session(self):
+               assert self._initDone, "Attempting login before app is fully loaded"
+               if not self._deviceIsOnline:
+                       raise RuntimeError("Unable to login, device is not online")
+
+               loggedIn = False
+               if not loggedIn:
+                       loggedIn = self._login_by_cookie()
+               if not loggedIn:
+                       loggedIn = self._login_by_settings()
+
+               if not loggedIn:
+                       raise RuntimeError("Login Failed")
 
-       def _login_by_cookie(self, username, password):
+       def _login_by_cookie(self):
                loggedIn = self._phoneBackends[self._defaultBackendId].is_authed()
                if loggedIn:
                        warnings.warn(
                                "Logged into %r through cookies" % self._phoneBackends[self._defaultBackendId],
                                UserWarning, 2
                        )
-               return loggedIn, username, password
+               return loggedIn
 
-       def _login_by_settings(self, username, password):
-               if username and password:
-                       loggedIn = self._phoneBackends[self._defaultBackendId].login(username, password)
-                       if loggedIn:
-                               warnings.warn(
-                                       "Logged into %r through settings" % self._phoneBackends[self._defaultBackendId],
-                                       UserWarning, 2
-                               )
-               return loggedIn, username, password
+       def _login_by_settings(self):
+               username, password = self._credentials
+               loggedIn = self._phoneBackends[self._defaultBackendId].login(username, password)
+               if loggedIn:
+                       self._credentials = username, password
+                       warnings.warn(
+                               "Logged into %r through settings" % self._phoneBackends[self._defaultBackendId],
+                               UserWarning, 2
+                       )
+               return loggedIn
 
-       def _login_by_user(self, username, password, numOfAttempts):
-               loggedIn = False
+       def _login_by_user(self, numOfAttempts):
+               loggedIn, (username, password) = False, self._credentials
+               tmpServiceId = self.NULL_BACKEND
                for attemptCount in xrange(numOfAttempts):
                        if loggedIn:
                                break
-                       with gtk_toolbox.gtk_lock():
-                               availableServices = {
-                                       self.GV_BACKEND: "Google Voice",
-                                       self.GC_BACKEND: "Grand Central",
-                               }
-                               credentials = self._credentialsDialog.request_credentials_from(
-                                       availableServices, defaultCredentials = self._credentials
-                               )
-                               serviceId, username, password = credentials
+                       availableServices = {
+                               self.GV_BACKEND: "Google Voice",
+                               self.GC_BACKEND: "Grand Central",
+                       }
+                       credentials = self._credentialsDialog.request_credentials_from(
+                               availableServices, defaultCredentials = self._credentials
+                       )
+                       tmpServiceId, username, password = credentials
+                       loggedIn = self._phoneBackends[tmpServiceId].login(username, password)
 
-                       loggedIn = self._phoneBackends[serviceId].login(username, password)
-               if 0 < attemptCount:
+               if loggedIn:
+                       serviceId = tmpServiceId
+                       self._credentials = username, password
                        warnings.warn(
                                "Logged into %r through user request" % self._phoneBackends[serviceId],
                                UserWarning, 2
                        )
-               return loggedIn, username, password
+               else:
+                       serviceId = self.NULL_BACKEND
 
-       def _on_close(self, *args, **kwds):
-               try:
-                       if self._osso is not None:
-                               self._osso.close()
+               return loggedIn, serviceId
 
-                       if self._initDone:
-                               self._save_settings()
-               finally:
-                       gtk.main_quit()
+       def _select_action(self, action, number, message):
+               self.refresh_session()
+               if action == "select":
+                       self._dialpads[self._selectedBackendId].set_number(number)
+                       self._notebook.set_current_page(self.KEYPAD_TAB)
+               elif action == "dial":
+                       self._on_dial_clicked(number)
+               elif action == "sms":
+                       self._on_sms_clicked(number, message)
+               else:
+                       assert False, "Unknown action: %s" % action
 
        def _change_loggedin_status(self, newStatus):
                oldStatus = self._selectedBackendId
@@ -443,8 +444,8 @@ class Dialcentral(object):
                """
                @note UI Thread
                """
-               self._defaultBackendId = int(config.get(self.__pretty_app_name__, "active"))
                try:
+                       self._defaultBackendId = int(config.get(self.__pretty_app_name__, "active"))
                        blobs = (
                                config.get(self.__pretty_app_name__, "bin_blob_%i" % i)
                                for i in xrange(len(self._credentials))
@@ -519,6 +520,16 @@ class Dialcentral(object):
                with open(self._user_settings, "wb") as configFile:
                        config.write(configFile)
 
+       def _on_close(self, *args, **kwds):
+               try:
+                       if self._osso is not None:
+                               self._osso.close()
+
+                       if self._initDone:
+                               self._save_settings()
+               finally:
+                       gtk.main_quit()
+
        def _on_device_state_change(self, shutdown, save_unsaved_data, memory_low, system_inactivity, message, userData):
                """
                For shutdown or save_unsaved_data, our only state is cookies and I think the cookie manager handles that for us.
@@ -605,17 +616,6 @@ class Dialcentral(object):
                else:
                        self._window.set_title("%s - %s" % (self.__pretty_app_name__, tabTitle))
 
-       def _on_number_selected(self, action, number, message):
-               if action == "select":
-                       self._dialpads[self._selectedBackendId].set_number(number)
-                       self._notebook.set_current_page(self.KEYPAD_TAB)
-               elif action == "dial":
-                       self._on_dial_clicked(number)
-               elif action == "sms":
-                       self._on_sms_clicked(number, message)
-               else:
-                       assert False, "Unknown action: %s" % action
-
        def _on_sms_clicked(self, number, message):
                """
                @todo Potential blocking on web access, maybe we should defer parts of this or put up a dialog?
index 8355a57..b8620b9 100644 (file)
@@ -30,7 +30,7 @@
                         <child internal-child="image">
                           <widget class="GtkImage" id="image3">
                             <property name="visible">True</property>
-                            <property name="stock">gtk-missing-image</property>
+                            <property name="stock">gtk-connect</property>
                           </widget>
                         </child>
                       </widget>
@@ -80,7 +80,7 @@
                         <child internal-child="image">
                           <widget class="GtkImage" id="image4">
                             <property name="visible">True</property>
-                            <property name="stock">gtk-missing-image</property>
+                            <property name="stock">gtk-delete</property>
                           </widget>
                         </child>
                       </widget>
                         <property name="receives_default">False</property>
                         <property name="focus_on_click">False</property>
                         <signal name="clicked" handler="on_digit_clicked"/>
-                        <accelerator key="c" signal="clicked"/>
-                        <accelerator key="b" signal="clicked"/>
-                        <accelerator key="a" signal="clicked"/>
                         <accelerator key="2" signal="clicked"/>
+                        <accelerator key="a" signal="clicked"/>
+                        <accelerator key="b" signal="clicked"/>
+                        <accelerator key="c" signal="clicked"/>
                         <child>
                           <widget class="GtkLabel" id="label10">
                             <property name="visible">True</property>
                         <property name="receives_default">False</property>
                         <property name="focus_on_click">False</property>
                         <signal name="clicked" handler="on_digit_clicked"/>
-                        <accelerator key="f" signal="clicked"/>
-                        <accelerator key="e" signal="clicked"/>
-                        <accelerator key="d" signal="clicked"/>
                         <accelerator key="3" signal="clicked"/>
+                        <accelerator key="d" signal="clicked"/>
+                        <accelerator key="e" signal="clicked"/>
+                        <accelerator key="f" signal="clicked"/>
                         <child>
                           <widget class="GtkLabel" id="label11">
                             <property name="visible">True</property>
                         <property name="receives_default">False</property>
                         <property name="focus_on_click">False</property>
                         <signal name="clicked" handler="on_digit_clicked"/>
-                        <accelerator key="i" signal="clicked"/>
-                        <accelerator key="h" signal="clicked"/>
-                        <accelerator key="g" signal="clicked"/>
                         <accelerator key="4" signal="clicked"/>
+                        <accelerator key="g" signal="clicked"/>
+                        <accelerator key="h" signal="clicked"/>
+                        <accelerator key="i" signal="clicked"/>
                         <child>
                           <widget class="GtkLabel" id="label13">
                             <property name="visible">True</property>
                         <property name="receives_default">False</property>
                         <property name="focus_on_click">False</property>
                         <signal name="clicked" handler="on_digit_clicked"/>
-                        <accelerator key="l" signal="clicked"/>
-                        <accelerator key="k" signal="clicked"/>
-                        <accelerator key="j" signal="clicked"/>
                         <accelerator key="5" signal="clicked"/>
+                        <accelerator key="j" signal="clicked"/>
+                        <accelerator key="k" signal="clicked"/>
+                        <accelerator key="l" signal="clicked"/>
                         <child>
                           <widget class="GtkLabel" id="label14">
                             <property name="visible">True</property>
                         <property name="receives_default">False</property>
                         <property name="focus_on_click">False</property>
                         <signal name="clicked" handler="on_digit_clicked"/>
-                        <accelerator key="o" signal="clicked"/>
-                        <accelerator key="n" signal="clicked"/>
-                        <accelerator key="m" signal="clicked"/>
                         <accelerator key="6" signal="clicked"/>
+                        <accelerator key="m" signal="clicked"/>
+                        <accelerator key="n" signal="clicked"/>
+                        <accelerator key="o" signal="clicked"/>
                         <child>
                           <widget class="GtkLabel" id="label15">
                             <property name="visible">True</property>
                         <property name="receives_default">False</property>
                         <property name="focus_on_click">False</property>
                         <signal name="clicked" handler="on_digit_clicked"/>
-                        <accelerator key="s" signal="clicked"/>
-                        <accelerator key="r" signal="clicked"/>
-                        <accelerator key="q" signal="clicked"/>
-                        <accelerator key="p" signal="clicked"/>
                         <accelerator key="7" signal="clicked"/>
+                        <accelerator key="p" signal="clicked"/>
+                        <accelerator key="q" signal="clicked"/>
+                        <accelerator key="r" signal="clicked"/>
+                        <accelerator key="s" signal="clicked"/>
                         <child>
                           <widget class="GtkLabel" id="label16">
                             <property name="visible">True</property>
                         <property name="receives_default">False</property>
                         <property name="focus_on_click">False</property>
                         <signal name="clicked" handler="on_digit_clicked"/>
-                        <accelerator key="v" signal="clicked"/>
-                        <accelerator key="u" signal="clicked"/>
-                        <accelerator key="t" signal="clicked"/>
                         <accelerator key="8" signal="clicked"/>
+                        <accelerator key="t" signal="clicked"/>
+                        <accelerator key="u" signal="clicked"/>
+                        <accelerator key="v" signal="clicked"/>
                         <child>
                           <widget class="GtkLabel" id="label17">
                             <property name="visible">True</property>
                         <property name="receives_default">False</property>
                         <property name="focus_on_click">False</property>
                         <signal name="clicked" handler="on_digit_clicked"/>
-                        <accelerator key="z" signal="clicked"/>
-                        <accelerator key="y" signal="clicked"/>
-                        <accelerator key="x" signal="clicked"/>
-                        <accelerator key="w" signal="clicked"/>
                         <accelerator key="9" signal="clicked"/>
+                        <accelerator key="w" signal="clicked"/>
+                        <accelerator key="x" signal="clicked"/>
+                        <accelerator key="y" signal="clicked"/>
+                        <accelerator key="z" signal="clicked"/>
                         <child>
                           <widget class="GtkLabel" id="label18">
                             <property name="visible">True</property>
                   <widget class="GtkTreeView" id="recentview">
                     <property name="visible">True</property>
                     <property name="can_focus">True</property>
-                    <property name="headers_visible">True</property>
                     <property name="rules_hint">True</property>
                     <property name="enable_grid_lines">horizontal</property>
                     <property name="enable_tree_lines">True</property>
index 29481c0..11d982c 100644 (file)
@@ -519,7 +519,7 @@ class Dialpad(object):
        def disable(self):
                pass
 
-       def dial(self, number):
+       def number_selected(self, action, number, message):
                """
                @note Actual dial function is patched in later
                """
@@ -556,7 +556,10 @@ class Dialpad(object):
                pass
 
        def _on_dial_clicked(self, widget):
-               self.dial(self.get_number())
+               action = PhoneTypeSelector.ACTION_DIAL
+               phoneNumber = self.get_number()
+               message = ""
+               self.number_selected(action, phoneNumber, message)
 
        def _on_clear_number(self, *args):
                self.clear()