Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/plugin/__init__.py
diff options
context:
space:
mode:
authorAleksey Lim <alsroot@sugarlabs.org>2012-07-23 09:46:37 (GMT)
committer Aleksey Lim <alsroot@sugarlabs.org>2012-07-23 09:46:37 (GMT)
commitc869ea9e4b0f0d2a35174e727b563bfc9160b81b (patch)
tree96a910dcdeda4f1b947bcf15abb2eab5c849a74c /plugin/__init__.py
parentc0326e3f93f14425a0005d42f38017c30c8d0feb (diff)
Switch to DBus SN interface
Diffstat (limited to 'plugin/__init__.py')
-rw-r--r--plugin/__init__.py61
1 files changed, 49 insertions, 12 deletions
diff --git a/plugin/__init__.py b/plugin/__init__.py
index 5fe5cf7..61ede76 100644
--- a/plugin/__init__.py
+++ b/plugin/__init__.py
@@ -13,14 +13,16 @@
# 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
+import json
+import logging
import subprocess
from gettext import gettext as _
+import dbus
import gobject
from sugar.graphics.alert import NotifyAlert, ErrorAlert
-from sugar_network import sugar, GlibClient, api_url, server_mode
+from sugar_network import sugar, api_url, server_mode
from active_toolkit.options import Option
@@ -42,6 +44,7 @@ _ALERT_SEVERITIES = {
None: (NotifyAlert, _('Sugar Network')),
}
+_logger = logging.getLogger('plugins.sn')
_bundleregistry = None
_launcher = None
_client = None
@@ -62,10 +65,6 @@ def init():
api_url.value = SN_MASER_URL
Option.save()
- if not os.fork():
- args = ['sugar-network-service', '--webui', '--delayed-start', 'start']
- os.execvp(args[0], args)
-
import jarabe.model.bundleregistry
from .bundleregistry import BundleRegistry
@@ -81,15 +80,11 @@ def init():
def enable():
- global _launcher, _client
+ global _launcher
if not sugar_network.value:
return
- _client = GlibClient()
- _client.connect('alert',
- lambda sender, severity, message: add_alert(severity, msg=message))
-
_bundleregistry.populate()
from jarabe.journal import misc
@@ -102,7 +97,7 @@ def enable():
shell = get_model()
def delayed_start():
- _client.publish('delayed-start')
+ get_client().Publish({'event': 'delayed-start'})
get_browser()
def activity_added_cb(model, activity):
@@ -122,6 +117,11 @@ def get_registry():
def get_client():
+ global _client
+
+ if _client is None:
+ _client = _Client()
+
return _client
@@ -171,3 +171,40 @@ def _get_bundle_path(self):
for env in f.read().split('\0'):
if env.startswith('SUGAR_BUNDLE_PATH='):
return env.split('=', 1)[-1]
+
+
+class _Client(object):
+
+ def __init__(self):
+ self._event_callbacks = []
+ self._client = dbus.Interface(
+ dbus.SessionBus().get_object(
+ 'org.sugarlabs.Network',
+ '/org/sugarlabs/Network'),
+ 'org.sugarlabs.Network')
+ self._client.connect_to_signal('Event', self.__Event_cb)
+
+ def connect_to_signal(self, signal, callback):
+ if signal == 'Event':
+ self._event_callbacks.append(callback)
+ else:
+ return self._client.connect_to_signal(signal, callback)
+
+ def __getattr__(self, name):
+ return getattr(self._client, name)
+
+ def __Event_cb(self, event):
+ event = json.loads(event)
+
+ for callback in self._event_callbacks:
+ try:
+ callback(event)
+ except Exception:
+ _logger.exception('%r callback failed on %r SN event',
+ callback, event)
+
+ event_type = event.get('event')
+ if event.get('event') == 'alert':
+ add_alert(event['severity'], msg=event['message'])
+ elif event_type == 'sync_complete':
+ add_alert('info', msg=_('Synchronization completed'))