summaryrefslogtreecommitdiff
path: root/sunshine/channel
diff options
context:
space:
mode:
authorKrzysztof Klinikowski <kkszysiu@gmail.com>2010-05-27 01:06:55 +0200
committerKrzysztof Klinikowski <kkszysiu@gmail.com>2010-05-27 01:06:55 +0200
commit687fcd66f074974aefde7d3bd879cbb4065fedb4 (patch)
tree9a36be86bb6da5fb77fa33cb304696b53cc432e1 /sunshine/channel
parent4fdbc7a2a0f0735e2f616009bf7491e033e6b63e (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/channel')
-rw-r--r--sunshine/channel/__init__.py44
-rw-r--r--sunshine/channel/contact_list.py3
-rw-r--r--sunshine/channel/text.py5
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):