7 from tp._generated import Connection_Interface_Contact_Capabilities
8 import util.misc as misc_utils
11 _moduleLogger = logging.getLogger(__name__)
14 class CapabilitiesMixin(
15 tp.ConnectionInterfaceCapabilities,
16 Connection_Interface_Contact_Capabilities.ConnectionInterfaceContactCapabilities,
20 telepathy.CHANNEL_TYPE_TEXT: (
21 telepathy.CONNECTION_CAPABILITY_FLAG_CREATE,
24 telepathy.CHANNEL_TYPE_STREAMED_MEDIA: (
25 telepathy.CONNECTION_CAPABILITY_FLAG_CREATE |
26 telepathy.CONNECTION_CAPABILITY_FLAG_INVITE,
27 telepathy.CHANNEL_MEDIA_CAPABILITY_AUDIO,
33 telepathy.CHANNEL_INTERFACE + '.ChannelType': telepathy.CHANNEL_TYPE_TEXT,
34 telepathy.CHANNEL_INTERFACE + '.TargetHandleType': dbus.UInt32(telepathy.HANDLE_TYPE_CONTACT),
37 telepathy.CHANNEL_INTERFACE + '.TargetHandle',
38 telepathy.CHANNEL_INTERFACE + '.TargetID',
44 telepathy.CHANNEL_INTERFACE + '.ChannelType': telepathy.CHANNEL_TYPE_STREAMED_MEDIA,
45 telepathy.CHANNEL_INTERFACE + '.TargetHandleType': dbus.UInt32(telepathy.HANDLE_TYPE_CONTACT),
48 telepathy.CHANNEL_INTERFACE + '.TargetHandle',
49 telepathy.CHANNEL_INTERFACE + '.TargetID',
50 telepathy.CHANNEL_TYPE_STREAMED_MEDIA + '.InitialAudio',
56 telepathy.CHANNEL_INTERFACE + '.ChannelType': telepathy.CHANNEL_TYPE_STREAMED_MEDIA,
57 telepathy.CHANNEL_INTERFACE + '.TargetHandleType': dbus.UInt32(telepathy.HANDLE_TYPE_CONTACT),
60 telepathy.CHANNEL_INTERFACE + '.TargetHandle',
61 telepathy.CHANNEL_INTERFACE + '.TargetID',
62 telepathy.CHANNEL_TYPE_STREAMED_MEDIA + '.InitialAudio',
63 telepathy.CHANNEL_TYPE_STREAMED_MEDIA + '.InitialVideo',
68 tp.ConnectionInterfaceCapabilities.__init__(self)
69 Connection_Interface_Contact_Capabilities.ConnectionInterfaceContactCapabilities.__init__(self)
71 def get_handle_by_id(self, handleType, handleId):
75 raise NotImplementedError("Abstract function called")
77 @misc_utils.log_exception(_moduleLogger)
78 def GetCapabilities(self, handleIds):
80 for handleId in handleIds:
81 if handleId != 0 and (telepathy.HANDLE_TYPE_CONTACT, handleId) not in self._handles:
82 raise telepathy.errors.InvalidHandle
84 h = self.get_handle_by_id(telepathy.HANDLE_TYPE_CONTACT, handleId)
85 for type, (gen, spec) in self._CAPABILITIES.iteritems():
86 ret.append([handleId, type, gen, spec])
89 @misc_utils.log_exception(_moduleLogger)
90 def GetContactCapabilities(self, handles):
92 raise telepathy.InvalidHandle('Contact handle list contains zero')
94 ret = dbus.Dictionary({}, signature='ua(a{sv}as)')
96 handle = self.get_handle_by_id(telepathy.HANDLE_TYPE_CONTACT, i)
97 contactCapabilities = (self.text_chat_class, self.audio_chat_class)
98 ret[handle] = dbus.Array(contactCapabilities, signature='(a{sv}as)')
102 @misc_utils.log_exception(_moduleLogger)
103 def UpdateCapabilities(self, caps):
104 _moduleLogger.info("Ignoring updating contact capabilities")