Mercurial > libervia-backend
view frontends/src/quick_frontend/quick_chat.py @ 297:c5554e2939dd
plugin XEP 0277: author for in request + author, updated management for out request
- a workaround is now used to parse "nick" tag (Jappix behaviour)
- author and updated can now be used in data when sendind microblog. Is no author is given, user jid is used, if no updated is given, current timestamp is used
author | Goffi <goffi@goffi.org> |
---|---|
date | Fri, 18 Feb 2011 22:32:02 +0100 |
parents | b1794cbb88e5 |
children | ede26abf6ca1 |
line wrap: on
line source
#!/usr/bin/python # -*- coding: utf-8 -*- """ helper class for making a SAT frontend Copyright (C) 2009, 2010, 2011 Jérôme Poisson (goffi@goffi.org) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. """ from logging import debug, info, warning, error from sat.tools.jid import JID class QuickChat(): def __init__(self, target, host, type='one2one'): self.target = target self.host = host self.type = type self.id = "" self.nick = None self.occupants = set() def setType(self, type): """Set the type of the chat @param type: can be 'one2one' for single conversation or 'group' for chat à la IRC """ self.type = type def setPresents(self, nicks): """Set the users presents in the contact list for a group chat @param nicks: list of nicknames """ debug (_("Adding users %s to room") % nicks) if self.type != "group": error (_("[INTERNAL] trying to set presents nicks for a non group chat window")) raise Exception("INTERNAL ERROR") #TODO: raise proper Exception here self.occupants.update(nicks) def replaceUser(self, nick): """Add user if it is not in the group list""" debug (_("Replacing user %s") % nick) if self.type != "group": error (_("[INTERNAL] trying to replace user for a non group chat window")) raise Exception("INTERNAL ERROR") #TODO: raise proper Exception here len_before = len(self.occupants) self.occupants.add(nick) if len_before != len(self.occupants): self.printInfo("=> %s has joined the room" % nick) def setUserNick(self, nick): """Set the nick of the user, usefull for e.g. change the color of the user""" self.nick = nick def removeUser(self, nick): """Remove a user from the group list""" debug(_("Removing user %s") % nick) if self.type != "group": error (_("[INTERNAL] trying to remove user for a non group chat window")) raise Exception("INTERNAL ERROR") #TODO: raise proper Exception here self.occupants.remove(nick) self.printInfo("<= %s has left the room" % nick) def setSubject(self, subject): """Set title for a group chat""" debug(_("Setting subject to %s") % subject) if self.type != "group": error (_("[INTERNAL] trying to set subject for a non group chat window")) raise Exception("INTERNAL ERROR") #TODO: raise proper Exception here def historyPrint(self, size=20, keep_last=False, profile='@NONE@'): """Print the initial history""" debug (_("now we print history")) history=self.host.bridge.getHistory(self.host.profiles[profile]['whoami'].short, self.target, 20) stamps=history.keys() stamps.sort() for stamp in stamps: self.printMessage(JID(history[stamp][0]), history[stamp][1], profile, stamp) if keep_last: ##FIXME hack for sortilege self.last_history = stamps[-1] if stamps else None def _get_nick(self, jid): """Return nick of this jid when possible""" return jid.resource if self.type == "group" else (self.host.CM.getAttr(jid,'nick') or self.host.CM.getAttr(jid,'name') or jid.node) def printMessage(self, from_jid, msg, profile, timestamp): """Print message in chat window. Must be implemented by child class""" jid=JID(from_jid) nick = self._get_nick(jid) mymess = (jid.resource == self.nick) if self.type == "group" else (jid.short == self.host.profiles[profile]['whoami'].short) #mymess = True if message comes from local user if msg.startswith('/me '): self.printInfo('* %s %s' % (nick, msg[4:]),type='me') return return jid, nick, mymess def printInfo(self, msg, type='normal'): """Print general info @param msg: message to print @type: one of: normal: general info like "toto has joined the room" me: "/me" information like "/me clenches his fist" ==> "toto clenches his fist" """ raise NotImplementedError def startGame(self, game_type, referee, players): """Configure the chat window to start a game""" #No need to raise an error as game are not mandatory warning(_('startGame is not implemented in this frontend')) def getGame(self, game_type): """Return class managing the game type""" #No need to raise an error as game are not mandatory warning(_('getGame is not implemented in this frontend'))