home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2011 October / maximum-cd-2011-10.iso / DiscContents / digsby_setup.exe / lib / jabber / JabberChat.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2011-06-22  |  11.8 KB  |  369 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.6)
  3.  
  4. import pyxmpp.jabber.muc as pyxmpp
  5. from pyxmpp.message import Message
  6. from pyxmpp.all import JID
  7. from common import Conversation, caps
  8. from util.observe import Observable
  9. from util import callsback
  10. from pprint import pformat
  11. from logging import getLogger
  12. log = getLogger('JabberChat')
  13. import traceback
  14. import jabber
  15. from pyxmpp import presence
  16. from objects.nick import NICK_NS
  17. from objects.nick import Nick
  18.  
  19. class user_prop(object):
  20.     
  21.     def __init__(self, name):
  22.         self.attr = name
  23.  
  24.     
  25.     def __get__(self, obj, objtype = None):
  26.         return getattr(obj.user, self.attr)
  27.  
  28.  
  29.  
  30. class JabberChatBuddy(Observable):
  31.     
  32.     def __init__(self, mucRoomUser, room):
  33.         Observable.__init__(self)
  34.         self.user = mucRoomUser
  35.         self.room = room
  36.  
  37.     
  38.     def info_key(self):
  39.         return self.room.name + '/' + self.name + '_' + self.service
  40.  
  41.     info_key = property(info_key)
  42.     
  43.     def jid(self):
  44.         return self.user.room_jid
  45.  
  46.     jid = property(jid)
  47.     
  48.     def __getattr__(self, val, default = sentinel):
  49.         if val == 'user':
  50.             return object.__getattribute__(self, 'user')
  51.         
  52.         try:
  53.             return getattr(object.__getattribute__(self, 'user'), val)
  54.         except AttributeError:
  55.             val == 'user'
  56.             val == 'user'
  57.             if default is sentinel:
  58.                 return object.__getattribute__(self, val)
  59.             
  60.             try:
  61.                 return object.__getattribute__(self, val)
  62.             except AttributeError:
  63.                 default is sentinel
  64.                 default is sentinel
  65.                 return default
  66.             
  67.  
  68.             default is sentinel<EXCEPTION MATCH>AttributeError
  69.  
  70.  
  71.     name = property((lambda self: self.user.nick))
  72.     
  73.     def service(self):
  74.         return self.room.protocol.name
  75.  
  76.     service = property(service)
  77.     
  78.     def protocol(self):
  79.         return self.room.protocol
  80.  
  81.     protocol = property(protocol)
  82.     
  83.     def idstr(self):
  84.         return u'/'.join([
  85.             self.service,
  86.             self.room.name,
  87.             self.name])
  88.  
  89.     
  90.     def private_message_buddy(self):
  91.         if not self.user.real_jid:
  92.             pass
  93.         return self.protocol.get_buddy(self.user.room_jid)
  94.  
  95.     
  96.     def private_message_buddy_attr(self, attr):
  97.         b = self.private_message_buddy()
  98.         if b is not None:
  99.             return getattr(b, attr)
  100.  
  101.     
  102.     def alias(self):
  103.         if self.user is self.room.room_state.me:
  104.             
  105.             try:
  106.                 return self.room.protocol.self_buddy.alias
  107.             except Exception:
  108.                 return 'Me'
  109.             
  110.  
  111.         None<EXCEPTION MATCH>Exception
  112.         for attr in ('nickname',):
  113.             nick = getattr(self, attr, None)
  114.             if nick:
  115.                 return unicode(nick)
  116.         
  117.         
  118.         try:
  119.             return self.room.protocol.buddies[self.user.real_jid].alias
  120.         except Exception:
  121.             nick
  122.             nick
  123.         except:
  124.             nick
  125.  
  126.         return self.user.nick
  127.  
  128.     alias = property(alias)
  129.     
  130.     def __repr__(self):
  131.         user = self.user
  132.         if not user.real_jid:
  133.             pass
  134.         return '<JabberChatBuddy %s [%s %s] (Real JID: %s)>' % (user.room_jid, user.role, user.affiliation, '?')
  135.  
  136.     
  137.     def increase_log_size(self, num_bytes):
  138.         pass
  139.  
  140.     
  141.     def icon(self):
  142.         return self.private_message_buddy_attr('icon')
  143.  
  144.     icon = property(icon)
  145.     
  146.     def icon_path(self):
  147.         return self.private_message_buddy_attr('icon_path')
  148.  
  149.     icon_path = property(icon_path)
  150.     
  151.     def buddy_icon(self):
  152.         get_buddy_icon = get_buddy_icon
  153.         import gui.buddylist.renderers
  154.         return get_buddy_icon(self, 32, False)
  155.  
  156.     buddy_icon = property(buddy_icon)
  157.     history = property((lambda self: iter([])))
  158.     status_orb = 'available'
  159.     online = True
  160.     
  161.     def serviceicon(self):
  162.         skin = skin
  163.         import gui
  164.         return skin.get('serviceicons.' + self.service)
  165.  
  166.     serviceicon = property(serviceicon)
  167.     caps = [
  168.         caps.IM]
  169.     blocked = False
  170.     sms = False
  171.  
  172.  
  173. class JabberChat(pyxmpp.jabber.muc.MucRoomHandler, Conversation):
  174.     ischat = True
  175.     contact_identities_known = False
  176.     
  177.     def __init__(self, protocol, jid, callback):
  178.         pyxmpp.jabber.muc.MucRoomHandler.__init__(self)
  179.         Conversation.__init__(self, protocol)
  180.         self.callback = callback
  181.         self.jid = jid
  182.         self.protocol.conversations[jid.as_unicode()] = self
  183.         self.buddies = { }
  184.  
  185.     
  186.     def chat_room_name(self):
  187.         return self.jid.as_unicode()
  188.  
  189.     chat_room_name = property(chat_room_name)
  190.     
  191.     def name(self):
  192.         name = self.room_state.room_jid.bare()
  193.         subject = self.room_state.subject
  194.         if subject:
  195.             return u'%s - %s' % (name, subject)
  196.         return unicode(name)
  197.  
  198.     name = property(name)
  199.     
  200.     def user_joined(self, user, stanza):
  201.         bud = self._buddy(user)
  202.         self.room_list.append(bud)
  203.         if user is self.room_state.me and self.callback is not None:
  204.             self.callback = None
  205.             cb = self.callback
  206.             cb.success(self)
  207.         
  208.         self._log_presence(bud, 'joined')
  209.         Conversation.buddy_join(self, bud)
  210.  
  211.     
  212.     def user_left(self, user, stanza):
  213.         bud = self.buddies[user.nick]
  214.         
  215.         try:
  216.             self.room_list.remove(bud)
  217.         except ValueError:
  218.             pass
  219.  
  220.         self._log_presence(bud, 'left')
  221.         Conversation.buddy_leave(self, bud)
  222.  
  223.     
  224.     def _log_presence(self, buddy, action):
  225.         
  226.         try:
  227.             roomlist = pformat(list(self.room_list))
  228.         except UnicodeError:
  229.             
  230.             try:
  231.                 roomlist = repr(self.room_list)
  232.             except Exception:
  233.                 roomlist = '?'
  234.             except:
  235.                 None<EXCEPTION MATCH>Exception
  236.             
  237.  
  238.             None<EXCEPTION MATCH>Exception
  239.  
  240.         log.info('user %r %s:\n%s', buddy, action, roomlist)
  241.  
  242.     
  243.     def nick_changed(self, user, old_nick, stanza):
  244.         b = self._buddy(user)
  245.         b.notify('name', old_nick, b.name)
  246.  
  247.     
  248.     def presence_changed(self, user, stanza):
  249.         b = self._buddy(user)
  250.         nicks = jabber.jabber_util.xpath_eval(stanza.xmlnode, 'n:nick', {
  251.             'n': NICK_NS })
  252.         if nicks:
  253.             b.nickname = Nick(nicks[0]).nick
  254.         
  255.  
  256.     
  257.     def affiliation_changed(self, user, old_aff, new_aff, stanza):
  258.         self._buddy(user).notify('affiliation', old_aff, new_aff)
  259.  
  260.     
  261.     def role_changed(self, user, old_role, new_role, stanza):
  262.         self._buddy(user).notify('role', old_role, new_role)
  263.  
  264.     
  265.     def subject_changed(self, user, stanza):
  266.         self.notify('name', None, self.room_state.subject)
  267.  
  268.     
  269.     def message_received(self, user, stanza):
  270.         if not user:
  271.             return None
  272.         body = stanza.get_body()
  273.         if body is not None:
  274.             self.incoming_message(self._buddy(user), body)
  275.         
  276.  
  277.     
  278.     def incoming_message(self, buddy, message):
  279.         if buddy.user == self.room_state.me:
  280.             return None
  281.         self.typing_status[buddy] = None
  282.         self.received_message(buddy, message)
  283.  
  284.     
  285.     def room_configuration_error(self, stanza):
  286.         self.error(stanza)
  287.  
  288.     
  289.     def error(self, stanza):
  290.         fire = fire
  291.         import common
  292.         if not (self.room_state.configured) and stanza.get_from() == self.jid and stanza.stanza_type == 'presence':
  293.             err = stanza.get_error()
  294.             cond = err.get_condition()
  295.             if cond is not None and cond.name == 'item-not-found':
  296.                 return None
  297.         
  298.         
  299.         try:
  300.             fire('error', title = self.jid, msg = stanza.get_error().get_message(), details = '', sticky = True, popupid = self.jid, buttons = ((_('Close'), (lambda : pass)),), update = 'replace')
  301.         except Exception:
  302.             traceback.print_exc()
  303.  
  304.         if not self.room_state.joined:
  305.             self.exit()
  306.         
  307.  
  308.     
  309.     def _send_message(self, message, callback = None):
  310.         self.room_state.send_message(message.format_as('plaintext'))
  311.         callback.success()
  312.  
  313.     _send_message = callsback(_send_message)
  314.     
  315.     def invite(self, buddy, message = None, callback = None):
  316.         room = self
  317.         
  318.         try:
  319.             buddy = buddy.jid.as_unicode()
  320.         except:
  321.             buddy = JID(buddy).as_unicode()
  322.  
  323.         if message is None:
  324.             message = _('You have been invited to %s') % self.jid.as_unicode()
  325.         
  326.         m = Message(from_jid = room.protocol.self_buddy.jid, to_jid = room.jid)
  327.         x = m.xmlnode.newTextChild(None, 'x', None)
  328.         x.setNs(x.newNs('http://jabber.org/protocol/muc#user', None))
  329.         invite = x.newTextChild(None, 'invite', None)
  330.         invite.setProp('to', buddy)
  331.         reason = invite.newTextChild(None, 'reason', message)
  332.         self.protocol.send_cb(m, callback = callback)
  333.  
  334.     invite = callsback(invite)
  335.     
  336.     def send_typing_status(self, status):
  337.         pass
  338.  
  339.     
  340.     def set_subject(self, subject):
  341.         self.room_state.set_subject(subject)
  342.  
  343.     
  344.     def exit(self):
  345.         self.room_state.leave()
  346.         
  347.         try:
  348.             del self.protocol.conversations[self.jid.as_unicode()]
  349.         except KeyError:
  350.             traceback.print_exc()
  351.  
  352.         Conversation.exit(self)
  353.  
  354.     
  355.     def self_buddy(self):
  356.         return self.protocol.self_buddy
  357.  
  358.     self_buddy = property(self_buddy)
  359.     
  360.     def _buddy(self, mucuser):
  361.         
  362.         try:
  363.             return self.buddies[mucuser.nick]
  364.         except KeyError:
  365.             return self.buddies.setdefault(mucuser.nick, JabberChatBuddy(mucuser, self))
  366.  
  367.  
  368.  
  369.