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

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. from common.Conversation import Conversation
  5. from util import dictadd, callsback
  6. from yahoo.yahoobuddy import YahooBuddy
  7. from yahoo.yahoolookup import ykeys
  8. from yahoo import yahooformat
  9. from logging import getLogger
  10. log = getLogger('yahoo.convo')
  11.  
  12. class YahooConvoBase(Conversation):
  13.     
  14.     def __init__(self, protocol):
  15.         Conversation.__init__(self)
  16.         self.__dict__.update(protocol = protocol, buddies = protocol.buddies, self_buddy = protocol.self_buddy)
  17.  
  18.     
  19.     def buddy_join(self, buddy):
  20.         self += self.room_list if buddy not in self.room_list else []
  21.         self.typing_status[buddy] = None
  22.  
  23.     
  24.     def buddy_leave(self, buddy):
  25.         if buddy in self.room_list:
  26.             self.room_list.remove(buddy)
  27.             del self.typing_status[buddy]
  28.         
  29.  
  30.     
  31.     def incoming_message(self, buddy, message, timestamp = None):
  32.         if not isinstance(buddy, YahooBuddy):
  33.             raise TypeError()
  34.         
  35.         message = yahooformat.tohtml(message.decode('utf-8', 'replace'))
  36.         message = newlines_to_brs(message)
  37.         self.typing_status[buddy] = None
  38.         if timestamp is None:
  39.             kws = { }
  40.         else:
  41.             kws = dict(timestamp = timestamp)
  42.         kws['content_type'] = 'text/html'
  43.         self.received_message(buddy, message, **kws)
  44.         Conversation.incoming_message(self)
  45.  
  46.     
  47.     def myname(self):
  48.         return self.self_buddy.name
  49.  
  50.     myname = property(myname)
  51.     
  52.     def send_typing_status(self, status = None):
  53.         pass
  54.  
  55.  
  56.  
  57. class YahooConvo(YahooConvoBase):
  58.     ischat = False
  59.     
  60.     def __init__(self, parent_protocol, buddy):
  61.         YahooConvoBase.__init__(self, parent_protocol)
  62.         self.buddy_join(parent_protocol.self_buddy)
  63.         self.buddy_join(buddy)
  64.         self.name = buddy.alias
  65.         self.to_from = {
  66.             '1': self.myname,
  67.             '5': buddy.name }
  68.  
  69.     
  70.     def _send_message(self, message, auto = False, callback = None, **options):
  71.         network_msg = message
  72.         format = options.get('format', None)
  73.         if format:
  74.             network_msg = yahooformat.format(format, network_msg)
  75.         
  76.         network_msg = network_msg.encode('utf-8')
  77.         d = {
  78.             ykeys['message']: network_msg,
  79.             ykeys['msg_encoding']: '1' }
  80.         import YahooProtocol
  81.         servicekey = YahooProtocol.PROTOCOL_CODES.get(self.buddy.service, None)
  82.         if servicekey is not None:
  83.             d[ykeys['buddy_service']] = servicekey
  84.         
  85.         log.info('Sending message to %r. buddy_service=%r', self.buddy, self.buddy.service == 'msn')
  86.         
  87.         try:
  88.             self.protocol.send('message', 'offline', dictadd(self.to_from, d))
  89.         except Exception:
  90.             e = None
  91.             callback.error(e)
  92.  
  93.         callback.success()
  94.  
  95.     _send_message = callsback(_send_message)
  96.     
  97.     def self_buddy(self):
  98.         return self.protocol.self_buddy
  99.  
  100.     self_buddy = property(self_buddy)
  101.     
  102.     def send_typing_status(self, status = None):
  103.         typing_now = status == 'typing'
  104.         None(log.debug, 'sending %styping' if not typing_now else '')
  105.         None(self.protocol.send, 'notify', [
  106.             'typing',
  107.             'typing_status',
  108.             'TYPING',
  109.             'frombuddy',
  110.             self.self_buddy.name,
  111.             'message',
  112.             '',
  113.             'flag' if typing_now else '0',
  114.             'to',
  115.             self.buddy.name])
  116.  
  117.     
  118.     def exit(self):
  119.         self.protocol.exit_conversation(self)
  120.  
  121.     
  122.     def __repr__(self):
  123.         return '<%s with %s from %s>' % (self.__class__.__name__, self.buddy, self.protocol.username)
  124.  
  125.  
  126.  
  127. class YahooConf(YahooConvoBase):
  128.     ischat = True
  129.     
  130.     def __init__(self, parent_protocol, name):
  131.         YahooConvoBase.__init__(self, parent_protocol)
  132.         self.name = name
  133.  
  134.     
  135.     def invite(self, buddy, message = None):
  136.         bname = getattr(buddy, 'name', buddy)
  137.         self.protocol.invite_to_conference(self.name, bname, message)
  138.  
  139.     
  140.     def _send_message(self, message):
  141.         users = []
  142.         _[1]
  143.         self.received_message(self.protocol.self_buddy, message)
  144.  
  145.     
  146.     def exit(self):
  147.         self.protocol.send('conflogoff', 'available', frombuddy = self.self_buddy.name, conf_name = self.name)
  148.  
  149.     
  150.     def __repr__(self):
  151.         return '<YahooConf %s (%d members)>' % (self.name, len(self.room_list))
  152.  
  153.  
  154.  
  155. class YahooChat(YahooConvoBase):
  156.     
  157.     def __init__(self, parent_protocol, name = 'Yahoo Chat', topic = ''):
  158.         YahooConvoBase.__init__(self, parent_protocol)
  159.         self.name = name
  160.         self.topic = topic
  161.  
  162.     
  163.     def _send_message(self, message):
  164.         log.info_s('send_message for %r: %s', self, message)
  165.         self.protocol.send('comment', 'available', dictadd(dict(frombuddy = self.myname, room_name = self.name, chat_message = message), {
  166.             '124': '1' }))
  167.  
  168.     
  169.     def exit(self):
  170.         log.info('YahooChat exit: sending chatlogout_available')
  171.         self.protocol.send('chatlogout', 'available', frombuddy = self.myname)
  172.  
  173.     
  174.     def __repr__(self):
  175.         return '<YahooChat %s (%d members, topic: %s)' % (self.name, len(self.room_list), self.topic)
  176.  
  177.  
  178.  
  179. def newlines_to_brs(s, br = '<br />'):
  180.     return s.replace('\r\n', '\n').replace('\n', br).replace('\r', br)
  181.  
  182.