import logging
+import dbus
import telepathy
-import gtk_toolbox
+import util.misc as misc_utils
+import tp
import handle
import gvoice.state_machine as state_machine
-_moduleLogger = logging.getLogger("simple_presence")
+_moduleLogger = logging.getLogger(__name__)
class TheOneRingPresence(object):
OFFLINE = 'offline'
TO_PRESENCE_TYPE = {
- ONLINE: telepathy.constants.CONNECTION_PRESENCE_TYPE_AVAILABLE,
- AWAY: telepathy.constants.CONNECTION_PRESENCE_TYPE_AWAY,
- HIDDEN: telepathy.constants.CONNECTION_PRESENCE_TYPE_HIDDEN,
- OFFLINE: telepathy.constants.CONNECTION_PRESENCE_TYPE_OFFLINE,
+ ONLINE: dbus.UInt32(telepathy.constants.CONNECTION_PRESENCE_TYPE_AVAILABLE),
+ AWAY: dbus.UInt32(telepathy.constants.CONNECTION_PRESENCE_TYPE_AWAY),
+ HIDDEN: dbus.UInt32(telepathy.constants.CONNECTION_PRESENCE_TYPE_HIDDEN),
+ OFFLINE: dbus.UInt32(telepathy.constants.CONNECTION_PRESENCE_TYPE_OFFLINE),
}
@property
"""
raise NotImplementedError("Abstract function called")
- def handle(self, handleType, handleId):
+ def get_handle_by_id(self, handleType, handleId):
"""
@abstract
"""
"""
presences = {}
for handleId in contactIds:
- h = self.handle(telepathy.HANDLE_TYPE_CONTACT, handleId)
+ h = self.get_handle_by_id(telepathy.HANDLE_TYPE_CONTACT, handleId)
if isinstance(h, handle.ConnectionHandle):
- isDnd = self.session.backend.is_dnd()
+ isDnd = self.session.is_dnd()
if isDnd:
presence = TheOneRingPresence.HIDDEN
else:
raise telepathy.errors.InvalidArgument("Unsupported state on the state machine: %s" % state)
presenceType = TheOneRingPresence.TO_PRESENCE_TYPE[presence]
else:
- presence = TheOneRingPresence.ONLINE
+ presence = TheOneRingPresence.AWAY
presenceType = TheOneRingPresence.TO_PRESENCE_TYPE[presence]
presences[h] = (presenceType, presence)
def set_presence(self, status):
if status == self.ONLINE:
- self.session.backend.set_dnd(False)
+ self.session.set_dnd(False)
self.session.stateMachine.set_state(state_machine.StateMachine.STATE_ACTIVE)
elif status == self.AWAY:
self.session.stateMachine.set_state(state_machine.StateMachine.STATE_IDLE)
elif status == self.HIDDEN:
- self.session.backend.set_dnd(True)
+ self.session.set_dnd(True)
elif status == self.OFFLINE:
self.Disconnect()
else:
_moduleLogger.info("Setting Presence to '%s'" % status)
-class SimplePresenceMixin(telepathy.server.ConnectionInterfaceSimplePresence, TheOneRingPresence):
+class SimplePresenceMixin(tp.ConnectionInterfaceSimplePresence, TheOneRingPresence):
def __init__(self):
- telepathy.server.ConnectionInterfaceSimplePresence.__init__(self)
+ tp.ConnectionInterfaceSimplePresence.__init__(self)
TheOneRingPresence.__init__(self)
self._implement_property_get(
- telepathy.server.CONNECTION_INTERFACE_SIMPLE_PRESENCE,
+ tp.CONNECTION_INTERFACE_SIMPLE_PRESENCE,
{'Statuses' : self._get_statuses}
)
- @gtk_toolbox.log_exception(_moduleLogger)
+ @misc_utils.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()
+ return dbus.Dictionary(
+ (
+ (h, dbus.Struct((presenceType, presence, personalMessage), signature="uss"))
+ for (h, (presenceType, presence)) in self.get_presences(contacts).iteritems()
+ ),
+ signature="u(uss)"
)
- @gtk_toolbox.log_exception(_moduleLogger)
+ @misc_utils.log_exception(_moduleLogger)
def SetPresence(self, status, message):
if message:
raise telepathy.errors.InvalidArgument("Messages aren't supported")