Complete settings support for login and account info
authorepage <eopage@byu.net>
Sat, 23 May 2009 00:56:17 +0000 (00:56 +0000)
committerepage <eopage@byu.net>
Sat, 23 May 2009 00:56:17 +0000 (00:56 +0000)
git-svn-id: file:///svnroot/gc-dialer/trunk@313 c39d3808-3fe2-4d86-a59f-b7f623ee9f21

src/dc_glade.py
src/gc_views.py

index 3f8d50f..805e9b7 100755 (executable)
@@ -330,11 +330,26 @@ class Dialcentral(object):
 
                loggedIn = False
                try:
-                       if self._phoneBackends[self._defaultBackendId].is_authed():
-                               serviceId = self._defaultBackendId
-                               loggedIn = True
-                               username, password = self._credentials
-                       for x in xrange(numOfAttempts):
+                       username, password = self._credentials
+                       serviceId = self._defaultBackendId
+
+                       # Attempt using the cookies
+                       loggedIn = self._phoneBackends[self._defaultBackendId].is_authed()
+                       if loggedIn:
+                               warnings.warn(
+                                       "Logged into %r through cookies" % self._phoneBackends[self._defaultBackendId]
+                               )
+
+                       # Attempt using the settings file
+                       if not loggedIn and username and password:
+                               loggedIn = self._phoneBackends[self._defaultBackendId].login(username, password)
+                               if loggedIn:
+                                       warnings.warn(
+                                               "Logged into %r through settings" % self._phoneBackends[self._defaultBackendId]
+                                       )
+
+                       # Query the user for credentials
+                       for attemptCount in xrange(numOfAttempts):
                                if loggedIn:
                                        break
                                with gtk_toolbox.gtk_lock():
@@ -348,6 +363,10 @@ class Dialcentral(object):
                                        serviceId, username, password = credentials
 
                                loggedIn = self._phoneBackends[serviceId].login(username, password)
+                       if 0 < attemptCount:
+                               warnings.warn(
+                                       "Logged into %r through user request" % self._phoneBackends[serviceId]
+                               )
                except RuntimeError, e:
                        warnings.warn(traceback.format_exc())
                        self._errorDisplay.push_exception_with_lock(e)
@@ -355,9 +374,10 @@ class Dialcentral(object):
                with gtk_toolbox.gtk_lock():
                        if loggedIn:
                                self._credentials = username, password
+                               self._change_loggedin_status(serviceId)
                        else:
                                self._errorDisplay.push_message("Login Failed")
-                       self._change_loggedin_status(serviceId if loggedIn else self.NULL_BACKEND)
+                               self._change_loggedin_status(self.NULL_BACKEND)
                return loggedIn
 
        def _on_close(self, *args, **kwds):
@@ -523,12 +543,14 @@ class Dialcentral(object):
                backgroundLogin.start()
 
        def _on_notebook_switch_page(self, notebook, page, page_num):
-               if page_num == self.CONTACTS_TAB:
-                       self._contactsViews[self._selectedBackendId].update()
-               elif page_num == self.RECENT_TAB:
+               if page_num == self.RECENT_TAB:
                        self._recentViews[self._selectedBackendId].update()
                elif page_num == self.MESSAGES_TAB:
                        self._messagesViews[self._selectedBackendId].update()
+               elif page_num == self.CONTACTS_TAB:
+                       self._contactsViews[self._selectedBackendId].update()
+               elif page_num == self.ACCOUNT_TAB:
+                       self._accountViews[self._selectedBackendId].update()
 
                tabTitle = self._notebook.get_tab_label(self._notebook.get_nth_page(page_num)).get_text()
                if hildon is not None:
index 41420ef..c812050 100644 (file)
@@ -573,6 +573,7 @@ class AccountInfo(object):
        def __init__(self, widgetTree, backend, errorDisplay):
                self._errorDisplay = errorDisplay
                self._backend = backend
+               self._isPopulated = False
 
                self._callbackList = gtk.ListStore(gobject.TYPE_STRING)
                self._accountViewNumberDisplay = widgetTree.get_widget("gcnumber_display")
@@ -586,12 +587,14 @@ class AccountInfo(object):
                self._accountViewNumberDisplay.set_use_markup(True)
                self.set_account_number("")
                self._callbackList.clear()
