diff options
author | Lucian Branescu Mihaila <lucian.branescu@gmail.com> | 2009-11-27 23:51:08 (GMT) |
---|---|---|
committer | Lucian Branescu Mihaila <lucian.branescu@gmail.com> | 2009-11-27 23:51:08 (GMT) |
commit | 81c757a375cf505eaf73c5ffb5a04a5c8c35020a (patch) | |
tree | e9e92a1d8e0c1e38c0c3f7e6acf6ebbf39fbf450 | |
parent | f3d7ef6e6c91866d2bc63e7e094690ccd883d41e (diff) |
Port SSB feature from the webified fork to a current Browse
-rw-r--r-- | webactivity.py | 30 | ||||
-rw-r--r-- | webtoolbar.py | 58 |
2 files changed, 76 insertions, 12 deletions
diff --git a/webactivity.py b/webactivity.py index f881ea7..389a819 100644 --- a/webactivity.py +++ b/webactivity.py @@ -1,5 +1,5 @@ # Copyright (C) 2006, Red Hat, Inc. -# Copyright (C) 2009 Martin Langhoff, Simon Schampijer, Daniel Drake, Tomeu Vizoso +# Copyright (C) 2009 Martin Langhoff, Simon Schampijer, Daniel Drake, Tomeu Vizoso, Lucian Branescu # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -50,6 +50,10 @@ from sugar.graphics.icon import Icon from sugar.graphics.toolbarbox import ToolbarButton from sugar import mime +import ssb +# copy the profile saved in the ssb bundle to the activity session, if needed +ssb.copy_profile() + PROFILE_VERSION = 1 _profile_version = 0 @@ -168,9 +172,12 @@ from sugar.presence.tubeconn import TubeConnection from messenger import Messenger from linkbutton import LinkButton -SERVICE = "org.laptop.WebActivity" -IFACE = SERVICE -PATH = "/org/laptop/WebActivity" +def _set_dbus_globals(bundle_id): + '''Set up the dbus strings, based on the bundle_id''' + global SERVICE, IFACE, PATH + SERVICE = bundle_id + IFACE = bundle_id + PATH = '/' + bundle_id.replace('.', '/') _logger = logging.getLogger('web-activity') @@ -184,6 +191,10 @@ class WebActivity(activity.Activity): _set_accept_languages() _seed_xs_cookie() + _set_dbus_globals(self.get_bundle_id()) + + # figure out whether we are an SSB + self._is_ssb = ssb.get_is_ssb(self) # don't pick up the sugar theme - use the native mozilla one instead cls = components.classes['@mozilla.org/preferences-service;1'] @@ -193,7 +204,7 @@ class WebActivity(activity.Activity): self._primary_toolbar = PrimaryToolbar(self._tabbed_view, self) self._primary_toolbar.connect('add-link', self._link_add_button_cb) - self._primary_toolbar.connect('keep-offline', self._keep_offline_cb) + self._primary_toolbar.connect('keep-offline', self._keep_offline_cb) self._tray = HTray() self.set_tray(self._tray, gtk.POS_BOTTOM) @@ -224,6 +235,10 @@ class WebActivity(activity.Activity): self.connect('key-press-event', self._key_press_cb) + if self._is_ssb: + self._homepage = os.path.join(activity.get_bundle_path(), + 'data/homepage').read() + if handle.uri: self._tabbed_view.current_browser.load_uri(handle.uri) elif not self._jobject.file_path: @@ -356,7 +371,10 @@ class WebActivity(activity.Activity): def _load_homepage(self): browser = self._tabbed_view.current_browser - if os.path.isfile(_LIBRARY_PATH): + + if self._is_ssb: + browser.load_uri(self._homepage) + elif os.path.isfile(_LIBRARY_PATH): browser.load_uri('file://' + _LIBRARY_PATH) else: default_page = os.path.join(activity.get_bundle_path(), diff --git a/webtoolbar.py b/webtoolbar.py index 7be8dfb..2e7794e 100644 --- a/webtoolbar.py +++ b/webtoolbar.py @@ -34,6 +34,7 @@ from sugar.activity import activity import filepicker import places +import ssb _MAX_HISTORY_ENTRIES = 15 @@ -223,9 +224,9 @@ class PrimaryToolbar(ToolbarBox): 'add-link': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([])), - 'keep-offline': (gobject.SIGNAL_RUN_FIRST, - gobject.TYPE_NONE, - ([])), + 'keep-offline': (gobject.SIGNAL_RUN_FIRST, + gobject.TYPE_NONE, + ([])), } def __init__(self, tabbed_view, act): @@ -240,11 +241,17 @@ class PrimaryToolbar(ToolbarBox): activity_button = ActivityToolbarButton(self._activity) self.toolbar.insert(activity_button, 0) - self._keep_offline = ToolButton('htmloff') - self._keep_offline.set_tooltip(_("Save offline")) + self._keep_offline = ToolButton('htmloff') + self._keep_offline.set_tooltip(_('Save offline')) self._keep_offline.connect('clicked', self.__keep_offline_cb) self._keep_offline.show() activity_button.props.page.insert(self._keep_offline, -1) + + self._create_ssb = ToolButton('activity-ssb') + self._create_ssb.set_tooltip(_('Create Activity')) + self._create_ssb.connect('clicked', self.__create_ssb_cb) + self._create_ssb.show() + activity_button.props.page.insert(self._create_ssb, -1) self._stop_and_reload = ToolButton('media-playback-stop') self._stop_and_reload.connect('clicked', self._stop_and_reload_cb) @@ -304,7 +311,46 @@ class PrimaryToolbar(ToolbarBox): self._connect_to_browser(tabbed_view.props.current_browser) def __keep_offline_cb(self, button): - self.emit('keep-offline') + self.emit('keep-offline') + + def __create_ssb_cb(self, button): + # alert to show after creation + alert = Alert() + alert.props.title = _('Activity Creation') + + cancel_icon = Icon(icon_name='dialog-cancel') + alert.add_button(gtk.RESPONSE_CANCEL, _('Cancel'), cancel_icon) + cancel_icon.show() + + open_icon = Icon(icon_name='filesave') + alert.add_button(gtk.RESPONSE_APPLY, _('Show in Journal'), open_icon) + open_icon.show() + + ok_icon = Icon(icon_name='dialog-ok') + alert.add_button(gtk.RESPONSE_OK, _('Install'), ok_icon) + ok_icon.show() + + self._activity.add_alert(alert) + alert.connect('response', self._create_ssb_alert_cb) + + try: + self._ssb.create() + except Exception: + # whatever goes wrong, we ignore it + alert.props.msg = _('Failed!') + else: + alert.props.msg = _('Done!') + finally: + alert.show() + + def _create_ssb_alert_cb(self, alert, response_id): + self._activity.remove_alert(alert) + + if response_id is not gtk.RESPONSE_CANCEL: + if response_id is gtk.RESPONSE_APPLY: + self._ssb.show_in_journal() + else: + self._ssb.install() def _connect_to_browser(self, browser): if self._progress_listener is not None: |