Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell/home/ActivitiesModel.py
diff options
context:
space:
mode:
Diffstat (limited to 'shell/home/ActivitiesModel.py')
-rw-r--r--shell/home/ActivitiesModel.py60
1 files changed, 60 insertions, 0 deletions
diff --git a/shell/home/ActivitiesModel.py b/shell/home/ActivitiesModel.py
new file mode 100644
index 0000000..c46256d
--- /dev/null
+++ b/shell/home/ActivitiesModel.py
@@ -0,0 +1,60 @@
+import gobject
+
+from sugar.presence.PresenceService import PresenceService
+from ActivityRegistry import ActivityRegistry
+
+class ActivityInfo:
+ def __init__(self, service):
+ self._service = service
+
+ def get_id(self):
+ return self._service.get_activity_id()
+
+ def get_type(self):
+ return self._service.get_type()
+
+ def get_title(self):
+ return self._service.get_published_value('title')
+
+ def get_service(self):
+ return self._service
+
+class ActivitiesModel(gobject.GObject):
+ __gsignals__ = {
+ 'activity-added': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
+ ([gobject.TYPE_PYOBJECT])),
+ 'activity-removed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
+ ([gobject.TYPE_PYOBJECT]))
+ }
+
+ def __init__(self, registry):
+ gobject.GObject.__init__(self)
+
+ self._activities = {}
+ self._registry = registry
+
+ self._pservice = PresenceService()
+ self._pservice.connect("service-appeared", self.__service_appeared_cb)
+
+ for service in self._pservice.get_services():
+ self.__check_service(service)
+
+ def has_activity(self, activity_id):
+ return self._activities.has_key(activity_id)
+
+ def add_activity(self, service):
+ activity_info = ActivityInfo(service)
+ self._activities[activity_info.get_id()] = (activity_info)
+ self.emit('activity-added', activity_info)
+
+ def __iter__(self):
+ activities = self._activities.values()
+ return activities.__iter__()
+
+ def __service_appeared_cb(self, pservice, service):
+ self.__check_service(service)
+
+ def __check_service(self, service):
+ if self._registry.get_activity(service.get_type()) != None:
+ if not self.has_activity(service.get_activity_id()):
+ self.add_activity(service)