home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2011 February / maximum-cd-2011-02.iso / DiscContents / digsby_setup85.exe / lib / plugins / component_gtalk / gtalk.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2010-11-24  |  8.2 KB  |  205 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.6)
  3.  
  4. from pyxmpp.jid import JID
  5. from jabber.objects.shared_status.status import SharedStatus, SHARED_STATUS_NS
  6. import jabber
  7. from logging import getLogger
  8. from common.actions import action
  9. from gtalkStream import GoogleTalkStream
  10. import util.callbacks as callbacks
  11. import uuid
  12. log = getLogger('gtalk.protocol')
  13. GTALK_SMS = False
  14. status_state_map = {
  15.     'available': 'normal',
  16.     'free for chat': 'normal',
  17.     'do not disturb': 'dnd' }
  18. GTALK_WAY = True
  19.  
  20. class GoogleTalk(jabber.protocol):
  21.     name = 'gtalk'
  22.     service = 'gtalk'
  23.     status_state_map = status_state_map
  24.     supports_group_chat = True
  25.     
  26.     def __init__(self, username, *a, **k):
  27.         self._idle = None
  28.         self._show = None
  29.         if '@' not in username:
  30.             username += '@gmail.com'
  31.         
  32.         jabber.protocol.__init__(self, username, *a, **k)
  33.         self.stream_class = GoogleTalkStream
  34.         self._invisible = False
  35.  
  36.     
  37.     def invisible(self):
  38.         return self._invisible
  39.  
  40.     invisible = jabber.protocol.invisible.getter(invisible)
  41.     
  42.     def invisible(self, value):
  43.         self._invisible = value
  44.  
  45.     invisible = invisible.setter(invisible)
  46.     if not GTALK_WAY:
  47.         
  48.         def set_idle(self, yes):
  49.             if yes:
  50.                 self._idle = self.show
  51.                 self.show = 'away'
  52.             else:
  53.                 self.show = self._idle
  54.             self.presence_push()
  55.  
  56.         
  57.         def set_message(self, message, status, format = None):
  58.             log.info('set_message(%s): %r', status, message)
  59.             state = status_state_map.get(status.lower(), 'dnd')
  60.             self.show = None if state != 'normal' else None
  61.             self._idle = self.show
  62.             self.status = message
  63.             self.presence_push()
  64.  
  65.     else:
  66.         
  67.         def set_idle(self, yes):
  68.             self._idle = bool(yes)
  69.             self.presence_push()
  70.  
  71.         
  72.         def set_message(self, message, status, format = None, default_status = 'dnd'):
  73.             jabber.protocol.set_message(self, message, status, format, default_status)
  74.  
  75.         
  76.         def __set_show(self, state):
  77.             self._show = state
  78.  
  79.         
  80.         def __get_show(self):
  81.             if self._idle:
  82.                 return 'away'
  83.             return self._show
  84.  
  85.         show = property(__get_show, __set_show)
  86.     
  87.     def change_password(self, *a):
  88.         pass
  89.  
  90.     change_password = action((lambda self: pass))(change_password)
  91.     
  92.     def edit_vcard(self, *a, **k):
  93.         pass
  94.  
  95.     edit_vcard = action((lambda self: pass))(edit_vcard)
  96.     if GTALK_SMS:
  97.         
  98.         def _get_caps(self):
  99.             import common
  100.             return jabber.protocol._get_caps(self) + [
  101.                 common.caps.SMS]
  102.  
  103.         caps = property(_get_caps)
  104.         
  105.         def send_sms(self, phone_number, message, callback = None):
  106.             jid = jabber.JID(phone_number, 'sms.talk.google.com')
  107.  
  108.         send_sms = callbacks.callsback(send_sms)
  109.     
  110.     
  111.     def session_started(self):
  112.         s = self.stream
  113.         s.set_iq_set_handler('query', SHARED_STATUS_NS, self.shared_status_set)
  114.         jabber.protocol.session_started(self)
  115.  
  116.     
  117.     def service_discovery_init(self):
  118.         self.disco_init = jabber.disco.DiscoNode(self.cache, JID(self.jid.domain))
  119.         self.disco_init.fetch(self.disco_finished, depth = 1, timeout_duration = 1)
  120.         self.disco_init2 = jabber.disco.DiscoNode(self.cache, JID('google.com'))
  121.         self.disco_init2.fetch(super(GoogleTalk, self).disco_finished, depth = 1, timeout_duration = 1)
  122.  
  123.     
  124.     def disco_finished(self, disco_node):
  125.         status_make_get = make_get
  126.         import jabber.objects.shared_status
  127.         i = status_make_get(self)
  128.         self.send_cb(i, success = self.unfreeze_presence, error = self.unfreeze_presence_error, timeout = self.unfreeze_presence_error, timeout_duration = 2)
  129.         jabber.protocol.disco_finished(self, disco_node)
  130.  
  131.     
  132.     def unfreeze_presence(self, stanza):
  133.         self.shared_status_set(stanza)
  134.         self._presence_push()
  135.  
  136.     
  137.     def unfreeze_presence_error(self, *a, **k):
  138.         self._presence_push()
  139.  
  140.     
  141.     def presence_push(self):
  142.         pass
  143.  
  144.     
  145.     def _presence_push(self):
  146.         self.presence_push = self._presence_push
  147.         shared = getattr(self, 'shared_status', None)
  148.         if shared is not None:
  149.             shared.show = self.show
  150.             shared.status = self.status
  151.             shared.invisible = self.invisible
  152.             i = shared.make_push(self)
  153.             
  154.             cb = lambda *a, **k: jabber.protocol.presence_push(self)
  155.             self.send_cb(i, success = cb, error = cb, timeout = cb, timeout_duration = 5)
  156.         else:
  157.             jabber.protocol.presence_push(self)
  158.  
  159.     
  160.     def shared_status_set(self, stanza):
  161.         old_shared = getattr(self, 'shared_status', None)
  162.         new_shared = SharedStatus(stanza.xmlnode)
  163.         for attr in ('status_max', 'status_list_max', 'status_list_contents_max'):
  164.             val = getattr(new_shared, attr.replace('-', '_'), None)
  165.             if val is None:
  166.                 setattr(new_shared, attr, getattr(old_shared, attr, None))
  167.                 continue
  168.         
  169.         self.shared_status = new_shared
  170.  
  171.     
  172.     def set_invisible(self, invisible = True):
  173.         self.invisible = invisible
  174.         self.presence_push()
  175.  
  176.     
  177.     def default_chat_server(self):
  178.         if self.confservers:
  179.             return self.confservers[0]
  180.         return 'groupchat.google.com'
  181.  
  182.     
  183.     def _get_chat_nick(self, nick):
  184.         if not nick:
  185.             nick = unicode(self.self_buddy.jid).replace('@', '_')
  186.         
  187.         return nick
  188.  
  189.     
  190.     def _get_chat_room_name(self, room_name):
  191.         if not room_name:
  192.             room_name = u'private-chat-' + unicode(uuid.uuid4())
  193.         
  194.         return room_name
  195.  
  196.     
  197.     def _add_presence_extras(self, pres):
  198.         c = pres.add_new_content('http://jabber.org/protocol/caps', 'c')
  199.         c.setProp('node', 'http://www.google.com/xmpp/client/caps')
  200.         c.setProp('ver', '1.1')
  201.         c.setProp('ext', 'pmuc-v1')
  202.         return super(GoogleTalk, self)._add_presence_extras(pres)
  203.  
  204.  
  205.