Mercurial > libervia-backend
annotate frontends/src/quick_frontend/quick_contact_management.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 | ea3e1b82dd79 |
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 | |
51
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
0
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 import pdb |
25 | |
26 | |
27 class QuickContactManagement(): | |
28 """This helper class manage the contacts and ease the use of nicknames and shortcuts""" | |
51
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
0
diff
changeset
|
29 ### FIXME: is SàT a better place for all this stuff ??? ### |
0 | 30 |
31 def __init__(self): | |
32 self.__contactlist = {} | |
33 | |
52 | 34 def clear(self): |
35 """Clear all the contact list""" | |
36 self.__contactlist.clear() | |
37 | |
51
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
0
diff
changeset
|
38 def add(self, entity): |
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
0
diff
changeset
|
39 """Add contact to the list, update resources""" |
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
0
diff
changeset
|
40 if not self.__contactlist.has_key(entity.short): |
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
0
diff
changeset
|
41 self.__contactlist[entity.short] = {'resources':[]} |
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
0
diff
changeset
|
42 if entity.resource in self.__contactlist[entity.short]['resources']: |
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
0
diff
changeset
|
43 self.__contactlist[entity.short]['resources'].remove(entity.resource) |
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
0
diff
changeset
|
44 self.__contactlist[entity.short]['resources'].append(entity.resource) |
54
2ce9e350cdf9
Wix: clicking on group in contact_list now (un)hide it.
Goffi <goffi@goffi.org>
parents:
52
diff
changeset
|
45 |
2ce9e350cdf9
Wix: clicking on group in contact_list now (un)hide it.
Goffi <goffi@goffi.org>
parents:
52
diff
changeset
|
46 def getContFromGroup(self, group): |
2ce9e350cdf9
Wix: clicking on group in contact_list now (un)hide it.
Goffi <goffi@goffi.org>
parents:
52
diff
changeset
|
47 """Return all contacts which are in given group""" |
2ce9e350cdf9
Wix: clicking on group in contact_list now (un)hide it.
Goffi <goffi@goffi.org>
parents:
52
diff
changeset
|
48 result = [] |
2ce9e350cdf9
Wix: clicking on group in contact_list now (un)hide it.
Goffi <goffi@goffi.org>
parents:
52
diff
changeset
|
49 for contact in self.__contactlist: |
2ce9e350cdf9
Wix: clicking on group in contact_list now (un)hide it.
Goffi <goffi@goffi.org>
parents:
52
diff
changeset
|
50 if self.__contactlist[contact].has_key('groups'): |
2ce9e350cdf9
Wix: clicking on group in contact_list now (un)hide it.
Goffi <goffi@goffi.org>
parents:
52
diff
changeset
|
51 if group in self.__contactlist[contact]['groups']: |
2ce9e350cdf9
Wix: clicking on group in contact_list now (un)hide it.
Goffi <goffi@goffi.org>
parents:
52
diff
changeset
|
52 result.append(JID(contact)) |
2ce9e350cdf9
Wix: clicking on group in contact_list now (un)hide it.
Goffi <goffi@goffi.org>
parents:
52
diff
changeset
|
53 return result |
2ce9e350cdf9
Wix: clicking on group in contact_list now (un)hide it.
Goffi <goffi@goffi.org>
parents:
52
diff
changeset
|
54 |
51
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
0
diff
changeset
|
55 def getAttr(self, entity, name): |
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
0
diff
changeset
|
56 """Return a specific attribute of contact, or all attributes |
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
0
diff
changeset
|
57 @param entity: jid of the contact |
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
0
diff
changeset
|
58 @param name: name of the attribute |
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
0
diff
changeset
|
59 @return: asked attribute""" |
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
0
diff
changeset
|
60 if self.__contactlist.has_key(entity.short): |
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
0
diff
changeset
|
61 if name == 'status': #FIXME: for the moment, we only use the first status |
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
0
diff
changeset
|
62 if self.__contactlist[entity.short]['statuses']: |
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
0
diff
changeset
|
63 return self.__contactlist[entity.short]['statuses'].values()[0] |
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
0
diff
changeset
|
64 if self.__contactlist[entity.short].has_key(name): |
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
0
diff
changeset
|
65 return self.__contactlist[entity.short][name] |
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
0
diff
changeset
|
66 else: |
70 | 67 debug(_('Trying to get attribute for an unknown contact')) |
51
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
0
diff
changeset
|
68 return None |
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
0
diff
changeset
|
69 |
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
0
diff
changeset
|
70 def isConnected(self, entity): |
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
0
diff
changeset
|
71 """Tell if the contact is online""" |
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
0
diff
changeset
|
72 return self.__contactlist.has_key(entity.short) |
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
0
diff
changeset
|
73 |
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
0
diff
changeset
|
74 def remove(self, entity): |
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
0
diff
changeset
|
75 """remove resource. If no more resource is online or is no resource is specified, contact is deleted""" |
0 | 76 try: |
51
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
0
diff
changeset
|
77 if entity.resource: |
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
0
diff
changeset
|
78 self.__contactlist[entity.short]['resources'].remove(entity.resource) |
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
0
diff
changeset
|
79 if not entity.resource or not self.__contactlist[entity.short]['resources']: |
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
0
diff
changeset
|
80 #no more resource available: the contact seems really disconnected |
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
0
diff
changeset
|
81 del self.__contactlist[entity.short] |
0 | 82 except KeyError: |
119
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
70
diff
changeset
|
83 error(_('INTERNAL ERROR: Key error')) |
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
70
diff
changeset
|
84 raise |
0 | 85 |
51
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
0
diff
changeset
|
86 def update(self, entity, key, value): |
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
0
diff
changeset
|
87 """Update attribute of contact |
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
0
diff
changeset
|
88 @param entity: jid of the contact |
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
0
diff
changeset
|
89 @param key: name of the attribute |
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
0
diff
changeset
|
90 @param value: value of the attribute |
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
0
diff
changeset
|
91 """ |
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
0
diff
changeset
|
92 if self.__contactlist.has_key(entity.short): |
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
0
diff
changeset
|
93 self.__contactlist[entity.short][key] = value |
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
0
diff
changeset
|
94 else: |
70 | 95 debug (_('Trying to update an unknown contact: %s'), entity.short) |
51
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
0
diff
changeset
|
96 |
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
0
diff
changeset
|
97 def get_full(self, entity): |
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
0
diff
changeset
|
98 return entity.short+'/'+self.__contactlist[entity.short]['resources'][-1] |
0 | 99 |