gestion de la RECEPTION des kicks

parent ba8d1803
......@@ -85,7 +85,7 @@ class Connection(Thread):
if fro == to: # own presence
self.online = 2
self.jid = to
self.handler.emit('on-connected')
self.handler.emit('on-connected', jid=fro)
return
self.handler.emit('room-presence', stanza=presence)
......@@ -93,12 +93,12 @@ class Connection(Thread):
self.handler.emit('room-message', stanza=message)
def handler_iq(self, connection, iq):
pass
self.handler.emit('room-iq', stanza=iq)
def handler_error(self, connection, error):
import sys
print "TOUCHE FION"
print "fion"
sys.exit()
# self.handler.emit('room-iq', stanza=iq)
def process(self, timeout=10):
if self.online:
......
......@@ -96,13 +96,23 @@ class Room(object):
user.change_nick(stanza.getNick())
return self.add_info('%s is now known as %s' % (nick, stanza.getNick()))
if kick:
self.users.remove(user)
reason = stanza.getReason().encode('utf-8') or ''
by = stanza.getActor().encode('utf-8') or ''
try:
by = stanza.getActor().encode('utf-8')
except:
by = None
if nick == self.own_nick:
self.joined = False
return self.add_info('You have been kicked by %s. Reason: %s' % (by, reason))
if by:
return self.add_info('You have been kicked by %s. Reason: %s' % (by, reason))
else:
return self.add_info('You have been kicked. Reason: %s' % (reason))
else:
return self.add_info('%s has been kicked by %s. Reason: %s' % (nick, by, reason))
if by:
return self.add_info('%s has been kicked by %s. Reason: %s' % (nick, by, reason))
else:
return self.add_info('%s has been kicked. Reason: %s' % (nick, reason))
if status == 'offline' or role == 'none':
self.users.remove(user)
return self.add_info('%s has left the room' % (nick))
......@@ -154,6 +164,7 @@ class Gui(object):
self.handler.connect('join-room', self.join_room)
self.handler.connect('room-presence', self.room_presence)
self.handler.connect('room-message', self.room_message)
self.handler.connect('room-iq', self.room_iq)
def main_loop(self, stdscr):
while 1:
......@@ -211,8 +222,9 @@ class Gui(object):
curses.echo()
curses.endwin()
def on_connected(self):
def on_connected(self, jid):
self.information("Welcome on Poezio \o/ !")
self.information("Your JID is %s" % jid)
pass
def join_room(self, room, nick):
......@@ -229,6 +241,8 @@ class Gui(object):
self.window.refresh(self.current_room())
def room_message(self, stanza):
if len(sys.argv) > 1:
self.information(str(stanza))
if stanza.getType() != 'groupchat':
return # ignore all messages not comming from a MUC
room_from = stanza.getFrom().getStripped()
......@@ -263,7 +277,7 @@ class Gui(object):
from_room = stanza.getFrom().getStripped()
room = self.get_room_by_name(from_room)
if not room:
return logger.warning("presence received for a non-existing room: %s" % (name))
self.information("presence received for a non-existing room: %s" % (name))
msg = room.on_presence(stanza, from_nick)
if room == self.current_room():
self.window.text_win.add_line(room, (datetime.now(), msg))
......@@ -271,6 +285,10 @@ class Gui(object):
self.window.user_win.refresh(room.users)
curses.doupdate()
def room_iq(self, iq):
if len(sys.argv) > 1:
self.information(str(iq))
def execute(self):
line = self.window.input.get_text()
self.window.input.clear_text()
......@@ -301,6 +319,8 @@ class Gui(object):
info = room.add_info(msg)
if self.current_room() == room:
self.window.text_win.add_line(room, (datetime.now(), info))
self.window.text_win.refresh(room.name)
curses.doupdate()
def command_quit(self, args):
self.reset_curses()
......
......@@ -32,6 +32,7 @@ class Handler(Singleton):
'on-connected': list(),
# At the end of a successful connection process.
# emitted when presence confirmation is received
# Args: jid
'join-room': list(),
# Join a room.
......@@ -45,6 +46,10 @@ class Handler(Singleton):
# A message is received
# Args: the stanza object
'room-iq': list(),
# An iq is received
# Args: the stanza object
# 'xmpp-presence-handler': list(),
# # A presence is received
# # Args: the stanza object
......
......@@ -17,7 +17,7 @@
# Implementation of the XEP-0045: Multi-User Chat.
from xmpp import NS_MUC_ADMIN
from xmpp import NS_MUC_ADMIN, NS_MUC
from xmpp.protocol import Presence, Iq, Message, JID
from handler import Handler
......@@ -41,11 +41,14 @@ class MultiUserChat(object):
self.rooms = []
self.rn = {}
self.own_jid = None
self.handler = Handler()
self.handler.connect('join-room', self.join_room)
self.handler.connect('on-connected', self.on_connected)
def on_connected(self):
def on_connected(self, jid):
self.own_jid = jid
rooms = config.get('rooms', '')
if rooms == '':
return
......@@ -67,6 +70,9 @@ class MultiUserChat(object):
self.rn[room] = nick
pres = Presence(to='%s/%s' % (room, nick))
pres.setFrom('%s'%self.own_jid)
pres.addChild(name='x', namespace=NS_MUC)
open('fion', 'w').write(str(pres))
self.connection.send(pres)
def quit_room(self, room, nick):
......
......@@ -297,10 +297,10 @@ class Window(object):
Resize the whole tabe. i.e. all its sub-windows
"""
self.size = (self.height, self.width) = stdscr.getmaxyx()
self.user_win.resize(self.height-3, self.width/7, 1, 6*(self.width/7), stdscr)
self.user_win.resize(self.height-3, self.width/9, 1, 11*(self.width/12), stdscr)
self.topic_win.resize(1, self.width, 0, 0, stdscr)
self.info_win.resize(1, self.width, self.height-2, 0, stdscr)
self.text_win.resize(self.height-3, (self.width/7)*6, 1, 0, stdscr)
self.text_win.resize(self.height-3, (self.width/12)*11, 1, 0, stdscr)
self.input.resize(1, self.width, self.height-1, 0, stdscr)
def refresh(self, room):
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment