Add an handle argument to the factory and to the activity constructor.
This commit is contained in:
parent
d4639a1764
commit
5cf2b49cc1
@ -20,7 +20,7 @@ import gobject
|
|||||||
import wnck
|
import wnck
|
||||||
|
|
||||||
from view.home.HomeWindow import HomeWindow
|
from view.home.HomeWindow import HomeWindow
|
||||||
from sugar.presence import PresenceService
|
from sugar.activity.activityhandle import ActivityHandle
|
||||||
from sugar.graphics.popupcontext import PopupContext
|
from sugar.graphics.popupcontext import PopupContext
|
||||||
from view.ActivityHost import ActivityHost
|
from view.ActivityHost import ActivityHost
|
||||||
from sugar.activity import activityfactory
|
from sugar.activity import activityfactory
|
||||||
@ -60,8 +60,6 @@ class Shell(gobject.GObject):
|
|||||||
self._frame = Frame(self)
|
self._frame = Frame(self)
|
||||||
self._frame.show_and_hide(3)
|
self._frame.show_and_hide(3)
|
||||||
|
|
||||||
self._pservice = PresenceService.get_instance()
|
|
||||||
|
|
||||||
self.start_activity('org.laptop.JournalActivity')
|
self.start_activity('org.laptop.JournalActivity')
|
||||||
|
|
||||||
def _activity_added_cb(self, home_model, home_activity):
|
def _activity_added_cb(self, home_model, home_activity):
|
||||||
@ -117,11 +115,6 @@ class Shell(gobject.GObject):
|
|||||||
activity.present()
|
activity.present()
|
||||||
return
|
return
|
||||||
|
|
||||||
activity_ps = self._pservice.get_activity(activity_id)
|
|
||||||
if not activity_ps:
|
|
||||||
logging.error("Couldn't find shared activity for %s" % activity_id)
|
|
||||||
return
|
|
||||||
|
|
||||||
# Get the service name for this activity, if
|
# Get the service name for this activity, if
|
||||||
# we have a bundle on the system capable of handling
|
# we have a bundle on the system capable of handling
|
||||||
# this activity type
|
# this activity type
|
||||||
@ -135,7 +128,10 @@ class Shell(gobject.GObject):
|
|||||||
home_model = self._model.get_home()
|
home_model = self._model.get_home()
|
||||||
home_model.notify_activity_launch(activity_id, act_type)
|
home_model.notify_activity_launch(activity_id, act_type)
|
||||||
|
|
||||||
handler = activityfactory.create(act_type)
|
handle = ActivityHandle(activity_id)
|
||||||
|
handle.pservice_id = activity_id
|
||||||
|
|
||||||
|
handler = activityfactory.create(act_type, handle)
|
||||||
handler.connect('success', self._join_success_cb, activity_ps)
|
handler.connect('success', self._join_success_cb, activity_ps)
|
||||||
handler.connect('error', self._join_error_cb, home_model)
|
handler.connect('error', self._join_error_cb, home_model)
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ from sugar import env
|
|||||||
class Activity(gtk.Window):
|
class Activity(gtk.Window):
|
||||||
"""Base Activity class that all other Activities derive from."""
|
"""Base Activity class that all other Activities derive from."""
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self, activity_handle):
|
||||||
gtk.Window.__init__(self)
|
gtk.Window.__init__(self)
|
||||||
|
|
||||||
self.connect('destroy', self._destroy_cb)
|
self.connect('destroy', self._destroy_cb)
|
||||||
|
@ -4,6 +4,7 @@ sugar_PYTHON = \
|
|||||||
Activity.py \
|
Activity.py \
|
||||||
activityfactory.py \
|
activityfactory.py \
|
||||||
activityfactoryservice.py \
|
activityfactoryservice.py \
|
||||||
|
activityhandle.py \
|
||||||
activityservice.py \
|
activityservice.py \
|
||||||
bundle.py \
|
bundle.py \
|
||||||
bundlebuilder.py \
|
bundlebuilder.py \
|
||||||
|
@ -23,6 +23,7 @@ import gtk
|
|||||||
|
|
||||||
from sugar.presence import PresenceService
|
from sugar.presence import PresenceService
|
||||||
from sugar.activity import bundleregistry
|
from sugar.activity import bundleregistry
|
||||||
|
from sugar.activity.activityhandle import ActivityHandle
|
||||||
from sugar import util
|
from sugar import util
|
||||||
|
|
||||||
_ACTIVITY_SERVICE_NAME = "org.laptop.Activity"
|
_ACTIVITY_SERVICE_NAME = "org.laptop.Activity"
|
||||||
@ -40,12 +41,17 @@ class ActivityCreationHandler(gobject.GObject):
|
|||||||
([gobject.TYPE_PYOBJECT]))
|
([gobject.TYPE_PYOBJECT]))
|
||||||
}
|
}
|
||||||
|
|
||||||
def __init__(self, service_name):
|
def __init__(self, service_name, activity_handle):
|
||||||
gobject.GObject.__init__(self)
|
gobject.GObject.__init__(self)
|
||||||
|
|
||||||
self._activity_id = self._find_unique_activity_id()
|
if activity_handle:
|
||||||
if not self._activity_id:
|
self._activity_handle = activity_handle
|
||||||
raise RuntimeError("Cannot generate activity id.")
|
else:
|
||||||
|
activity_id = self._find_unique_activity_id()
|
||||||
|
if activity_id:
|
||||||
|
self._activity_handle = ActivityHandle(activity_id)
|
||||||
|
else:
|
||||||
|
raise RuntimeError("Cannot generate activity id.")
|
||||||
|
|
||||||
registry = bundleregistry.get_registry()
|
registry = bundleregistry.get_registry()
|
||||||
bundle = registry.get_bundle(service_name)
|
bundle = registry.get_bundle(service_name)
|
||||||
@ -54,10 +60,12 @@ class ActivityCreationHandler(gobject.GObject):
|
|||||||
proxy_obj = bus.get_object(service_name, bundle.get_object_path())
|
proxy_obj = bus.get_object(service_name, bundle.get_object_path())
|
||||||
factory = dbus.Interface(proxy_obj, "com.redhat.Sugar.ActivityFactory")
|
factory = dbus.Interface(proxy_obj, "com.redhat.Sugar.ActivityFactory")
|
||||||
|
|
||||||
factory.create(reply_handler=self._reply_handler, error_handler=self._error_handler)
|
factory.create(str(self._activity_handle),
|
||||||
|
reply_handler=self._reply_handler,
|
||||||
|
error_handler=self._error_handler)
|
||||||
|
|
||||||
def get_activity_id(self):
|
def get_activity_id(self):
|
||||||
return self._activity_id
|
return self._activity_handle.activity_id
|
||||||
|
|
||||||
def _find_unique_activity_id(self):
|
def _find_unique_activity_id(self):
|
||||||
pservice = PresenceService.get_instance()
|
pservice = PresenceService.get_instance()
|
||||||
@ -93,6 +101,6 @@ class ActivityCreationHandler(gobject.GObject):
|
|||||||
logging.debug("Couldn't create activity: %s" % err)
|
logging.debug("Couldn't create activity: %s" % err)
|
||||||
self.emit('error', err)
|
self.emit('error', err)
|
||||||
|
|
||||||
def create(service_name):
|
def create(service_name, activity_handle=None):
|
||||||
"""Create a new activity from its name."""
|
"""Create a new activity from its name."""
|
||||||
return ActivityCreationHandler(service_name)
|
return ActivityCreationHandler(service_name, activity_handle)
|
||||||
|
@ -21,6 +21,7 @@ import dbus
|
|||||||
import dbus.service
|
import dbus.service
|
||||||
|
|
||||||
from sugar.activity.bundle import Bundle
|
from sugar.activity.bundle import Bundle
|
||||||
|
from sugar.activity import activityhandle
|
||||||
from sugar import logger
|
from sugar import logger
|
||||||
|
|
||||||
class ActivityFactoryService(dbus.service.Object):
|
class ActivityFactoryService(dbus.service.Object):
|
||||||
@ -48,8 +49,9 @@ class ActivityFactoryService(dbus.service.Object):
|
|||||||
dbus.service.Object.__init__(self, bus_name, object_path)
|
dbus.service.Object.__init__(self, bus_name, object_path)
|
||||||
|
|
||||||
@dbus.service.method("com.redhat.Sugar.ActivityFactory")
|
@dbus.service.method("com.redhat.Sugar.ActivityFactory")
|
||||||
def create(self):
|
def create(self, handle):
|
||||||
activity = self._constructor()
|
activity_handle = activityhandle.create_from_string(handle)
|
||||||
|
activity = self._constructor(activity_handle)
|
||||||
|
|
||||||
self._activities.append(activity)
|
self._activities.append(activity)
|
||||||
activity.connect('destroy', self._activity_destroy_cb)
|
activity.connect('destroy', self._activity_destroy_cb)
|
||||||
|
34
sugar/activity/activityhandle.py
Normal file
34
sugar/activity/activityhandle.py
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
# Copyright (C) 2006, Red Hat, Inc.
|
||||||
|
#
|
||||||
|
# This library is free software; you can redistribute it and/or
|
||||||
|
# modify it under the terms of the GNU Lesser General Public
|
||||||
|
# License as published by the Free Software Foundation; either
|
||||||
|
# version 2 of the License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This library is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
# Lesser General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
|
# License along with this library; if not, write to the
|
||||||
|
# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
# Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
|
from sugar.presence import PresenceService
|
||||||
|
|
||||||
|
class ActivityHandle(object):
|
||||||
|
def __init__(self, activity_id):
|
||||||
|
self.activity_id = activity_id
|
||||||
|
self.pservice_id = None
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return self.activity_id
|
||||||
|
|
||||||
|
def get_presence_service():
|
||||||
|
pservice = PresenceService.get_instance()
|
||||||
|
return pservice.get_activity(self._pservice_id)
|
||||||
|
|
||||||
|
def create_from_string(handle):
|
||||||
|
activity_handle = ActivityHandle(handle)
|
||||||
|
activity_handle.pservice_id = handle
|
Loading…
Reference in New Issue
Block a user