X-Git-Url: http://git.maemo.org/git/?p=theonering;a=blobdiff_plain;f=src%2Fcapabilities.py;h=a64c38bb0456deff522d99714f1d4def464acc74;hp=7474eb0227029ac76ee82e7b37601e256eb8507c;hb=8b82af9fd3b9e5346282f0d8e66ed16e036bbdfb;hpb=1c892d1b9bf14b28eb54ce3590ed2ee29d5e3d25 diff --git a/src/capabilities.py b/src/capabilities.py index 7474eb0..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('capabilities') +_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")