gajim: [Link Mauve I] store bookmarks in pubsub if server supp...
changeset 577d054c4fdf in /home/hg/repos/gajim details:http://hg.gajim.org/gajim?cmd=changeset;node=577d054c4fdf description: [Link Mauve I] store bookmarks in pubsub if server supports that. diffstat: src/common/connection.py | 45 +- src/common/connection_handlers.py | 80 +--- src/common/pubsub.py | 11 + 3 files changed, 88 insertions(+), 48 deletions(-) diffs (201 lines): diff -r 8d7e6876dce8 -r 577d054c4fdf src/common/connection.py --- a/src/common/connection.py Fri Jul 31 13:47:47 2009 +0200 +++ b/src/common/connection.py Fri Jul 31 14:52:01 2009 +0200 @@ -1589,38 +1589,47 @@ self.connection.send(iq) def get_bookmarks(self): - '''Get Bookmarks from storage as described in XEP 0048''' + '''Get Bookmarks from storage or PubSub if supported as described in + XEP 0048''' self.bookmarks = [] #avoid multiple bookmarks when re-connecting if not self.connection: return - iq = common.xmpp.Iq(typ='get') - iq2 = iq.addChild(name='query', namespace=common.xmpp.NS_PRIVATE) - iq2.addChild(name='storage', namespace='storage:bookmarks') - self.connection.send(iq) + if self.pubsub_supported: + self.send_pb_retrieve('', 'storage:bookmarks', self._PrivatePubsubCB) + else: + iq = common.xmpp.Iq(typ='get') + iq2 = iq.addChild(name='query', namespace=common.xmpp.NS_PRIVATE) + iq2.addChild(name='storage', namespace='storage:bookmarks') + self.connection.send(iq) def store_bookmarks(self): - ''' Send bookmarks to the storage namespace ''' + ''' Send bookmarks to the storage namespace or PubSub if supported''' if not self.connection: return - iq = common.xmpp.Iq(typ='set') - iq2 = iq.addChild(name='query', namespace=common.xmpp.NS_PRIVATE) - iq3 = iq2.addChild(name='storage', namespace='storage:bookmarks') + iq = common.xmpp.Node(tag='storage', attrs={'xmlns': 'storage:bookmarks'}) for bm in self.bookmarks: - iq4 = iq3.addChild(name = conference) - iq4.setAttr('jid', bm['jid']) - iq4.setAttr('autojoin', bm['autojoin']) - iq4.setAttr('minimize', bm['minimize']) - iq4.setAttr('name', bm['name']) + iq2 = iq.addChild(name = conference) + iq2.setAttr('jid', bm['jid']) + iq2.setAttr('autojoin', bm['autojoin']) + iq2.setAttr('minimize', bm['minimize']) + iq2.setAttr('name', bm['name']) # Only add optional elements if not empty # Note: need to handle both None and '' as empty # thus shouldn't use is not None if bm.get('nick', None): - iq4.setTagData('nick', bm['nick']) + iq2.setTagData('nick', bm['nick']) if bm.get('password', None): - iq4.setTagData('password', bm['password']) + iq2.setTagData('password', bm['password']) if bm.get('print_status', None): - iq4.setTagData('print_status', bm['print_status']) - self.connection.send(iq) + iq2.setTagData('print_status', bm['print_status']) + + if self.pubsub_supported: + self.send_pb_publish('', 'storage:bookmarks', iq, 'current') + else: + iqA = common.xmpp.Iq(typ='set') + iqB = iqA.addChild(name='query', namespace=common.xmpp.NS_PRIVATE) + iqB.addChild(node=iq) + self.connection.send(iqA) def get_annotations(self): '''Get Annonations from storage as described in XEP 0048, and XEP 0145''' diff -r 8d7e6876dce8 -r 577d054c4fdf src/common/connection_handlers.py --- a/src/common/connection_handlers.py Fri Jul 31 13:47:47 2009 +0200 +++ b/src/common/connection_handlers.py Fri Jul 31 14:52:01 2009 +0200 @@ -1527,34 +1527,7 @@ if storage: ns = storage.getNamespace() if ns == 'storage:bookmarks': - # Bookmarked URLs and Conferences - # http://www.xmpp.org/extensions/xep-0048.html - confs = storage.getTags('conference') - for conf in
gajim: add publish-options to bookmark storage if server support...
changeset 6f3e3886b765 in /home/hg/repos/gajim details:http://hg.gajim.org/gajim?cmd=changeset;node=6f3e3886b765 description: add publish-options to bookmark storage if server supports it diffstat: src/common/connection.py | 16 +++- src/common/connection_handlers.py | 2 ++ src/common/pubsub.py | 9 ++--- src/common/xmpp/protocol.py | 1 + 4 files changed, 24 insertions(+), 4 deletions(-) diffs (80 lines): diff -r 577d054c4fdf -r 6f3e3886b765 src/common/connection.py --- a/src/common/connection.py Fri Jul 31 14:52:01 2009 +0200 +++ b/src/common/connection.py Fri Jul 31 15:50:11 2009 +0200 @@ -163,6 +163,7 @@ self.blocked_all = False self.music_track_info = 0 self.pubsub_supported = False + self.pubsub_publish_options_supported = False self.pep_supported = False self.mood = {} self.tune = {} @@ -1624,7 +1625,20 @@ iq2.setTagData('print_status', bm['print_status']) if self.pubsub_supported: - self.send_pb_publish('', 'storage:bookmarks', iq, 'current') + if self.pubsub_publish_options_supported: + options = common.xmpp.Node(common.xmpp.NS_DATA + ' x', + attrs={'type': 'submit'}) + f = options.addChild('field', attrs={'var': 'FORM_TYPE', + 'type': 'hidden'}) + f.setTagData('value', common.xmpp.NS_PUBSUB_PUBLISH_OPTIONS) + f = options.addChild('field', attrs={'var': 'pubsub#persist_items'}) + f.setTagData('value', 'true') + f = options.addChild('field', attrs={'var': 'pubsub#access_model'}) + f.setTagData('value', 'whitelist') + else: + options = None + self.send_pb_publish('', 'storage:bookmarks', iq, 'current', + options=options) else: iqA = common.xmpp.Iq(typ='set') iqB = iqA.addChild(name='query', namespace=common.xmpp.NS_PRIVATE) diff -r 577d054c4fdf -r 6f3e3886b765 src/common/connection_handlers.py --- a/src/common/connection_handlers.py Fri Jul 31 14:52:01 2009 +0200 +++ b/src/common/connection_handlers.py Fri Jul 31 15:50:11 2009 +0200 @@ -899,6 +899,8 @@ break if features.__contains__(common.xmpp.NS_PUBSUB): self.pubsub_supported = True + if features.__contains__(common.xmpp.NS_PUBSUB_PUBLISH_OPTIONS): + self.pubsub_publish_options_supported = True if features.__contains__(common.xmpp.NS_BYTESTREAM): our_jid = helpers.parse_jid(gajim.get_jid_from_account(self.name) +\ '/' + self.server_resource) diff -r 577d054c4fdf -r 6f3e3886b765 src/common/pubsub.py --- a/src/common/pubsub.py Fri Jul 31 14:52:01 2009 +0200 +++ b/src/common/pubsub.py Fri Jul 31 15:50:11 2009 +0200 @@ -64,14 +64,17 @@ self.__callbacks[id_]=(cb, args, kwargs) - def send_pb_publish(self, jid, node, item, id_): + def send_pb_publish(self, jid, node, item, id_, options=None): '''Publish item to a node.''' if not self.connection or self.connected 2: return query = xmpp.Iq('set', to=jid) e = query.addChild('pubsub', namespace=xmpp.NS_PUBSUB) - e = e.addChild('publish', {'node': node}) - e = e.addChild('item', {'id': id_}, [item]) + p = e.addChild('publish', {'node': node}) + p.addChild('item', {'id': id_}, [item]) + if options: + p = e.addChild('publish-options') + p.addChild(node=options) self.connection.send(query) diff -r 577d054c4fdf -r 6f3e3886b765 src/common/xmpp/protocol.py --- a/src/common/xmpp/protocol.py Fri Jul 31 14:52:01 2009 +0200 +++ b/src/common/xmpp/protocol.py Fri Jul 31 15:50:11 2009 +0200 @@ -81,6 +81,7 @@ NS_PRIVATE ='jabber:iq:private' NS_PROFILE ='http://jabber.org/protocol/profile' # XEP-0154 NS_PUBSUB ='http://jabber.org/protocol/pubsub' # XEP-0060 +NS_PUBSUB_PUBLISH_OPTIONS = NS_PUBSUB + '#publish-options' # XEP-0060 NS_PUBSUB_OWNER ='http://jabber.org/protocol/pubsub#owner' # JEP-0060 NS_REGISTER ='jabber:iq:register' NS_ROSTER
gajim: store bookmarks in both pubsub and xml, and copy those fr...
changeset 7e5938fe32c5 in /home/hg/repos/gajim details:http://hg.gajim.org/gajim?cmd=changeset;node=7e5938fe32c5 description: store bookmarks in both pubsub and xml, and copy those from xml to pubsub on startup diffstat: src/common/connection.py | 20 +++- src/common/connection_handlers.py | 36 +++- src/common/pubsub.py | 21 +++-- 3 files changed, 45 insertions(+), 32 deletions(-) diffs (167 lines): diff -r 6f3e3886b765 -r 7e5938fe32c5 src/common/connection.py --- a/src/common/connection.py Fri Jul 31 15:50:11 2009 +0200 +++ b/src/common/connection.py Fri Jul 31 17:11:55 2009 +0200 @@ -1589,22 +1589,24 @@ iq2.addChild(name='gajim', namespace='gajim:prefs') self.connection.send(iq) - def get_bookmarks(self): + def get_bookmarks(self, storage_type=None): '''Get Bookmarks from storage or PubSub if supported as described in - XEP 0048''' - self.bookmarks = [] #avoid multiple bookmarks when re-connecting + XEP 0048 + storage_type can be set to xml to force request to xml storage''' if not self.connection: return - if self.pubsub_supported: - self.send_pb_retrieve('', 'storage:bookmarks', self._PrivatePubsubCB) + if self.pubsub_supported and storage_type != 'xml': + self.send_pb_retrieve('', 'storage:bookmarks') else: iq = common.xmpp.Iq(typ='get') iq2 = iq.addChild(name='query', namespace=common.xmpp.NS_PRIVATE) iq2.addChild(name='storage', namespace='storage:bookmarks') self.connection.send(iq) - def store_bookmarks(self): - ''' Send bookmarks to the storage namespace or PubSub if supported''' + def store_bookmarks(self, storage_type=None): + ''' Send bookmarks to the storage namespace or PubSub if supported + storage_type can be set to 'pubsub' or 'xml' so store in only one method + else it will be stored on both''' if not self.connection: return iq = common.xmpp.Node(tag='storage', attrs={'xmlns': 'storage:bookmarks'}) @@ -1624,7 +1626,7 @@ if bm.get('print_status', None): iq2.setTagData('print_status', bm['print_status']) - if self.pubsub_supported: + if self.pubsub_supported and storage_type != 'xml': if self.pubsub_publish_options_supported: options = common.xmpp.Node(common.xmpp.NS_DATA + ' x', attrs={'type': 'submit'}) @@ -1639,7 +1641,7 @@ options = None self.send_pb_publish('', 'storage:bookmarks', iq, 'current', options=options) - else: + if storage_type != 'pubsub': iqA = common.xmpp.Iq(typ='set') iqB = iqA.addChild(name='query', namespace=common.xmpp.NS_PRIVATE) iqB.addChild(node=iq) diff -r 6f3e3886b765 -r 7e5938fe32c5 src/common/connection_handlers.py --- a/src/common/connection_handlers.py Fri Jul 31 15:50:11 2009 +0200 +++ b/src/common/connection_handlers.py Fri Jul 31 17:11:55 2009 +0200 @@ -1529,7 +1529,7 @@ if storage: ns = storage.getNamespace() if ns == 'storage:bookmarks': - self._parse_bookmarks(storage) + self._parse_bookmarks(storage, 'xml') elif ns == 'gajim:prefs': # Preferences data # http://www.xmpp.org/extensions/xep-0049.html @@ -1548,27 +1548,12 @@ annotation = note.getData() self.annotations[jid] = annotation - def _PrivatePubsubCB(self, conn, request): - '''Private data from PubSub''' - gajim.log.debug('_PrivatePubsubCB') - pubsub = request.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) - - def _parse_bookmarks(self,
gajim: prevent traceback when a room is destroyed. Fixes #5194
changeset afeef7ec21ab in /home/hg/repos/gajim details:http://hg.gajim.org/gajim?cmd=changeset;node=afeef7ec21ab description: prevent traceback when a room is destroyed. Fixes #5194 diffstat: src/common/connection_handlers.py | 13 +++-- 1 files changed, 7 insertions(+), 6 deletions(-) diffs (23 lines): diff -r 7e5938fe32c5 -r afeef7ec21ab src/common/connection_handlers.py --- a/src/common/connection_handlers.py Fri Jul 31 17:11:55 2009 +0200 +++ b/src/common/connection_handlers.py Sat Aug 01 18:28:25 2009 +0200 @@ -2329,12 +2329,13 @@ r = destroy.getTagData('reason') if r: reason += ' (%s)' % r - try: - jid = helpers.parse_jid(destroy.getAttr('jid')) - except common.helpers.InvalidFormat: - pass - if jid: - reason += '\n' + _('You can join this room instead: %s') % jid + if destroy.getAttr('jid'): + try: + jid = helpers.parse_jid(destroy.getAttr('jid')) + reason += '\n' + _('You can join this room instead: %s') \ + % jid + except common.helpers.InvalidFormat: + pass statusCode = ['destroyed'] else: reason = prs.getReason() ___ Commits mailing list Commits@gajim.org http://lists.gajim.org/cgi-bin/listinfo/commits