X-Git-Url: https://code.delx.au/pymsnt/blobdiff_plain/0d1ee2592602e2580e1870a834f1e185d86ec58f..5921d694e4dd3f8471745fa99e68cada51fa7182:/src/legacy/glue.py diff --git a/src/legacy/glue.py b/src/legacy/glue.py index 0ba47b4..b6947f3 100644 --- a/src/legacy/glue.py +++ b/src/legacy/glue.py @@ -3,7 +3,7 @@ import os.path import utils -from twisted.internet import task +from twisted.internet import task, error from tlib.xmlw import Element from tlib import msn from debug import LogEvent, INFO, WARN, ERROR @@ -18,7 +18,7 @@ import lang url = "http://msn-transport.jabberstudio.org" -version = "0.11-dev" # The transport version +version = "0.11.1" # The transport version mangle = True # XDB '@' -> '%' mangling id = "msn" # The transport identifier @@ -36,6 +36,7 @@ defaultAvatar = avatar.AvatarCache().setAvatar(defaultAvatarData) def reloadConfig(): msn.MSNConnection.GETALLAVATARS = config.getAllAvatars + msn.setDebug(config._debugLevel >= 4) def isGroupJID(jid): """ Returns True if the JID passed is a valid groupchat JID (for MSN, does not contain '%') """ @@ -108,10 +109,10 @@ def msn2jid(msnid, withResource): else: if msnid.startswith("tel:+"): msnid = msnid.replace("tel:+", "") + "%tel" - jid = msnid.replace('@', '%') + "@" + config.jid + (withResource and "/msn" or "") + jid = msnid.replace('@', '%') + "@" + config.jid msn2jid_cache[msnid] = jid jid2msn_cache[jid] = msnid - return jid + return msn2jid(msnid, withResource) # Marks this as the function to be used in jabber:iq:gateway (Service ID Translation) def translateAccount(msnid): @@ -378,8 +379,9 @@ class LegacyConnection(msn.MSNConnection): def connectionLost(self, reason): LogEvent(INFO, self.jabberID) - text = lang.get(self.session.lang).msnDisconnected % reason - self.session.sendMessage(to=self.jabberID, fro=config.jid, body=text) + if reason.type != error.ConnectionDone: + text = lang.get(self.session.lang).msnDisconnected % reason + self.session.sendMessage(to=self.jabberID, fro=config.jid, body=text) self.session.removeMe() # Tear down the session def multipleLogin(self): @@ -550,16 +552,20 @@ class LegacyList: def __init__(self, session): self.jabberID = session.jabberID self.session = session - self.subscriptionBuffer = [] def removeMe(self): - self.subscriptionBuffer = None self.session = None def addContact(self, jid): LogEvent(INFO, self.jabberID) userHandle = jid2msn(jid) self.session.legacycon.addContact(msn.FORWARD_LIST, userHandle) + + # Handle adding a contact that has previously been removed + msnContact = self.session.legacycon.getContacts().getContact(userHandle) + if msnContact and msnContact.lists & msn.REVERSE_LIST: + self.session.legacycon.contactAddedMe(userHandle) + self.authContact(jid) self.session.contactList.getContact(jid).contactGrantsAuth() def removeContact(self, jid): @@ -570,12 +576,12 @@ class LegacyList: def authContact(self, jid): LogEvent(INFO, self.jabberID) - jid = jid2msn(jid) - d = self.session.legacycon.remContact(msn.PENDING_LIST, jid) + userHandle = jid2msn(jid) + d = self.session.legacycon.remContact(msn.PENDING_LIST, userHandle) if d: - self.session.legacycon.addContact(msn.REVERSE_LIST, jid) - self.session.legacycon.remContact(msn.BLOCK_LIST, jid) - self.session.legacycon.addContact(msn.ALLOW_LIST, jid) + self.session.legacycon.addContact(msn.REVERSE_LIST, userHandle) + self.session.legacycon.remContact(msn.BLOCK_LIST, userHandle) + self.session.legacycon.addContact(msn.ALLOW_LIST, userHandle) def deauthContact(self, jid): LogEvent(INFO, self.jabberID)