Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomeu Vizoso <tomeu@sugarlabs.org>2010-03-16 08:56:22 (GMT)
committer Tomeu Vizoso <tomeu.vizoso@collabora.co.uk>2010-08-20 13:02:26 (GMT)
commitd77f05d4f81f29386e994daf7808ecd85e5d6c40 (patch)
treedd97fb846fe2518c0d5153e5e0812adc6988cfa3
parentf02ae3b37cc683e7c87a91bbe215433719cc29ca (diff)
Create a Jabber account if there isn't one yet. Also fix updating contacts.
-rw-r--r--src/jarabe/model/neighborhood.py93
1 files changed, 66 insertions, 27 deletions
diff --git a/src/jarabe/model/neighborhood.py b/src/jarabe/model/neighborhood.py
index 6838d42..18c2f35 100644
--- a/src/jarabe/model/neighborhood.py
+++ b/src/jarabe/model/neighborhood.py
@@ -126,32 +126,15 @@ class Neighborhood(gobject.GObject):
accounts = account_manager.Get(ACCOUNT_MANAGER_SERVICE, 'ValidAccounts',
dbus_interface=PROPERTIES_IFACE)
- if not accounts:
- client = gconf.client_get_default()
- nick = client.get_string('/desktop/sugar/user/nick')
-
- params = {
- 'nickname': nick,
- 'first-name': '',
- 'last-name': '',
- #'jid': '%s@%s' % ('moc', 'mac'),
- 'published-name': nick,
- }
+ logging.debug('accounts %r', accounts)
- properties = {
- 'org.freedesktop.Telepathy.Account.Enabled': True,
- 'org.freedesktop.Telepathy.Account.Nickname': nick,
- 'org.freedesktop.Telepathy.Account.ConnectAutomatically': True,
- }
+ self._client_handler = ClientHandler()
+ self._client_handler.got_channel.connect(self.__got_channel_cb)
- account = account_manager.CreateAccount('salut', 'local-xmpp',
- 'salut', params, properties)
- accounts = [account]
+ self._ensure_link_local_account(account_manager, accounts)
+ self._ensure_server_account(account_manager, accounts)
for account in accounts:
- self._client_handler = ClientHandler()
- self._client_handler.got_channel.connect(self.__got_channel_cb)
-
obj = bus.get_object(CHANNEL_DISPATCHER_SERVICE, CHANNEL_DISPATCHER_PATH)
channel_dispatcher = dbus.Interface(obj, CHANNEL_DISPATCHER)
@@ -170,6 +153,56 @@ class Neighborhood(gobject.GObject):
logging.debug('meec %r', request)
+ def _ensure_link_local_account(self, account_manager, accounts):
+ for account in accounts:
+ if 'salut' in account:
+ return
+
+ client = gconf.client_get_default()
+ nick = client.get_string('/desktop/sugar/user/nick')
+
+ params = {
+ 'nickname': nick,
+ 'first-name': '',
+ 'last-name': '',
+ #'jid': '%s@%s' % ('moc', 'mac'),
+ 'published-name': nick,
+ }
+
+ properties = {
+ 'org.freedesktop.Telepathy.Account.Enabled': True,
+ 'org.freedesktop.Telepathy.Account.Nickname': nick,
+ 'org.freedesktop.Telepathy.Account.ConnectAutomatically': True,
+ }
+
+ account = account_manager.CreateAccount('salut', 'local-xmpp',
+ 'salut', params, properties)
+ accounts.append(account)
+
+ def _ensure_server_account(self, account_manager, accounts):
+ for account in accounts:
+ if 'gabble' in account:
+ return
+
+ client = gconf.client_get_default()
+ nick = client.get_string('/desktop/sugar/user/nick')
+
+ params = {
+ 'account': '***',
+ 'password': '***',
+ 'server': 'talk.google.com',
+ }
+
+ properties = {
+ 'org.freedesktop.Telepathy.Account.Enabled': True,
+ 'org.freedesktop.Telepathy.Account.Nickname': nick,
+ 'org.freedesktop.Telepathy.Account.ConnectAutomatically': True,
+ }
+
+ account = account_manager.CreateAccount('gabble', 'jabber',
+ 'jabber', params, properties)
+ accounts.append(account)
+
def __got_channel_cb(self, **kwargs):
# TODO: How hacky is this?
connection_name = kwargs['connection'].replace('/', '.')[1:]
@@ -224,13 +257,19 @@ class Neighborhood(gobject.GObject):
raise RuntimeError(error)
def __get_contact_attributes_cb(self, connection, attributes):
- logging.debug('__get_contact_attributes_cb %r', attributes)
+ logging.debug('__get_contact_attributes_cb')
for handle in attributes.keys():
- logging.debug('Got handle %r', handle)
- buddy = BuddyModel(nick=attributes[handle][CONNECTION_INTERFACE_ALIASING + '/alias'])
- self._buddies[(connection.service_name, handle)] = buddy
- self.emit('buddy-added', buddy)
+ nick = attributes[handle][CONNECTION_INTERFACE_ALIASING + '/alias']
+ if (connection.service_name, handle) in self._buddies:
+ logging.debug('Got handle %r with nick %r, going to update', handle, nick)
+ buddy = self._buddies[(connection.service_name, handle)]
+ buddy.props.nick = nick
+ else:
+ logging.debug('Got handle %r with nick %r, going to add', handle, nick)
+ buddy = BuddyModel(nick=nick)
+ self._buddies[(connection.service_name, handle)] = buddy
+ self.emit('buddy-added', buddy)
def __members_changed_cb(self, connection, message, added, removed,
local_pending, remote_pending, actor, reason):