Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell/view/ActivityHost.py
diff options
context:
space:
mode:
Diffstat (limited to 'shell/view/ActivityHost.py')
-rw-r--r--shell/view/ActivityHost.py72
1 files changed, 72 insertions, 0 deletions
diff --git a/shell/view/ActivityHost.py b/shell/view/ActivityHost.py
new file mode 100644
index 0000000..456406b
--- /dev/null
+++ b/shell/view/ActivityHost.py
@@ -0,0 +1,72 @@
+import gtk
+import dbus
+
+import conf
+from sugar.activity import Activity
+from sugar.presence import PresenceService
+from sugar.canvas.IconColor import IconColor
+from sugar.p2p import Stream
+from sugar.p2p import network
+
+class ActivityHost:
+ def __init__(self, shell, window):
+ self._shell = shell
+ self._window = window
+ self._xid = window.get_xid()
+ self._pservice = PresenceService.get_instance()
+
+ bus = dbus.SessionBus()
+ proxy_obj = bus.get_object(Activity.get_service_name(self._xid),
+ Activity.get_object_path(self._xid))
+
+ self._activity = dbus.Interface(proxy_obj, Activity.ACTIVITY_INTERFACE)
+ self._id = self._activity.get_id()
+ self._type = self._activity.get_type()
+ self._gdk_window = gtk.gdk.window_foreign_new(self._xid)
+
+ registry = conf.get_activity_registry()
+ info = registry.get_activity(self._type)
+ self._icon_name = info.get_icon()
+
+ def get_id(self):
+ return self._id
+
+ def get_xid(self):
+ return self._xid
+
+ def get_icon_name(self):
+ return self._icon_name
+
+ def get_icon_color(self):
+ activity = self._pservice.get_activity(self._id)
+ if activity != None:
+ return IconColor(activity.get_color())
+ else:
+ return conf.get_profile().get_color()
+
+ def share(self):
+ self._activity.share()
+
+ def invite(self, buddy):
+ if not self.get_shared():
+ self.share()
+
+ issuer = self._pservice.get_owner().get_name()
+ service = buddy.get_service_of_type("_presence_olpc._tcp")
+ stream = Stream.Stream.new_from_service(service, start_reader=False)
+ writer = stream.new_writer(service)
+ writer.custom_request("invite", None, None, issuer,
+ self._type, self._id)
+
+ def get_shared(self):
+ return self._activity.get_shared()
+
+ def get_type(self):
+ return self._type
+
+ def present(self):
+ self._window.activate(gtk.get_current_event_time())
+
+ def show_dialog(self, dialog):
+ dialog.show()
+ dialog.window.set_transient_for(self._gdk_window)