Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/sugar/presence
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2006-06-16 19:25:21 (GMT)
committer Dan Williams <dcbw@redhat.com>2006-06-16 19:25:21 (GMT)
commitc46d300c186189f8fe565d56a0a5dd2054c470fd (patch)
tree7e75dab39bc9758c75fd9558cd84530dda0c0f6a /sugar/presence
parent0cae557ab56cb82a30087e8abbc6bc82d118a995 (diff)
merge
Diffstat (limited to 'sugar/presence')
-rw-r--r--sugar/presence/Buddy.py26
1 files changed, 18 insertions, 8 deletions
diff --git a/sugar/presence/Buddy.py b/sugar/presence/Buddy.py
index 9b5e358..44122ab 100644
--- a/sugar/presence/Buddy.py
+++ b/sugar/presence/Buddy.py
@@ -69,10 +69,10 @@ class Buddy(gobject.GObject):
return False
if service.get_type() in self._services.keys():
return False
- self._services[service.get_type()] = service
+ self._services[service.get_full_type()] = service
if self._valid:
self.emit("service-added", service)
- if service.get_type() == PRESENCE_SERVICE_TYPE:
+ if service.get_full_type() == PRESENCE_SERVICE_TYPE:
# A buddy isn't valid until its official presence
# service has been found and resolved
self._valid = True
@@ -87,18 +87,28 @@ class Buddy(gobject.GObject):
return
if service.get_name() != self._nick_name:
return
- if self._services.has_key(service.get_type()):
+ if self._services.has_key(service.get_full_type()):
if self._valid:
self.emit("service-removed", service)
- del self._services[service.get_type()]
- if service.get_type() == PRESENCE_SERVICE_TYPE:
+ del self._services[service.get_full_type()]
+ if service.get_full_type() == PRESENCE_SERVICE_TYPE:
self._valid = False
- def get_service_of_type(self, stype):
+ def get_service_of_type(self, stype=None, activity=None):
"""Return a service of a certain type, or None if the buddy
doesn't provide that service."""
- if self._services.has_key(stype):
- return self._services[stype]
+ short_stype = stype
+ if not short_stype:
+ raise RuntimeError("Need to specify a service type.")
+ uid = None
+ if activity:
+ uid = activity.get_id()
+ if self._services.has_key(short_stype):
+ return self._services[short_stype]
+ elif uid:
+ for service in self._services.values():
+ if service.get_type() == short_stype and service.get_activity_uid() == uid:
+ return service
return None
def is_valid(self):