]> code.delx.au - pymsnt/blobdiff - src/session.py
Fixed jid.internJID that somehow slipped through
[pymsnt] / src / session.py
index 5b9615cfebf6bebb6ff2e38801e8a86e376fb993..be2955025cbd5e31956ee1ce492a5aedc025342e 100644 (file)
@@ -1,6 +1,8 @@
-# Copyright 2004-2005 James Bunton <james@delx.cjb.net>
+# Copyright 2004-2006 James Bunton <james@delx.cjb.net>
 # Licensed for distribution under the GPL version 2, check COPYING for details
 
+from twisted.words.protocols.jabber.jid import internJID
+
 import utils
 import legacy
 import jabw
@@ -109,16 +111,20 @@ class Session(jabw.JabberConnection):
                        LogEvent(INFO, self.jabberID)
                        vCard = None
                        for e in el.elements():
-                               if e.name == "vCard" and e.defaultUri == disco.VCARDTEMP:
+                               if e.name == "vCard" and e.uri == disco.VCARDTEMP:
                                        vCard = e
                                        break
                        else:
                                self.legacycon.updateAvatar() # Default avatar
                                return
                        avatarSet = False
+                       name = ""
                        for e in vCard.elements():
-                               if e.name == "NICKNAME":
-                                       self.updateNickname(e.__str__())
+                               if e.name == "NICKNAME" and e.__str__():
+                                       name = e.__str__()
+                               if not name and e.name == "FN" and e.__str__():
+                                       # Give priority to nickname
+                                       name = e.__str__()
                                if e.name == "PHOTO":
                                        imageData = avatar.parsePhotoEl(e)
                                        if not imageData:
@@ -126,6 +132,8 @@ class Session(jabw.JabberConnection):
                                        self.avatar = self.pytrans.avatarCache.setAvatar(imageData)
                                        self.legacycon.updateAvatar(self.avatar)
                                        avatarSet = True
+                       if name:
+                               self.updateNickname(name)
                        if not avatarSet:
                                self.legacycon.updateAvatar() # Default avatar
 
@@ -135,14 +143,14 @@ class Session(jabw.JabberConnection):
                                self.legacycon.updateAvatar()
 
                LogEvent(INFO, self.jabberID, "Fetching avatar.")
-               d = self.sendVCardRequest(to=self.jabberID, fro=config.jid)
+               d = self.sendVCardRequest(to=self.jabberID, fro=config.jid + "/msn")
                d.addCallback(vCardReceived)
                d.addErrback(errback)
        
        def updateNickname(self, nickname):
                self.nickname = nickname
                if not self.nickname:
-                       j = utils.jid(self.jabberID)
+                       j = internJID(self.jabberID)
                        self.nickname = j.user
                self.setStatus(self.show, self.status)
        
@@ -178,9 +186,9 @@ class Session(jabw.JabberConnection):
                if avatarHash == " ": # Setting no avatar
                        self.legacycon.updateAvatar() # Default
                elif (not self.avatar) or (self.avatar and self.avatar.getImageHash() != avatarHash):
-                       imageData = self.pytrans.avatarCache.getAvatar(avatarHash)
-                       if imageData:
-                               self.avatar = avatar.Avatar(imageData) # Stuff in the cache is always PNG
+                       av = self.pytrans.avatarCache.getAvatar(avatarHash)
+                       if av:
+                               self.avatar = av # Stuff in the cache is always PNG
                                self.legacycon.updateAvatar(self.avatar)
                        else:
                                self.doVCardUpdate()
@@ -262,6 +270,12 @@ class Session(jabw.JabberConnection):
                        groupchat = legacy.LegacyGroupchat(self, resource, gcID) # Creates an empty groupchat
                        groupchat.userJoined(tor)
                
+               elif ptype == "probe":
+                       LogEvent(INFO, self.jabberID, "Responding to presence probe")
+                       if to == config.jid:
+                               self.legacycon.sendShowStatus(source)
+                       else:
+                               self.contactList.getContact(to).sendPresence(source)
                else:
                        # Not for groupchat
                        self.handleResourcePresence(source, resource, to, tor, priority, ptype, show, status)
@@ -315,11 +329,14 @@ class Session(jabw.JabberConnection):
                del self.resourceList[resource]
                self.legacycon.resourceOffline(resource)
        
-       def subscriptionReceived(self, to, subtype):
+       def subscriptionReceived(self, fro, to, subtype):
                """ Sends the subscription request to the legacy services handler """
                if to.find('@') > 0:
-                       LogEvent(INFO, self.jabberID, "Passing subscription to legacy service.")
-                       self.contactList.jabberSubscriptionReceived(to, subtype)
+                       if self.ready:
+                               LogEvent(INFO, self.jabberID, "Passing subscription to legacy service.")
+                               self.contactList.jabberSubscriptionReceived(to, subtype)
+                       else:
+                               self.sendPresence(fro, to, ptype="error")
                else:
                        if subtype == "subscribe":
                                self.sendPresence(to=self.jabberID, fro=config.jid, ptype="subscribed")