changeset e35e21903e39 in /home/hg/repos/gajim
details:http://hg.gajim.org/gajim?cmd=changeset;node=e35e21903e39
description: use NEC to handle bookmarks via pubsub.
diffstat:
src/common/connection_handlers.py | 112 ++++++++++++-------------------------
src/common/pubsub.py | 60 +++++++++++++++----
2 files changed, 82 insertions(+), 90 deletions(-)
diffs (232 lines):
diff -r dd6208b3e902 -r e35e21903e39 src/common/connection_handlers.py
--- a/src/common/connection_handlers.py Fri Aug 27 22:45:59 2010 +0200
+++ b/src/common/connection_handlers.py Fri Aug 27 23:53:17 2010 +0200
@@ -43,6 +43,40 @@
import common.xmpp
import common.caps_cache as capscache
+# This cass is needed in pubsub.py, so we need to create it before importing
+# pubsub
+class BookmarksHelper:
+ def parse_bookmarks(self):
+ self.bookmarks = []
+ confs = self.base_event.storage_node.getTags('conference')
+ for conf in confs:
+ autojoin_val = conf.getAttr('autojoin')
+ if autojoin_val is None: # not there (it's optional)
+ autojoin_val = False
+ minimize_val = conf.getAttr('minimize')
+ if minimize_val is None: # not there (it's optional)
+ minimize_val = False
+ print_status = conf.getTagData('print_status')
+ if not print_status:
+ print_status = conf.getTagData('show_status')
+ try:
+ jid = helpers.parse_jid(conf.getAttr('jid'))
+ except common.helpers.InvalidFormat:
+ log.warn('Invalid JID: %s, ignoring it' % conf.getAttr('jid'))
+ continue
+ bm = {'name': conf.getAttr('name'),
+ 'jid': jid,
+ 'autojoin': autojoin_val,
+ 'minimize': minimize_val,
+ 'password': conf.getTagData('password'),
+ 'nick': conf.getTagData('nick'),
+ 'print_status': print_status}
+
+
+ bm_jids = [b['jid'] for b in self.bookmarks]
+ if bm['jid'] not in bm_jids:
+ self.bookmarks.append(bm)
+
from common import helpers
from common import gajim
from common import exceptions
@@ -1196,49 +1230,6 @@
self.seclabel_catalogues[to] = [[], None, None]
self.seclabel_catalogues[to][0].append(callback)
- def _parse_bookmarks(self, storage, storage_type):
- """
- storage_type can be 'pubsub' or 'xml' to tell from where we got
bookmarks
- """
- # Bookmarked URLs and Conferences
- # http://www.xmpp.org/extensions/xep-0048.html
- resend_to_pubsub = False
- confs = storage.getTags('conference')
- for conf in confs:
- autojoin_val = conf.getAttr('autojoin')
- if autojoin_val is None: # not there (it's optional)
- autojoin_val = False
- minimize_val = conf.getAttr('minimize')
- if minimize_val is None: # not there (it's optional)
- minimize_val = False
- print_status = conf.getTagData('print_status')
- if not print_status:
- print_status = conf.getTagData('show_status')
- try:
- bm = {'name': conf.getAttr('name'),
- 'jid': helpers.parse_jid(conf.getAttr('jid')),
- 'autojoin': autojoin_val,
- 'minimize': minimize_val,
- 'password': conf.getTagData('password'),
- 'nick': conf.getTagData('nick'),
- 'print_status': print_status}
- except common.helpers.InvalidFormat:
- log.warn('Invalid JID: %s, ignoring it' % conf.getAttr('jid'))
- continue
-
- bm_jids = [b['jid'] for b in self.bookmarks]
- if bm['jid'] not in bm_jids:
- self.bookmarks.append(bm)
- if storage_type == 'xml':
- # We got a bookmark that was not in pubsub
- resend_to_pubsub = True
- self.dispatch('BOOKMARKS', self.bookmarks)
- if storage_type == 'pubsub':
- # We gor bookmarks from pubsub, now get those from xml to merge
them
- self.get_bookmarks(storage_type='xml')
- if self.pubsub_supported and resend_to_pubsub:
- self.store_bookmarks('pubsub')
-
def _rosterSetCB(self, con, iq_obj):
log.debug('rosterSetCB')
gajim.nec.push_incoming_event(RosterSetReceivedEvent(None, conn=self,
@@ -2740,38 +2731,6 @@
self.namespace = self.storage_node.getNamespace()
return True
-class BookmarksHelper:
- def parse_bookmarks(self):
- self.bookmarks = []
- confs = self.base_event.storage_node.getTags('conference')
- for conf in confs:
- autojoin_val = conf.getAttr('autojoin')
- if autojoin_val is None: # not there (it's optional)
- autojoin_val = False
- minimize_val = conf.getAttr('minimize')
- if minimize_val is None: # not there (it's optional)
- minimize_val = False
- print_status = conf.getTagData('print_status')
- if not print_status:
- print_status = conf.getTagData('show_status')
- try:
- jid = helpers.parse_jid(conf.getAttr('jid'))
- except common.helpers.InvalidFormat:
- log.warn('Invalid JID: %s, ignoring it' % conf.getAttr('jid'))
- continue
- bm = {'name': conf.getAttr('name'),
- 'jid': jid,
- 'autojoin': autojoin_val,
- 'minimize': minimize_val,
- 'password': conf.getTagData('password'),
- 'nick': conf.getTagData('nick'),
- 'print_status': print_status}
-
-
- bm_jids = [b['jid'] for b in self.bookmarks]
- if bm['jid'] not in bm_jids:
- self.bookmarks.append(bm)
-
class PrivateStorageBookmarksReceivedEvent(nec.NetworkIncomingEvent,
BookmarksHelper):
name = 'private-storage-bookmarks-received'
@@ -2786,7 +2745,8 @@
class BookmarksReceivedEvent(nec.NetworkIncomingEvent):
name = 'bookmarks-received'
- base_network_events = ['private-storage-bookmarks-received']
+ base_network_events = ['private-storage-bookmarks-received',
+ 'pubsub-bookmarks-received']
def generate(self):
self.conn = self.base_event.conn
diff -r dd6208b3e902 -r e35e21903e39 src/common/pubsub.py
--- a/src/common/pubsub.py Fri Aug 27 22:45:59 2010 +0200
+++ b/src/common/pubsub.py Fri Aug 27 23:53:17 2010 +0200
@@ -24,12 +24,17 @@
import xmpp
import gajim
import connection_handlers
+import nec
+import ged
import logging
log = logging.getLogger('gajim.c.pubsub')
class ConnectionPubSub:
def __init__(self):
self.__callbacks={}
+ gajim.nec.register_incoming_event(PubsubBookmarksReceivedEvent)
+ gajim.ged.register_event_handler('pubsub-bookmarks-received',
+ ged.CORE, self._nec_pubsub_bookmarks_received)
def send_pb_subscription_query(self, jid, cb, *args, **kwargs):
if not self.connection or self.connected < 2:
@@ -174,21 +179,16 @@
cb(conn, stanza, *args, **kwargs)
except Exception:
pass
+ gajim.nec.push_incoming_event(PubsubReceivedEvent(None,
+ conn=self, iq_obj=stanza))
- pubsub = stanza.getTag('pubsub')
- if not pubsub:
- return
- items = pubsub.getTag('items')
- if not items:
- return
- item = items.getTag('item')
- if not item:
- return
- storage = item.getTag('storage')
- if storage:
- ns = storage.getNamespace()
- if ns == 'storage:bookmarks':
- self._parse_bookmarks(storage, 'pubsub')
+ def _nec_pubsub_bookmarks_received(self, obj):
+ bm_jids = [b['jid'] for b in self.bookmarks]
+ for bm in obj.bookmarks:
+ if bm['jid'] not in bm_jids:
+ self.bookmarks.append(bm)
+ # We got bookmarks from pubsub, now get those from xml to merge them
+ self.get_bookmarks(storage_type='xml')
def _PubSubErrorCB(self, conn, stanza):
log.debug('_PubsubErrorCB')
@@ -212,3 +212,35 @@
query.setID(id_)
self.awaiting_answers[id_] = (connection_handlers.PEP_CONFIG,)
self.connection.send(query)
+
+class PubsubReceivedEvent(nec.NetworkIncomingEvent):
+ name = 'pubsub-received'
+ base_network_events = []
+
+ def generate(self):
+ self.pubsub_node = self.iq_obj.getTag('pubsub')
+ if not self.pubsub_node:
+ return
+ self.items_node = self.pubsub_node.getTag('items')
+ if not self.items_node:
+ return
+ self.item_node = self.items_node.getTag('item')
+ if not self.item_node:
+ return
+ return True
+
+class PubsubBookmarksReceivedEvent(nec.NetworkIncomingEvent,
+connection_handlers.BookmarksHelper):
+ name = 'pubsub-bookmarks-received'
+ base_network_events = ['pubsub-received']
+
+ def generate(self):
+ self.conn = self.base_event.conn
+ storage = self.base_event.item_node.getTag('storage')
+ if not storage:
+ return
+ ns = storage.getNamespace()
+ if ns != 'storage:bookmarks':
+ return
+ self.parse_bookmarks()
+ return True
\ No newline at end of file
_______________________________________________
Commits mailing list
[email protected]
http://lists.gajim.org/cgi-bin/listinfo/commits