Get activities sharing sort of working
This commit is contained in:
parent
20afcfa475
commit
bdce0eb48c
@ -29,7 +29,7 @@ class BrowserActivity(activity.Activity):
|
|||||||
self._pservice.track_service_type(_BROWSER_ACTIVITY_TYPE)
|
self._pservice.track_service_type(_BROWSER_ACTIVITY_TYPE)
|
||||||
self._share_service = None
|
self._share_service = None
|
||||||
self._model = None
|
self._model = None
|
||||||
|
|
||||||
def _update_shared_location(self):
|
def _update_shared_location(self):
|
||||||
address = self.embed.get_address()
|
address = self.embed.get_address()
|
||||||
self._model.set_value('address', address)
|
self._model.set_value('address', address)
|
||||||
@ -93,13 +93,10 @@ class BrowserActivity(activity.Activity):
|
|||||||
|
|
||||||
self._setup_shared(self.uri)
|
self._setup_shared(self.uri)
|
||||||
|
|
||||||
def publish(self):
|
|
||||||
print 'Publish %s' % self.get_id()
|
|
||||||
|
|
||||||
def get_embed(self):
|
def get_embed(self):
|
||||||
return self.embed
|
return self.embed
|
||||||
|
|
||||||
def share(self):
|
def publish(self):
|
||||||
escaped_title = urllib.quote(self.embed.get_title())
|
escaped_title = urllib.quote(self.embed.get_title())
|
||||||
escaped_url = urllib.quote(self.embed.get_address())
|
escaped_url = urllib.quote(self.embed.get_address())
|
||||||
|
|
||||||
|
@ -34,3 +34,9 @@ class BrowserShell(dbus.service.Object):
|
|||||||
browser = BrowserActivity(uri)
|
browser = BrowserActivity(uri)
|
||||||
self.__browsers.append(browser)
|
self.__browsers.append(browser)
|
||||||
browser.connect_to_shell()
|
browser.connect_to_shell()
|
||||||
|
|
||||||
|
@dbus.service.method('com.redhat.Sugar.BrowserShell')
|
||||||
|
def open_browser_with_id(self, uri, activity_id):
|
||||||
|
browser = BrowserActivity(uri)
|
||||||
|
self.__browsers.append(browser)
|
||||||
|
browser.connect_to_shell(activity_id)
|
||||||
|
@ -30,17 +30,6 @@ class NavigationToolbar(gtk.Toolbar):
|
|||||||
self.insert(self.reload, -1)
|
self.insert(self.reload, -1)
|
||||||
self.reload.show()
|
self.reload.show()
|
||||||
|
|
||||||
separator = gtk.SeparatorToolItem()
|
|
||||||
self.insert(separator, -1)
|
|
||||||
separator.show()
|
|
||||||
|
|
||||||
share = gtk.ToolButton(None, "Share")
|
|
||||||
share.set_icon_name('stock_shared-by-me')
|
|
||||||
share.set_is_important(True)
|
|
||||||
share.connect("clicked", self.__share_cb)
|
|
||||||
self.insert(share, -1)
|
|
||||||
share.show()
|
|
||||||
|
|
||||||
separator = gtk.SeparatorToolItem()
|
separator = gtk.SeparatorToolItem()
|
||||||
self.insert(separator, -1)
|
self.insert(separator, -1)
|
||||||
separator.show()
|
separator.show()
|
||||||
@ -66,9 +55,6 @@ class NavigationToolbar(gtk.Toolbar):
|
|||||||
def __reload_cb(self, button):
|
def __reload_cb(self, button):
|
||||||
self._embed.reload()
|
self._embed.reload()
|
||||||
|
|
||||||
def __share_cb(self, button):
|
|
||||||
self._browser.share()
|
|
||||||
|
|
||||||
def __location_changed(self, embed):
|
def __location_changed(self, embed):
|
||||||
self._update_sensitivity()
|
self._update_sensitivity()
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@ import gtk
|
|||||||
import pango
|
import pango
|
||||||
import dbus
|
import dbus
|
||||||
import cgi
|
import cgi
|
||||||
|
import urllib
|
||||||
|
|
||||||
import google
|
import google
|
||||||
from sugar.presence.PresenceService import PresenceService
|
from sugar.presence.PresenceService import PresenceService
|
||||||
@ -12,14 +13,21 @@ from sugar.browser import BrowserActivity
|
|||||||
|
|
||||||
class ActivitiesModel(gtk.ListStore):
|
class ActivitiesModel(gtk.ListStore):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
gtk.ListStore.__init__(self, str, str)
|
gtk.ListStore.__init__(self, str, str, str, str)
|
||||||
|
|
||||||
def add_web_page(self, title, address):
|
def add_web_page(self, title, address):
|
||||||
self.append([ title, address ])
|
self.append([ title, address, None, None ])
|
||||||
|
|
||||||
|
def add_activity(self, buddy, service):
|
||||||
|
(uid, stype) = service.get_activity_uid()
|
||||||
|
title = service.get_one_property('Title')
|
||||||
|
address = urllib.unquote(service.get_one_property('URI'))
|
||||||
|
subtitle = 'Shared by %s' % buddy.get_nick_name()
|
||||||
|
self.append([ title, address, subtitle, uid ])
|
||||||
|
|
||||||
class ActivitiesView(gtk.TreeView):
|
class ActivitiesView(gtk.TreeView):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
gtk.TreeView.__init__(self)
|
gtk.TreeView.__init__(self, model = ActivitiesModel())
|
||||||
|
|
||||||
self.set_headers_visible(False)
|
self.set_headers_visible(False)
|
||||||
|
|
||||||
@ -34,23 +42,32 @@ class ActivitiesView(gtk.TreeView):
|
|||||||
|
|
||||||
def _cell_data_func(self, column, cell, model, it):
|
def _cell_data_func(self, column, cell, model, it):
|
||||||
title = model.get_value(it, 0)
|
title = model.get_value(it, 0)
|
||||||
address = model.get_value(it, 1)
|
subtitle = model.get_value(it, 2)
|
||||||
|
if subtitle is None:
|
||||||
markup = '<big><b>' + title + '</b></big>' + '\n' + address
|
subtitle = model.get_value(it, 1)
|
||||||
|
|
||||||
|
markup = '<big><b>' + title + '</b></big>' + '\n' + subtitle
|
||||||
markup = cgi.escape(markup) # escape the markup
|
markup = cgi.escape(markup) # escape the markup
|
||||||
|
|
||||||
cell.set_property('markup', markup)
|
cell.set_property('markup', markup)
|
||||||
cell.set_property('ellipsize', pango.ELLIPSIZE_END)
|
cell.set_property('ellipsize', pango.ELLIPSIZE_END)
|
||||||
|
|
||||||
def _row_activated_cb(self, treeview, path, column):
|
def _row_activated_cb(self, treeview, path, column):
|
||||||
bus = dbus.SessionBus()
|
bus = dbus.SessionBus()
|
||||||
proxy_obj = bus.get_object('com.redhat.Sugar.Browser', '/com/redhat/Sugar/Browser')
|
proxy_obj = bus.get_object('com.redhat.Sugar.Browser', '/com/redhat/Sugar/Browser')
|
||||||
browser_shell = dbus.Interface(proxy_obj, 'com.redhat.Sugar.BrowserShell')
|
browser_shell = dbus.Interface(proxy_obj, 'com.redhat.Sugar.BrowserShell')
|
||||||
|
|
||||||
model = self.get_model()
|
model = self.get_model()
|
||||||
address = model.get_value(model.get_iter(path), 1)
|
address = model.get_value(model.get_iter(path), 1)
|
||||||
browser_shell.open_browser(address, ignore_reply=True)
|
activity_id = model.get_value(model.get_iter(path), 3)
|
||||||
|
|
||||||
|
print 'Activated row %s %s' % (address, activity_id)
|
||||||
|
|
||||||
|
if activity_id is None:
|
||||||
|
browser_shell.open_browser(address, ignore_reply=True)
|
||||||
|
else:
|
||||||
|
browser_shell.open_browser_with_id(address, activity_id, ignore_reply=True)
|
||||||
|
|
||||||
class StartPage(gtk.HBox):
|
class StartPage(gtk.HBox):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
gtk.HBox.__init__(self)
|
gtk.HBox.__init__(self)
|
||||||
@ -104,8 +121,7 @@ class StartPage(gtk.HBox):
|
|||||||
self._pservice.track_service_type(real_stype)
|
self._pservice.track_service_type(real_stype)
|
||||||
|
|
||||||
def _on_activity_announced_cb(self, pservice, service, buddy):
|
def _on_activity_announced_cb(self, pservice, service, buddy):
|
||||||
(activity_uid, activity_stype) = service.get_activity_uid()
|
self._activities.get_model().add_activity(buddy, service)
|
||||||
print "::: %s announced activity UID %s of type %s" % (buddy.get_nick_name(), activity_uid, activity_stype)
|
|
||||||
|
|
||||||
def _search_entry_activate_cb(self, entry):
|
def _search_entry_activate_cb(self, entry):
|
||||||
self._search()
|
self._search()
|
||||||
|
@ -68,7 +68,7 @@ class ActivityDbusService(dbus.service.Object):
|
|||||||
if name in self._ALLOWED_CALLBACKS and self._callbacks[name]:
|
if name in self._ALLOWED_CALLBACKS and self._callbacks[name]:
|
||||||
gobject.idle_add(self._call_callback_cb, self._callbacks[name], *args)
|
gobject.idle_add(self._call_callback_cb, self._callbacks[name], *args)
|
||||||
|
|
||||||
def connect_to_shell(self):
|
def connect_to_shell(self, activity_id = None):
|
||||||
"""Register with the shell via dbus, getting an activity ID and
|
"""Register with the shell via dbus, getting an activity ID and
|
||||||
and XEMBED window ID in which to display the Activity."""
|
and XEMBED window ID in which to display the Activity."""
|
||||||
self._activity_container_object = self._bus.get_object(SHELL_SERVICE_NAME, \
|
self._activity_container_object = self._bus.get_object(SHELL_SERVICE_NAME, \
|
||||||
@ -76,7 +76,12 @@ class ActivityDbusService(dbus.service.Object):
|
|||||||
self._activity_container = dbus.Interface(self._activity_container_object, \
|
self._activity_container = dbus.Interface(self._activity_container_object, \
|
||||||
SHELL_SERVICE_NAME + ".ActivityContainer")
|
SHELL_SERVICE_NAME + ".ActivityContainer")
|
||||||
|
|
||||||
self._activity_id = self._activity_container.add_activity("")
|
if activity_id is None:
|
||||||
|
self._activity_id = self._activity_container.add_activity("")
|
||||||
|
else:
|
||||||
|
self._activity_id = activity_id
|
||||||
|
self._activity_container.add_activity_with_id("", activity_id)
|
||||||
|
|
||||||
self._object_path = SHELL_SERVICE_PATH + "/Activities/%s" % self._activity_id
|
self._object_path = SHELL_SERVICE_PATH + "/Activities/%s" % self._activity_id
|
||||||
|
|
||||||
print "ActivityDbusService: object path is '%s'" % self._object_path
|
print "ActivityDbusService: object path is '%s'" % self._object_path
|
||||||
@ -172,10 +177,10 @@ class Activity(object):
|
|||||||
"""Return whether or not this Activity is visible to the user."""
|
"""Return whether or not this Activity is visible to the user."""
|
||||||
return self._has_focus
|
return self._has_focus
|
||||||
|
|
||||||
def connect_to_shell(self):
|
def connect_to_shell(self, activity_id = None):
|
||||||
"""Called by our controller to tell us to initialize and connect
|
"""Called by our controller to tell us to initialize and connect
|
||||||
to the shell."""
|
to the shell."""
|
||||||
self._dbus_service.connect_to_shell()
|
self._dbus_service.connect_to_shell(activity_id)
|
||||||
|
|
||||||
def _internal_on_connected_to_shell_cb(self, activity_object, activity_id):
|
def _internal_on_connected_to_shell_cb(self, activity_object, activity_id):
|
||||||
"""Callback when the dbus service object has connected to the shell."""
|
"""Callback when the dbus service object has connected to the shell."""
|
||||||
|
@ -16,13 +16,16 @@ from sugar.chat.GroupChat import GroupChat
|
|||||||
|
|
||||||
class ActivityHost(dbus.service.Object):
|
class ActivityHost(dbus.service.Object):
|
||||||
|
|
||||||
def __init__(self, activity_container, activity_name):
|
def __init__(self, activity_container, activity_name, activity_id = None):
|
||||||
self.activity_name = activity_name
|
self.activity_name = activity_name
|
||||||
self.ellipsize_tab = False
|
self.ellipsize_tab = False
|
||||||
|
|
||||||
self.activity_container = activity_container
|
self.activity_container = activity_container
|
||||||
|
|
||||||
self.activity_id = sugar.util.unique_id()
|
if activity_id is None:
|
||||||
|
self.activity_id = sugar.util.unique_id()
|
||||||
|
else:
|
||||||
|
self.activity_id = activity_id
|
||||||
|
|
||||||
self.dbus_object_name = "/com/redhat/Sugar/Shell/Activities/%s" % self.activity_id
|
self.dbus_object_name = "/com/redhat/Sugar/Shell/Activities/%s" % self.activity_id
|
||||||
|
|
||||||
@ -305,6 +308,15 @@ class ActivityContainer(dbus.service.Object):
|
|||||||
#self.__print_activities()
|
#self.__print_activities()
|
||||||
return activity.get_host_activity_id()
|
return activity.get_host_activity_id()
|
||||||
|
|
||||||
|
@dbus.service.method("com.redhat.Sugar.Shell.ActivityContainer", \
|
||||||
|
in_signature="ss", \
|
||||||
|
out_signature="s", \
|
||||||
|
sender_keyword="sender")
|
||||||
|
def add_activity_with_id(self, activity_name, activity_id, sender):
|
||||||
|
activity = ActivityHost(self, activity_name, activity_id)
|
||||||
|
self.activities.append((sender, activity))
|
||||||
|
self.current_activity = activity
|
||||||
|
|
||||||
def __print_activities(self):
|
def __print_activities(self):
|
||||||
print "__print_activities: %d activities registered" % len(self.activities)
|
print "__print_activities: %d activities registered" % len(self.activities)
|
||||||
i = 0
|
i = 0
|
||||||
|
Loading…
Reference in New Issue
Block a user