diff options
author | Aleksey Lim <alsroot@sugarlabs.org> | 2012-07-24 20:16:43 (GMT) |
---|---|---|
committer | Aleksey Lim <alsroot@sugarlabs.org> | 2012-07-24 20:16:43 (GMT) |
commit | 3f9d5bb5ab150ed1d9c7d4a2f8ddf55aef07e645 (patch) | |
tree | 7a3302aa9b3f966ae6bfd5554c2b6046ada3b570 | |
parent | c869ea9e4b0f0d2a35174e727b563bfc9160b81b (diff) |
Move CP section to sweets-desktop; add binding file to start DBus services
-rw-r--r-- | cpsection/__init__.py | 21 | ||||
-rw-r--r-- | cpsection/model.py | 14 | ||||
-rw-r--r-- | cpsection/view.py | 163 | ||||
-rw-r--r-- | plugin/__init__.py | 73 | ||||
-rw-r--r-- | plugin/binding | 1 | ||||
-rw-r--r-- | plugin/dbus-1/services/org.laptop.sugar.DataStore.service | 3 | ||||
-rw-r--r-- | plugin/dbus-1/services/org.sugarlabs.Network.service | 3 | ||||
-rw-r--r-- | sweets.recipe | 4 |
8 files changed, 55 insertions, 227 deletions
diff --git a/cpsection/__init__.py b/cpsection/__init__.py deleted file mode 100644 index 7203fc9..0000000 --- a/cpsection/__init__.py +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (C) 2012 Aleksey Lim -# -# 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 -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. - -from gettext import gettext as _ - - -CLASS = 'Sweets' -ICON = 'sweets' -TITLE = _('Sweets Distribution') diff --git a/cpsection/model.py b/cpsection/model.py deleted file mode 100644 index ee29047..0000000 --- a/cpsection/model.py +++ /dev/null @@ -1,14 +0,0 @@ -# Copyright (C) 2012 Aleksey Lim -# -# 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 -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. diff --git a/cpsection/view.py b/cpsection/view.py deleted file mode 100644 index 7c0b329..0000000 --- a/cpsection/view.py +++ /dev/null @@ -1,163 +0,0 @@ -# Copyright (C) 2012 Aleksey Lim -# -# 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 -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. - -import os -from os.path import exists, expanduser -from gettext import gettext as _ - -import gtk - -from sugar_network import api_url, server_mode -from active_toolkit.options import Option -from sugar.graphics import style - -from jarabe.controlpanel.sectionview import SectionView -from jarabe.plugins.sn import sugar_network, SN_MASER_URL - - -# Only for XO laptops -_XSESSION_PATH = expanduser('~/.xsession') -_XSESSION_FILE = """\ -exec sweets-sugar -""" - - -class Sweets(SectionView): - - def __init__(self, model, alerts): - SectionView.__init__(self) - - self.set_border_width(style.DEFAULT_SPACING * 2) - self.set_spacing(style.DEFAULT_SPACING) - - def section_new(title, container, spacing=style.DEFAULT_SPACING): - self.pack_start(gtk.HSeparator(), expand=False) - label = gtk.Label(title) - label.set_alignment(0, 0) - self.pack_start(label, expand=False) - box = container() - box.props.border_width = style.DEFAULT_SPACING - box.props.spacing = spacing - self.pack_start(box, expand=False) - return box - - section = section_new(_('Sweets Distribution features'), gtk.VBox, 0) - - self._xsession = gtk.CheckButton() - self._xsession.props.label = \ - _('Sweets Desktop is default Sugar session') - self._xsession.connect('toggled', - lambda button: _set_xsession(button.props.active)) - if _is_xo(): - section.pack_start(self._xsession, expand=False) - self._sn_browser = gtk.CheckButton() - self._sn_browser.props.label = _('Sugar Network interface') - self._sn_browser.connect('toggled', self.__sn_browser_toggled_cb) - section.pack_start(self._sn_browser, expand=False) - - section = section_new(_('Sugar Network'), gtk.VBox) - - server_box = gtk.VBox() - section.pack_start(server_box) - self._master = gtk.RadioButton() - self._master.props.label = _('Connect to master server') - self._master.connect('toggled', self.__api_url_toggled_cb, - SN_MASER_URL) - server_box.pack_start(self._master, expand=False) - self._discover = gtk.RadioButton(self._master) - self._discover.props.label = _('Auto discover server in local network') - self._discover.connect('toggled', self.__api_url_toggled_cb, '') - server_box.pack_start(self._discover, expand=False) - - self._sn_server = gtk.CheckButton() - self._sn_server.props.label = _('Behave as a Sugar Network server ' \ - 'providing data from mounted device') - self._sn_server.connect('toggled', self.__sn_server_toggled_cb) - section.pack_start(self._sn_server, expand=False) - - self.show_all() - - self._orig_api_url = api_url.value - self._orig_sn_browser = sugar_network.value - self._orig_sn_server = server_mode.value - self._orig_xsession = _xsession_enabled() - self.setup() - - def setup(self): - if api_url.value: - self._master.props.active = True - else: - self._discover.props.active = True - self._sn_browser.props.active = sugar_network.value - self._sn_server.props.active = server_mode.value - self._xsession.props.active = _xsession_enabled() - - def undo(self): - api_url.value = self._orig_api_url - sugar_network.value = self._orig_sn_browser - server_mode.value = self._orig_sn_server - Option.save() - - if self._orig_xsession != _xsession_enabled(): - _set_xsession(self._orig_xsession) - - self.setup() - - # pylint: disable-msg=E0202,E1101,E0102 - - @property - def needs_restart(self): - Option.save() - return api_url.value != self._orig_api_url or \ - self._sn_browser.props.active != self._orig_sn_browser or \ - self._sn_server.props.active != self._orig_sn_server or \ - self._xsession.props.active != self._orig_xsession - - @needs_restart.setter - def needs_restart(self, value): - # needs_restart is fully calculated - pass - - def __api_url_toggled_cb(self, button, url): - api_url.value = url - Option.save() - - def __sn_browser_toggled_cb(self, button): - sugar_network.value = button.props.active - Option.save() - - def __sn_server_toggled_cb(self, button): - server_mode.value = button.props.active - Option.save() - - -def _xsession_enabled(): - if not exists(_XSESSION_PATH): - return False - with file(_XSESSION_PATH) as f: - return f.read() == _XSESSION_FILE - - -def _set_xsession(enable): - if enable: - with file(_XSESSION_PATH, 'w') as f: - f.write(_XSESSION_FILE) - else: - if exists(_XSESSION_PATH): - os.unlink(_XSESSION_PATH) - - -def _is_xo(): - return exists('/ofw') and exists('/usr/bin/sugar') diff --git a/plugin/__init__.py b/plugin/__init__.py index 61ede76..83d1a69 100644 --- a/plugin/__init__.py +++ b/plugin/__init__.py @@ -18,26 +18,22 @@ import logging import subprocess from gettext import gettext as _ +import gtk import dbus import gobject from sugar.graphics.alert import NotifyAlert, ErrorAlert from sugar_network import sugar, api_url, server_mode from active_toolkit.options import Option +from jarabe import plugins ORDER = 5 +TITLE = _('Sugar Network integration') SN_BROWSER_NAME = 'sugar-network-browser' - SN_MASER_URL = 'http://api-testing.network.sugarlabs.org' -sugar_network = Option( - 'enable Sugar Network support in Sugar Shell', - default=False, type_cast=Option.bool_cast, - action='store_true', name='sugar-network') - - _ALERT_SEVERITIES = { # severity: (alert_class, alert_message) 'error': (ErrorAlert, _('Sugar Network error')), @@ -50,21 +46,20 @@ _launcher = None _client = None _browser = None -Option.seek('sweets', [sugar_network]) Option.seek('local', [api_url, server_mode]) def init(): global _bundleregistry - if not sugar_network.value: - return - if api_url.value and api_url.value != SN_MASER_URL: # For now, keep only global SN server to make testing more relibale api_url.value = SN_MASER_URL Option.save() + # Activities are assumed to be handled by SN + plugins.blacklist('cpsection', 'updater') + import jarabe.model.bundleregistry from .bundleregistry import BundleRegistry @@ -76,15 +71,12 @@ def init(): from .browser import Palette Activity.get_bundle_path = _get_bundle_path - palettes.predefined[SN_BROWSER_NAME] = Palette + #palettes.predefined[SN_BROWSER_NAME] = Palette -def enable(): +def start(): global _launcher - if not sugar_network.value: - return - _bundleregistry.populate() from jarabe.journal import misc @@ -108,8 +100,44 @@ def enable(): shell.connect('activity-added', activity_added_cb) -def disable(): - pass +def control_panel_section(): + section = gtk.VBox() + + server_box = gtk.VBox() + section.pack_start(server_box) + master_button = gtk.RadioButton() + master_button.props.label = _('Connect to master server') + server_box.pack_start(master_button, expand=False) + discover_button = gtk.RadioButton(master_button) + discover_button.props.label = _('Auto discover server in local network') + server_box.pack_start(discover_button, expand=False) + + if api_url.value: + master_button.props.active = True + else: + discover_button.props.active = True + + server_mode_button = gtk.CheckButton() + server_mode_button.props.label = _('Behave as a Sugar Network server ' \ + 'providing data from mounted device') + server_mode_button.props.active = server_mode.value + section.pack_start(server_mode_button, expand=False) + + def master_toggled_cb(button, url): + api_url.value = url + Option.save() + + master_button.connect('toggled', master_toggled_cb, SN_MASER_URL) + discover_button.connect('toggled', master_toggled_cb, '') + + def server_mode_toggled_cb(button): + server_mode.value = button.props.active + Option.save() + + server_mode_button.connect('toggled', server_mode_toggled_cb) + + section.show_all() + return section def get_registry(): @@ -128,9 +156,6 @@ def get_client(): def get_browser(): global _browser - if not sugar_network.value: - return - if _browser is None: from .browser import Browser _browser = Browser() @@ -139,11 +164,7 @@ def get_browser(): def add_alert(severity, callback=None, **kwargs): - if sugar_network.value: - window = get_browser() - else: - from jarabe.journal.journalactivity import get_journal - window = get_journal() + window = get_browser() def response_cb(alert, response_id): window.remove_alert(alert) diff --git a/plugin/binding b/plugin/binding new file mode 100644 index 0000000..b0e0902 --- /dev/null +++ b/plugin/binding @@ -0,0 +1 @@ +export XDG_DATA_DIRS=$PLUGIN_SOURCE:$XDG_DATA_DIRS diff --git a/plugin/dbus-1/services/org.laptop.sugar.DataStore.service b/plugin/dbus-1/services/org.laptop.sugar.DataStore.service new file mode 100644 index 0000000..ed048ba --- /dev/null +++ b/plugin/dbus-1/services/org.laptop.sugar.DataStore.service @@ -0,0 +1,3 @@ +[D-BUS Service] +Name = org.laptop.sugar.DataStore +Exec = /usr/bin/env sugar-network-service --webui --delayed-start start diff --git a/plugin/dbus-1/services/org.sugarlabs.Network.service b/plugin/dbus-1/services/org.sugarlabs.Network.service new file mode 100644 index 0000000..f22cb2d --- /dev/null +++ b/plugin/dbus-1/services/org.sugarlabs.Network.service @@ -0,0 +1,3 @@ +[D-BUS Service] +Name = org.sugarlabs.Network +Exec = /usr/bin/env sugar-network-service --webui --delayed-start start diff --git a/sweets.recipe b/sweets.recipe index f0fd86b..184a188 100644 --- a/sweets.recipe +++ b/sweets.recipe @@ -14,9 +14,7 @@ requires = sugar-network; base/pywebkitgtk [Build] extdir = /opt/sweets/sugar/share/sugar/extensions plugindir = /opt/sweets/sugar/src/jarabe/plugins -install = install -m 0755 -d %(DESTDIR)s/%(extdir)s/cpsection && - cp -r cpsection %(DESTDIR)s/%(extdir)s/cpsection/sn && - install -m 0755 -d %(DESTDIR)s/%(extdir)s/globalkey && +install = install -m 0755 -d %(DESTDIR)s/%(extdir)s/globalkey && cp -r globalkey/*.py %(DESTDIR)s/%(extdir)s/globalkey/ && install -m 0755 -d %(DESTDIR)s/%(plugindir)s && cp -r plugin %(DESTDIR)s/%(plugindir)s/sn && |