]> code.delx.au - pymsnt/commitdiff
Handle new MSN accounts correctly
authorJames Bunton <jamesbunton@fastmail.fm>
Sun, 29 Jul 2007 07:18:11 +0000 (17:18 +1000)
committerJames Bunton <jamesbunton@fastmail.fm>
Sun, 29 Jul 2007 07:18:11 +0000 (17:18 +1000)
src/legacy/msn/msn.py

index c27142368ac028b36d07cc7d2a81b610e3132096..ddc13d21781fad46df2a1fe01fc3937184f57f10 100644 (file)
@@ -1221,38 +1221,37 @@ class NotificationClient(MSNEventBase):
             self._setStateData('lst_sofar',sofar)
 
     def handle_BLP(self, params):
-        # check to see if this is in response to a SYN
-        if self._getState() == 'SYNC':
-            self._getStateData('list').privacy = listCodeToID[params[0].lower()]
-        else:
+        # If this is in response to a SYN, then there will be a transaction ID
+        try:
             id = int(params[0])
             self.factory.contacts.privacy = listCodeToID[params[1].lower()]
             self._fireCallback(id, params[1])
+        except ValueError:
+            self._getStateData('list').privacy = listCodeToID[params[0].lower()]
 
     def handle_GTC(self, params):
-        # check to see if this is in response to a SYN
-        if self._getState() == 'SYNC':
-            if params[0].lower() == "a": self._getStateData('list').autoAdd = 0
-            elif params[0].lower() == "n": self._getStateData('list').autoAdd = 1
-            else: raise MSNProtocolError, "Invalid Paramater for GTC" # debug
-        else:
+        # If this is in response to a SYN, then there will be a transaction ID
+        try:
             id = int(params[0])
             if params[1].lower() == "a": self._fireCallback(id, 0)
             elif params[1].lower() == "n": self._fireCallback(id, 1)
             else: raise MSNProtocolError, "Invalid Paramater for GTC" # debug
+        except ValueError:
+            if params[0].lower() == "a": self._getStateData('list').autoAdd = 0
+            elif params[0].lower() == "n": self._getStateData('list').autoAdd = 1
+            else: raise MSNProtocolError, "Invalid Paramater for GTC" # debug
 
     def handle_SYN(self, params):
         id = int(params[0])
-        self._setStateData('phone', []) # Always needs to be set
-        if params[3] == 0: # No LST will be received. New account?
+        contacts = MSNContactList()
+        self._setStateData('list', contacts)
+        self._setStateData('phone', [])
+        self._setStateData('lst_reply', int(params[3]))
+        self._setStateData('lsg_reply', int(params[4]))
+        self._setStateData('lst_sofar', 0)
+        if params[3] == "0": # No LST will be received. New account?
             self._setState('SESSION')
-            self._fireCallback(id, None, None)
-        else:
-            contacts = MSNContactList()
-            self._setStateData('list', contacts)
-            self._setStateData('lst_reply', int(params[3]))
-            self._setStateData('lsg_reply', int(params[4]))
-            self._setStateData('lst_sofar', 0)
+            self._fireCallback(id, contacts, [])
 
     def handle_LSG(self, params):
         if self._getState() == 'SYNC':
@@ -1261,10 +1260,11 @@ class NotificationClient(MSNEventBase):
     def handle_PRP(self, params):
         if params[1] == "MFN":
             self._fireCallback(int(params[0]))
-        elif self._getState() == 'SYNC':
-            self._getStateData('phone').append((params[0], unquote(params[1])))
         else:
-            self._fireCallback(int(params[0]), int(params[1]), unquote(params[3]))
+            try:
+                self._fireCallback(int(params[0]), int(params[1]), unquote(params[3]))
+            except ValueError:
+                self._getStateData('phone').append((params[0], unquote(params[1])))
 
     def handle_BPR(self, params):
         numParams = len(params)