- def _get_capabilities(self, handle, ctype):
- gen_caps = 0
- spec_caps = 0
-
- gen_caps |= telepathy.CONNECTION_CAPABILITY_FLAG_CREATE
- gen_caps |= telepathy.CONNECTION_CAPABILITY_FLAG_INVITE
- spec_caps |= telepathy.CHANNEL_MEDIA_CAPABILITY_AUDIO
-
- return gen_caps, spec_caps
+ @gtk_toolbox.log_exception(_moduleLogger)
+ def AdvertiseCapabilities(self, add, remove):
+ """
+ @todo HACK Remove this once we are building against a fixed version of python-telepathy
+ """
+ my_caps = self._caps.setdefault(self.GetSelfHandle(), {})
+
+ changed = {}
+ for ctype, spec_caps in add:
+ changed[ctype] = spec_caps
+ for ctype in remove:
+ changed[ctype] = None
+
+ caps = []
+ for ctype, spec_caps in changed.iteritems():
+ gen_old, spec_old = my_caps.get(ctype, (0, 0))
+ if spec_caps is None:
+ # channel type no longer supported (provider has gone away)
+ gen_new, spec_new = 0, 0
+ else:
+ # channel type supports new capabilities
+ gen_new, spec_new = gen_old, spec_old | spec_caps
+ if spec_old != spec_new or gen_old != gen_new:
+ caps.append((self.GetSelfHandle(), ctype, gen_old, gen_new,
+ spec_old, spec_new))
+
+ self.CapabilitiesChanged(caps)
+ _moduleLogger.info("CapsChanged %r" % self._caps)
+
+ # return all my capabilities
+ ret = [(ctype, caps[1]) for ctype, caps in my_caps.iteritems()]
+ return ret