primitivus: fixed messages order in chat window

This commit is contained in:
Goffi 2012-10-21 12:03:29 +02:00
commit 031bd3134f
2 changed files with 67 additions and 13 deletions

View file

@ -77,6 +77,15 @@ class TextCommands():
return jid.JID(arg+service_jid)
return jid.JID(u"%s@%s" % (arg, service_jid))
def _feedBack(self, message, mess_data, profile):
"""Give a message back to the user"""
if mess_data["type"] == 'groupchat':
_from = mess_data["to"].userhostJID()
else:
_from = self.host.getJidNStream(profile)[0]
self.host.bridge.newMessage(unicode(mess_data["to"]), message, mess_data['type'], unicode(_from), {}, profile=profile)
def cmd_nick(self, mess_data, profile):
"""change nickname"""
debug("Catched nick command")
@ -150,6 +159,29 @@ class TextCommands():
return False
def cmd_ignore(self, mess_data, profile):
"""Add an entity to ignore list"""
nick = mess_data["unparsed"].strip()
if mess_data['type'] == "groupchat":
#if we are in a group chat, a nick must be given as argument
if not nick:
return False
room = mess_data["to"]
if not self.host.plugins["XEP-0045"].isNickInRoom(room, nick):
self._feedBack(u"[%s] is not in this room, can't ignore it" % (nick,), mess_data, profile)
return False
full_jid = jid.JID(u"%s/%s" % (room.userhost(), nick))
else:
if nick:
self._feedBack("/ignore doesn't support arguments if you are not in a room", mess_data, profile)
return False
full_jid = mess_data["to"]
self.host.getClient(profile).ignore(full_jid)
self._feedBack(_(u"[%s] added to ignore list") % full_jid, mess_data, profile)
return False
def cmd_help(self, mess_data, profile):
"""show help on available commands"""
commands=filter(lambda method: method.startswith('cmd_'), dir(self))
@ -165,14 +197,7 @@ class TextCommands():
spaces = (longuest - len(command)) * ' '
help_cmds.append(" /%s: %s %s" % (command[4:], spaces, help_str))
if mess_data["type"] == 'groupchat':
_from = mess_data["to"].userhostJID()
else:
_from = self.host.getJidNStream(profile)[0]
help_mess = _(u"Text commands available:\n%s") % (u'\n'.join(help_cmds),)
self.host.bridge.newMessage(unicode(mess_data["to"]), help_mess, mess_data['type'], unicode(_from), {}, profile=profile)
self._feedBack(help_mess, mess_data, profile)

View file

@ -126,6 +126,15 @@ class XEP_0045():
if not self.__check_profile(profile) or not self.clients[profile].joined_rooms.has_key(room_jid_s):
return ''
return self.clients[profile].joined_rooms[room_jid_s].nick
def isNickInRoom(self, room_jid, nick, profile):
"""Tell if a nick is currently present in a room"""
profile = self.host.memory.getProfileName(profile_key)
if not self.__check_profile(profile):
raise exceptions.UnknownProfileError("Unknown or disconnected profile")
if not self.clients[profile].joined_rooms.has_key(room_jid.userhost()):
raise UnknownRoom("This room has not been joined")
return self.clients[profile].joined_rooms[room_jid.userhost()].inRoster(nick)
def getRoomsSubjects(self, profile_key='@DEFAULT@'):
"""Return received subjects of rooms"""
@ -209,7 +218,6 @@ class XEP_0045():
def getHandler(self, profile):
self.clients[profile] = SatMUCClient(self)
return self.clients[profile]
class SatMUCClient (muc.MUCClient):
@ -219,7 +227,7 @@ class SatMUCClient (muc.MUCClient):
self.plugin_parent = plugin_parent
self.host = plugin_parent.host
muc.MUCClient.__init__(self)
self.joined_rooms = {}
self.joined_rooms = {} #FIXME: seem to do the same thing as MUCClient's _rooms attribute, must be removed
self.rec_subjects = {}
self.__changing_nicks = set() # used to keep trace of who is changing nick,
# and to discard userJoinedRoom signal in this case
@ -283,7 +291,7 @@ class SatMUCClient (muc.MUCClient):
def userUpdatedStatus(self, room, user, show, status):
print("FIXME: MUC status not managed yet")
#FIXME: gof
#FIXME:
def receivedSubject(self, room, user, subject):
debug (_("New subject for room (%(room_id)s): %(subject)s") % {'room_id':room.roomJID.full(),'subject':subject})