summaryrefslogtreecommitdiff
path: root/src/core/handlers.py
diff options
context:
space:
mode:
authorFlorent Le Coz <louiz@louiz.org>2014-07-30 17:15:03 +0200
committerFlorent Le Coz <louiz@louiz.org>2014-07-30 17:35:21 +0200
commitb0accad5c0e21a2fcec329af5169f000e7c51e7f (patch)
tree1c32d141b528a3eb84dd3a02ca25ede4f3891ce6 /src/core/handlers.py
parent39c8319ec4c155e7323429ccbf56984d85a195a6 (diff)
downloadpoezio-b0accad5c0e21a2fcec329af5169f000e7c51e7f.tar.gz
poezio-b0accad5c0e21a2fcec329af5169f000e7c51e7f.tar.bz2
poezio-b0accad5c0e21a2fcec329af5169f000e7c51e7f.tar.xz
poezio-b0accad5c0e21a2fcec329af5169f000e7c51e7f.zip
Make the bookmark stuff non-blocking
Diffstat (limited to 'src/core/handlers.py')
-rw-r--r--src/core/handlers.py48
1 files changed, 28 insertions, 20 deletions
diff --git a/src/core/handlers.py b/src/core/handlers.py
index 94a0614b..2dd31abd 100644
--- a/src/core/handlers.py
+++ b/src/core/handlers.py
@@ -869,27 +869,35 @@ def on_session_start(self, event):
self.events.trigger('send_normal_presence', pres)
pres.send()
bookmark.get_local()
+ def _join_initial_rooms(bookmarks):
+ """Join all rooms given in the iterator `bookmarks`"""
+ for bm in bookmarks:
+ tab = self.get_tab_by_name(bm.jid, tabs.MucTab)
+ nick = bm.nick if bm.nick else self.own_nick
+ if not tab:
+ self.open_new_room(bm.jid, nick, False)
+ self.initial_joins.append(bm.jid)
+ histo_length = config.get('muc_history_length', 20)
+ if histo_length == -1:
+ histo_length = None
+ if histo_length is not None:
+ histo_length = str(histo_length)
+ # do not join rooms that do not have autojoin
+ # but display them anyway
+ if bm.autojoin:
+ muc.join_groupchat(self, bm.jid, nick,
+ passwd=bm.password,
+ maxhistory=histo_length,
+ status=self.status.message,
+ show=self.status.show)
+ def _join_remote_only():
+ remote_bookmarks = (bm for bm in bookmark.bookmarks if (bm.method in ("pep", "privatexml")))
+ _join_initial_rooms(remote_bookmarks)
if not self.xmpp.anon and config.get('use_remote_bookmarks', True):
- bookmark.get_remote(self.xmpp)
- for bm in bookmark.bookmarks:
- tab = self.get_tab_by_name(bm.jid, tabs.MucTab)
- nick = bm.nick if bm.nick else self.own_nick
- if not tab:
- self.open_new_room(bm.jid, nick, False)
- self.initial_joins.append(bm.jid)
- histo_length = config.get('muc_history_length', 20)
- if histo_length == -1:
- histo_length = None
- if histo_length is not None:
- histo_length = str(histo_length)
- # do not join rooms that do not have autojoin
- # but display them anyway
- if bm.autojoin:
- muc.join_groupchat(self, bm.jid, nick,
- passwd=bm.password,
- maxhistory=histo_length,
- status=self.status.message,
- show=self.status.show)
+ bookmark.get_remote(self.xmpp, _join_remote_only)
+ # join all the available bookmarks. As of yet, this is just the local
+ # ones
+ _join_initial_rooms(bookmark.bookmarks)
if config.get('enable_user_nick', True):
self.xmpp.plugin['xep_0172'].publish_nick(nick=self.own_nick, callback=dumb_callback)