home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyo (Python 2.6)
-
- import pyxmpp.jabber.muc as pyxmpp
- from pyxmpp.message import Message
- from pyxmpp.all import JID
- from common import Conversation, caps
- from util.observe import Observable
- from util import callsback
- from pprint import pformat
- from logging import getLogger
- log = getLogger('JabberChat')
- import traceback
- import jabber
- from pyxmpp import presence
- from objects.nick import NICK_NS
- from objects.nick import Nick
-
- class user_prop(object):
-
- def __init__(self, name):
- self.attr = name
-
-
- def __get__(self, obj, objtype = None):
- return getattr(obj.user, self.attr)
-
-
-
- class JabberChatBuddy(Observable):
-
- def __init__(self, mucRoomUser, room):
- Observable.__init__(self)
- self.user = mucRoomUser
- self.room = room
-
-
- def info_key(self):
- return self.room.name + '/' + self.name + '_' + self.service
-
- info_key = property(info_key)
-
- def jid(self):
- return self.user.room_jid
-
- jid = property(jid)
-
- def __getattr__(self, val, default = sentinel):
- if val == 'user':
- return object.__getattribute__(self, 'user')
-
- try:
- return getattr(object.__getattribute__(self, 'user'), val)
- except AttributeError:
- val == 'user'
- val == 'user'
- if default is sentinel:
- return object.__getattribute__(self, val)
-
- try:
- return object.__getattribute__(self, val)
- except AttributeError:
- default is sentinel
- default is sentinel
- return default
-
-
- default is sentinel<EXCEPTION MATCH>AttributeError
-
-
- name = property((lambda self: self.user.nick))
-
- def service(self):
- return self.room.protocol.name
-
- service = property(service)
-
- def protocol(self):
- return self.room.protocol
-
- protocol = property(protocol)
-
- def idstr(self):
- return u'/'.join([
- self.service,
- self.room.name,
- self.name])
-
-
- def private_message_buddy(self):
- if not self.user.real_jid:
- pass
- return self.protocol.get_buddy(self.user.room_jid)
-
-
- def private_message_buddy_attr(self, attr):
- b = self.private_message_buddy()
- if b is not None:
- return getattr(b, attr)
-
-
- def alias(self):
- if self.user is self.room.room_state.me:
-
- try:
- return self.room.protocol.self_buddy.alias
- except Exception:
- return 'Me'
-
-
- None<EXCEPTION MATCH>Exception
- for attr in ('nickname',):
- nick = getattr(self, attr, None)
- if nick:
- return unicode(nick)
-
-
- try:
- return self.room.protocol.buddies[self.user.real_jid].alias
- except Exception:
- nick
- nick
- except:
- nick
-
- return self.user.nick
-
- alias = property(alias)
-
- def __repr__(self):
- user = self.user
- if not user.real_jid:
- pass
- return '<JabberChatBuddy %s [%s %s] (Real JID: %s)>' % (user.room_jid, user.role, user.affiliation, '?')
-
-
- def increase_log_size(self, num_bytes):
- pass
-
-
- def icon(self):
- return self.private_message_buddy_attr('icon')
-
- icon = property(icon)
-
- def icon_path(self):
- return self.private_message_buddy_attr('icon_path')
-
- icon_path = property(icon_path)
-
- def buddy_icon(self):
- get_buddy_icon = get_buddy_icon
- import gui.buddylist.renderers
- return get_buddy_icon(self, 32, False)
-
- buddy_icon = property(buddy_icon)
- history = property((lambda self: iter([])))
- status_orb = 'available'
- online = True
-
- def serviceicon(self):
- skin = skin
- import gui
- return skin.get('serviceicons.' + self.service)
-
- serviceicon = property(serviceicon)
- caps = [
- caps.IM]
- blocked = False
- sms = False
-
-
- class JabberChat(pyxmpp.jabber.muc.MucRoomHandler, Conversation):
- ischat = True
- contact_identities_known = False
-
- def __init__(self, protocol, jid, callback):
- pyxmpp.jabber.muc.MucRoomHandler.__init__(self)
- Conversation.__init__(self, protocol)
- self.callback = callback
- self.jid = jid
- self.protocol.conversations[jid.as_unicode()] = self
- self.buddies = { }
-
-
- def chat_room_name(self):
- return self.jid.as_unicode()
-
- chat_room_name = property(chat_room_name)
-
- def name(self):
- name = self.room_state.room_jid.bare()
- subject = self.room_state.subject
- if subject:
- return u'%s - %s' % (name, subject)
- return unicode(name)
-
- name = property(name)
-
- def user_joined(self, user, stanza):
- bud = self._buddy(user)
- self.room_list.append(bud)
- if user is self.room_state.me and self.callback is not None:
- self.callback = None
- cb = self.callback
- cb.success(self)
-
- self._log_presence(bud, 'joined')
- Conversation.buddy_join(self, bud)
-
-
- def user_left(self, user, stanza):
- bud = self.buddies[user.nick]
-
- try:
- self.room_list.remove(bud)
- except ValueError:
- pass
-
- self._log_presence(bud, 'left')
- Conversation.buddy_leave(self, bud)
-
-
- def _log_presence(self, buddy, action):
-
- try:
- roomlist = pformat(list(self.room_list))
- except UnicodeError:
-
- try:
- roomlist = repr(self.room_list)
- except Exception:
- roomlist = '?'
- except:
- None<EXCEPTION MATCH>Exception
-
-
- None<EXCEPTION MATCH>Exception
-
- log.info('user %r %s:\n%s', buddy, action, roomlist)
-
-
- def nick_changed(self, user, old_nick, stanza):
- b = self._buddy(user)
- b.notify('name', old_nick, b.name)
-
-
- def presence_changed(self, user, stanza):
- b = self._buddy(user)
- nicks = jabber.jabber_util.xpath_eval(stanza.xmlnode, 'n:nick', {
- 'n': NICK_NS })
- if nicks:
- b.nickname = Nick(nicks[0]).nick
-
-
-
- def affiliation_changed(self, user, old_aff, new_aff, stanza):
- self._buddy(user).notify('affiliation', old_aff, new_aff)
-
-
- def role_changed(self, user, old_role, new_role, stanza):
- self._buddy(user).notify('role', old_role, new_role)
-
-
- def subject_changed(self, user, stanza):
- self.notify('name', None, self.room_state.subject)
-
-
- def message_received(self, user, stanza):
- if not user:
- return None
- body = stanza.get_body()
- if body is not None:
- self.incoming_message(self._buddy(user), body)
-
-
-
- def incoming_message(self, buddy, message):
- if buddy.user == self.room_state.me:
- return None
- self.typing_status[buddy] = None
- self.received_message(buddy, message)
-
-
- def room_configuration_error(self, stanza):
- self.error(stanza)
-
-
- def error(self, stanza):
- fire = fire
- import common
- if not (self.room_state.configured) and stanza.get_from() == self.jid and stanza.stanza_type == 'presence':
- err = stanza.get_error()
- cond = err.get_condition()
- if cond is not None and cond.name == 'item-not-found':
- return None
-
-
- try:
- fire('error', title = self.jid, msg = stanza.get_error().get_message(), details = '', sticky = True, popupid = self.jid, buttons = ((_('Close'), (lambda : pass)),), update = 'replace')
- except Exception:
- traceback.print_exc()
-
- if not self.room_state.joined:
- self.exit()
-
-
-
- def _send_message(self, message, callback = None):
- self.room_state.send_message(message.format_as('plaintext'))
- callback.success()
-
- _send_message = callsback(_send_message)
-
- def invite(self, buddy, message = None, callback = None):
- room = self
-
- try:
- buddy = buddy.jid.as_unicode()
- except:
- buddy = JID(buddy).as_unicode()
-
- if message is None:
- message = _('You have been invited to %s') % self.jid.as_unicode()
-
- m = Message(from_jid = room.protocol.self_buddy.jid, to_jid = room.jid)
- x = m.xmlnode.newTextChild(None, 'x', None)
- x.setNs(x.newNs('http://jabber.org/protocol/muc#user', None))
- invite = x.newTextChild(None, 'invite', None)
- invite.setProp('to', buddy)
- reason = invite.newTextChild(None, 'reason', message)
- self.protocol.send_cb(m, callback = callback)
-
- invite = callsback(invite)
-
- def send_typing_status(self, status):
- pass
-
-
- def set_subject(self, subject):
- self.room_state.set_subject(subject)
-
-
- def exit(self):
- self.room_state.leave()
-
- try:
- del self.protocol.conversations[self.jid.as_unicode()]
- except KeyError:
- traceback.print_exc()
-
- Conversation.exit(self)
-
-
- def self_buddy(self):
- return self.protocol.self_buddy
-
- self_buddy = property(self_buddy)
-
- def _buddy(self, mucuser):
-
- try:
- return self.buddies[mucuser.nick]
- except KeyError:
- return self.buddies.setdefault(mucuser.nick, JabberChatBuddy(mucuser, self))
-
-
-
-