home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2009 June / maximum-cd-2009-06.iso / DiscContents / digsby_setup.exe / lib / msn / p10 / MSNP10Notification.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2009-02-26  |  10.2 KB  |  293 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. import logging
  5. from uuid import UUID
  6. from util import callsback, get
  7. import msn
  8. from msn import Message
  9. from msn.p9 import Notification as Super
  10. log = logging.getLogger('msn.p10.ns')
  11. defcb = dict(trid = True, callback = sentinel)
  12.  
  13. class GroupId(UUID):
  14.     
  15.     def __init__(self, id, *a, **k):
  16.         if isinstance(id, UUID):
  17.             id = str(id)
  18.         
  19.         
  20.         try:
  21.             UUID.__init__(self, id, *a, **k)
  22.         except Exception:
  23.             e = None
  24.             print 'error initializing contact id: ', a, k
  25.             raise e
  26.  
  27.  
  28.     
  29.     def __repr__(self):
  30.         return '<GroupId: %s>' % UUID.__repr__(self)
  31.  
  32.     
  33.     def __eq__(self, other):
  34.         return str(other) == str(self)
  35.  
  36.     
  37.     def __hash__(self):
  38.         return hash(str(self))
  39.  
  40.  
  41.  
  42. class ContactId(UUID):
  43.     
  44.     def __init__(self, *a, **k):
  45.         
  46.         try:
  47.             UUID.__init__(self, *a, **k)
  48.         except Exception:
  49.             e = None
  50.             print 'error initializing contact id: ', a, k
  51.             raise e
  52.  
  53.  
  54.     
  55.     def __repr__(self):
  56.         return '<ContactId: %s>' % UUID.__repr__(self)
  57.  
  58.     
  59.     def __eq__(self, other):
  60.         return str(other) == str(self)
  61.  
  62.  
  63.  
  64. class MSNP10Notification(Super):
  65.     cid_class = ContactId
  66.     events = Super.events | set(('contact_id_recv',))
  67.     versions = [
  68.         'MSNP10']
  69.     
  70.     def _set_display_name(self, new_alias, callback):
  71.         bytes = new_alias.encode('utf-8')
  72.         bytes = msn.util.url_encode(bytes)
  73.         self.send_prp('MFN', bytes, callback)
  74.  
  75.     
  76.     def _set_remote_alias(self, buddy, new_alias, callback):
  77.         self.send_sbp(contact.guid, 'MFN', msn.util.url_encode(new_alias.encode('utf-8')), callback)
  78.  
  79.     
  80.     def recv_syn(self, msg):
  81.         (__, __, num_buddies, num_groups) = msg.args
  82.         self.event('contact_list_details', int(num_buddies), int(num_groups))
  83.  
  84.     
  85.     def recv_lsg(self, msg):
  86.         log.debug('got lsg: %r', msg)
  87.         if msg.trid:
  88.             msg.args = (str(msg.trid),) + msg.args
  89.             msg.trid = 0
  90.         
  91.         
  92.         try:
  93.             (name, group_id) = msg.args[:2]
  94.         except ValueError:
  95.             e = None
  96.             if msg.args:
  97.                 
  98.                 try:
  99.                     group_id = GroupId(msg.args[0])
  100.                 except Exception:
  101.                     e2 = None
  102.                     name = msg.args[0]
  103.                     import uuid
  104.                     group_id = str(uuid.uuid4())
  105.  
  106.                 name = ''
  107.             else:
  108.                 return None
  109.         except:
  110.             msg.args
  111.  
  112.         self.event('group_receive', msn.util.url_decode(name).decode('utf-8'), GroupId(group_id))
  113.  
  114.     
  115.     def recv_lst(self, msg):
  116.         args = list(msg.args)
  117.         
  118.         try:
  119.             list_flags = int(args[-1])
  120.             groups = []
  121.             args.pop()
  122.         except ValueError:
  123.             groups = map(GroupId, args[-1].split(','))
  124.             list_flags = int(args[-2])
  125.             args.pop()
  126.             args.pop()
  127.  
  128.         split_args = []
  129.         for arg in args:
  130.             split = arg.split('=', 1)
  131.             if len(split) != 2:
  132.                 split_args[-1][-1] += ' ' + split[0]
  133.                 continue
  134.             split_args.append(split)
  135.         
  136.         
  137.         try:
  138.             info = dict(split_args)
  139.         except ValueError:
  140.             log.error('This data is so screwed up, maybe you can do something with it: %r', msg)
  141.             return None
  142.  
  143.         (name, nick, guid) = (lambda .0: for k in .0:
  144. info.get(k, ''))('NFC')
  145.         nick = msn.util.url_decode(nick).decode('utf-8')
  146.         self._last_bname = name
  147.         self.event('recv_contact', name, list_flags, groups)
  148.         self.event('contact_alias', name, nick)
  149.         if guid:
  150.             self.event('contact_id_recv', name, ContactId(guid))
  151.         
  152.  
  153.     
  154.     def recv_adc(self, msg):
  155.         l_id = msg.args[0]
  156.         info = list(msg.args[1:])
  157.         if l_id == 'FL':
  158.             if '=' not in info[-1]:
  159.                 g_id = GroupId(info.pop())
  160.             else:
  161.                 g_id = None
  162.         else:
  163.             g_id = None
  164.         
  165.         has_equals = lambda i: '=' in i
  166.         d = (dict,)((lambda .0: for arg in .0:
  167. if has_equals(arg):
  168. arg.split('=', 1)continue)(info))
  169.         (name, nick, guid) = (lambda .0: for k in .0:
  170. d.get(k, ''))(list('NFC'))
  171.         nick = msn.util.url_decode(nick).decode('utf-8')
  172.         list_flags = dict(FL = 1, AL = 2, BL = 4, RL = 8, PL = 16)[l_id]
  173.         if guid:
  174.             guid = ContactId(guid)
  175.             id = guid
  176.         else:
  177.             id = name
  178.         self.event('on_contact_add', name, id, list_flags, [
  179.             g_id])
  180.         if name and guid:
  181.             self.event('contact_id_recv', name, guid)
  182.         
  183.         if name:
  184.             self.event('contact_alias', name, nick)
  185.         
  186.  
  187.     
  188.     def recv_rem(self, msg):
  189.         l_id = msg.args[0]
  190.         
  191.         try:
  192.             c_id = ContactId(msg.args[1])
  193.         except ValueError:
  194.             c_id = msg.args[1]
  195.  
  196.         g_id = get(msg.args, 2, None)
  197.         if g_id is not None:
  198.             g_id = GroupId(g_id)
  199.         
  200.         self.event('contact_remove', c_id, l_id, g_id)
  201.  
  202.     
  203.     def recv_adg(self, msg):
  204.         log.debug('got adg')
  205.         (name, g_id) = msg.args
  206.         name = msn.util.url_decode(name).decode('utf-8')
  207.         g_id = GroupId(g_id)
  208.         self.event('group_add', name, g_id)
  209.  
  210.     
  211.     def _remove_group(self, groupid, callback = None):
  212.         self.send_rmg(groupid, callback = callback)
  213.  
  214.     
  215.     def recv_rmg(self, msg):
  216.         log.debug('got rmg')
  217.         (g_id,) = msg.args
  218.         g_id = GroupId(g_id)
  219.         self.event('group_remove', g_id)
  220.  
  221.     
  222.     def recv_reg(self, msg):
  223.         log.debug('got reg')
  224.         (g_id, name) = msg.args
  225.         g_id = GroupId(g_id)
  226.         name = msn.util.url_decode(name).decode('utf-8')
  227.         self.event('group_rename', g_id, name)
  228.  
  229.     
  230.     def recv_rea(self, msg):
  231.         raise msn.WrongVersionException
  232.  
  233.     
  234.     def recv_add(self, msg):
  235.         raise msn.WrongVersionException
  236.  
  237.     
  238.     def send_syn(self):
  239.         log.debug('sending syn')
  240.         self.socket.send(Message('SYN', '0', '0'), **defcb)
  241.  
  242.     
  243.     def send_adc(self, l_id, bname, bid, g_id = '', callback = None):
  244.         bname = getattr(bname, 'name', bname)
  245.         binfo = 'N=%s' % bname
  246.         if l_id == 'FL':
  247.             binfo += ' F=%s' % bname
  248.         
  249.         if g_id and bid:
  250.             binfo = 'C=%s' % bid
  251.         
  252.         if not g_id:
  253.             pass
  254.         adc_message = Message('ADC', l_id, binfo, '')
  255.         adc_message.retries = 5
  256.         adc_message.timeout = 4
  257.         self.socket.send(adc_message, trid = True, callback = callback)
  258.  
  259.     send_adc = callsback(send_adc)
  260.     send_add = send_adc
  261.     
  262.     def send_rem(self, l_id, bname, bid, g_id = '', callback = None):
  263.         if l_id == 'FL':
  264.             id = bid
  265.         else:
  266.             id = bname
  267.         if g_id is None:
  268.             g_id = ''
  269.         
  270.         if not id or g_id:
  271.             log.info('Didnt get an id or gid. returning from send_rem. traceback to follow...')
  272.             import traceback
  273.             traceback.print_stack()
  274.             callback.success()
  275.             return None
  276.         
  277.         self.socket.send(Message('REM', l_id, id, g_id), trid = True, callback = callback)
  278.  
  279.     send_rem = callsback(send_rem)
  280.     
  281.     def send_prp(self, prp_type, new_val, callback):
  282.         self.socket.send(Message('PRP', prp_type, new_val), trid = True, callback = callback)
  283.  
  284.     
  285.     def send_sbp(self, b_guid, prp_type, new_val, callback):
  286.         self.socket.send(Message('SBP', b_guid, prp_type, new_val), trid = True, callback = callback)
  287.  
  288.     
  289.     def send_rea(self, *args, **kwargs):
  290.         raise msn.WrongVersionException
  291.  
  292.  
  293.