X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fgv_views.py;h=9b56bee50e75f5b7085531b3f0e47bd0e0e3f4b4;hb=e9f715b4a8367af16cb6586a6927e9846c477310;hp=6f2b7c30e3710838a7072e52f16a2313bba94e75;hpb=5b73d9ca02211b482da7c9633e05df32825ba29e;p=gc-dialer diff --git a/src/gv_views.py b/src/gv_views.py index 6f2b7c3..9b56bee 100644 --- a/src/gv_views.py +++ b/src/gv_views.py @@ -684,7 +684,7 @@ class AccountInfo(object): self._applyAlarmTimeoutId = None self._window = gtk_toolbox.find_parent_window(self._minutesEntryButton) - self._defaultCallback = "" + self._callbackNumber = "" def enable(self): assert self._backend.is_authed(), "Attempting to enable backend while not logged in" @@ -694,6 +694,7 @@ class AccountInfo(object): del self._callbackList[:] self._onCallbackSelectChangedId = self._callbackSelectButton.connect("clicked", self._on_callbackentry_clicked) + self._set_callback_label("") if self._alarmHandler is not None: self._notifyCheckbox.set_active(self._alarmHandler.isEnabled) @@ -719,6 +720,7 @@ class AccountInfo(object): def disable(self): self._callbackSelectButton.disconnect(self._onCallbackSelectChangedId) self._onCallbackSelectChangedId = 0 + self._set_callback_label("") if self._alarmHandler is not None: self._notifyCheckbox.disconnect(self._onNotifyToggled) @@ -741,13 +743,6 @@ class AccountInfo(object): self.clear() del self._callbackList[:] - def get_selected_callback_number(self): - currentLabel = self._callbackSelectButton.get_label() - if currentLabel is not None: - return make_ugly(currentLabel) - else: - return "" - def set_account_number(self, number): """ Displays current account number @@ -774,7 +769,7 @@ class AccountInfo(object): return "Account Info" def load_settings(self, config, section): - self._defaultCallback = config.get(section, "callback") + self._callbackNumber = make_ugly(config.get(section, "callback")) self._notifyOnMissed = config.getboolean(section, "notifyOnMissed") self._notifyOnVoicemail = config.getboolean(section, "notifyOnVoicemail") self._notifyOnSms = config.getboolean(section, "notifyOnSms") @@ -783,8 +778,7 @@ class AccountInfo(object): """ @note Thread Agnostic """ - callback = self.get_selected_callback_number() - config.set(section, "callback", callback) + config.set(section, "callback", self._callbackNumber) config.set(section, "notifyOnMissed", repr(self._notifyOnMissed)) config.set(section, "notifyOnVoicemail", repr(self._notifyOnVoicemail)) config.set(section, "notifyOnSms", repr(self._notifyOnSms)) @@ -805,7 +799,7 @@ class AccountInfo(object): for number, description in callbackNumbers.iteritems(): self._callbackList.append((make_pretty(number), description)) - self._set_callback_number(self._defaultCallback) + self._set_callback_number(self._callbackNumber) def _set_callback_number(self, number): try: @@ -823,6 +817,7 @@ 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._callbackNumber = make_ugly(number) self._set_callback_label(number) _moduleLogger.info( "Callback number set to %s" % ( @@ -850,7 +845,7 @@ class AccountInfo(object): def _on_callbackentry_clicked(self, *args): try: - actualSelection = make_pretty(self.get_selected_callback_number()) + actualSelection = make_pretty(self._callbackNumber) userOptions = dict( (number, "%s (%s)" % (number, description)) @@ -1160,6 +1155,17 @@ class MessagesView(object): MESSAGES_IDX = 4 FROM_ID_IDX = 5 + NO_MESSAGES = "None" + VOICEMAIL_MESSAGES = "Voicemail" + TEXT_MESSAGES = "Texts" + ALL_MESSAGES = "All Messages" + MESSAGE_TYPES = [NO_MESSAGES, VOICEMAIL_MESSAGES, TEXT_MESSAGES, ALL_MESSAGES] + + UNREAD_STATUS = "Unread" + UNARCHIVED_STATUS = "Unarchived" + ALL_STATUS = "Any" + MESSAGE_STATUSES = [UNREAD_STATUS, UNARCHIVED_STATUS, ALL_STATUS] + def __init__(self, widgetTree, backend, errorDisplay): self._errorDisplay = errorDisplay self._backend = backend @@ -1188,6 +1194,13 @@ class MessagesView(object): self._window = gtk_toolbox.find_parent_window(self._messageview) self._phoneTypeSelector = SmsEntryDialog(widgetTree) + self._messageTypeButton = widgetTree.get_widget("messageTypeButton") + self._onMessageTypeClickedId = 0 + self._messageType = self.ALL_MESSAGES + self._messageStatusButton = widgetTree.get_widget("messageStatusButton") + self._onMessageStatusClickedId = 0 + self._messageStatus = self.ALL_STATUS + self._updateSink = gtk_toolbox.threaded_stage( gtk_toolbox.comap( self._idly_populate_messageview, @@ -1205,10 +1218,23 @@ class MessagesView(object): self._messageviewselection = self._messageview.get_selection() self._messageviewselection.set_mode(gtk.SELECTION_SINGLE) - self._onMessageviewRowActivatedId = self._messageview.connect("row-activated", self._on_messageview_row_activated) + self._messageTypeButton.set_label(self._messageType) + self._messageStatusButton.set_label(self._messageStatus) + + self._onMessageviewRowActivatedId = self._messageview.connect( + "row-activated", self._on_messageview_row_activated + ) + self._onMessageTypeClickedId = self._messageTypeButton.connect( + "clicked", self._on_message_type_clicked + ) + self._onMessageStatusClickedId = self._messageStatusButton.connect( + "clicked", self._on_message_status_clicked + ) def disable(self): self._messageview.disconnect(self._onMessageviewRowActivatedId) + self._messageTypeButton.disconnect(self._onMessageTypeClickedId) + self._messageStatusButton.disconnect(self._onMessageStatusClickedId) self.clear() @@ -1235,17 +1261,44 @@ class MessagesView(object): def name(): return "Messages" - def load_settings(self, config, section): - pass + def load_settings(self, config, sectionName): + try: + self._messageStatus = config.get(sectionName, "status") + self._messageType = config.get(sectionName, "type") + except ConfigParser.NoOptionError: + pass - def save_settings(self, config, section): + def save_settings(self, config, sectionName): """ @note Thread Agnostic """ - pass + config.set(sectionName, "status", self._messageStatus) + config.set(sectionName, "type", self._messageType) _MIN_MESSAGES_SHOWN = 4 + @classmethod + def _filter_messages(cls, message, type, status): + if type == cls.ALL_MESSAGES: + isType = True + else: + messageType = message["type"] + isType = messageType == type + + if status == cls.ALL_STATUS: + isStatus = True + else: + isUnarchived = not message["isArchived"] + isUnread = not message["isRead"] + if status == cls.UNREAD_STATUS: + isStatus = isUnarchived and isUnread + elif status == cls.UNARCHIVED_STATUS: + isStatus = isUnarchived + else: + assert "Status %s is bad for %r" % (status, message) + + return isType and isStatus + def _idly_populate_messageview(self): with gtk_toolbox.gtk_lock(): banner = hildonize.show_busy_banner_start(self._window, "Loading Messages") @@ -1253,16 +1306,20 @@ class MessagesView(object): self._messagemodel.clear() self._isPopulated = True - try: - messageItems = self._backend.get_messages() - except Exception, e: - self._errorDisplay.push_exception_with_lock() - self._isPopulated = False + if self._messageType == self.NO_MESSAGES: messageItems = [] + else: + try: + messageItems = self._backend.get_messages() + except Exception, e: + self._errorDisplay.push_exception_with_lock() + self._isPopulated = False + messageItems = [] messageItems = ( gv_backend.decorate_message(message) for message in gv_backend.sort_messages(messageItems) + if self._filter_messages(message, self._messageType, self._messageStatus) ) for contactId, header, number, relativeDate, messages in messageItems: @@ -1339,6 +1396,48 @@ class MessagesView(object): except Exception, e: self._errorDisplay.push_exception() + def _on_message_type_clicked(self, *args, **kwds): + try: + selectedIndex = self.MESSAGE_TYPES.index(self._messageType) + + try: + newSelectedIndex = hildonize.touch_selector( + self._window, + "Message Type", + self.MESSAGE_TYPES, + selectedIndex, + ) + except RuntimeError: + return + + if selectedIndex != newSelectedIndex: + self._messageType = self.MESSAGE_TYPES[newSelectedIndex] + self._messageTypeButton.set_label(self._messageType) + self.update(True) + except Exception, e: + self._errorDisplay.push_exception() + + def _on_message_status_clicked(self, *args, **kwds): + try: + selectedIndex = self.MESSAGE_STATUSES.index(self._messageStatus) + + try: + newSelectedIndex = hildonize.touch_selector( + self._window, + "Message Status", + self.MESSAGE_STATUSES, + selectedIndex, + ) + except RuntimeError: + return + + if selectedIndex != newSelectedIndex: + self._messageStatus = self.MESSAGE_STATUSES[newSelectedIndex] + self._messageStatusButton.set_label(self._messageStatus) + self.update(True) + except Exception, e: + self._errorDisplay.push_exception() + class ContactsView(object):