Hardening against different timings in Google rolling thigns out
[gc-dialer] / src / gv_views.py
index 8c5cd84..7d1e8ef 100644 (file)
@@ -19,13 +19,13 @@ License along with this library; if not, write to the Free Software
 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 
 @todo Alternate UI for dialogs (stackables)
-@todo Get descriptions with the callback number
 """
 
 from __future__ import with_statement
 
 import ConfigParser
 import logging
+import itertools
 
 import gobject
 import pango
@@ -769,7 +769,7 @@ class AccountInfo(object):
                return True
 
        def clear(self):
-               self._callbackSelectButton.set_label("")
+               self._callbackSelectButton.set_label("No Callback Number")
                self.set_account_number("")
                self._isPopulated = False
 
@@ -806,17 +806,19 @@ class AccountInfo(object):
                        self._isPopulated = False
                        return
 
+               if len(callbackNumbers) == 0:
+                       callbackNumbers = {"": "No callback numbers available"}
+
                for number, description in callbackNumbers.iteritems():
                        self._callbackList.append((make_pretty(number), description))
 
-               if not self.get_selected_callback_number():
-                       self._set_callback_number(self._defaultCallback)
+               self._set_callback_number(self._defaultCallback)
 
        def _set_callback_number(self, number):
                try:
                        if not self._backend.is_valid_syntax(number) and 0 < len(number):
                                self._errorDisplay.push_message("%s is not a valid callback number" % number)
-                       elif number == self._backend.get_callback_number():
+                       elif number == self._backend.get_callback_number() and 0 < len(number):
                                _moduleLogger.warning(
                                        "Callback number already is %s" % (
                                                self._backend.get_callback_number(),
@@ -827,7 +829,10 @@ class AccountInfo(object):
                                assert make_ugly(number) == make_ugly(self._backend.get_callback_number()), "Callback number should be %s but instead is %s" % (
                                        make_pretty(number), make_pretty(self._backend.get_callback_number())
                                )
-                               self._callbackSelectButton.set_label(make_pretty(number))
+                               prettyNumber = make_pretty(number)
+                               if len(prettyNumber) == 0:
+                                       prettyNumber = "No Callback Number"
+                               self._callbackSelectButton.set_label(prettyNumber)
                                _moduleLogger.info(
                                        "Callback number set to %s" % (
                                                self._backend.get_callback_number(),
@@ -850,13 +855,24 @@ class AccountInfo(object):
                try:
                        actualSelection = make_pretty(self.get_selected_callback_number())
 
+                       userOptions = dict(
+                               (number, "%s (%s)" % (number, description))
+                               for (number, description) in self._callbackList
+                       )
+                       defaultSelection = userOptions.get(actualSelection, actualSelection)
+
                        userSelection = hildonize.touch_selector_entry(
                                self._window,
                                "Callback Number",
-                               [number for number, description in self._callbackList],
-                               actualSelection,
+                               list(userOptions.itervalues()),
+                               defaultSelection,
                        )
-                       number = make_ugly(userSelection)
+                       reversedUserOptions = dict(
+                               itertools.izip(userOptions.itervalues(), userOptions.iterkeys())
+                       )
+                       selectedNumber = reversedUserOptions.get(userSelection, userSelection)
+
+                       number = make_ugly(selectedNumber)
                        self._set_callback_number(number)
                except RuntimeError, e:
                        _moduleLogger.exception("%s" % str(e))
@@ -1205,6 +1221,8 @@ class MessagesView(object):
                """
                pass
 
+       _MIN_MESSAGES_SHOWN = 4
+
        def _idly_populate_messageview(self):
                with gtk_toolbox.gtk_lock():
                        banner = hildonize.show_busy_banner_start(self._window, "Loading Messages")
@@ -1229,12 +1247,19 @@ class MessagesView(object):
                                prettyNumber = make_pretty(prettyNumber)
 
                                firstMessage = "<b>%s - %s</b> <i>(%s)</i>" % (header, prettyNumber, relativeDate)
-                               newMessages = [firstMessage]
-                               newMessages.extend(messages)
+                               expandedMessages = [firstMessage]
+                               expandedMessages.extend(messages)
+                               if (self._MIN_MESSAGES_SHOWN + 1) < len(messages):
+                                       firstMessage = "<b>%s - %s</b> <i>(%s)</i>" % (header, prettyNumber, relativeDate)
+                                       secondMessage = "<i>%d Messages Hidden...</i>" % (len(messages) - self._MIN_MESSAGES_SHOWN, )
+                                       collapsedMessages = [firstMessage, secondMessage]
+                                       collapsedMessages.extend(messages[-self._MIN_MESSAGES_SHOWN-1:-1])
+                               else:
+                                       collapsedMessages = expandedMessages
 
                                number = make_ugly(number)
 
-                               row = (number, relativeDate, header, "\n".join(newMessages), newMessages)
+                               row = (number, relativeDate, header, "\n".join(collapsedMessages), expandedMessages)
                                with gtk_toolbox.gtk_lock():
                                        self._messagemodel.append(row)
                except Exception, e: