From 14383f4fc7c6e182fc8a79e5f9d56c740b2bc7e7 Mon Sep 17 00:00:00 2001 From: Marco Pesenti Gritti Date: Fri, 15 Sep 2006 12:40:46 +0200 Subject: [PATCH] Forgot to add the model --- shell/ShellModel.py | 86 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 shell/ShellModel.py diff --git a/shell/ShellModel.py b/shell/ShellModel.py new file mode 100644 index 00000000..c0c8bccf --- /dev/null +++ b/shell/ShellModel.py @@ -0,0 +1,86 @@ +import gobject + +from Owner import ShellOwner +from sugar.presence import PresenceService +from sugar.activity import ActivityFactory +from sugar.activity import Activity +from Friends import Friends +from Invites import Invites + +class ShellModel(gobject.GObject): + __gsignals__ = { + 'activity-opened': (gobject.SIGNAL_RUN_FIRST, + gobject.TYPE_NONE, ([gobject.TYPE_PYOBJECT])), + 'activity-changed': (gobject.SIGNAL_RUN_FIRST, + gobject.TYPE_NONE, ([gobject.TYPE_PYOBJECT])), + 'activity-closed': (gobject.SIGNAL_RUN_FIRST, + gobject.TYPE_NONE, ([gobject.TYPE_PYOBJECT])) + } + + def __init__(self): + gobject.GObject.__init__(self) + + self._hosts = {} + self._current_activity = None + + PresenceService.start() + self._pservice = PresenceService.get_instance() + + self._owner = ShellOwner() + self._owner.announce() + self._friends = Friends() + self._invites = Invites() + + def get_friends(self): + return self._friends + + def get_invites(self): + return self._invites + + def get_owner(self): + return self._owner + + def add_activity(self, activity_host): + self._hosts[activity_host.get_xid()] = activity_host + self.emit('activity-opened', activity_host) + + def set_current_activity(self, activity_xid): + activity_host = self._hosts[activity_xid] + if self._current_activity == activity_host: + return + + self._current_activity = activity_host + self.emit('activity-changed', activity_host) + + def remove_activity(self, activity_xid): + if self._hosts.has_key(activity_xid): + host = self._hosts[activity_xid] + self.emit('activity-closed', host) + del self._hosts[activity_xid] + + def get_activity(self, activity_id): + for host in self._hosts.values(): + if host.get_id() == activity_id: + return host + return None + + def get_current_activity(self): + return self._current_activity + + def join_activity(self, bundle_id, activity_id): + activity = self.get_activity(activity_id) + if activity: + activity.present() + else: + activity_ps = self._pservice.get_activity(activity_id) + + if activity_ps: + activity = ActivityFactory.create(bundle_id) + activity.join(activity_ps.object_path()) + else: + logging.error('Cannot start activity.') + + def start_activity(self, activity_type): + activity = ActivityFactory.create(activity_type) + activity.execute('test', []) + return activity