+
+"""
+@todo Add params for disable/enable state machines
+@todo Separate voicemail/sms into separate conversation instances
+@todo Setup addressbook, voicemail, sms state machines
+@todo Add option to use screen name as callback
+"""
+
+
import weakref
import logging
_parameter_defaults = {
}
+ @gtk_toolbox.log_exception(_moduleLogger)
def __init__(self, manager, parameters):
self.check_parameters(parameters)
- try:
- account = unicode(parameters['account'])
-
- # Connection init must come first
- telepathy.server.Connection.__init__(
- self,
- constants._telepathy_protocol_name_,
- account,
- constants._telepathy_implementation_name_
- )
- aliasing.AliasingMixin.__init__(self)
- simple_presence.SimplePresenceMixin.__init__(self)
- presence.PresenceMixin.__init__(self)
- capabilities.CapabilitiesMixin.__init__(self)
-
- self._manager = weakref.proxy(manager)
- self._credentials = (
- parameters['account'].encode('utf-8'),
- parameters['password'].encode('utf-8'),
- )
- self._callbackNumber = parameters['forward'].encode('utf-8')
- self._channelManager = channel_manager.ChannelManager(self)
+ account = unicode(parameters['account'])
+ encodedAccount = parameters['account'].encode('utf-8')
+ encodedPassword = parameters['password'].encode('utf-8')
+ encodedCallback = parameters['forward'].encode('utf-8')
+ if not encodedCallback:
+ raise telepathy.errors.InvalidArgument("User must specify what number GV forwards calls to")
+
+ # Connection init must come first
+ telepathy.server.Connection.__init__(
+ self,
+ constants._telepathy_protocol_name_,
+ account,
+ constants._telepathy_implementation_name_
+ )
+ aliasing.AliasingMixin.__init__(self)
+ simple_presence.SimplePresenceMixin.__init__(self)
+ presence.PresenceMixin.__init__(self)
+ capabilities.CapabilitiesMixin.__init__(self)
+
+ self._manager = weakref.proxy(manager)
+ self._credentials = (
+ encodedAccount,
+ encodedPassword,
+ )
+ self._callbackNumber = encodedCallback
+ self._channelManager = channel_manager.ChannelManager(self)
- self._session = gvoice.session.Session(None)
+ self._session = gvoice.session.Session(None)
- self.set_self_handle(handle.create_handle(self, 'connection'))
+ self.set_self_handle(handle.create_handle(self, 'connection'))
- self._callback = None
- _moduleLogger.info("Connection to the account %s created" % account)
- except Exception, e:
- _moduleLogger.exception("Failed to create Connection")
- raise
+ self._callback = None
+ _moduleLogger.info("Connection to the account %s created" % account)
@property
def manager(self):
self.check_connected()
self.check_handle(handleType, handleId)
- channel = None
- channelManager = self._channelManager
- handle = self.handle(handleType, handleId)
-
- if type == telepathy.CHANNEL_TYPE_CONTACT_LIST:
- _moduleLogger.info("RequestChannel ContactList")
- channel = channelManager.channel_for_list(handle, suppressHandler)
- elif type == telepathy.CHANNEL_TYPE_TEXT:
- _moduleLogger.info("RequestChannel Text")
- channel = channelManager.channel_for_text(handle, suppressHandler)
- elif type == telepathy.CHANNEL_TYPE_STREAMED_MEDIA:
- _moduleLogger.info("RequestChannel Media")
- channel = channelManager.channel_for_call(handle, suppressHandler)
- else:
- raise telepathy.errors.NotImplemented("unknown channel type %s" % type)
+ h = self.handle(handleType, handleId) if handleId != 0 else None
+ props = self._generate_props(type, h, suppressHandler)
+ if hasattr(self, "_validate_handle"):
+ # HACK Newer python-telepathy
+ self._validate_handle(props)
- _moduleLogger.info("RequestChannel Object Path: %s" % channel._object_path)
- return channel._object_path
+ chan = self._channelManager.channel_for_props(props, signal=True)
+ path = chan._object_path
+ _moduleLogger.info("RequestChannel Object Path: %s" % path)
+ return path
@gtk_toolbox.log_exception(_moduleLogger)
def RequestHandles(self, handleType, names, sender):
# @todo get conversations update running
# @todo test conversatiuons
_moduleLogger.info("Incoming messages from: %r" % (conversationIds, ))
- channelManager = self._channelManager
for contactId, phoneNumber in conversationIds:
h = handle.create_handle(self, 'contact', contactId, phoneNumber)
# Just let the TextChannel decide whether it should be reported to the user or not
- channel = channelManager.channel_for_text(h)
+ props = self._generate_props(telepathy.CHANNEL_TYPE_TEXT, h, False)
+ channel = self._channelManager.channel_for_props(props, signal=True)