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

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. from util import callsback
  5. from util.xml_tag import tag, tag_parse
  6. import pyxmpp.jabber.muc as pyxmpp
  7. from pyxmpp.message import Message
  8. import common.Conversation as common
  9. from util.observe import Observable
  10. from common import get_bname, Conversation
  11. from pyxmpp.all import JID
  12. from logging import getLogger
  13. log = getLogger('JabberChat')
  14. from pprint import pformat
  15.  
  16. class JabberChatBuddy(Observable):
  17.     
  18.     def __init__(self, mucRoomUser, room):
  19.         Observable.__init__(self)
  20.         self.user = mucRoomUser
  21.         self.room = room
  22.  
  23.     
  24.     def __getattr__(self, val, default = sentinel):
  25.         val = getattr(self.user, val, default)
  26.         if val is sentinel:
  27.             return object.__getattribute__(self, val, default)
  28.         else:
  29.             return val
  30.  
  31.     name = property((lambda self: self.user.nick))
  32.     
  33.     def service(self):
  34.         return self.room.protocol.name
  35.  
  36.     service = property(service)
  37.     
  38.     def idstr(self):
  39.         return u'/'.join([
  40.             self.service,
  41.             self.room.name,
  42.             self.name])
  43.  
  44.     
  45.     def alias(self):
  46.         return self.user.nick
  47.  
  48.     alias = property(alias)
  49.     
  50.     def __repr__(self):
  51.         user = self.user
  52.         if not user.real_jid:
  53.             pass
  54.         return '<JabberChatBuddy %s [%s %s] (Real JID: %s)>' % (user.room_jid, user.role, user.affiliation, '?')
  55.  
  56.  
  57.  
  58. class JabberChat(pyxmpp.jabber.muc.MucRoomHandler, Conversation):
  59.     ischat = True
  60.     
  61.     def __init__(self, protocol, jid):
  62.         Conversation.__init__(self)
  63.         self.jid = jid
  64.         self.protocol = protocol
  65.         self.protocol.conversations[jid.as_unicode()] = self
  66.         self.buddies = { }
  67.  
  68.     
  69.     def name(self):
  70.         name = self.room_state.room_jid.bare()
  71.         subject = self.room_state.subject
  72.         if subject:
  73.             return u'%s - %s' % (name, subject)
  74.         else:
  75.             return unicode(name)
  76.  
  77.     name = property(name)
  78.     
  79.     def user_joined(self, user, stanza):
  80.         bud = self._buddy(user)
  81.         self.room_list.append(bud)
  82.         log.info('user %r joined:\n%s', bud, pformat(list(self.room_list)))
  83.  
  84.     
  85.     def user_left(self, user, stanza):
  86.         bud = self.buddies[user.nick]
  87.         self.room_list.remove(bud)
  88.         log.info('user %r left:\n%s', bud, pformat(list(self.room_list)))
  89.  
  90.     
  91.     def nick_changed(self, user, old_nick, stanza):
  92.         b = self._buddy(user)
  93.         b.notify('name', old_nick, b.name)
  94.  
  95.     
  96.     def affiliation_changed(self, user, old_aff, new_aff, stanza):
  97.         self._buddy(user).notify('affiliation', old_aff, new_aff)
  98.  
  99.     
  100.     def role_changed(self, user, old_role, new_role, stanza):
  101.         self._buddy(user).notify('role', old_role, new_role)
  102.  
  103.     
  104.     def subject_changed(self, user, stanza):
  105.         self.notify('name', None, self.room_state.subject)
  106.  
  107.     
  108.     def message_received(self, user, stanza):
  109.         self.incoming_message(self._buddy(user), stanza.get_body())
  110.  
  111.     
  112.     def incoming_message(self, buddy, message):
  113.         self.typing_status[buddy] = None
  114.         self.received_message(buddy, message)
  115.  
  116.     
  117.     def room_configuration_error(self, stanza):
  118.         self.error(stanza)
  119.  
  120.     
  121.     def error(self, stanza):
  122.         err = stanza.get_error()
  123.         log.info('Error from: %r Condition: %r', stanza.get_from(), err.get_condition)
  124.  
  125.     
  126.     def _send_message(self, message):
  127.         self.room_state.send_message(message)
  128.  
  129.     
  130.     def invite(self, buddy, message = None, callback = None):
  131.         room = self
  132.         
  133.         try:
  134.             buddy = buddy.jid.as_unicode()
  135.         except:
  136.             buddy = JID(buddy).as_unicode()
  137.  
  138.         if message is None:
  139.             message = _('You have been invited to %s') % self.jid.as_unicode()
  140.         
  141.         m = Message(from_jid = room.protocol.self_buddy.jid, to_jid = room.jid)
  142.         x = m.xmlnode.newTextChild(None, 'x', None)
  143.         x.setNs(x.newNs('http://jabber.org/protocol/muc#user', None))
  144.         invite = x.newTextChild(None, 'invite', None)
  145.         invite.setProp('to', buddy)
  146.         reason = invite.newTextChild(None, 'reason', message)
  147.         self.protocol.send_cb(m, callback = callback)
  148.  
  149.     invite = callsback(invite)
  150.     
  151.     def send_typing_status(self, status):
  152.         pass
  153.  
  154.     
  155.     def set_subject(self, subject):
  156.         self.room_state.set_subject(subject)
  157.  
  158.     
  159.     def exit(self):
  160.         self.room_state.leave()
  161.         del self.protocol.conversations[self.jid.as_unicode()]
  162.  
  163.     
  164.     def self_buddy(self):
  165.         return self.protocol.self_buddy
  166.  
  167.     self_buddy = property(self_buddy)
  168.     
  169.     def _buddy(self, mucuser):
  170.         
  171.         try:
  172.             return self.buddies[mucuser.nick]
  173.         except KeyError:
  174.             return self.buddies.setdefault(mucuser.nick, JabberChatBuddy(mucuser, self))
  175.  
  176.  
  177.  
  178.