From c8ead80df852a73400d84c802b68bc8a6a44d38e Mon Sep 17 00:00:00 2001 From: epage Date: Sat, 23 May 2009 00:56:17 +0000 Subject: [PATCH] Complete settings support for login and account info git-svn-id: file:///svnroot/gc-dialer/trunk@313 c39d3808-3fe2-4d86-a59f-b7f623ee9f21 --- src/dc_glade.py | 40 +++++++++++++++++++++++++++++++--------- src/gc_views.py | 43 ++++++++++++++++++++++++++++++++----------- 2 files changed, 63 insertions(+), 20 deletions(-) diff --git a/src/dc_glade.py b/src/dc_glade.py index 3f8d50f..805e9b7 100755 --- a/src/dc_glade.py +++ b/src/dc_glade.py @@ -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: diff --git a/src/gc_views.py b/src/gc_views.py index 41420ef..c812050 100644 --- a/src/gc_views.py +++ b/src/gc_views.py @@ -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("%s" % (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) -- 1.7.9.5