summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKrzysztof Klinikowski <kkszysiu@gmail.com>2011-05-26 07:53:39 +0200
committerKrzysztof Klinikowski <kkszysiu@gmail.com>2011-05-26 07:53:39 +0200
commitb9e685628bbcdb70203b9a3602165635b7654078 (patch)
tree98d2e230e275a071de705391b9fe3f22008dd076
parent47ec46481608a24412b8d1f3643d514bfe2490a4 (diff)
Contact list code cleanup.
-rw-r--r--sunshine/channel/contact_list.py280
1 files changed, 3 insertions, 277 deletions
diff --git a/sunshine/channel/contact_list.py b/sunshine/channel/contact_list.py
index e525ca7..0e22d49 100644
--- a/sunshine/channel/contact_list.py
+++ b/sunshine/channel/contact_list.py
@@ -37,68 +37,6 @@ __all__ = ['SunshineContactListChannelFactory']
logger = logging.getLogger('Sunshine.ContactListChannel')
-"""
-class HandleMutex(object):
- def __init__(self):
- self._handles = set()
- self._keys = {}
- self._callbacks = {}
-
- def is_locked(self, handle):
- return (handle in self._handles)
-
- def is_owned(self, key, handle):
- return (handle in self._handles and self._keys[handle] == key)
-
- def lock(self, key, handle):
- if self.is_locked(handle):
- return False
- self._handles.add(handle)
- self._keys[handle] = key
- return True
-
- def unlock(self, key, handle):
- if not self.is_owned(key, handle):
- return
- self._handles.remove(handle)
- del self._keys[handle]
- callbacks = self._callbacks.get(handle, [])[:]
- self._callbacks[handle] = []
- for callback in callbacks:
- callback[0](*callback[1:])
-
- def add_callback(self, key, handle, callback):
- if self.is_owned(key, handle):
- return
- if not self.is_locked(handle):
- callback[0](*callback[1:])
- else:
- self._callbacks.setdefault(handle, []).append(callback)
-
-class Lockable(object):
- def __init__(self, mutex, key, cb_name):
- self._mutex = mutex
- self._key = key
- self._cb_name = cb_name
-
- def __call__(self, func):
- def method(object, handle, *args, **kwargs):
- def finished_cb(*user_data):
- self._mutex.unlock(self._key, handle)
-
- def unlocked_cb():
- self._mutex.lock(self._key, handle)
- kwargs[self._cb_name] = finished_cb
- if func(object, handle, *args, **kwargs):
- finished_cb()
-
- self._mutex.add_callback(self._key, handle, (unlocked_cb,))
-
- return method
-
-mutex = HandleMutex()
-"""
-
def SunshineContactListChannelFactory(connection, manager, handle, props):
handle = connection.handle(
props[telepathy.CHANNEL_INTERFACE + '.TargetHandleType'],
@@ -138,42 +76,6 @@ class SunshineListChannel(
def GetLocalPendingMembersWithInfo(self):
return []
- # papyon.event.AddressBookEventInterface
- def on_addressbook_contact_added(self, contact):
- added = set()
- local_pending = set()
- remote_pending = set()
-
- ad, lp, rp = self._filter_contact(contact)
- if ad or lp or rp:
- handle = ButterflyHandleFactory(self._conn_ref(), 'contact',
- contact.account, contact.network_id)
- if ad: added.add(handle)
- if lp: local_pending.add(handle)
- if rp: remote_pending.add(handle)
- msg = contact.attributes.get('invite_message', '')
- self.MembersChanged(msg, added, (), local_pending, remote_pending, 0,
- telepathy.CHANNEL_GROUP_CHANGE_REASON_NONE)
-
- # papyon.event.AddressBookEventInterface
- def on_addressbook_contact_deleted(self, contact):
- handle = ButterflyHandleFactory(self._conn_ref(), 'contact',
- contact.account, contact.network_id)
- ad, lp, rp = self._filter_contact(contact)
- if self._contains_handle(handle) and not ad:
- self.MembersChanged('', (), [handle], (), (), 0,
- telepathy.CHANNEL_GROUP_CHANGE_REASON_NONE)
-
- # papyon.event.AddressBookEventInterface
- def on_addressbook_contact_blocked(self, contact):
- pass
-
- # papyon.event.AddressBookEventInterface
- def on_addressbook_contact_unblocked(self, contact):
- pass
-
- #@async
- #@defer.inlineCallbacks
def _populate(self, connection):
added = set()
local_pending = set()
@@ -223,192 +125,14 @@ class SunshineSubscribeListChannel(SunshineListChannel):
for h in contacts:
self._add(h, message)
-
- """
- for h in contacts:
- handle = self._conn.handle(telepathy.constants.HANDLE_TYPE_CONTACT, h)
- contact_xml = ET.Element("Contact")
- ET.SubElement(contact_xml, "Guid").text = str(handle.name)
- ET.SubElement(contact_xml, "GGNumber").text = str(handle.name)
- ET.SubElement(contact_xml, "ShowName").text = str(handle.name)
- ET.SubElement(contact_xml, "Groups")
- c = GaduContact.from_xml(contact_xml)
- self._conn_ref().gadu_client.addContact( c )
- #config.addNewContact( c )
- self._conn_ref().gadu_client.notifyAboutContact( c )
- logger.info("Adding contact: %s" % (handle.name))
- self.MembersChanged('', [handle], (), (), (), 0,
- telepathy.CHANNEL_GROUP_CHANGE_REASON_INVITED)
-
- #alias and group settings for new contacts are bit tricky
- #try to set alias
- handle.contact.ShowName = self._conn_ref().get_contact_alias(handle.id)
- #and group
- if self._conn_ref().pending_contacts_to_group.has_key(handle.name):
- logger.info("Trying to add temporary group.")
- #print str(self._conn_ref().pending_contacts_to_group)
- #print str(self._conn_ref().pending_contacts_to_group[handle.name])
- handle.contact.updateGroups(self._conn_ref().pending_contacts_to_group[handle.name])
- self._conn_ref().contactAdded(handle)
- logger.info("Contact added.")
-<<<<<<< HEAD
-
- def RemoveMembers(self, contacts, message):
- for h in contacts:
- handle = self._conn.handle(telepathy.HANDLE_TYPE_CONTACT, h)
- contact = handle.contact
- self._conn_ref().gadu_client.removeContact(contact, notify=True)
- self.MembersChanged('', (), [handle], (), (), 0,
- telepathy.CHANNEL_GROUP_CHANGE_REASON_NONE)
-=======
- self._conn_ref().exportContactsFile()
- """
-
def RemoveMembers(self, contacts, message):
for h in contacts:
self._remove(h)
-
- """
- for h in contacts:
- handle = self._conn.handle(telepathy.HANDLE_TYPE_CONTACT, h)
- contact = handle.contact
- self._conn_ref().gadu_client.removeContact(contact, notify=True)
- self.MembersChanged('', (), [handle], (), (), 0,
- telepathy.CHANNEL_GROUP_CHANGE_REASON_NONE)
self._conn_ref().exportContactsFile()
- """
def _filter_contact(self, contact):
return (True, False, False)
-
- #@Lockable(mutex, 'add_subscribe', 'finished_cb')
-# def _add(self, handle_id, message, finished_cb):
-# logger.info("Subscribe - Add Members called.")
-# handle = self._conn.handle(telepathy.HANDLE_TYPE_CONTACT, handle_id)
-# if handle.contact is not None and \
-# handle.contact.is_member(papyon.Membership.FORWARD):
-# return True
-#
-# account = handle.account
-# network = handle.network
-# groups = list(handle.pending_groups)
-# handle.pending_groups = set()
-# ab = self._conn.msn_client.address_book
-# ab.add_messenger_contact(account,
-# network_id=network,
-# auto_allow=False,
-# invite_message=message.encode('utf-8'),
-# groups=groups,
-# done_cb=(finished_cb,),
-# failed_cb=(finished_cb,))
-
- #@Lockable(mutex, 'rem_subscribe', 'finished_cb')
- @defer.inlineCallbacks
- def _remove(self, handle_id, finished_cb):
- handle = self._conn.handle(telepathy.HANDLE_TYPE_CONTACT, handle_id)
- contact = handle.contact
- if contact is None or not contact.is_member(papyon.Membership.FORWARD):
- return True
- ab = self._conn.msn_client.address_book
- ab.delete_contact(contact, done_cb=(finished_cb,),
- failed_cb=(finished_cb,))
-
- # papyon.event.ContactEventInterface
- def on_contact_memberships_changed(self, contact):
- handle = ButterflyHandleFactory(self._conn_ref(), 'contact',
- contact.account, contact.network_id)
- if contact.is_member(papyon.Membership.FORWARD):
- self.MembersChanged('', [handle], (), (), (), 0,
- telepathy.CHANNEL_GROUP_CHANGE_REASON_INVITED)
- if len(handle.pending_groups) > 0:
- ab = self._conn.msn_client.address_book
- for group in handle.pending_groups:
- ab.add_contact_to_group(group, contact)
- handle.pending_groups = set()
-
-#
-#class ButterflyPublishListChannel(ButterflyListChannel,
-# papyon.event.ContactEventInterface):
-#
-# def __init__(self, connection, manager, props):
-# ButterflyListChannel.__init__(self, connection, manager, props)
-# papyon.event.ContactEventInterface.__init__(self, connection.msn_client)
-# self.GroupFlagsChanged(0, 0)
-#
-# def AddMembers(self, contacts, message):
-# for handle_id in contacts:
-# self._add(handle_id, message)
-#
-# def RemoveMembers(self, contacts, message):
-# for handle_id in contacts:
-# self._remove(handle_id)
-#
-# def GetLocalPendingMembersWithInfo(self):
-# result = []
-# for contact in self._conn.msn_client.address_book.contacts:
-# if not contact.is_member(papyon.Membership.PENDING):
-# continue
-# handle = ButterflyHandleFactory(self._conn_ref(), 'contact',
-# contact.account, contact.network_id)
-# result.append((handle, handle,
-# telepathy.CHANNEL_GROUP_CHANGE_REASON_INVITED,
-# contact.attributes.get('invite_message', '')))
-# return result
-#
-# def _filter_contact(self, contact):
-# return (contact.is_member(papyon.Membership.ALLOW),
-# contact.is_member(papyon.Membership.PENDING),
-# False)
-#
-# @Lockable(mutex, 'add_publish', 'finished_cb')
-# def _add(self, handle_id, message, finished_cb):
-# handle = self._conn.handle(telepathy.HANDLE_TYPE_CONTACT, handle_id)
-# contact = handle.contact
-# if contact is not None and contact.is_member(papyon.Membership.ALLOW):
-# return True
-#
-# account = handle.account
-# network = handle.network
-# ab = self._conn.msn_client.address_book
-# if contact is not None and contact.is_member(papyon.Membership.PENDING):
-# ab.accept_contact_invitation(contact, False,
-# done_cb=(finished_cb,), failed_cb=(finished_cb,))
-# else:
-# ab.allow_contact(account, network,
-# done_cb=(finished_cb,), failed_cb=(finished_cb,))
-#
-# @Lockable(mutex, 'rem_publish', 'finished_cb')
-# def _remove(self, handle_id, finished_cb):
-# handle = self._conn.handle(telepathy.HANDLE_TYPE_CONTACT, handle_id)
-# contact = handle.contact
-# ab = self._conn.msn_client.address_book
-# if contact.is_member(papyon.Membership.PENDING):
-# ab.decline_contact_invitation(contact, False, done_cb=finished_cb,
-# failed_cb=finished_cb)
-# elif contact.is_member(papyon.Membership.ALLOW):
-# ab.disallow_contact(contact, done_cb=(finished_cb,),
-# failed_cb=(finished_cb,))
-# else:
-# return True
-#
-# # papyon.event.ContactEventInterface
-# def on_contact_memberships_changed(self, contact):
-# handle = ButterflyHandleFactory(self._conn_ref(), 'contact',
-# contact.account, contact.network_id)
-# if self._contains_handle(handle):
-# if contact.is_member(papyon.Membership.PENDING):
-# # Nothing worth our attention
-# return
-#
-# if contact.is_member(papyon.Membership.ALLOW):
-# # Contact accepted
-# self.MembersChanged('', [handle], (), (), (), 0,
-# telepathy.CHANNEL_GROUP_CHANGE_REASON_INVITED)
-# else:
-# # Contact rejected
-# self.MembersChanged('', (), [handle], (), (), 0,
-# telepathy.CHANNEL_GROUP_CHANGE_REASON_NONE)
def _add(self, handle_id, message):
handle = self._conn.handle(telepathy.HANDLE_TYPE_CONTACT, handle_id)
if handle.contact is not None:
@@ -440,8 +164,10 @@ class SunshineSubscribeListChannel(SunshineListChannel):
def _remove(self, handle_id):
handle = self._conn.handle(telepathy.HANDLE_TYPE_CONTACT, h)
contact = handle.contact
+ if contact is None:
+ return True
+ logger.info("Removing contact: %s" % (handle.name))
self._conn_ref().gadu_client.removeContact(contact, notify=True)
self.MembersChanged('', (), [handle], (), (), 0,
telepathy.CHANNEL_GROUP_CHANGE_REASON_NONE)
#self._conn_ref().exportContactsFile()
-