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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
goffi@necton2
parents:
diff changeset
1 #!/usr/bin/python
goffi@necton2
parents:
diff changeset
2 # -*- coding: utf-8 -*-
goffi@necton2
parents:
diff changeset
3
goffi@necton2
parents:
diff changeset
4 """
goffi@necton2
parents:
diff changeset
5 helper class for making a SAT frontend
228
b1794cbb88e5 2011 copyright upgrade
Goffi <goffi@goffi.org>
parents: 225
diff changeset
6 Copyright (C) 2009, 2010, 2011 Jérôme Poisson (goffi@goffi.org)
0
goffi@necton2
parents:
diff changeset
7
goffi@necton2
parents:
diff changeset
8 This program is free software: you can redistribute it and/or modify
goffi@necton2
parents:
diff changeset
9 it under the terms of the GNU General Public License as published by
goffi@necton2
parents:
diff changeset
10 the Free Software Foundation, either version 3 of the License, or
goffi@necton2
parents:
diff changeset
11 (at your option) any later version.
goffi@necton2
parents:
diff changeset
12
goffi@necton2
parents:
diff changeset
13 This program is distributed in the hope that it will be useful,
goffi@necton2
parents:
diff changeset
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
goffi@necton2
parents:
diff changeset
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
goffi@necton2
parents:
diff changeset
16 GNU General Public License for more details.
goffi@necton2
parents:
diff changeset
17
goffi@necton2
parents:
diff changeset
18 You should have received a copy of the GNU General Public License
goffi@necton2
parents:
diff changeset
19 along with this program. If not, see <http://www.gnu.org/licenses/>.
goffi@necton2
parents:
diff changeset
20 """
goffi@necton2
parents:
diff changeset
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
goffi@necton2
parents:
diff changeset
24 import pdb
goffi@necton2
parents:
diff changeset
25
goffi@necton2
parents:
diff changeset
26
goffi@necton2
parents:
diff changeset
27 class QuickContactManagement():
goffi@necton2
parents:
diff changeset
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
goffi@necton2
parents:
diff changeset
30
goffi@necton2
parents:
diff changeset
31 def __init__(self):
goffi@necton2
parents:
diff changeset
32 self.__contactlist = {}
goffi@necton2
parents:
diff changeset
33
52
6455fb62ff83 Connection/disconnection signals
Goffi <goffi@goffi.org>
parents: 51
diff changeset
34 def clear(self):
6455fb62ff83 Connection/disconnection signals
Goffi <goffi@goffi.org>
parents: 51
diff changeset
35 """Clear all the contact list"""
6455fb62ff83 Connection/disconnection signals
Goffi <goffi@goffi.org>
parents: 51
diff changeset
36 self.__contactlist.clear()
6455fb62ff83 Connection/disconnection signals
Goffi <goffi@goffi.org>
parents: 51
diff changeset
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
Goffi <goffi@goffi.org>
parents: 66
diff changeset
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
goffi@necton2
parents:
diff changeset
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
goffi@necton2
parents:
diff changeset
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
goffi@necton2
parents:
diff changeset
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
Goffi <goffi@goffi.org>
parents: 66
diff changeset
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
goffi@necton2
parents:
diff changeset
99