From: epage Date: Thu, 12 Nov 2009 02:23:15 +0000 (+0000) Subject: Speeding up contact filtering and cleaning up the contacts view X-Git-Url: http://vcs.maemo.org/git/?a=commitdiff_plain;h=a4bb9d006a5bc6c0426f9a1df5726329c4e83689;p=gc-dialer Speeding up contact filtering and cleaning up the contacts view git-svn-id: file:///svnroot/gc-dialer/trunk@567 c39d3808-3fe2-4d86-a59f-b7f623ee9f21 --- diff --git a/src/gv_views.py b/src/gv_views.py index 5430c59..7b1e0f4 100644 --- a/src/gv_views.py +++ b/src/gv_views.py @@ -1154,6 +1154,7 @@ class MessagesView(object): MESSAGE_IDX = 3 MESSAGES_IDX = 4 FROM_ID_IDX = 5 + MESSAGE_DATA_IDX = 6 NO_MESSAGES = "None" VOICEMAIL_MESSAGES = "Voicemail" @@ -1178,7 +1179,10 @@ class MessagesView(object): gobject.TYPE_STRING, # message object, # messages gobject.TYPE_STRING, # from id + object, # message data ) + self._messagemodelfiltered = self._messagemodel.filter_new() + self._messagemodelfiltered.set_visible_func(self._is_message_visible) self._messageview = widgetTree.get_widget("messages_view") self._messageviewselection = None self._onMessageviewRowActivatedId = 0 @@ -1210,7 +1214,7 @@ class MessagesView(object): def enable(self): assert self._backend.is_authed(), "Attempting to enable backend while not logged in" - self._messageview.set_model(self._messagemodel) + self._messageview.set_model(self._messagemodelfiltered) self._messageview.set_headers_visible(False) self._messageview.set_fixed_height_mode(False) @@ -1279,7 +1283,14 @@ class MessagesView(object): config.set(sectionName, "status", self._messageStatus) config.set(sectionName, "type", self._messageType) - _MIN_MESSAGES_SHOWN = 4 + def _is_message_visible(self, model, iter): + try: + message = model.get_value(iter, self.MESSAGE_DATA_IDX) + if message is None: + return False # this seems weird but oh well + return self._filter_messages(message, self._messageType, self._messageStatus) + except Exception, e: + self._errorDisplay.push_exception() @classmethod def _filter_messages(cls, message, type, status): @@ -1303,6 +1314,8 @@ class MessagesView(object): return isType and isStatus + _MIN_MESSAGES_SHOWN = 4 + def _idly_populate_messageview(self): with gtk_toolbox.gtk_lock(): banner = hildonize.show_busy_banner_start(self._window, "Loading Messages") @@ -1321,12 +1334,11 @@ class MessagesView(object): messageItems = [] messageItems = ( - gv_backend.decorate_message(message) + (gv_backend.decorate_message(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: + for (contactId, header, number, relativeDate, messages), messageData in messageItems: prettyNumber = number[2:] if number.startswith("+1") else number prettyNumber = make_pretty(prettyNumber) @@ -1344,7 +1356,7 @@ class MessagesView(object): number = make_ugly(number) - row = number, relativeDate, header, "\n".join(collapsedMessages), expandedMessages, contactId + row = number, relativeDate, header, "\n".join(collapsedMessages), expandedMessages, contactId, messageData with gtk_toolbox.gtk_lock(): self._messagemodel.append(row) except Exception, e: @@ -1352,6 +1364,7 @@ class MessagesView(object): finally: with gtk_toolbox.gtk_lock(): hildonize.show_busy_banner_end(banner) + self._messagemodelfiltered.refilter() return False @@ -1417,7 +1430,7 @@ class MessagesView(object): if selectedIndex != newSelectedIndex: self._messageType = self.MESSAGE_TYPES[newSelectedIndex] self._messageTypeButton.set_label(self._messageType) - self.update(True) + self._messagemodelfiltered.refilter() except Exception, e: self._errorDisplay.push_exception() @@ -1438,13 +1451,17 @@ class MessagesView(object): if selectedIndex != newSelectedIndex: self._messageStatus = self.MESSAGE_STATUSES[newSelectedIndex] self._messageStatusButton.set_label(self._messageStatus) - self.update(True) + self._messagemodelfiltered.refilter() except Exception, e: self._errorDisplay.push_exception() class ContactsView(object): + CONTACT_TYPE_IDX = 0 + CONTACT_NAME_IDX = 1 + CONTACT_ID_IDX = 2 + def __init__(self, widgetTree, backend, errorDisplay): self._errorDisplay = errorDisplay self._backend = backend @@ -1457,7 +1474,11 @@ class ContactsView(object): self._bookSelectionButton = widgetTree.get_widget("addressbookSelectButton") self._isPopulated = False - self._contactsmodel = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING) + self._contactsmodel = gtk.ListStore( + gobject.TYPE_STRING, # Contact Type + gobject.TYPE_STRING, # Contact Name + gobject.TYPE_STRING, # Contact ID + ) self._contactsviewselection = None self._contactsview = widgetTree.get_widget("contactsview") @@ -1466,14 +1487,11 @@ class ContactsView(object): if displayContactSource: textrenderer = gtk.CellRendererText() self._contactColumn.pack_start(textrenderer, expand=False) - self._contactColumn.add_attribute(textrenderer, 'text', 0) + self._contactColumn.add_attribute(textrenderer, 'text', self.CONTACT_TYPE_IDX) textrenderer = gtk.CellRendererText() hildonize.set_cell_thumb_selectable(textrenderer) self._contactColumn.pack_start(textrenderer, expand=True) - self._contactColumn.add_attribute(textrenderer, 'text', 1) - textrenderer = gtk.CellRendererText() - self._contactColumn.pack_start(textrenderer, expand=True) - self._contactColumn.add_attribute(textrenderer, 'text', 4) + self._contactColumn.add_attribute(textrenderer, 'text', self.CONTACT_NAME_IDX) self._contactColumn.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED) self._contactColumn.set_sort_column_id(1) self._contactColumn.set_visible(True) @@ -1602,8 +1620,9 @@ class ContactsView(object): self._isPopulated = False self._errorDisplay.push_exception_with_lock() for contactId, contactName in contacts: - contactType = (addressBook.contact_source_short_name(contactId), ) - self._contactsmodel.append(contactType + (contactName, "", contactId) + ("", )) + contactType = addressBook.contact_source_short_name(contactId) + row = contactType, contactName, contactId + self._contactsmodel.append(row) with gtk_toolbox.gtk_lock(): self._contactsview.set_model(self._contactsmodel) @@ -1647,8 +1666,8 @@ class ContactsView(object): if not itr: return - contactId = self._contactsmodel.get_value(itr, 3) - contactName = self._contactsmodel.get_value(itr, 1) + contactId = self._contactsmodel.get_value(itr, self.CONTACT_ID_IDX) + contactName = self._contactsmodel.get_value(itr, self.CONTACT_NAME_IDX) try: contactDetails = self._addressBook.get_contact_details(contactId) except Exception, e: diff --git a/support/builddeb.py b/support/builddeb.py index 842c30c..09958d9 100755 --- a/support/builddeb.py +++ b/support/builddeb.py @@ -200,8 +200,8 @@ __changelog__ = """ __postinstall__ = """#!/bin/sh -e gtk-update-icon-cache -f /usr/share/icons/hicolor -rm -f %s/dialcentral.log -""" % constants._data_path_ +rm -f ~/.dialcentral/dialcentral.log +""" __preremove__ = """#!/bin/sh -e