home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2011 February / maximum-cd-2011-02.iso / DiscContents / digsby_setup85.exe / lib / jabber / JabberChat.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2010-11-24  |  11.1 KB  |  348 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 alias(self):
  97.         if self.user is self.room.room_state.me:
  98.             
  99.             try:
  100.                 return self.room.protocol.self_buddy.alias
  101.             except Exception:
  102.                 return 'Me'
  103.             
  104.  
  105.         None<EXCEPTION MATCH>Exception
  106.         for attr in ('nickname',):
  107.             nick = getattr(self, attr, None)
  108.             if nick:
  109.                 return unicode(nick)
  110.         
  111.         
  112.         try:
  113.             return self.room.protocol.buddies[self.user.real_jid].alias
  114.         except Exception:
  115.             nick
  116.             nick
  117.         except:
  118.             nick
  119.  
  120.         return self.user.nick
  121.  
  122.     alias = property(alias)
  123.     
  124.     def __repr__(self):
  125.         user = self.user
  126.         if not user.real_jid:
  127.             pass
  128.         return '<JabberChatBuddy %s [%s %s] (Real JID: %s)>' % (user.room_jid, user.role, user.affiliation, '?')
  129.  
  130.     
  131.     def increase_log_size(self, num_bytes):
  132.         pass
  133.  
  134.     icon = None
  135.     buddy_icon = None
  136.     history = property((lambda self: iter([])))
  137.     status_orb = 'available'
  138.     online = True
  139.     
  140.     def serviceicon(self):
  141.         skin = skin
  142.         import gui
  143.         return skin.get('serviceicons.' + self.service)
  144.  
  145.     serviceicon = property(serviceicon)
  146.     caps = [
  147.         caps.IM]
  148.     blocked = False
  149.     sms = False
  150.  
  151.  
  152. class JabberChat(pyxmpp.jabber.muc.MucRoomHandler, Conversation):
  153.     ischat = True
  154.     contact_identities_known = False
  155.     
  156.     def __init__(self, protocol, jid, callback):
  157.         pyxmpp.jabber.muc.MucRoomHandler.__init__(self)
  158.         Conversation.__init__(self, protocol)
  159.         self.callback = callback
  160.         self.jid = jid
  161.         self.protocol.conversations[jid.as_unicode()] = self
  162.         self.buddies = { }
  163.  
  164.     
  165.     def chat_room_name(self):
  166.         return self.jid.as_unicode()
  167.  
  168.     chat_room_name = property(chat_room_name)
  169.     
  170.     def name(self):
  171.         name = self.room_state.room_jid.bare()
  172.         subject = self.room_state.subject
  173.         if subject:
  174.             return u'%s - %s' % (name, subject)
  175.         return unicode(name)
  176.  
  177.     name = property(name)
  178.     
  179.     def user_joined(self, user, stanza):
  180.         bud = self._buddy(user)
  181.         self.room_list.append(bud)
  182.         if user is self.room_state.me and self.callback is not None:
  183.             self.callback = None
  184.             cb = self.callback
  185.             cb.success(self)
  186.         
  187.         self._log_presence(bud, 'joined')
  188.         Conversation.buddy_join(self, bud)
  189.  
  190.     
  191.     def user_left(self, user, stanza):
  192.         bud = self.buddies[user.nick]
  193.         
  194.         try:
  195.             self.room_list.remove(bud)
  196.         except ValueError:
  197.             pass
  198.  
  199.         self._log_presence(bud, 'left')
  200.         Conversation.buddy_leave(self, bud)
  201.  
  202.     
  203.     def _log_presence(self, buddy, action):
  204.         
  205.         try:
  206.             roomlist = pformat(list(self.room_list))
  207.         except UnicodeError:
  208.             
  209.             try:
  210.                 roomlist = repr(self.room_list)
  211.             except Exception:
  212.                 roomlist = '?'
  213.             except:
  214.                 None<EXCEPTION MATCH>Exception
  215.             
  216.  
  217.             None<EXCEPTION MATCH>Exception
  218.  
  219.         log.info('user %r %s:\n%s', buddy, action, roomlist)
  220.  
  221.     
  222.     def nick_changed(self, user, old_nick, stanza):
  223.         b = self._buddy(user)
  224.         b.notify('name', old_nick, b.name)
  225.  
  226.     
  227.     def presence_changed(self, user, stanza):
  228.         b = self._buddy(user)
  229.         nicks = jabber.jabber_util.xpath_eval(stanza.xmlnode, 'n:nick', {
  230.             'n': NICK_NS })
  231.         if nicks:
  232.             b.nickname = Nick(nicks[0]).nick
  233.         
  234.  
  235.     
  236.     def affiliation_changed(self, user, old_aff, new_aff, stanza):
  237.         self._buddy(user).notify('affiliation', old_aff, new_aff)
  238.  
  239.     
  240.     def role_changed(self, user, old_role, new_role, stanza):
  241.         self._buddy(user).notify('role', old_role, new_role)
  242.  
  243.     
  244.     def subject_changed(self, user, stanza):
  245.         self.notify('name', None, self.room_state.subject)
  246.  
  247.     
  248.     def message_received(self, user, stanza):
  249.         if not user:
  250.             return None
  251.         body = stanza.get_body()
  252.         if body is not None:
  253.             self.incoming_message(self._buddy(user), body)
  254.         
  255.  
  256.     
  257.     def incoming_message(self, buddy, message):
  258.         if buddy.user == self.room_state.me:
  259.             return None
  260.         self.typing_status[buddy] = None
  261.         self.received_message(buddy, message)
  262.  
  263.     
  264.     def room_configuration_error(self, stanza):
  265.         self.error(stanza)
  266.  
  267.     
  268.     def error(self, stanza):
  269.         fire = fire
  270.         import common
  271.         if not (self.room_state.configured) and stanza.get_from() == self.jid and stanza.stanza_type == 'presence':
  272.             err = stanza.get_error()
  273.             cond = err.get_condition()
  274.             if cond is not None and cond.name == 'item-not-found':
  275.                 return None
  276.         
  277.         
  278.         try:
  279.             fire('error', title = self.jid, msg = stanza.get_error().get_message(), details = '', sticky = True, popupid = self.jid, buttons = ((_('Close'), (lambda : pass)),), update = 'replace')
  280.         except Exception:
  281.             traceback.print_exc()
  282.  
  283.         if not self.room_state.joined:
  284.             self.exit()
  285.         
  286.  
  287.     
  288.     def _send_message(self, message, callback = None):
  289.         self.room_state.send_message(message.format_as('plaintext'))
  290.         callback.success()
  291.  
  292.     _send_message = callsback(_send_message)
  293.     
  294.     def invite(self, buddy, message = None, callback = None):
  295.         room = self
  296.         
  297.         try:
  298.             buddy = buddy.jid.as_unicode()
  299.         except:
  300.             buddy = JID(buddy).as_unicode()
  301.  
  302.         if message is None:
  303.             message = _('You have been invited to %s') % self.jid.as_unicode()
  304.         
  305.         m = Message(from_jid = room.protocol.self_buddy.jid, to_jid = room.jid)
  306.         x = m.xmlnode.newTextChild(None, 'x', None)
  307.         x.setNs(x.newNs('http://jabber.org/protocol/muc#user', None))
  308.         invite = x.newTextChild(None, 'invite', None)
  309.         invite.setProp('to', buddy)
  310.         reason = invite.newTextChild(None, 'reason', message)
  311.         self.protocol.send_cb(m, callback = callback)
  312.  
  313.     invite = callsback(invite)
  314.     
  315.     def send_typing_status(self, status):
  316.         pass
  317.  
  318.     
  319.     def set_subject(self, subject):
  320.         self.room_state.set_subject(subject)
  321.  
  322.     
  323.     def exit(self):
  324.         self.room_state.leave()
  325.         
  326.         try:
  327.             del self.protocol.conversations[self.jid.as_unicode()]
  328.         except KeyError:
  329.             traceback.print_exc()
  330.  
  331.         Conversation.exit(self)
  332.  
  333.     
  334.     def self_buddy(self):
  335.         return self.protocol.self_buddy
  336.  
  337.     self_buddy = property(self_buddy)
  338.     
  339.     def _buddy(self, mucuser):
  340.         
  341.         try:
  342.             return self.buddies[mucuser.nick]
  343.         except KeyError:
  344.             return self.buddies.setdefault(mucuser.nick, JabberChatBuddy(mucuser, self))
  345.  
  346.  
  347.  
  348.