Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/plugin/__init__.py
diff options
context:
space:
mode:
Diffstat (limited to 'plugin/__init__.py')
-rw-r--r--plugin/__init__.py78
1 files changed, 41 insertions, 37 deletions
diff --git a/plugin/__init__.py b/plugin/__init__.py
index 05e1097..5f48f95 100644
--- a/plugin/__init__.py
+++ b/plugin/__init__.py
@@ -14,6 +14,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import json
+import time
import logging
import subprocess
from os.path import abspath, dirname
@@ -24,7 +25,8 @@ import dbus
import gobject
from sugar.graphics.alert import NotifyAlert, ErrorAlert
-from sugar_network import sugar, api_url, server_mode
+
+from sugar_network import api_url, server_mode, IPCClient
from active_toolkit.options import Option
from jarabe import plugins
@@ -33,7 +35,8 @@ ORDER = 5
TITLE = _('Sugar Network integration')
SN_BROWSER_NAME = 'sugar-network-browser'
-SN_MASER_URL = 'http://api-devel.network.sugarlabs.org'
+#SN_MASER_URL = 'http://api-testing.network.sugarlabs.org'
+SN_MASER_URL = 'http://localhost:8800'
_ALERT_SEVERITIES = {
# severity: (alert_class, alert_message)
@@ -88,7 +91,7 @@ def start():
shell = get_model()
def delayed_start():
- get_client().Publish({'event': 'delayed-start'})
+ get_client().post([], {'event': 'delayed-start'}, cmd='publish')
get_browser()
def activity_added_cb(model, activity):
@@ -99,11 +102,6 @@ def start():
shell.connect('activity-added', activity_added_cb)
-def binding():
- srcroot = dirname(abspath(__file__))
- return ['export XDG_DATA_DIRS=%s:$XDG_DATA_DIRS' % srcroot]
-
-
def control_panel_section():
section = gtk.VBox()
@@ -152,6 +150,16 @@ def get_client():
global _client
if _client is None:
+ ts = time.time()
+ subprocess.check_call([
+ 'sugar-network-service', 'start',
+ '--webui',
+ '--delayed-start',
+ '--lazy-open',
+ '--replace',
+ ])
+ _logger.debug('Starting sugar-network-service took %s seconds',
+ time.time() - ts)
_client = _Client()
return _client
@@ -198,38 +206,34 @@ def _get_bundle_path(self):
return env.split('=', 1)[-1]
-class _Client(object):
+class _Client(gobject.GObject):
+
+ __gsignals__ = {
+ 'event': (
+ gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
+ [str, gobject.TYPE_PYOBJECT]),
+ }
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)
+ gobject.GObject.__init__(self)
+ self._client = IPCClient()
+ self._subscription = self._client.subscribe()
+ gobject.io_add_watch(self._subscription.fileno(),
+ gobject.IO_IN | gobject.IO_HUP, self.__subscription_cb)
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'))
+ def __subscription_cb(self, source, cb_condition, pipe, activity_id):
+ try:
+ event = self._subscription.pull()
+ if event is not None:
+ event_type = event['event']
+ if event_type == 'alert':
+ add_alert(event['severity'], msg=event['message'])
+ elif event_type == 'sync_complete':
+ add_alert('info', msg=_('Synchronization completed'))
+ self.emit('event', event_type, event)
+ except Exception:
+ _logger.exception('Cannot dispatch %r event', event)
+ return True