Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksey Lim <alsroot@sugarlabs.org>2012-07-24 20:16:43 (GMT)
committer Aleksey Lim <alsroot@sugarlabs.org>2012-07-24 20:16:43 (GMT)
commit3f9d5bb5ab150ed1d9c7d4a2f8ddf55aef07e645 (patch)
tree7a3302aa9b3f966ae6bfd5554c2b6046ada3b570
parentc869ea9e4b0f0d2a35174e727b563bfc9160b81b (diff)
Move CP section to sweets-desktop; add binding file to start DBus services
-rw-r--r--cpsection/__init__.py21
-rw-r--r--cpsection/model.py14
-rw-r--r--cpsection/view.py163
-rw-r--r--plugin/__init__.py73
-rw-r--r--plugin/binding1
-rw-r--r--plugin/dbus-1/services/org.laptop.sugar.DataStore.service3
-rw-r--r--plugin/dbus-1/services/org.sugarlabs.Network.service3
-rw-r--r--sweets.recipe4
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 &&