From e060c07873c37e555e026a36d3e2cc5389a7531b Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Fri, 16 Jun 2006 23:10:30 -0400 Subject: [PATCH] Make each activity have a default type for sharing --- examples/gmail.py | 4 +++- sugar/browser/BrowserActivity.py | 2 +- sugar/shell/activity.py | 12 +++++++++--- sugar/shell/shell.py | 20 ++++++++++++-------- 4 files changed, 25 insertions(+), 13 deletions(-) diff --git a/examples/gmail.py b/examples/gmail.py index a3807c5a..99a2c755 100755 --- a/examples/gmail.py +++ b/examples/gmail.py @@ -8,9 +8,11 @@ import geckoembed from sugar.shell import activity import sugar.env +_GMAIL_ACTIVITY_TYPE = "_gmail_google._tcp" + class GMailActivity(activity.Activity): def __init__(self): - activity.Activity.__init__(self) + activity.Activity.__init__(self, _GMAIL_ACTIVITY_TYPE) def on_connected_to_shell(self): profile_path = os.path.join(sugar.env.get_user_dir(), 'gmail') diff --git a/sugar/browser/BrowserActivity.py b/sugar/browser/BrowserActivity.py index 185b6f4d..f79f7881 100644 --- a/sugar/browser/BrowserActivity.py +++ b/sugar/browser/BrowserActivity.py @@ -22,7 +22,7 @@ class BrowserActivity(activity.Activity): LEADING = 3 def __init__(self, uri): - activity.Activity.__init__(self) + activity.Activity.__init__(self, _BROWSER_ACTIVITY_TYPE) self.uri = uri self._mode = BrowserActivity.SOLO self._pservice = PresenceService.get_instance() diff --git a/sugar/shell/activity.py b/sugar/shell/activity.py index b7f84b3a..77e600ed 100644 --- a/sugar/shell/activity.py +++ b/sugar/shell/activity.py @@ -77,10 +77,10 @@ class ActivityDbusService(dbus.service.Object): SHELL_SERVICE_NAME + ".ActivityContainer") if activity_id is None: - self._activity_id = self._activity_container.add_activity("") + self._activity_id = self._activity_container.add_activity("", self._activity.default_type()) else: self._activity_id = activity_id - self._activity_container.add_activity_with_id("", activity_id) + self._activity_container.add_activity_with_id("", self._activity.default_type(), activity_id) self._object_path = SHELL_SERVICE_PATH + "/Activities/%s" % self._activity_id @@ -144,7 +144,7 @@ class ActivityDbusService(dbus.service.Object): class Activity(object): """Base Activity class that all other Activities derive from.""" - def __init__(self): + def __init__(self, default_type): self._dbus_service = self._get_new_dbus_service() self._dbus_service.register_callback(ON_CONNECTED_TO_SHELL_CB, self._internal_on_connected_to_shell_cb) self._dbus_service.register_callback(ON_DISCONNECTED_FROM_SHELL_CB, self._internal_on_disconnected_from_shell_cb) @@ -156,6 +156,9 @@ class Activity(object): self._has_focus = False self._plug = None self._activity_object = None + if type(default_type) != type("") or not len(default_type): + raise ValueError("Default type must be a valid string.") + self._default_type = default_type def _cleanup(self): if self._plug: @@ -173,6 +176,9 @@ class Activity(object): Allows subclasses to use their own dbus service object if they choose.""" return ActivityDbusService(self) + def default_type(self): + return self._default_type + def has_focus(self): """Return whether or not this Activity is visible to the user.""" return self._has_focus diff --git a/sugar/shell/shell.py b/sugar/shell/shell.py index f6755f27..1628a663 100755 --- a/sugar/shell/shell.py +++ b/sugar/shell/shell.py @@ -17,7 +17,7 @@ from sugar.chat.GroupChat import GroupChat class ActivityHost(dbus.service.Object): - def __init__(self, activity_container, activity_name, activity_id = None): + def __init__(self, activity_container, activity_name, default_type, activity_id = None): self.activity_name = activity_name self.ellipsize_tab = False @@ -27,7 +27,8 @@ class ActivityHost(dbus.service.Object): self.activity_id = sugar.util.unique_id() else: self.activity_id = activity_id - + self._default_type = default_type + self.dbus_object_name = "/com/redhat/Sugar/Shell/Activities/%s" % self.activity_id dbus.service.Object.__init__(self, activity_container.service, self.dbus_object_name) @@ -83,6 +84,9 @@ class ActivityHost(dbus.service.Object): def get_chat(self): return self._group_chat + def get_default_type(self): + return self._default_type + def __close_button_clicked_reply_cb(self): pass @@ -364,12 +368,12 @@ class ActivityContainer(dbus.service.Object): @dbus.service.method("com.redhat.Sugar.Shell.ActivityContainer", \ - in_signature="s", \ + in_signature="ss", \ out_signature="s", \ sender_keyword="sender") - def add_activity(self, activity_name, sender): + def add_activity(self, activity_name, default_type, sender): #print "hello world, activity_name = '%s', sender = '%s'"%(activity_name, sender) - activity = ActivityHost(self, activity_name) + activity = ActivityHost(self, activity_name, default_type) self.activities.append((sender, activity)) activity_id = activity.get_host_activity_id() @@ -379,10 +383,10 @@ class ActivityContainer(dbus.service.Object): return activity_id @dbus.service.method("com.redhat.Sugar.Shell.ActivityContainer", \ - in_signature="ss", \ + in_signature="sss", \ sender_keyword="sender") - def add_activity_with_id(self, activity_name, activity_id, sender): - activity = ActivityHost(self, activity_name, activity_id) + def add_activity_with_id(self, activity_name, default_type, activity_id, sender): + activity = ActivityHost(self, activity_name, default_type, activity_id) self.activities.append((sender, activity)) activity_id = activity.get_host_activity_id() self._signal_helper.activity_started(activity_id)