diff options
author | Marco Pesenti Gritti <marco@localhost.localdomain> | 2006-09-15 10:52:37 (GMT) |
---|---|---|
committer | Marco Pesenti Gritti <marco@localhost.localdomain> | 2006-09-15 10:52:37 (GMT) |
commit | ca19f0f25100006c0f6c84e405e2e6a0cecdd15b (patch) | |
tree | aaab967408d64b21a07ba85a9cb13fc86c411608 /shell/model/ShellModel.py | |
parent | 14383f4fc7c6e182fc8a79e5f9d56c740b2bc7e7 (diff) |
Move the model to his own module
Diffstat (limited to 'shell/model/ShellModel.py')
-rw-r--r-- | shell/model/ShellModel.py | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/shell/model/ShellModel.py b/shell/model/ShellModel.py new file mode 100644 index 0000000..2f9dd25 --- /dev/null +++ b/shell/model/ShellModel.py @@ -0,0 +1,86 @@ +import gobject + +from sugar.presence import PresenceService +from sugar.activity import ActivityFactory +from sugar.activity import Activity +from model.Friends import Friends +from model.Invites import Invites +from model.Owner import ShellOwner + +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 |