sugar-toolkit-gtk3/src/sugar3/activity/activityservice.py

84 lines
3.0 KiB
Python
Raw Normal View History

# Copyright (C) 2006-2007 Red Hat, Inc.
2007-02-21 19:39:11 +01:00
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2 of the License, or (at your option) any later version.
#
# This library 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
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the
# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.
"""
UNSTABLE. It should really be internal to the Activity class.
"""
import logging
2007-02-21 19:39:11 +01:00
import dbus
import dbus.service
2009-08-25 21:12:40 +02:00
_ACTIVITY_SERVICE_NAME = 'org.laptop.Activity'
_ACTIVITY_SERVICE_PATH = '/org/laptop/Activity'
_ACTIVITY_INTERFACE = 'org.laptop.Activity'
2007-02-21 19:39:11 +01:00
2009-08-25 21:12:40 +02:00
2007-02-21 19:39:11 +01:00
class ActivityService(dbus.service.Object):
"""Base dbus service object that each Activity uses to export dbus methods.
2007-02-21 19:39:11 +01:00
The dbus service is separate from the actual Activity object so that we can
tightly control what stuff passes through the dbus python bindings."""
def __init__(self, activity):
"""Initialise the service for the given activity
activity -- sugar.activity.activity.Activity instance
Creates dbus services that use the instance's activity_id
as discriminants among all active services
of this type. That is, the services are all available
as names/paths derived from the instance's activity_id.
The various methods exposed on dbus are just forwarded
to the client Activity object's equally-named methods.
"""
activity.realize()
activity_id = activity.get_id()
service_name = _ACTIVITY_SERVICE_NAME + activity_id
2009-08-25 21:12:40 +02:00
object_path = _ACTIVITY_SERVICE_PATH + '/' + activity_id
2007-02-21 19:39:11 +01:00
bus = dbus.SessionBus()
bus_name = dbus.service.BusName(service_name, bus=bus)
dbus.service.Object.__init__(self, bus_name, object_path)
self._activity = activity
@dbus.service.method(_ACTIVITY_INTERFACE)
def SetActive(self, active):
2009-08-24 12:54:02 +02:00
logging.debug('ActivityService.set_active: %s.', active)
self._activity.props.active = active
2007-09-11 17:53:27 +02:00
@dbus.service.method(_ACTIVITY_INTERFACE)
def InviteContact(self, account_path, contact_id):
self._activity.invite(account_path, contact_id)
2007-09-11 17:53:27 +02:00
@dbus.service.method(_ACTIVITY_INTERFACE)
def HandleViewSource(self):
self._activity.handle_view_source()
@dbus.service.method(_ACTIVITY_INTERFACE,
async_callbacks=('async_cb', 'async_err_cb'))
def GetDocumentPath(self, async_cb, async_err_cb):
try:
self._activity.get_document_path(async_cb, async_err_cb)
except Exception, e:
async_err_cb(e)