Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>2007-03-14 14:59:30 (GMT)
committer Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>2007-03-14 14:59:30 (GMT)
commita16484bc7bc53d9a35317e395d7cc0a0e7574bea (patch)
tree1f5ab731db121a0e67269b7828b92b8576000bf8 /services
parenteae978346d46f6179f224197ffb72f2938192ba6 (diff)
rename some signals to avoid confusions
use activity properties API
Diffstat (limited to 'services')
-rw-r--r--services/presence2/activity.py31
-rw-r--r--services/presence2/presenceservice.py36
-rw-r--r--services/presence2/server_plugin.py45
3 files changed, 88 insertions, 24 deletions
diff --git a/services/presence2/activity.py b/services/presence2/activity.py
index 656bb18..7711daf 100644
--- a/services/presence2/activity.py
+++ b/services/presence2/activity.py
@@ -69,6 +69,7 @@ class Activity(DBusGObject):
self._valid = False
self._id = None
+ self._color = None
self._local = False
self._type = None
@@ -225,3 +226,33 @@ class Activity(DBusGObject):
def _activity_text_channel_closed_cb(self):
self._joined = False
self._activity_text_channel = None
+
+ def send_properties(self):
+ props = {}
+ props['name'] = self._name
+ props['color'] = self._color
+ props['type'] = self._type
+ self._tp.set_activity_properties(self.props.id, props)
+
+ def set_properties(self, properties):
+ changed = False
+ if "name" in properties.keys():
+ name = properties["name"]
+ if name != self._name:
+ self._name = name
+ changed = True
+
+ if "color" in properties.keys():
+ color = properties["color"]
+ if color != self._color:
+ self._color = color
+ changed = True
+
+ if "type" in properties.keys():
+ type = properties["type"]
+ if type != self._type:
+ self._type = type
+ changed = True
+
+ if changed:
+ self._update_validity()
diff --git a/services/presence2/presenceservice.py b/services/presence2/presenceservice.py
index 5faf5b4..82db832 100644
--- a/services/presence2/presenceservice.py
+++ b/services/presence2/presenceservice.py
@@ -23,6 +23,7 @@ from telepathy.constants import (CONNECTION_STATUS_CONNECTING, CONNECTION_STATUS
from server_plugin import ServerPlugin
from linklocal_plugin import LinkLocalPlugin
+from sugar import util
from buddy import Buddy, Owner
from activity import Activity
@@ -65,10 +66,11 @@ class PresenceService(dbus.service.Object):
self._server_plugin.connect('contact-online', self._contact_online)
self._server_plugin.connect('contact-offline', self._contact_offline)
self._server_plugin.connect('avatar-updated', self._avatar_updated)
- self._server_plugin.connect('properties-changed', self._properties_changed)
- self._server_plugin.connect('contact-activities-changed', self._contact_activities_changed)
+ self._server_plugin.connect('buddy-properties-changed', self._buddy_properties_changed)
+ self._server_plugin.connect('buddy-activities-changed', self._buddy_activities_changed)
self._server_plugin.connect('activity-invitation', self._activity_invitation)
self._server_plugin.connect('private-invitation', self._private_invitation)
+ self._server_plugin.connect('activity-properties-changed', self._activity_properties_changed)
self._server_plugin.start()
# Set up the link local connection
@@ -80,6 +82,10 @@ class PresenceService(dbus.service.Object):
def _server_status_cb(self, plugin, status, reason):
if status == CONNECTION_STATUS_CONNECTED:
pass
+ # TEST
+ id = util.unique_id()
+ self._share_activity(id, "org.laptop.Sugar.lapin",
+ "Chat of %s" % self._owner.props.nick, [])
def _contact_online(self, tp, handle, props):
new_buddy = False
@@ -130,7 +136,7 @@ class PresenceService(dbus.service.Object):
print "Buddy %s icon updated" % buddy.props.key
buddy.props.icon = avatar
- def _properties_changed(self, tp, handle, prop):
+ def _buddy_properties_changed(self, tp, handle, prop):
buddy = self._handles_buddies[tp].get(handle)
if buddy:
buddy.set_properties(prop)
@@ -150,14 +156,14 @@ class PresenceService(dbus.service.Object):
# FIXME
# Use values from the network
- import random
- names = ["Tommy", "Susie", "Jill", "Bryan", "Nathan", "Sophia", "Haley", "Jimmy"]
- name = names[random.randint(0, len(names) - 1)]
- activity.props.name = "Chat with %s" % name
- activity.props.type = "org.laptop.Sugar.Chat"
- from sugar.graphics import xocolor
- color = xocolor.XoColor().to_string()
- activity.props.color = color
+ #import random
+ #names = ["Tommy", "Susie", "Jill", "Bryan", "Nathan", "Sophia", "Haley", "Jimmy"]
+ #name = names[random.randint(0, len(names) - 1)]
+ #activity.props.name = "Chat with %s" % name
+ #activity.props.type = "org.laptop.Sugar.Chat"
+ #from sugar.graphics import xocolor
+ #color = xocolor.XoColor().to_string()
+ #activity.props.color = color
return activity
@@ -167,7 +173,7 @@ class PresenceService(dbus.service.Object):
self.ActivityDisappeared(activity.object_path())
del self._activities[activity.props.id]
- def _contact_activities_changed(self, tp, contact_handle, activities):
+ def _buddy_activities_changed(self, tp, contact_handle, activities):
print "------------activities changed-------------"
buddies = self._handles_buddies[tp]
buddy = buddies.get(contact_handle)
@@ -299,6 +305,7 @@ class PresenceService(dbus.service.Object):
self._activities[actid] = activity
activity.join()
+ activity.send_properties()
return activity
@@ -310,6 +317,11 @@ class PresenceService(dbus.service.Object):
self.ActivityDisappeared(activity.object_path())
print "Activity disappeared: %s (%s)" % (activity.props.name, activity.props.id)
+ def _activity_properties_changed(self, tp, act_id, props):
+ activity = self._activities.get(act_id)
+ if activity:
+ activity.set_properties(props)
+
def main():
loop = gobject.MainLoop()
diff --git a/services/presence2/server_plugin.py b/services/presence2/server_plugin.py
index e63e026..dd6c096 100644
--- a/services/presence2/server_plugin.py
+++ b/services/presence2/server_plugin.py
@@ -37,6 +37,7 @@ from telepathy.constants import (
CONNECTION_STATUS_REASON_AUTHENTICATION_FAILED)
CONN_INTERFACE_BUDDY_INFO = 'org.laptop.Telepathy.BuddyInfo'
+CONN_INTERFACE_ACTIVITY_PROPERTIES = 'org.laptop.Telepathy.ActivityProperties'
_PROTOCOL = "jabber"
@@ -85,14 +86,16 @@ class ServerPlugin(gobject.GObject):
([gobject.TYPE_INT, gobject.TYPE_INT])),
'avatar-updated': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
([gobject.TYPE_PYOBJECT, gobject.TYPE_PYOBJECT])),
- 'properties-changed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
+ 'buddy-properties-changed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
([gobject.TYPE_PYOBJECT, gobject.TYPE_PYOBJECT])),
- 'contact-activities-changed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
+ 'buddy-activities-changed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
([gobject.TYPE_PYOBJECT, gobject.TYPE_PYOBJECT])),
'activity-invitation': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
([gobject.TYPE_PYOBJECT])),
'private-invitation': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
- ([gobject.TYPE_PYOBJECT]))
+ ([gobject.TYPE_PYOBJECT])),
+ 'activity-properties-changed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
+ ([gobject.TYPE_PYOBJECT, gobject.TYPE_PYOBJECT])),
}
def __init__(self, registry, owner):
@@ -142,6 +145,7 @@ class ServerPlugin(gobject.GObject):
account_info['account'] = "%s@%s" % (khash, account_info['server'])
account_info['password'] = profile.get_private_key_hash()
+ print account_info
return account_info
def _find_existing_connection(self):
@@ -181,6 +185,7 @@ class ServerPlugin(gobject.GObject):
# hack
conn._valid_interfaces.add(CONN_INTERFACE_PRESENCE)
conn._valid_interfaces.add(CONN_INTERFACE_BUDDY_INFO)
+ conn._valid_interfaces.add(CONN_INTERFACE_ACTIVITY_PROPERTIES)
conn._valid_interfaces.add(CONN_INTERFACE_AVATARS)
conn._valid_interfaces.add(CONN_INTERFACE_ALIASING)
@@ -231,13 +236,15 @@ class ServerPlugin(gobject.GObject):
self.cleanup()
return
- self._conn[CONN_INTERFACE_BUDDY_INFO].connect_to_signal('PropertiesChanged', self._properties_changed_cb)
- self._conn[CONN_INTERFACE_BUDDY_INFO].connect_to_signal('ActivitiesChanged', self._activities_changed_cb)
+ self._conn[CONN_INTERFACE_BUDDY_INFO].connect_to_signal('PropertiesChanged', self._buddy_properties_changed_cb)
+ self._conn[CONN_INTERFACE_BUDDY_INFO].connect_to_signal('ActivitiesChanged', self._buddy_activities_changed_cb)
self._conn[CONN_INTERFACE_AVATARS].connect_to_signal('AvatarUpdated', self._avatar_updated_cb)
self._conn[CONN_INTERFACE_ALIASING].connect_to_signal('AliasesChanged', self._alias_changed_cb)
+ self._conn[CONN_INTERFACE_ACTIVITY_PROPERTIES].connect_to_signal('PropertiesChanged', self._activity_properties_changed_cb)
+
try:
self._set_self_buddy_info()
except RuntimeError, e:
@@ -289,7 +296,7 @@ class ServerPlugin(gobject.GObject):
self._joined_activities.append((act, handle))
self._conn[CONN_INTERFACE_BUDDY_INFO].SetActivities(self._joined_activities)
-
+
return channel
def _set_self_buddy_info(self):
@@ -387,7 +394,7 @@ class ServerPlugin(gobject.GObject):
self.emit("contact-online", handle, props)
activities = self._conn[CONN_INTERFACE_BUDDY_INFO].GetActivities(handle)
- self._activities_changed_cb(handle, activities)
+ self._buddy_activities_changed_cb(handle, activities)
def _presence_update_cb(self, presence):
for handle in presence:
@@ -419,16 +426,16 @@ class ServerPlugin(gobject.GObject):
for handle, alias in aliases:
prop = {'nick': alias}
#print "Buddy %s alias changed to %s" % (handle, alias)
- self._properties_changed_cb(handle, prop)
+ self._buddy_properties_changed_cb(handle, prop)
- def _properties_changed_cb(self, contact, properties):
- self.emit("properties-changed", contact, properties)
+ def _buddy_properties_changed_cb(self, contact, properties):
+ self.emit("buddy-properties-changed", contact, properties)
- def _activities_changed_cb(self, contact, activities):
+ def _buddy_activities_changed_cb(self, contact, activities):
for act_id, act_handle in activities:
self._activities[act_id] = act_handle
activities_id = map(lambda x: x[0], activities)
- self.emit("contact-activities-changed", contact, activities_id)
+ self.emit("buddy-activities-changed", contact, activities_id)
def _new_channel_cb(self, object_path, channel_type, handle_type, handle, suppress_handler):
if handle_type == CONNECTION_HANDLE_TYPE_ROOM and channel_type == CHANNEL_TYPE_TEXT:
@@ -447,3 +454,17 @@ class ServerPlugin(gobject.GObject):
elif handle_type == CONNECTION_HANDLE_TYPE_CONTACT and \
channel_type in [CHANNEL_TYPE_TEXT, CHANNEL_TYPE_STREAMED_MEDIA]:
self.emit("private-invitation", object_path)
+
+ def set_activity_properties(self, act_id, props):
+ handle = self._activities.get(act_id)
+
+ if not handle:
+ print "set_activity_properties: handle unkown"
+ return
+
+ self._conn[CONN_INTERFACE_ACTIVITY_PROPERTIES].SetProperties(handle, props)
+
+ def _activity_properties_changed_cb(self, room, properties):
+ for act_id, act_handle in self._activities.items():
+ if room == act_handle:
+ self.emit("activity-properties-changed", act_id, properties)