primitivus: fixed messages order in chat window
This commit is contained in:
parent
8d34cacc1d
commit
031bd3134f
2 changed files with 67 additions and 13 deletions
|
|
@ -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)
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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})
|
||||
|
|
|
|||
Loading…
Reference in a new issue