import util.go_utils as gobject_utils
import util.coroutines as coroutines
+import gtk_toolbox
import handle
def __init__(self, connection, h):
AbstractListChannel.__init__(self, connection, h)
+ self._callback = coroutines.func_sink(
+ coroutines.expand_positional(
+ self._on_contacts_refreshed
+ )
+ )
self._session.addressbook.updateSignalHandler.register_sink(
- self._on_contacts_refreshed
+ self._callback
)
self.GroupFlagsChanged(0, 0)
- @coroutines.func_sink
- @coroutines.expand_positional
+ addressbook = connection.session.addressbook
+ contacts = addressbook.get_contacts()
+ self._process_refresh(addressbook, contacts, [])
+
+ @gtk_toolbox.log_exception(_moduleLogger)
+ def Close(self):
+ telepathy.server.ChannelTypeContactList.Close(self)
+ self.remove_from_connection()
+ self._session.addressbook.updateSignalHandler.unregister_sink(
+ self._callback
+ )
+
@gobject_utils.async
+ @gtk_toolbox.log_exception(_moduleLogger)
def _on_contacts_refreshed(self, addressbook, added, removed, changed):
- """
- @todo This currently filters out people not yet added to the contact
- list. Something needs to be done about those
- @todo This currently does not handle people with multiple phone
- numbers, yay that'll be annoying to resolve
- """
+ self._process_refresh(addressbook, added, removed)
+
+ def _process_refresh(self, addressbook, added, removed):
connection = self._conn
handlesAdded = [
- handle.create_handle(connection, "contact", contactId)
+ handle.create_handle(connection, "contact", contactId, phoneNumber)
for contactId in added
- if contactId
+ for (phoneType, phoneNumber) in addressbook.get_contact_details(contactId)
]
handlesRemoved = [
- handle.create_handle(connection, "contact", contactId)
+ handle.create_handle(connection, "contact", contactId, phoneNumber)
for contactId in removed
- if contactId
+ for (phoneType, phoneNumber) in addressbook.get_contact_details(contactId)
]
message = ""
actor = 0