Address comments from Simon's review

This commit is contained in:
Tomeu Vizoso 2010-08-20 16:25:13 +02:00
parent 1af1bc9713
commit d156ff56a8
3 changed files with 8 additions and 179 deletions

View File

@ -70,10 +70,6 @@ class ActivityService(dbus.service.Object):
def InviteContact(self, account_path, contact_id): def InviteContact(self, account_path, contact_id):
self._activity.invite(account_path, contact_id) self._activity.invite(account_path, contact_id)
@dbus.service.method(_ACTIVITY_INTERFACE)
def Invite(self, buddy_key):
raise NotImplementedError
@dbus.service.method(_ACTIVITY_INTERFACE) @dbus.service.method(_ACTIVITY_INTERFACE)
def HandleViewSource(self): def HandleViewSource(self):
self._activity.handle_view_source() self._activity.handle_view_source()

View File

@ -15,6 +15,10 @@
# Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Free Software Foundation, Inc., 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA. # Boston, MA 02111-1307, USA.
"""
UNSTABLE. It should really be internal to the sugar.presence package.
"""
from functools import partial from functools import partial
import dbus import dbus
@ -34,6 +38,8 @@ class Connection(object):
self.connected = False self.connected = False
class ConnectionManager(object): class ConnectionManager(object):
"""Track available telepathy connections"""
def __init__(self): def __init__(self):
self._connections_per_account = {} self._connections_per_account = {}

View File

