Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/sugar/activity/activityfactory.py
diff options
context:
space:
mode:
authorMarco Pesenti Gritti <mpg@redhat.com>2007-02-21 19:56:14 (GMT)
committer Marco Pesenti Gritti <mpg@redhat.com>2007-02-21 19:56:14 (GMT)
commit9ba487fa1f5ea1e624eb84be225940096d0185cb (patch)
tree886a8f62502572fd0b71e0ca79f6a92962a4ff58 /sugar/activity/activityfactory.py
parentef3f86195449b8a8a480e8905b3996eb936cdd8b (diff)
Generate the id in ActivityFactory. I want it to be easy to
run activities without using the shell. Some regression in the debug messages, which I'll fix as part of further refactoring.
Diffstat (limited to 'sugar/activity/activityfactory.py')
-rw-r--r--sugar/activity/activityfactory.py33
1 files changed, 32 insertions, 1 deletions
diff --git a/sugar/activity/activityfactory.py b/sugar/activity/activityfactory.py
index ef27f48..e2a0d4d 100644
--- a/sugar/activity/activityfactory.py
+++ b/sugar/activity/activityfactory.py
@@ -21,8 +21,9 @@ import dbus
import gobject
import gtk
-from sugar.presence.PresenceService import PresenceService
+from sugar.presence import PresenceService
from sugar.activity import bundleregistry
+from sugar import util
_ACTIVITY_SERVICE_NAME = "org.laptop.Activity"
_ACTIVITY_SERVICE_PATH = "/org/laptop/Activity"
@@ -42,6 +43,10 @@ class ActivityCreationHandler(gobject.GObject):
def __init__(self, service_name):
gobject.GObject.__init__(self)
+ self._activity_id = self._find_unique_activity_id()
+ if not self._activity_id:
+ raise RuntimeError("Cannot generate activity id.")
+
registry = bundleregistry.get_registry()
bundle = registry.get_bundle(service_name)
@@ -51,6 +56,32 @@ class ActivityCreationHandler(gobject.GObject):
factory.create(reply_handler=self._reply_handler, error_handler=self._error_handler)
+ def get_activity_id(self):
+ return self._activity_id
+
+ def _find_unique_activity_id(self):
+ pservice = PresenceService.get_instance()
+
+ # create a new unique activity ID
+ i = 0
+ act_id = None
+ while i < 10:
+ act_id = util.unique_id()
+ i += 1
+
+ # check through network activities
+ found = False
+ activities = pservice.get_activities()
+ for act in activities:
+ if act_id == act.get_id():
+ found = True
+ break
+ if found:
+ act_id = None
+ continue
+
+ return act_id
+
def _reply_handler(self, xid):
bus = dbus.SessionBus()
proxy_obj = bus.get_object(_ACTIVITY_SERVICE_NAME + '%d' % xid,