gajim: [Link Mauve I] store bookmarks in pubsub if server supp...

2009-08-01 Thread Yann Leboulanger
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...

2009-08-01 Thread Yann Leboulanger
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...

2009-08-01 Thread Yann Leboulanger
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

2009-08-01 Thread Yann Leboulanger
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