Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLucian 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)
commit81c757a375cf505eaf73c5ffb5a04a5c8c35020a (patch)
treee9e92a1d8e0c1e38c0c3f7e6acf6ebbf39fbf450
parentf3d7ef6e6c91866d2bc63e7e094690ccd883d41e (diff)
Port SSB feature from the webified fork to a current Browse
-rw-r--r--webactivity.py30
-rw-r--r--webtoolbar.py58
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: