Mercurial > libervia-backend
annotate 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 |
rev | line source |
---|---|
0 | 1 #!/usr/bin/python |
2 # -*- coding: utf-8 -*- | |
3 | |
4 """ | |
5 helper class for making a SAT frontend | |
228 | 6 Copyright (C) 2009, 2010, 2011 Jérôme Poisson (goffi@goffi.org) |
0 | 7 |
8 This program is free software: you can redistribute it and/or modify | |
9 it under the terms of the GNU General Public License as published by | |
10 the Free Software Foundation, either version 3 of the License, or | |
11 (at your option) any later version. | |
12 | |
13 This program is distributed in the hope that it will be useful, | |
14 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
16 GNU General Public License for more details. | |
17 | |
18 You should have received a copy of the GNU General Public License | |
19 along with this program. If not, see <http://www.gnu.org/licenses/>. | |
20 """ | |
21 | |
144
80661755ea8d
Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents:
132
diff
changeset
|
22 from logging import debug, info, warning, error |
225
fd9b7834d98a
distutils installation script, draft
Goffi <goffi@goffi.org>
parents:
223
diff
changeset
|
23 from sat.tools.jid import JID |
0 | 24 |
25 | |
26 | |
27 class QuickChat(): | |
28 | |
72 | 29 def __init__(self, target, host, type='one2one'): |
30 self.target = target | |
0 | 31 self.host = host |
72 | 32 self.type = type |
85 | 33 self.id = "" |
79 | 34 self.nick = None |
85 | 35 self.occupants = set() |
72 | 36 |
37 def setType(self, type): | |
38 """Set the type of the chat | |
39 @param type: can be 'one2one' for single conversation or 'group' for chat à la IRC | |
40 """ | |
41 self.type = type | |
0 | 42 |
120 | 43 def setPresents(self, nicks): |
44 """Set the users presents in the contact list for a group chat | |
45 @param nicks: list of nicknames | |
46 """ | |
47 debug (_("Adding users %s to room") % nicks) | |
48 if self.type != "group": | |
49 error (_("[INTERNAL] trying to set presents nicks for a non group chat window")) | |
50 raise Exception("INTERNAL ERROR") #TODO: raise proper Exception here | |
132
a86607e5cf38
quick_app: self.occupants for group chat are now managed by quick_chat. self.options.profile now support unicode
Goffi <goffi@goffi.org>
parents:
120
diff
changeset
|
51 self.occupants.update(nicks) |
120 | 52 |
53 def replaceUser(self, nick): | |
54 """Add user if it is not in the group list""" | |
55 debug (_("Replacing user %s") % nick) | |
56 if self.type != "group": | |
57 error (_("[INTERNAL] trying to replace user for a non group chat window")) | |
58 raise Exception("INTERNAL ERROR") #TODO: raise proper Exception here | |
190
31632472e857
quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents:
144
diff
changeset
|
59 len_before = len(self.occupants) |
132
a86607e5cf38
quick_app: self.occupants for group chat are now managed by quick_chat. self.options.profile now support unicode
Goffi <goffi@goffi.org>
parents:
120
diff
changeset
|
60 self.occupants.add(nick) |
190
31632472e857
quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents:
144
diff
changeset
|
61 if len_before != len(self.occupants): |
31632472e857
quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents:
144
diff
changeset
|
62 self.printInfo("=> %s has joined the room" % nick) |
120 | 63 |
79 | 64 def setUserNick(self, nick): |
65 """Set the nick of the user, usefull for e.g. change the color of the user""" | |
66 self.nick = nick | |
67 | |
120 | 68 def removeUser(self, nick): |
69 """Remove a user from the group list""" | |
70 debug(_("Removing user %s") % nick) | |
71 if self.type != "group": | |
72 error (_("[INTERNAL] trying to remove user for a non group chat window")) | |
73 raise Exception("INTERNAL ERROR") #TODO: raise proper Exception here | |
132
a86607e5cf38
quick_app: self.occupants for group chat are now managed by quick_chat. self.options.profile now support unicode
Goffi <goffi@goffi.org>
parents:
120
diff
changeset
|
74 self.occupants.remove(nick) |
210
9face609f83c
misc minor typos fixes, dev version
Goffi <goffi@goffi.org>
parents:
190
diff
changeset
|
75 self.printInfo("<= %s has left the room" % nick) |
120 | 76 |
77 def setSubject(self, subject): | |
78 """Set title for a group chat""" | |
79 debug(_("Setting subject to %s") % subject) | |
80 if self.type != "group": | |
81 error (_("[INTERNAL] trying to set subject for a non group chat window")) | |
82 raise Exception("INTERNAL ERROR") #TODO: raise proper Exception here | |
83 | |
67
0e50dd3a234a
message sending bug fixes + sortilege update
Goffi <goffi@goffi.org>
parents:
57
diff
changeset
|
84 def historyPrint(self, size=20, keep_last=False, profile='@NONE@'): |
0 | 85 """Print the initial history""" |
70 | 86 debug (_("now we print history")) |
72 | 87 history=self.host.bridge.getHistory(self.host.profiles[profile]['whoami'].short, self.target, 20) |
0 | 88 stamps=history.keys() |
89 stamps.sort() | |
90 for stamp in stamps: | |
67
0e50dd3a234a
message sending bug fixes + sortilege update
Goffi <goffi@goffi.org>
parents:
57
diff
changeset
|
91 self.printMessage(JID(history[stamp][0]), history[stamp][1], profile, stamp) |
0 | 92 if keep_last: ##FIXME hack for sortilege |
93 self.last_history = stamps[-1] if stamps else None | |
94 | |
190
31632472e857
quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents:
144
diff
changeset
|
95 def _get_nick(self, jid): |
31632472e857
quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents:
144
diff
changeset
|
96 """Return nick of this jid when possible""" |
31632472e857
quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents:
144
diff
changeset
|
97 return jid.resource if self.type == "group" else (self.host.CM.getAttr(jid,'nick') or self.host.CM.getAttr(jid,'name') or jid.node) |
31632472e857
quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents:
144
diff
changeset
|
98 |
67
0e50dd3a234a
message sending bug fixes + sortilege update
Goffi <goffi@goffi.org>
parents:
57
diff
changeset
|
99 def printMessage(self, from_jid, msg, profile, timestamp): |
0 | 100 """Print message in chat window. Must be implemented by child class""" |
190
31632472e857
quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents:
144
diff
changeset
|
101 jid=JID(from_jid) |
31632472e857
quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents:
144
diff
changeset
|
102 nick = self._get_nick(jid) |
31632472e857
quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents:
144
diff
changeset
|
103 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 |
31632472e857
quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents:
144
diff
changeset
|
104 if msg.startswith('/me '): |
31632472e857
quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents:
144
diff
changeset
|
105 self.printInfo('* %s %s' % (nick, msg[4:]),type='me') |
31632472e857
quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents:
144
diff
changeset
|
106 return |
31632472e857
quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents:
144
diff
changeset
|
107 return jid, nick, mymess |
31632472e857
quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents:
144
diff
changeset
|
108 |
31632472e857
quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents:
144
diff
changeset
|
109 def printInfo(self, msg, type='normal'): |
31632472e857
quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents:
144
diff
changeset
|
110 """Print general info |
31632472e857
quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents:
144
diff
changeset
|
111 @param msg: message to print |
31632472e857
quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents:
144
diff
changeset
|
112 @type: one of: |
31632472e857
quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents:
144
diff
changeset
|
113 normal: general info like "toto has joined the room" |
31632472e857
quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents:
144
diff
changeset
|
114 me: "/me" information like "/me clenches his fist" ==> "toto clenches his fist" |
31632472e857
quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents:
144
diff
changeset
|
115 """ |
0 | 116 raise NotImplementedError |
190
31632472e857
quick_frontend, wix, primitivus: informations in chat window
Goffi <goffi@goffi.org>
parents:
144
diff
changeset
|
117 |
0 | 118 |
144
80661755ea8d
Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents:
132
diff
changeset
|
119 def startGame(self, game_type, referee, players): |
80661755ea8d
Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents:
132
diff
changeset
|
120 """Configure the chat window to start a game""" |
80661755ea8d
Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents:
132
diff
changeset
|
121 #No need to raise an error as game are not mandatory |
80661755ea8d
Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents:
132
diff
changeset
|
122 warning(_('startGame is not implemented in this frontend')) |
80661755ea8d
Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents:
132
diff
changeset
|
123 |
80661755ea8d
Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents:
132
diff
changeset
|
124 def getGame(self, game_type): |
80661755ea8d
Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents:
132
diff
changeset
|
125 """Return class managing the game type""" |
80661755ea8d
Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents:
132
diff
changeset
|
126 #No need to raise an error as game are not mandatory |
80661755ea8d
Primitivus: Tarot card game implementation
Goffi <goffi@goffi.org>
parents:
132
diff
changeset
|
127 warning(_('getGame is not implemented in this frontend')) |