--- /dev/null
+import logging
+
+import telepathy
+
+import gtk_toolbox
+import simple_presence
+import gvoice.state_machine as state_machine
+
+
+_moduleLogger = logging.getLogger('presence')
+
+
+class PresenceMixin(telepathy.server.ConnectionInterfacePresence, simple_presence.TheOneRingPresence):
+
+ def __init__(self):
+ telepathy.server.ConnectionInterfacePresence.__init__(self)
+ simple_presence.TheOneRingPresence.__init__(self)
+
+ @gtk_toolbox.log_exception(_moduleLogger)
+ def GetStatuses(self):
+ # the arguments are in common to all on-line presences
+ arguments = {}
+
+ return dict(
+ (localType, (telepathyType, True, True, arguments))
+ for (localType, telepathyType) in self.TO_PRESENCE_TYPE.iteritems()
+ )
+
+ @gtk_toolbox.log_exception(_moduleLogger)
+ def RequestPresence(self, contactIds):
+ presences = self.__get_presences(contactIds)
+ self.PresenceUpdate(presences)
+
+ @gtk_toolbox.log_exception(_moduleLogger)
+ def GetPresence(self, contactIds):
+ return self.__get_presences(contactIds)
+
+ @gtk_toolbox.log_exception(_moduleLogger)
+ def SetStatus(self, statuses):
+ assert len(statuses) == 1
+ status, arguments = statuses.items()[0]
+ assert len(arguments) == 0
+ self.set_presence(status)
+
+ def __get_presences(self, contacts):
+ arguments = {}
+ return dict(
+ (h, (0, {presence: arguments}))
+ for (h, (presenceType, presence)) in self.get_presences(contacts).iteritems()
+ )
OFFLINE: telepathy.constants.CONNECTION_PRESENCE_TYPE_OFFLINE,
}
-
-class SimplePresenceMixin(telepathy.server.ConnectionInterfaceSimplePresence):
-
- def __init__(self):
- telepathy.server.ConnectionInterfaceSimplePresence.__init__(self)
-
- self._implement_property_get(
- telepathy.server.CONNECTION_INTERFACE_SIMPLE_PRESENCE,
- {'Statuses' : self._get_statuses}
- )
-
@property
def session(self):
"""
"""
raise NotImplementedError("Abstract function called")
- @gtk_toolbox.log_exception(_moduleLogger)
- def GetPresences(self, contacts):
+ def get_presences(self, contactIds):
"""
@return {ContactHandle: (Status, Presence Type, Message)}
"""
presences = {}
- for handleId in contacts:
+ for handleId in contactIds:
h = self.handle(telepathy.HANDLE_TYPE_CONTACT, handleId)
if isinstance(h, handle.ConnectionHandle):
isDnd = self.session.backend.is_dnd()
presence = TheOneRingPresence.AWAY
else:
raise telepathy.errors.InvalidArgument("Unsupported state on the state machine: %s" % state)
- personalMessage = u""
presenceType = TheOneRingPresence.TO_PRESENCE_TYPE[presence]
else:
presence = TheOneRingPresence.ONLINE
- personalMessage = u""
presenceType = TheOneRingPresence.TO_PRESENCE_TYPE[presence]
- presences[h] = (presenceType, presence, personalMessage)
+ presences[h] = (presenceType, presence)
return presences
- @gtk_toolbox.log_exception(_moduleLogger)
- def SetPresence(self, status, message):
- if message:
- raise telepathy.errors.InvalidArgument("Messages aren't supported")
-
- if status == TheOneRingPresence.ONLINE:
+ def set_presence(self, status):
+ if status == self.ONLINE:
self.session.backend.set_dnd(False)
self.session.stateMachine.set_state(state_machine.StateMachine.STATE_ACTIVE)
- elif status == TheOneRingPresence.AWAY:
+ elif status == self.AWAY:
self.session.stateMachine.set_state(state_machine.StateMachine.STATE_IDLE)
- elif status == TheOneRingPresence.HIDDEN:
+ elif status == self.HIDDEN:
self.session.backend.set_dnd(True)
- elif status == TheOneRingPresence.OFFLINE:
+ elif status == self.OFFLINE:
self.Disconnect()
else:
raise telepathy.errors.InvalidArgument("Unsupported status: %r" % status)
_moduleLogger.info("Setting Presence to '%s'" % status)
+class SimplePresenceMixin(telepathy.server.ConnectionInterfaceSimplePresence, TheOneRingPresence):
+
+ def __init__(self):
+ telepathy.server.ConnectionInterfaceSimplePresence.__init__(self)
+ TheOneRingPresence.__init__(self)
+
+ self._implement_property_get(
+ telepathy.server.CONNECTION_INTERFACE_SIMPLE_PRESENCE,
+ {'Statuses' : self._get_statuses}
+ )
+
+ @gtk_toolbox.log_exception(_moduleLogger)
+ def GetPresences(self, contacts):
+ """
+ @return {ContactHandle: (Status, Presence Type, Message)}
+ """
+ personalMessage = u""
+ return dict(
+ (h, (presenceType, presence, personalMessage))
+ for (h, (presenceType, presence)) in self.get_presences(contacts).iteritems()
+ )
+
+ @gtk_toolbox.log_exception(_moduleLogger)
+ def SetPresence(self, status, message):
+ if message:
+ raise telepathy.errors.InvalidArgument("Messages aren't supported")
+
+ self.set_presence(status)
+
def _get_statuses(self):
"""
Property mapping presence statuses available to the corresponding presence types
"""
return dict(
(localType, (telepathyType, True, False))
- for (localType, telepathyType) in TheOneRingPresence.TO_PRESENCE_TYPE.iteritems()
+ for (localType, telepathyType) in self.TO_PRESENCE_TYPE.iteritems()
)