-               self.update()
                self._onCallbackentryChangedId = self._callbackCombo.get_child().connect("changed", self._on_callbackentry_changed)
+               self.update(force=True)
 
        def disable(self):
                self._callbackCombo.get_child().disconnect(self._onCallbackentryChangedId)
+
                self.clear()
+
                self._callbackList.clear()
 
        def get_selected_callback_number(self):
@@ -604,12 +607,15 @@ class AccountInfo(object):
                self._accountViewNumberDisplay.set_label("<span size='23000' weight='bold'>%s</span>" % (number))
 
        def update(self, force = False):
+               if not force and self._isPopulated:
+                       return
                self._populate_callback_combo()
                self.set_account_number(self._backend.get_account_number())
 
        def clear(self):
                self._callbackCombo.get_child().set_text("")
                self.set_account_number("")
+               self._isPopulated = False
 
        @staticmethod
        def name():
@@ -626,11 +632,13 @@ class AccountInfo(object):
                config.set(section, "callback", callback)
 
        def _populate_callback_combo(self):
+               self._isPopulated = True
                self._callbackList.clear()
                try:
                        callbackNumbers = self._backend.get_callback_numbers()
                except RuntimeError, e:
                        self._errorDisplay.push_exception(e)
+                       self._isPopulated = False
                        return
 
                for number, description in callbackNumbers.iteritems():
@@ -638,27 +646,32 @@ class AccountInfo(object):
 
                self._callbackCombo.set_model(self._callbackList)
                self._callbackCombo.set_text_column(0)
-               try:
-                       callbackNumber = self._backend.get_callback_number()
-               except RuntimeError, e:
-                       callbackNumber = self._defaultCallback
+               #callbackNumber = self._backend.get_callback_number()
+               callbackNumber = self._defaultCallback
                self._callbackCombo.get_child().set_text(make_pretty(callbackNumber))
 
-       def _on_callbackentry_changed(self, *args):
+       def _set_callback_number(self, number):
                """
                @todo Potential blocking on web access, maybe we should defer this or put up a dialog?
                """
                try:
-                       text = self.get_selected_callback_number()
-                       if not self._backend.is_valid_syntax(text):
-                               self._errorDisplay.push_message("%s is not a valid callback number" % text)
-                       elif text == self._backend.get_callback_number():
+                       if not self._backend.is_valid_syntax(number):
+                               self._errorDisplay.push_message("%s is not a valid callback number" % numbern)
+                       elif number == self._backend.get_callback_number():
                                warnings.warn("Callback number already is %s" % self._backend.get_callback_number(), UserWarning, 2)
                        else:
-                               self._backend.set_callback_number(text)
+                               self._backend.set_callback_number(number)
+                               warnings.warn("Callback number set to %s" % self._backend.get_callback_number(), UserWarning, 2)
                except RuntimeError, e:
                        self._errorDisplay.push_exception(e)
 
+       def _on_callbackentry_changed(self, *args):
+               """
+               @todo Potential blocking on web access, maybe we should defer this or put up a dialog?
+               """
+               text = self.get_selected_callback_number()
+               self._set_callback_number(text)
+
 
 class RecentCallsView(object):
 
@@ -693,6 +706,9 @@ class RecentCallsView(object):
 
        def disable(self):
                self._recentview.disconnect(self._onRecentviewRowActivatedId)
+
+               self.clear()
+
                self._recentview.remove_column(self._recentviewColumn)
                self._recentview.set_model(None)
 
@@ -797,6 +813,9 @@ class MessagesView(object):
 
        def disable(self):
                self._messageview.disconnect(self._onMessageviewRowActivatedId)
+
+               self.clear()
+
                self._messageview.remove_column(self._messageviewColumn)
                self._messageview.set_model(None)
 
@@ -937,6 +956,8 @@ class ContactsView(object):
                self._contactsview.disconnect(self._onContactsviewRowActivatedId)
                self._booksSelectionBox.disconnect(self._onAddressbookComboChangedId)
 
+               self.clear()
+
                self._booksSelectionBox.clear()
                self._booksSelectionBox.set_model(None)
                self._contactsview.set_model(None)