diff --git a/src/common/connection_handlers.py b/src/common/connection_handlers.py index f6f73a8b8..875cbbe04 100644 --- a/src/common/connection_handlers.py +++ b/src/common/connection_handlers.py @@ -717,6 +717,7 @@ class ConnectionDisco: iq = iq_obj.buildReply('result') q = iq.getTag('query') if node: + print node q.setAttr('node', node) q.addChild('identity', attrs = {'type': 'pc', 'category': 'client', 'name': 'Gajim'}) @@ -732,6 +733,12 @@ class ConnectionDisco: q.addChild('feature', attrs = {'var': common.xmpp.NS_MUC}) q.addChild('feature', attrs = {'var': common.xmpp.NS_COMMANDS}) q.addChild('feature', attrs = {'var': common.xmpp.NS_DISCO_INFO}) + q.addChild('feature', attrs = {'var': common.xmpp.NS_ACTIVITY}) + q.addChild('feature', attrs = {'var': common.xmpp.NS_ACTIVITY + '+notify'}) + q.addChild('feature', attrs = {'var': common.xmpp.NS_TUNE}) + q.addChild('feature', attrs = {'var': common.xmpp.NS_TUNE + '+notify'}) + q.addChild('feature', attrs = {'var': common.xmpp.NS_MOOD}) + q.addChild('feature', attrs = {'var': common.xmpp.NS_MOOD + '+notify'}) if (node is None or extension == 'cstates') and gajim.config.get('outgoing_chat_state_notifactions') != 'disabled': q.addChild('feature', attrs = {'var': common.xmpp.NS_CHATSTATES}) @@ -1509,14 +1516,17 @@ class ConnectionHandlers(ConnectionVcard, ConnectionBytestream, ConnectionDisco, event = msg.getTag('event') # XEP-0107: User Mood - items = event.getTag('items', {'node': 'http://jabber.org/protocol/mood'}) + items = event.getTag('items', {'node': common.xmpp.NS_MOOD}) if items: pep.user_mood(items, self.name, jid) # XEP-0118: User Tune - items = event.getTag('items', {'node': 'http://jabber.org/protocol/tune'}) + items = event.getTag('items', {'node': common.xmpp.NS_TUNE}) if items: pep.user_tune(items, self.name, jid) # XEP-0080: User Geolocation - items = event.getTag('items', {'node': 'http://jabber.org/protocol/geoloc'}) + items = event.getTag('items', {'node': common.xmpp.NS_GEOLOC}) if items: pep.user_geoloc(items, self.name, jid) + # XEP-0108: User Activity + items = event.getTag('items', {'node': common.xmpp.NS_ACTIVITY}) + if items: pep.user_activity(items, self.name, jid) items = event.getTag('items') if items is None: return diff --git a/src/common/contacts.py b/src/common/contacts.py index e61b6b753..724f8853c 100644 --- a/src/common/contacts.py +++ b/src/common/contacts.py @@ -18,7 +18,7 @@ import common.gajim class Contact: '''Information concerning each contact''' - def __init__(self, jid='', name='', groups=[], show='', status='', mood='', sub='', + def __init__(self, jid='', name='', groups=[], show='', status='', mood='', activity='', sub='', ask='', resource='', priority=0, keyID='', our_chatstate=None, chatstate=None, last_status_time=None, msg_id = None, composing_jep = None): self.jid = jid @@ -27,6 +27,7 @@ class Contact: self.show = show self.status = status self.mood = mood + self.activity = activity self.sub = sub self.ask = ask self.resource = resource @@ -140,18 +141,19 @@ class Contacts: del self._gc_contacts[account] del self._metacontacts_tags[account] - def create_contact(self, jid='', name='', groups=[], show='', status='', mood='', + def create_contact(self, jid='', name='', groups=[], show='', status='', mood='', activity='', sub='', ask='', resource='', priority=0, keyID='', our_chatstate=None, chatstate=None, last_status_time=None, composing_jep=None): - return Contact(jid, name, groups, show, status, mood, sub, ask, resource, + return Contact(jid, name, groups, show, status, mood, + activity, sub, ask, resource, priority, keyID, our_chatstate, chatstate, last_status_time, composing_jep) def copy_contact(self, contact): return self.create_contact(jid = contact.jid, name = contact.name, groups = contact.groups, show = contact.show, status = - contact.status, mood = contact.mood, - sub = contact.sub, ask = contact.ask, resource = contact.resource, + contact.status, mood = contact.mood, activity = + contact.activity, sub = contact.sub, ask = contact.ask, resource = contact.resource, priority = contact.priority, keyID = contact.keyID, our_chatstate = contact.our_chatstate, chatstate = contact.chatstate, last_status_time = contact.last_status_time) diff --git a/src/common/pep.py b/src/common/pep.py index f0aad03cf..2fab1b44d 100644 --- a/src/common/pep.py +++ b/src/common/pep.py @@ -18,3 +18,16 @@ def user_tune(items, name, jid): def user_geoloc(items, name, jid): pass + +def user_activity(items, name, jid): + contacts = gajim.contacts.get_contact(name, jid) + for item in items.getTags('item'): + child = item.getTag('activity') + if child is not None: + for ch in child.getChildren(): + if ch.getName() != 'text': + for contact in contacts: + contact.activity = ch.getName() + else: + for contact in contacts: + contact.activity_text = ch.getData() diff --git a/src/common/xmpp/protocol.py b/src/common/xmpp/protocol.py index 6267e201a..07bccf3da 100644 --- a/src/common/xmpp/protocol.py +++ b/src/common/xmpp/protocol.py @@ -27,11 +27,14 @@ NS_AGENTS ='jabber:iq:agents' NS_AMP ='http://jabber.org/protocol/amp' NS_AMP_ERRORS =NS_AMP+'#errors' NS_AUTH ='jabber:iq:auth' +NS_AVATAR ='http://www.xmpp.org/extensions/xep-0084.html#ns-metadata' NS_BIND ='urn:ietf:params:xml:ns:xmpp-bind' NS_BROWSE ='jabber:iq:browse' +NS_BROWSING ='http://jabber.org/protocol/browsing' # XEP-0195 NS_BYTESTREAM ='http://jabber.org/protocol/bytestreams' # JEP-0065 NS_CAPS ='http://jabber.org/protocol/caps' # JEP-0115 NS_CHATSTATES ='http://jabber.org/protocol/chatstates' # JEP-0085 +NS_CHATTING ='http://jabber.org/protocol/chatting' # XEP-0194 NS_CLIENT ='jabber:client' NS_COMMANDS ='http://jabber.org/protocol/commands' NS_COMPONENT_ACCEPT='jabber:component:accept' @@ -48,6 +51,7 @@ NS_ENCRYPTED ='jabber:x:encrypted' # JEP-00 NS_EVENT ='jabber:x:event' # JEP-0022 NS_FEATURE ='http://jabber.org/protocol/feature-neg' NS_FILE ='http://jabber.org/protocol/si/profile/file-transfer' # JEP-0096 +NS_GAMING ='http://jabber.org/protocol/gaming' # XEP-0196 NS_GEOLOC ='http://jabber.org/protocol/geoloc' # JEP-0080 NS_GROUPCHAT ='gc-1.0' NS_HTTP_AUTH ='http://jabber.org/protocol/http-auth' # JEP-0070 @@ -87,12 +91,14 @@ NS_STREAMS ='http://etherx.jabber.org/streams' NS_TIME ='jabber:iq:time' # JEP-0900 NS_TIME_REVISED ='http://www.xmpp.org/extensions/xep-0202.html#ns' # JEP-0202 NS_TLS ='urn:ietf:params:xml:ns:xmpp-tls' +NS_TUNE ='http://jabber.org/protocol/tune' # XEP-0118 NS_VACATION ='http://jabber.org/protocol/vacation' NS_VCARD ='vcard-temp' NS_GMAILNOTIFY ='google:mail:notify' NS_GTALKSETTING ='google:setting' NS_VCARD_UPDATE =NS_VCARD+':x:update' NS_VERSION ='jabber:iq:version' +NS_VIEWING ='http://jabber.org/protocol/viewing' # XEP--197 NS_PING ='urn:xmpp:ping' # XEP-0199 NS_WAITINGLIST ='http://jabber.org/protocol/waitinglist' # JEP-0130 NS_XHTML_IM ='http://jabber.org/protocol/xhtml-im' # JEP-0071 diff --git a/src/tooltips.py b/src/tooltips.py index 75b07dfbf..fefa63cdf 100644 --- a/src/tooltips.py +++ b/src/tooltips.py @@ -482,9 +482,14 @@ class RosterTooltip(NotificationAreaTooltip): mood = contact.mood.strip() mood_text = contact.mood_text.strip() if mood: - #print mood properties.append(('%s: %s' % (mood, mood_text), None)) + if contact.activity: + activity = contact.activity.strip() + activity_text = contact.activity_text.strip() + if activity: + properties.append(('%s: %s' % (activity, activity_text), None)) + if contact.status: status = contact.status.strip() if status: