From 9c0669dde49344ade510e0c3c9780f864be2b8fd Mon Sep 17 00:00:00 2001 From: Marco Pesenti Gritti Date: Mon, 19 Jun 2006 19:31:32 +0000 Subject: Merge branch 'master' of git+ssh://crank.laptop.org/git/sugar --- (limited to 'sugar') diff --git a/sugar/presence/PresenceService.py b/sugar/presence/PresenceService.py index 7063b41..dc563b2 100644 --- a/sugar/presence/PresenceService.py +++ b/sugar/presence/PresenceService.py @@ -514,6 +514,8 @@ class PresenceService(gobject.GObject): raise RuntimeError("presence service must be started first.") rs_name = service.get_name() + if self.get_owner() and rs_name != self.get_owner().get_nick_name(): + raise RuntimeError("Tried to register a service that didn't have Owner nick as the service name!") rs_stype = service.get_full_type() rs_port = service.get_port() rs_props = service.get_properties() diff --git a/sugar/presence/Service.py b/sugar/presence/Service.py index e1232f6..e3885ad 100644 --- a/sugar/presence/Service.py +++ b/sugar/presence/Service.py @@ -143,9 +143,12 @@ class Service(object): if uid and not self._properties.has_key(_ACTIVITY_UID_TAG): self._properties[_ACTIVITY_UID_TAG] = uid - def serialize(self): + def serialize(self, owner=None): sdict = {} - sdict['name'] = dbus.Variant(self._name) + if owner is not None: + sdict['name'] = dbus.Variant(owner.get_nick_name()) + else: + sdict['name'] = dbus.Variant(self._name) sdict['full_stype'] = dbus.Variant(self._full_stype) sdict['activity_stype'] = dbus.Variant(self._activity_stype) sdict['domain'] = dbus.Variant(self._domain) diff --git a/sugar/shell/StartPage.py b/sugar/shell/StartPage.py index 518315e..5251b0e 100644 --- a/sugar/shell/StartPage.py +++ b/sugar/shell/StartPage.py @@ -92,6 +92,8 @@ class ActivitiesModel(gtk.ListStore): class ActivitiesView(gtk.TreeView): def __init__(self, model): gtk.TreeView.__init__(self, model) + + self._owner = None self.set_headers_visible(False) @@ -130,7 +132,10 @@ class ActivitiesView(gtk.TreeView): cell.set_property('markup', markup) cell.set_property('ellipsize', pango.ELLIPSIZE_END) - + + def set_owner(self, owner): + self._owner = owner + def _row_activated_cb(self, treeview, path, column): bus = dbus.SessionBus() proxy_obj = bus.get_object('com.redhat.Sugar.Browser', '/com/redhat/Sugar/Browser') @@ -145,7 +150,9 @@ class ActivitiesView(gtk.TreeView): if service is None: browser_shell.open_browser(address) else: - serialized_service = service.serialize() + if not self._owner: + raise RuntimeError("We don't have an owner yet!") + serialized_service = service.serialize(self._owner) browser_shell.open_browser(address, serialized_service) class StartPage(gtk.HBox): @@ -161,6 +168,8 @@ class StartPage(gtk.HBox): self._pservice = PresenceService.get_instance() self._pservice.connect("activity-announced", self._on_activity_announced_cb) self._pservice.connect("new-service-adv", self._on_new_service_adv_cb) + self._pservice.connect("buddy-appeared", self._on_buddy_appeared_cb) + self._pservice.connect("buddy-disappeared", self._on_buddy_disappeared_cb) self._pservice.start() self._pservice.track_service_type(BrowserActivity._BROWSER_ACTIVITY_TYPE) @@ -222,6 +231,7 @@ class StartPage(gtk.HBox): self._activities_model = ActivitiesModel() + owner = self._pservice.get_owner() self._activities = ActivitiesView(self._activities_model) sw.add(self._activities) self._activities.show() @@ -245,6 +255,14 @@ class StartPage(gtk.HBox): if activity_id: self._pservice.track_service_type(short_stype) + def _on_buddy_appeared_cb(self, pservice, buddy): + if buddy.is_owner(): + self._activities.set_owner(buddy) + + def _on_buddy_disappeared_cb(self, pservice, buddy): + if buddy.is_owner() and self._owner == buddy: + self._activities.set_owner(None) + def _on_activity_announced_cb(self, pservice, service, buddy): print "Found new activity with type %s" % service.get_full_type() self._activities_model.add_activity(buddy, service) -- cgit v0.9.1