From: Ed Page Date: Sat, 29 May 2010 00:43:02 +0000 (-0500) Subject: Adding ConnectionInterfaceContactCapabilities, bringing ourselves inline with butterfly X-Git-Url: http://vcs.maemo.org/git/?a=commitdiff_plain;h=18967f124fe4ddd1db6c8dfffcd20c915dd43d5c;hp=c6c19d3806952ece8a1c0823cb2c55dac11db865;p=theonering Adding ConnectionInterfaceContactCapabilities, bringing ourselves inline with butterfly See """ capabilities: implement ContactCapabilities """ and """ contacts: add ContactCapabilities contact attributes """ --- diff --git a/src/capabilities.py b/src/capabilities.py index 9657b8b..a64c38b 100644 --- a/src/capabilities.py +++ b/src/capabilities.py @@ -1,15 +1,20 @@ import logging +import dbus import telepathy import tp +from tp._generated import Connection_Interface_Contact_Capabilities import util.misc as misc_utils _moduleLogger = logging.getLogger(__name__) -class CapabilitiesMixin(tp.ConnectionInterfaceCapabilities): +class CapabilitiesMixin( + tp.ConnectionInterfaceCapabilities, + Connection_Interface_Contact_Capabilities.ConnectionInterfaceContactCapabilities, +): _CAPABILITIES = { telepathy.CHANNEL_TYPE_TEXT: ( @@ -23,8 +28,45 @@ class CapabilitiesMixin(tp.ConnectionInterfaceCapabilities): ), } + text_chat_class = ( + { + telepathy.CHANNEL_INTERFACE + '.ChannelType': telepathy.CHANNEL_TYPE_TEXT, + telepathy.CHANNEL_INTERFACE + '.TargetHandleType': dbus.UInt32(telepathy.HANDLE_TYPE_CONTACT), + }, + [ + telepathy.CHANNEL_INTERFACE + '.TargetHandle', + telepathy.CHANNEL_INTERFACE + '.TargetID', + ], + ) + + audio_chat_class = ( + { + telepathy.CHANNEL_INTERFACE + '.ChannelType': telepathy.CHANNEL_TYPE_STREAMED_MEDIA, + telepathy.CHANNEL_INTERFACE + '.TargetHandleType': dbus.UInt32(telepathy.HANDLE_TYPE_CONTACT), + }, + [ + telepathy.CHANNEL_INTERFACE + '.TargetHandle', + telepathy.CHANNEL_INTERFACE + '.TargetID', + telepathy.CHANNEL_TYPE_STREAMED_MEDIA + '.InitialAudio', + ], + ) + + av_chat_class = ( + { + telepathy.CHANNEL_INTERFACE + '.ChannelType': telepathy.CHANNEL_TYPE_STREAMED_MEDIA, + telepathy.CHANNEL_INTERFACE + '.TargetHandleType': dbus.UInt32(telepathy.HANDLE_TYPE_CONTACT), + }, + [ + telepathy.CHANNEL_INTERFACE + '.TargetHandle', + telepathy.CHANNEL_INTERFACE + '.TargetID', + telepathy.CHANNEL_TYPE_STREAMED_MEDIA + '.InitialAudio', + telepathy.CHANNEL_TYPE_STREAMED_MEDIA + '.InitialVideo', + ], + ) + def __init__(self): tp.ConnectionInterfaceCapabilities.__init__(self) + Connection_Interface_Contact_Capabilities.ConnectionInterfaceContactCapabilities.__init__(self) def get_handle_by_id(self, handleType, handleId): """ @@ -43,3 +85,21 @@ class CapabilitiesMixin(tp.ConnectionInterfaceCapabilities): for type, (gen, spec) in self._CAPABILITIES.iteritems(): ret.append([handleId, type, gen, spec]) return ret + + def GetContactCapabilities(self, handles): + if 0 in handles: + raise telepathy.InvalidHandle('Contact handle list contains zero') + + ret = dbus.Dictionary({}, signature='ua(a{sv}as)') + for i in handles: + handle = self.get_handle_by_id(telepathy.HANDLE_TYPE_CONTACT, i) + contactCapabilities = dbus.Dictionary( + (self.text_chat_class, self.audio_chat_class), + signature="sv", + ) + ret[handle] = dbus.Array(contactCapabilities, signature='(a{sv}as)') + + return ret + + def UpdateCapabilities(self, caps): + _moduleLogger.info("Ignoring updating contact capabilities") diff --git a/src/contacts.py b/src/contacts.py index 340ca11..41aca94 100644 --- a/src/contacts.py +++ b/src/contacts.py @@ -15,7 +15,9 @@ class ContactsMixin(telepathy.server.ConnectionInterfaceContacts): telepathy.CONNECTION : 'contact-id', telepathy.CONNECTION_INTERFACE_SIMPLE_PRESENCE : 'presence', telepathy.CONNECTION_INTERFACE_ALIASING : 'alias', + telepathy.CONNECTION_INTERFACE_AVATARS : 'token', telepathy.CONNECTION_INTERFACE_CAPABILITIES : 'caps', + telepathy.CONNECTION_INTERFACE_CONTACT_CAPABILITIES : 'capabilities' } def __init__(self): @@ -58,8 +60,12 @@ class ContactsMixin(telepathy.server.ConnectionInterfaceContacts): lambda x: self.GetPresences(x).items(), telepathy.CONNECTION_INTERFACE_ALIASING: lambda x: self.GetAliases(x).items(), + telepathy.CONNECTION_INTERFACE_AVATARS : + lambda x: self.GetKnownAvatarTokens(x).items(), telepathy.CONNECTION_INTERFACE_CAPABILITIES: lambda x: self.GetCapabilities(x).items(), + telepathy.CONNECTION_INTERFACE_CONTACT_CAPABILITIES : + lambda x: self.GetContactCapabilities(x).items() } #Hold handles if needed