@ -16,8 +16,7 @@
# Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Free Software Foundation, Inc., 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA. # Boston, MA 02111-1307, USA.
"""UI class to access system-level presence object """
STABLE. STABLE.
""" """
@ -44,27 +43,8 @@ ACCOUNT_MANAGER_SERVICE = 'org.freedesktop.Telepathy.AccountManager'
ACCOUNT_MANAGER_PATH = '/org/freedesktop/Telepathy/AccountManager' ACCOUNT_MANAGER_PATH = '/org/freedesktop/Telepathy/AccountManager'
class PresenceService(gobject.GObject): class PresenceService(gobject.GObject):
"""UI-side interface to the dbus presence service """Provides simplified access to the Telepathy framework to activities"""
This class provides UI programmers with simplified access
to the dbus service of the same name. It allows for observing
various events from the presence service as GObject events,
as well as some basic introspection queries.
"""
__gsignals__ = { __gsignals__ = {
'buddy-appeared': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
([gobject.TYPE_PYOBJECT])),
'buddy-disappeared': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
([gobject.TYPE_PYOBJECT])),
# parameters: (activity: Activity, inviter: Buddy, message: unicode)
'activity-invitation': (gobject.SIGNAL_RUN_FIRST, None, ([object]*3)),
'private-invitation': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
([gobject.TYPE_PYOBJECT, gobject.TYPE_PYOBJECT,
gobject.TYPE_PYOBJECT, str])),
'activity-appeared': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
([gobject.TYPE_PYOBJECT])),
'activity-disappeared': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
([gobject.TYPE_PYOBJECT])),
'activity-shared': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, 'activity-shared': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
([gobject.TYPE_PYOBJECT, gobject.TYPE_PYOBJECT, ([gobject.TYPE_PYOBJECT, gobject.TYPE_PYOBJECT,
gobject.TYPE_PYOBJECT])), gobject.TYPE_PYOBJECT])),
@ -123,85 +103,6 @@ class PresenceService(gobject.GObject):
""" """
del self._objcache[object_path] del self._objcache[object_path]
def _emit_buddy_appeared_signal(self, object_path):
"""Emit GObject event with presence.buddy.Buddy object"""
self.emit('buddy-appeared', self._new_object(object_path))
return False
def _buddy_appeared_cb(self, op):
"""Callback for dbus event (forwards to method to emit GObject
event)"""
gobject.idle_add(self._emit_buddy_appeared_signal, op)
def _emit_buddy_disappeared_signal(self, object_path):
"""Emit GObject event with presence.buddy.Buddy object"""
# Don't try to create a new object here if needed; it will probably
# fail anyway because the object has already been destroyed in the PS
if self._have_object(object_path):
obj = self._objcache[object_path]
self.emit('buddy-disappeared', obj)
# We cannot maintain the object in the cache because that would
# keep a lot of objects from being collected. That includes UI
# objects due to signals using strong references.
# If we want to cache some despite the memory usage increase,
# we could use a LRU cache limited to some value.
del self._objcache[object_path]
obj.destroy()
return False
def _buddy_disappeared_cb(self, object_path):
"""Callback for dbus event (forwards to method to emit GObject
event)"""
gobject.idle_add(self._emit_buddy_disappeared_signal, object_path)
def _emit_activity_invitation_signal(self, activity_path, buddy_path,
message):
"""Emit GObject event with presence.activity.Activity object"""
self.emit('activity-invitation', self._new_object(activity_path),
self._new_object(buddy_path), unicode(message))
return False
def _activity_invitation_cb(self, activity_path, buddy_path, message):
"""Callback for dbus event (forwards to method to emit GObject
event)"""
gobject.idle_add(self._emit_activity_invitation_signal, activity_path,
buddy_path, message)
def _emit_private_invitation_signal(self, bus_name, connection,
channel, chan_type):
"""Emit GObject event with bus_name, connection and channel"""
self.emit('private-invitation', bus_name, connection,
channel, chan_type)
return False
def _private_invitation_cb(self, bus_name, connection, channel, chan_type):
"""Callback for dbus event (forwards to method to emit GObject
event)"""
gobject.idle_add(self._emit_private_invitation_signal, bus_name,
connection, channel, chan_type)
def _emit_activity_appeared_signal(self, object_path):
"""Emit GObject event with presence.activity.Activity object"""
self.emit('activity-appeared', self._new_object(object_path))
return False
def _activity_appeared_cb(self, object_path):
"""Callback for dbus event (forwards to method to emit GObject
event)"""
gobject.idle_add(self._emit_activity_appeared_signal, object_path)
def _emit_activity_disappeared_signal(self, object_path):
"""Emit GObject event with presence.activity.Activity object"""
self.emit('activity-disappeared', self._new_object(object_path))
return False
def _activity_disappeared_cb(self, object_path):
"""Callback for dbus event (forwards to method to emit GObject
event)"""
gobject.idle_add(self._emit_activity_disappeared_signal, object_path)
def get(self, object_path): def get(self, object_path):
"""Return the Buddy or Activity object corresponding to the given """Return the Buddy or Activity object corresponding to the given
D-Bus object path. D-Bus object path.
@ -463,80 +364,6 @@ class PresenceService(gobject.GObject):
return connection.requested_bus_name, connection.object_path return connection.requested_bus_name, connection.object_path
class _OfflineInterface(object):
"""Offline-presence-service interface
Used to mimic the behaviour of a real PresenceService sufficiently
to avoid crashing client code that expects the given interface.
XXX we could likely return a "MockOwner" object reasonably
easily, but would it be worth it?
"""
def raiseException(self, *args, **named):
"""Raise dbus.exceptions.DBusException"""
raise dbus.exceptions.DBusException('PresenceService Interface not '
'available')
GetActivities = raiseException
GetActivityById = raiseException
GetBuddies = raiseException
GetBuddyByPublicKey = raiseException
GetOwner = raiseException
GetPreferredConnection = raiseException
def ShareActivity(self, actid, atype, name, properties, reply_handler,
error_handler):
"""Pretend to share and fail..."""
exc = IOError('Unable to share activity as PresenceService is not '
'currently available')
return error_handler(exc)
class _MockPresenceService(gobject.GObject):
"""Test fixture allowing testing of items that use PresenceService
See PresenceService for usage and purpose
"""
__gsignals__ = {
'buddy-appeared': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
([gobject.TYPE_PYOBJECT])),
'buddy-disappeared': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
([gobject.TYPE_PYOBJECT])),
'activity-invitation': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
([gobject.TYPE_PYOBJECT])),
'private-invitation': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
([gobject.TYPE_PYOBJECT, gobject.TYPE_PYOBJECT,
gobject.TYPE_PYOBJECT])),
'activity-appeared': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
([gobject.TYPE_PYOBJECT])),
'activity-disappeared': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
([gobject.TYPE_PYOBJECT])),
}
def __init__(self):
gobject.GObject.__init__(self)
def get_activities(self):
return []
def get_activity(self, activity_id):
return None
def get_buddies(self):
return []
def get_buddy(self, key):
return None
def get_owner(self):
return None
def share_activity(self, activity, properties=None):
return None
_ps = None _ps = None