diff options
author | Krzysztof Klinikowski <kkszysiu@gmail.com> | 2010-05-27 01:06:55 +0200 |
---|---|---|
committer | Krzysztof Klinikowski <kkszysiu@gmail.com> | 2010-05-27 01:06:55 +0200 |
commit | 687fcd66f074974aefde7d3bd879cbb4065fedb4 (patch) | |
tree | 9a36be86bb6da5fb77fa33cb304696b53cc432e1 /sunshine | |
parent | 4fdbc7a2a0f0735e2f616009bf7491e033e6b63e (diff) |
channel: add SunshineChannel class to deal with Initiator props, from http://git.collabora.co.uk/?p=telepathy-butterfly.git;a=commit;h=eb4ec881377241f49d757af88e5af1f3e1ee4bca
Diffstat (limited to 'sunshine')
-rw-r--r-- | sunshine/channel/__init__.py | 44 | ||||
-rw-r--r-- | sunshine/channel/contact_list.py | 3 | ||||
-rw-r--r-- | sunshine/channel/text.py | 5 |
3 files changed, 51 insertions, 1 deletions
diff --git a/sunshine/channel/__init__.py b/sunshine/channel/__init__.py index 7a6b8a1..a789748 100644 --- a/sunshine/channel/__init__.py +++ b/sunshine/channel/__init__.py @@ -16,3 +16,47 @@ # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +import logging +import dbus + +import telepathy + +from sunshine.handle import SunshineHandleFactory + +__all__ = ['SunshineChannel'] + +logger = logging.getLogger('Sunshine.Channel') + +class SunshineChannel(object): + def __init__(self, conn, props): + # If we have InitiatorHandle set in our new channel, use that, + if telepathy.CHANNEL_INTERFACE + '.InitiatorHandle' in props: + self._initiator = conn.handle(telepathy.HANDLE_TYPE_CONTACT, + props[telepathy.CHANNEL_INTERFACE + '.InitiatorHandle']) + + # otherwise use InitiatorID. + elif telepathy.CHANNEL_INTERFACE + '.InitiatorID' in props: + self._initiator = ButterflyHandleFactory(conn, 'contact', + id=props[telepathy.CHANNEL_INTERFACE + '.InitiatorID']) + + # If we don't have either of the above but we requested the channel, + # then we're the initiator. + elif props[telepathy.CHANNEL_INTERFACE + '.Requested']: + self._initiator = conn.GetSelfHandle() + + else: + logger.warning('InitiatorID or InitiatorHandle not set on new channel') + self._initiator = None + + # Don't implement the initiator properties if we don't have one. + if self._initiator: + self._implement_property_get(telepathy.CHANNEL_INTERFACE, { + 'InitiatorHandle': lambda: dbus.UInt32(self._initiator.id), + 'InitiatorID': lambda: self._initiator.name + }) + + self._add_immutables({ + 'InitiatorHandle': telepathy.CHANNEL_INTERFACE, + 'InitiatorID': telepathy.CHANNEL_INTERFACE, + }) diff --git a/sunshine/channel/contact_list.py b/sunshine/channel/contact_list.py index e942a03..5ea2175 100644 --- a/sunshine/channel/contact_list.py +++ b/sunshine/channel/contact_list.py @@ -26,6 +26,7 @@ import xml.etree.ElementTree as ET from sunshine.util.decorator import async from sunshine.handle import SunshineHandleFactory +from sunshine.channel import SunshineChannel from sunshine.lqsoft.pygadu.twisted_protocol import GaduClient from sunshine.lqsoft.pygadu.models import GaduProfile, GaduContact @@ -120,6 +121,7 @@ def SunshineContactListChannelFactory(connection, manager, handle, props): class SunshineListChannel( + SunshineChannel, telepathy.server.ChannelTypeContactList, telepathy.server.ChannelInterfaceGroup): "Abstract Contact List channels" @@ -127,6 +129,7 @@ class SunshineListChannel( def __init__(self, connection, manager, props, object_path=None): self._conn_ref = weakref.ref(connection) telepathy.server.ChannelTypeContactList.__init__(self, connection, manager, props, object_path=None) + SunshineChannel.__init__(self, connection, props) telepathy.server.ChannelInterfaceGroup.__init__(self) self._populate(connection) diff --git a/sunshine/channel/text.py b/sunshine/channel/text.py index 469db33..2e5fb80 100644 --- a/sunshine/channel/text.py +++ b/sunshine/channel/text.py @@ -26,13 +26,15 @@ import telepathy from sunshine.util.decorator import async, escape from sunshine.handle import SunshineHandleFactory +from sunshine.channel import SunshineChannel __all__ = ['SunshineTextChannel'] logger = logging.getLogger('Sunshine.TextChannel') -class SunshineTextChannel(telepathy.server.ChannelTypeText, +class SunshineTextChannel(SunshineChannel, + telepathy.server.ChannelTypeText, telepathy.server.ChannelInterfaceChatState): def __init__(self, conn, manager, conversation, props, object_path=None): @@ -43,6 +45,7 @@ class SunshineTextChannel(telepathy.server.ChannelTypeText, self.handle = handle telepathy.server.ChannelTypeText.__init__(self, conn, manager, props, object_path=None) + SunshineChannel.__init__(self, conn, props) telepathy.server.ChannelInterfaceChatState.__init__(self) def Send(self, message_type, text): |