Mercurial > libervia-backend
annotate src/core/sat_main.py @ 1381:0d12d4e32664
plugin XEP-0045: /join text command can be used in all contexts, not only group
author | Goffi <goffi@goffi.org> |
---|---|
date | Fri, 20 Mar 2015 20:49:58 +0100 |
parents | 28fd9e838f8f |
children | 069ad98b360d |
rev | line source |
---|---|
0 | 1 #!/usr/bin/python |
2 # -*- coding: utf-8 -*- | |
3 | |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
605
diff
changeset
|
4 # SAT: a jabber client |
811 | 5 # Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014 Jérôme Poisson (goffi@goffi.org) |
0 | 6 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
605
diff
changeset
|
7 # This program is free software: you can redistribute it and/or modify |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
605
diff
changeset
|
8 # it under the terms of the GNU Affero General Public License as published by |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
605
diff
changeset
|
9 # the Free Software Foundation, either version 3 of the License, or |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
605
diff
changeset
|
10 # (at your option) any later version. |
0 | 11 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
605
diff
changeset
|
12 # This program is distributed in the hope that it will be useful, |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
605
diff
changeset
|
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
605
diff
changeset
|
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
605
diff
changeset
|
15 # GNU Affero General Public License for more details. |
0 | 16 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
605
diff
changeset
|
17 # You should have received a copy of the GNU Affero General Public License |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
605
diff
changeset
|
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
0 | 19 |
1376
28fd9e838f8f
core: getRepositoryData now get the module in argument
Goffi <goffi@goffi.org>
parents:
1375
diff
changeset
|
20 import sat |
1063
6ec513ad92c2
frontends: async failures are more detailed (full class name + error message)
souliane <souliane@mailoo.org>
parents:
1059
diff
changeset
|
21 from sat.core.i18n import _, D_, languageSwitch |
331
0a8eb0461f31
core: main SAT class now moved in its own module core.sat_main
Goffi <goffi@goffi.org>
parents:
330
diff
changeset
|
22 from twisted.application import service |
0a8eb0461f31
core: main SAT class now moved in its own module core.sat_main
Goffi <goffi@goffi.org>
parents:
330
diff
changeset
|
23 from twisted.internet import defer |
1037
6e975c6b0faf
core, memory, bridge, plugin misc_register_account: move registerNewAccount to a new plugin:
souliane <souliane@mailoo.org>
parents:
1032
diff
changeset
|
24 from twisted.words.protocols.jabber import jid |
0 | 25 from twisted.words.xish import domish |
26 from twisted.internet import reactor | |
346
ca3a041fed30
core: fixed several subscription scheme issues + removed most of profile_key default value in core.sat_main and core.xmmp (source of bugs) + contact update
Goffi <goffi@goffi.org>
parents:
341
diff
changeset
|
27 from wokkel.xmppim import RosterItem |
223 | 28 from sat.bridge.DBus import DBusBridge |
332 | 29 from sat.core import xmpp |
627
d207c2186519
core, bridge, jp, quick_frontend: SàT stop more gracefully if bridge can't be initialised:
Goffi <goffi@goffi.org>
parents:
609
diff
changeset
|
30 from sat.core import exceptions |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
991
diff
changeset
|
31 from sat.core.log import getLogger |
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
991
diff
changeset
|
32 log = getLogger(__name__) |
914
1a3ba959f0ab
core (memory): moved Params in its own module + introduced a new core/constants module, and moved some constants there
Goffi <goffi@goffi.org>
parents:
909
diff
changeset
|
33 from sat.core.constants import Const as C |
1a3ba959f0ab
core (memory): moved Params in its own module + introduced a new core/constants module, and moved some constants there
Goffi <goffi@goffi.org>
parents:
909
diff
changeset
|
34 from sat.memory.memory import Memory |
1030
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
35 from sat.memory.crypto import PasswordHasher |
1374
0befb14ecf62
renamed tools.misc to tools.trigger
Goffi <goffi@goffi.org>
parents:
1365
diff
changeset
|
36 from sat.tools import trigger |
1375
3a20312d4012
core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents:
1374
diff
changeset
|
37 from sat.tools import utils |
1032
b262ae6d53af
stdui: add ui_profile_manager to interact with frontends when profile authentication is needed
souliane <souliane@mailoo.org>
parents:
1030
diff
changeset
|
38 from sat.stdui import ui_contact_list, ui_profile_manager |
0 | 39 from glob import glob |
759
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
40 from uuid import uuid4 |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
991
diff
changeset
|
41 import sys |
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
991
diff
changeset
|
42 import os.path |
0 | 43 |
987
3a96920c07b7
core, frontends: unify the roster management UIs in sat/stdui/ui_contact_list.py
souliane <souliane@mailoo.org>
parents:
972
diff
changeset
|
44 try: |
3a96920c07b7
core, frontends: unify the roster management UIs in sat/stdui/ui_contact_list.py
souliane <souliane@mailoo.org>
parents:
972
diff
changeset
|
45 from collections import OrderedDict # only available from python 2.7 |
3a96920c07b7
core, frontends: unify the roster management UIs in sat/stdui/ui_contact_list.py
souliane <souliane@mailoo.org>
parents:
972
diff
changeset
|
46 except ImportError: |
3a96920c07b7
core, frontends: unify the roster management UIs in sat/stdui/ui_contact_list.py
souliane <souliane@mailoo.org>
parents:
972
diff
changeset
|
47 from ordereddict import OrderedDict |
3a96920c07b7
core, frontends: unify the roster management UIs in sat/stdui/ui_contact_list.py
souliane <souliane@mailoo.org>
parents:
972
diff
changeset
|
48 |
0 | 49 |
589
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
50 sat_id = 0 |
1375
3a20312d4012
core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents:
1374
diff
changeset
|
51 __version__ = C.APP_VERSION |
0 | 52 |
16
0a024d5e0cd0
New account creation (in-band registration)
Goffi <goffi@goffi.org>
parents:
15
diff
changeset
|
53 |
0a024d5e0cd0
New account creation (in-band registration)
Goffi <goffi@goffi.org>
parents:
15
diff
changeset
|
54 def sat_next_id(): |
0a024d5e0cd0
New account creation (in-band registration)
Goffi <goffi@goffi.org>
parents:
15
diff
changeset
|
55 global sat_id |
589
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
56 sat_id += 1 |
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
57 return "sat_id_" + str(sat_id) |
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
58 |
16
0a024d5e0cd0
New account creation (in-band registration)
Goffi <goffi@goffi.org>
parents:
15
diff
changeset
|
59 |
13
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
60 class SAT(service.Service): |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
579
diff
changeset
|
61 |
853
c2f6ada7858f
core (sqlite): automatic database update:
Goffi <goffi@goffi.org>
parents:
846
diff
changeset
|
62 @property |
1375
3a20312d4012
core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents:
1374
diff
changeset
|
63 def version(self): |
3a20312d4012
core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents:
1374
diff
changeset
|
64 """Return the short version of SàT""" |
923 | 65 return C.APP_VERSION |
853
c2f6ada7858f
core (sqlite): automatic database update:
Goffi <goffi@goffi.org>
parents:
846
diff
changeset
|
66 |
1375
3a20312d4012
core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents:
1374
diff
changeset
|
67 @property |
3a20312d4012
core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents:
1374
diff
changeset
|
68 def full_version(self): |
3a20312d4012
core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents:
1374
diff
changeset
|
69 """Return the full version of SàT (with extra data when in development mode)""" |
3a20312d4012
core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents:
1374
diff
changeset
|
70 version = self.version |
3a20312d4012
core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents:
1374
diff
changeset
|
71 if version[-1] == 'D': |
3a20312d4012
core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents:
1374
diff
changeset
|
72 # we are in debug version, we add extra data |
3a20312d4012
core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents:
1374
diff
changeset
|
73 try: |
3a20312d4012
core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents:
1374
diff
changeset
|
74 return self._version_cache |
3a20312d4012
core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents:
1374
diff
changeset
|
75 except AttributeError: |
1376
28fd9e838f8f
core: getRepositoryData now get the module in argument
Goffi <goffi@goffi.org>
parents:
1375
diff
changeset
|
76 self._version_cache = u"{} ({})".format(version, utils.getRepositoryData(sat)) |
1375
3a20312d4012
core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents:
1374
diff
changeset
|
77 return self._version_cache |
3a20312d4012
core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents:
1374
diff
changeset
|
78 else: |
3a20312d4012
core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents:
1374
diff
changeset
|
79 return version |
3a20312d4012
core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents:
1374
diff
changeset
|
80 |
25
53e921c8a357
new plugin: gateways plugin, and first implementation of findGateways
Goffi <goffi@goffi.org>
parents:
23
diff
changeset
|
81 def get_next_id(self): |
53e921c8a357
new plugin: gateways plugin, and first implementation of findGateways
Goffi <goffi@goffi.org>
parents:
23
diff
changeset
|
82 return sat_next_id() |
53e921c8a357
new plugin: gateways plugin, and first implementation of findGateways
Goffi <goffi@goffi.org>
parents:
23
diff
changeset
|
83 |
0 | 84 def __init__(self): |
759
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
85 self._cb_map = {} # map from callback_id to callbacks |
987
3a96920c07b7
core, frontends: unify the roster management UIs in sat/stdui/ui_contact_list.py
souliane <souliane@mailoo.org>
parents:
972
diff
changeset
|
86 self._menus = OrderedDict() # dynamic menus. key: callback_id, value: menu data (dictionnary) |
759
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
87 self.__private_data = {} # used for internal callbacks (key = id) FIXME: to be removed |
1026
71fdc327b318
core: getReady and asyncConnect now wait full initialisation, not only memory
Goffi <goffi@goffi.org>
parents:
1023
diff
changeset
|
88 self._initialised = defer.Deferred() |
62
93cb45a7420f
SàT multi-profile: connection using profiles
Goffi <goffi@goffi.org>
parents:
60
diff
changeset
|
89 self.profiles = {} |
22
bb72c29f3432
added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents:
18
diff
changeset
|
90 self.plugins = {} |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
579
diff
changeset
|
91 |
589
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
92 self.memory = Memory(self) |
1374
0befb14ecf62
renamed tools.misc to tools.trigger
Goffi <goffi@goffi.org>
parents:
1365
diff
changeset
|
93 self.trigger = trigger.TriggerManager() # trigger are used to change SàT behaviour |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
579
diff
changeset
|
94 |
627
d207c2186519
core, bridge, jp, quick_frontend: SàT stop more gracefully if bridge can't be initialised:
Goffi <goffi@goffi.org>
parents:
609
diff
changeset
|
95 try: |
d207c2186519
core, bridge, jp, quick_frontend: SàT stop more gracefully if bridge can't be initialised:
Goffi <goffi@goffi.org>
parents:
609
diff
changeset
|
96 self.bridge = DBusBridge() |
d207c2186519
core, bridge, jp, quick_frontend: SàT stop more gracefully if bridge can't be initialised:
Goffi <goffi@goffi.org>
parents:
609
diff
changeset
|
97 except exceptions.BridgeInitError: |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
991
diff
changeset
|
98 log.error(u"Bridge can't be initialised, can't start SàT core") |
627
d207c2186519
core, bridge, jp, quick_frontend: SàT stop more gracefully if bridge can't be initialised:
Goffi <goffi@goffi.org>
parents:
609
diff
changeset
|
99 sys.exit(1) |
1027 | 100 self.bridge.register("getReady", lambda: self._initialised) |
1375
3a20312d4012
core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents:
1374
diff
changeset
|
101 self.bridge.register("getVersion", lambda: self.full_version) |
66
8147b4f40809
SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents:
65
diff
changeset
|
102 self.bridge.register("getProfileName", self.memory.getProfileName) |
60
9764e027ecc0
SàT: multi-profile parameters, first draft
Goffi <goffi@goffi.org>
parents:
58
diff
changeset
|
103 self.bridge.register("getProfilesList", self.memory.getProfilesList) |
1314
bb9c32249778
core: added getEntitiesData which get cache data for several entities at once
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
104 self.bridge.register("getEntityData", lambda jid_, keys, profile: self.memory.getEntityData(jid.JID(jid_), keys, profile)) |
bb9c32249778
core: added getEntitiesData which get cache data for several entities at once
Goffi <goffi@goffi.org>
parents:
1290
diff
changeset
|
105 self.bridge.register("getEntitiesData", self.memory._getEntitiesData) |
420
acd908528ef7
core: profile creation/deletion through database
Goffi <goffi@goffi.org>
parents:
416
diff
changeset
|
106 self.bridge.register("asyncCreateProfile", self.memory.asyncCreateProfile) |
893
308a96bc7c1b
core, frontends: add method asyncDeleteProfile, remove synchronous methods createProfile and deleteProfile
souliane <souliane@mailoo.org>
parents:
853
diff
changeset
|
107 self.bridge.register("asyncDeleteProfile", self.memory.asyncDeleteProfile) |
341 | 108 self.bridge.register("asyncConnect", self.asyncConnect) |
1 | 109 self.bridge.register("disconnect", self.disconnect) |
466
448ce3c9e2ac
core: Roster cache refactoring: cache is now managed by client's SatRosterProtocol instance.
Goffi <goffi@goffi.org>
parents:
460
diff
changeset
|
110 self.bridge.register("getContacts", self.getContacts) |
501
e9634d2e7b38
core, quick_frontend, primitivus, wix: Contacts List refactoring phase 1:
Goffi <goffi@goffi.org>
parents:
489
diff
changeset
|
111 self.bridge.register("getContactsFromGroup", self.getContactsFromGroup) |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1262
diff
changeset
|
112 self.bridge.register("getMainResource", self.memory._getMainResource) |
943
71926ec2114d
core (memory): entities cache improvments:
Goffi <goffi@goffi.org>
parents:
941
diff
changeset
|
113 self.bridge.register("getPresenceStatuses", self.memory._getPresenceStatuses) |
50 | 114 self.bridge.register("getWaitingSub", self.memory.getWaitingSub) |
541
8b116fa42a31
core, bridge: waiting confirmation management (new getWaitingConf method)
Goffi <goffi@goffi.org>
parents:
538
diff
changeset
|
115 self.bridge.register("getWaitingConf", self.getWaitingConf) |
602 | 116 self.bridge.register("sendMessage", self._sendMessage) |
1234
9c17bd37e6e5
core: better management of default value in getConfig
Goffi <goffi@goffi.org>
parents:
1189
diff
changeset
|
117 self.bridge.register("getConfig", self._getConfig) |
0 | 118 self.bridge.register("setParam", self.setParam) |
538
2c4016921403
core, frontends, bridgen plugins: fixed methods which were unproperly managing multi-profiles
Goffi <goffi@goffi.org>
parents:
536
diff
changeset
|
119 self.bridge.register("getParamA", self.memory.getStringParamA) |
2c4016921403
core, frontends, bridgen plugins: fixed methods which were unproperly managing multi-profiles
Goffi <goffi@goffi.org>
parents:
536
diff
changeset
|
120 self.bridge.register("asyncGetParamA", self.memory.asyncGetStringParamA) |
105 | 121 self.bridge.register("getParamsUI", self.memory.getParamsUI) |
0 | 122 self.bridge.register("getParams", self.memory.getParams) |
18
6928e3cb73a8
refactoring: using xml params part II
Goffi <goffi@goffi.org>
parents:
17
diff
changeset
|
123 self.bridge.register("getParamsForCategory", self.memory.getParamsForCategory) |
0 | 124 self.bridge.register("getParamsCategories", self.memory.getParamsCategories) |
777
5642939d254e
core, bridge: new method paramsRegisterApp to register frontend's specific parameters
souliane <souliane@mailoo.org>
parents:
773
diff
changeset
|
125 self.bridge.register("paramsRegisterApp", self.memory.paramsRegisterApp) |
0 | 126 self.bridge.register("getHistory", self.memory.getHistory) |
807
be4c5e24dab9
plugin XEP-0077, plugin XEP-0100, frontends: gateways have been entirely implemented in backend using the new refactored XMLUI and AdvancedListContainer. The now useless code has been removed from frontends.
Goffi <goffi@goffi.org>
parents:
806
diff
changeset
|
127 self.bridge.register("setPresence", self._setPresence) |
50 | 128 self.bridge.register("subscription", self.subscription) |
807
be4c5e24dab9
plugin XEP-0077, plugin XEP-0100, frontends: gateways have been entirely implemented in backend using the new refactored XMLUI and AdvancedListContainer. The now useless code has been removed from frontends.
Goffi <goffi@goffi.org>
parents:
806
diff
changeset
|
129 self.bridge.register("addContact", self._addContact) |
be4c5e24dab9
plugin XEP-0077, plugin XEP-0100, frontends: gateways have been entirely implemented in backend using the new refactored XMLUI and AdvancedListContainer. The now useless code has been removed from frontends.
Goffi <goffi@goffi.org>
parents:
806
diff
changeset
|
130 self.bridge.register("updateContact", self._updateContact) |
be4c5e24dab9
plugin XEP-0077, plugin XEP-0100, frontends: gateways have been entirely implemented in backend using the new refactored XMLUI and AdvancedListContainer. The now useless code has been removed from frontends.
Goffi <goffi@goffi.org>
parents:
806
diff
changeset
|
131 self.bridge.register("delContact", self._delContact) |
0 | 132 self.bridge.register("isConnected", self.isConnected) |
759
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
133 self.bridge.register("launchAction", self.launchCallback) |
0 | 134 self.bridge.register("confirmationAnswer", self.confirmationAnswer) |
135 self.bridge.register("getProgress", self.getProgress) | |
101 | 136 self.bridge.register("getMenus", self.getMenus) |
137 self.bridge.register("getMenuHelp", self.getMenuHelp) | |
963
723f28cd15c7
core (disco): added discoInfos and discoItems bridge methods
Goffi <goffi@goffi.org>
parents:
951
diff
changeset
|
138 self.bridge.register("discoInfos", self.memory.disco._discoInfos) |
723f28cd15c7
core (disco): added discoInfos and discoItems bridge methods
Goffi <goffi@goffi.org>
parents:
951
diff
changeset
|
139 self.bridge.register("discoItems", self.memory.disco._discoItems) |
1015
fee00f2e11c2
memory, jp: added jp commands to load/save parameters template
souliane <souliane@mailoo.org>
parents:
1007
diff
changeset
|
140 self.bridge.register("saveParamsTemplate", self.memory.save_xml) |
fee00f2e11c2
memory, jp: added jp commands to load/save parameters template
souliane <souliane@mailoo.org>
parents:
1007
diff
changeset
|
141 self.bridge.register("loadParamsTemplate", self.memory.load_xml) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
579
diff
changeset
|
142 |
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
579
diff
changeset
|
143 self.memory.initialized.addCallback(self._postMemoryInit) |
0 | 144 |
412 | 145 def _postMemoryInit(self, ignore): |
146 """Method called after memory initialization is done""" | |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
991
diff
changeset
|
147 log.info(_("Memory initialised")) |
64 | 148 self._import_plugins() |
987
3a96920c07b7
core, frontends: unify the roster management UIs in sat/stdui/ui_contact_list.py
souliane <souliane@mailoo.org>
parents:
972
diff
changeset
|
149 ui_contact_list.ContactList(self) |
1032
b262ae6d53af
stdui: add ui_profile_manager to interact with frontends when profile authentication is needed
souliane <souliane@mailoo.org>
parents:
1030
diff
changeset
|
150 ui_profile_manager.ProfileManager(self) |
1026
71fdc327b318
core: getReady and asyncConnect now wait full initialisation, not only memory
Goffi <goffi@goffi.org>
parents:
1023
diff
changeset
|
151 self._initialised.callback(None) |
1145
4e1a0a1523f1
core: more robust plugins importation
Goffi <goffi@goffi.org>
parents:
1130
diff
changeset
|
152 log.info(_("Backend is ready")) |
0 | 153 |
154 def _import_plugins(self): | |
155 """Import all plugins found in plugins directory""" | |
226
d8bb72f00eec
distutils install: fixed plugin import and log file path
Goffi <goffi@goffi.org>
parents:
225
diff
changeset
|
156 import sat.plugins |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
579
diff
changeset
|
157 plugins_path = os.path.dirname(sat.plugins.__file__) |
589
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
158 plug_lst = [os.path.splitext(plugin)[0] for plugin in map(os.path.basename, glob(os.path.join(plugins_path, "plugin*.py")))] |
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
159 __plugins_to_import = {} # plugins we still have to import |
0 | 160 for plug in plug_lst: |
589
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
161 plugin_path = 'sat.plugins.' + plug |
1145
4e1a0a1523f1
core: more robust plugins importation
Goffi <goffi@goffi.org>
parents:
1130
diff
changeset
|
162 try: |
4e1a0a1523f1
core: more robust plugins importation
Goffi <goffi@goffi.org>
parents:
1130
diff
changeset
|
163 __import__(plugin_path) |
4e1a0a1523f1
core: more robust plugins importation
Goffi <goffi@goffi.org>
parents:
1130
diff
changeset
|
164 except ImportError as e: |
4e1a0a1523f1
core: more robust plugins importation
Goffi <goffi@goffi.org>
parents:
1130
diff
changeset
|
165 log.error(_("Can't import plugin [%(path)s]: %(error)s") % {'path': plugin_path, 'error':e}) |
4e1a0a1523f1
core: more robust plugins importation
Goffi <goffi@goffi.org>
parents:
1130
diff
changeset
|
166 continue |
287
2720536b5a22
core: added plugin dependency management
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
167 mod = sys.modules[plugin_path] |
2720536b5a22
core: added plugin dependency management
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
168 plugin_info = mod.PLUGIN_INFO |
2720536b5a22
core: added plugin dependency management
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
169 __plugins_to_import[plugin_info['import_name']] = (plugin_path, mod, plugin_info) |
2720536b5a22
core: added plugin dependency management
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
170 while True: |
2720536b5a22
core: added plugin dependency management
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
171 self._import_plugins_from_dict(__plugins_to_import) |
2720536b5a22
core: added plugin dependency management
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
172 if not __plugins_to_import: |
2720536b5a22
core: added plugin dependency management
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
173 break |
2720536b5a22
core: added plugin dependency management
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
174 |
925
5c78cefd233f
core: plugins now accepts recommendations:
Goffi <goffi@goffi.org>
parents:
923
diff
changeset
|
175 def _import_plugins_from_dict(self, plugins_to_import, import_name=None, optional=False): |
287
2720536b5a22
core: added plugin dependency management
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
176 """Recursively import and their dependencies in the right order |
925
5c78cefd233f
core: plugins now accepts recommendations:
Goffi <goffi@goffi.org>
parents:
923
diff
changeset
|
177 @param plugins_to_import: dict where key=import_name and values= (plugin_path, module, plugin_info) |
5c78cefd233f
core: plugins now accepts recommendations:
Goffi <goffi@goffi.org>
parents:
923
diff
changeset
|
178 @param import_name: name of the plugin to import as found in PLUGIN_INFO['import_name'] |
5c78cefd233f
core: plugins now accepts recommendations:
Goffi <goffi@goffi.org>
parents:
923
diff
changeset
|
179 @param optional: if False and plugin is not found, an ImportError exception is raised |
5c78cefd233f
core: plugins now accepts recommendations:
Goffi <goffi@goffi.org>
parents:
923
diff
changeset
|
180 |
5c78cefd233f
core: plugins now accepts recommendations:
Goffi <goffi@goffi.org>
parents:
923
diff
changeset
|
181 """ |
589
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
182 if import_name in self.plugins: |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
991
diff
changeset
|
183 log.debug('Plugin [%s] already imported, passing' % import_name) |
287
2720536b5a22
core: added plugin dependency management
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
184 return |
2720536b5a22
core: added plugin dependency management
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
185 if not import_name: |
589
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
186 import_name, (plugin_path, mod, plugin_info) = plugins_to_import.popitem() |
287
2720536b5a22
core: added plugin dependency management
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
187 else: |
288
76247af9917c
core: added plugin dependency not found import error
Goffi <goffi@goffi.org>
parents:
287
diff
changeset
|
188 if not import_name in plugins_to_import: |
925
5c78cefd233f
core: plugins now accepts recommendations:
Goffi <goffi@goffi.org>
parents:
923
diff
changeset
|
189 if optional: |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
991
diff
changeset
|
190 log.warning(_("Recommended plugin not found: %s") % import_name) |
925
5c78cefd233f
core: plugins now accepts recommendations:
Goffi <goffi@goffi.org>
parents:
923
diff
changeset
|
191 return |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
991
diff
changeset
|
192 log.error(_("Dependency not found: %s") % import_name) |
288
76247af9917c
core: added plugin dependency not found import error
Goffi <goffi@goffi.org>
parents:
287
diff
changeset
|
193 raise ImportError(_('Dependency plugin not found: [%s]') % import_name) |
287
2720536b5a22
core: added plugin dependency management
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
194 plugin_path, mod, plugin_info = plugins_to_import.pop(import_name) |
589
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
195 dependencies = plugin_info.setdefault("dependencies", []) |
925
5c78cefd233f
core: plugins now accepts recommendations:
Goffi <goffi@goffi.org>
parents:
923
diff
changeset
|
196 recommendations = plugin_info.setdefault("recommendations", []) |
5c78cefd233f
core: plugins now accepts recommendations:
Goffi <goffi@goffi.org>
parents:
923
diff
changeset
|
197 for to_import in dependencies + recommendations: |
5c78cefd233f
core: plugins now accepts recommendations:
Goffi <goffi@goffi.org>
parents:
923
diff
changeset
|
198 if to_import not in self.plugins: |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
991
diff
changeset
|
199 log.debug('Recursively import dependency of [%s]: [%s]' % (import_name, to_import)) |
1145
4e1a0a1523f1
core: more robust plugins importation
Goffi <goffi@goffi.org>
parents:
1130
diff
changeset
|
200 try: |
4e1a0a1523f1
core: more robust plugins importation
Goffi <goffi@goffi.org>
parents:
1130
diff
changeset
|
201 self._import_plugins_from_dict(plugins_to_import, to_import, to_import not in dependencies) |
4e1a0a1523f1
core: more robust plugins importation
Goffi <goffi@goffi.org>
parents:
1130
diff
changeset
|
202 except ImportError as e: |
4e1a0a1523f1
core: more robust plugins importation
Goffi <goffi@goffi.org>
parents:
1130
diff
changeset
|
203 log.error(_("Can't import plugin %(name)s: %(error)s") % {'name':plugin_info['name'], 'error':e}) |
4e1a0a1523f1
core: more robust plugins importation
Goffi <goffi@goffi.org>
parents:
1130
diff
changeset
|
204 return |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
991
diff
changeset
|
205 log.info(_("importing plugin: %s") % plugin_info['name']) |
287
2720536b5a22
core: added plugin dependency management
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
206 self.plugins[import_name] = getattr(mod, plugin_info['main'])(self) |
589
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
207 if 'handler' in plugin_info and plugin_info['handler'] == 'yes': |
287
2720536b5a22
core: added plugin dependency management
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
208 self.plugins[import_name].is_handler = True |
2720536b5a22
core: added plugin dependency management
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
209 else: |
2720536b5a22
core: added plugin dependency management
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
210 self.plugins[import_name].is_handler = False |
2720536b5a22
core: added plugin dependency management
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
211 #TODO: test xmppclient presence and register handler parent |
0 | 212 |
1030
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
213 def asyncConnect(self, profile_key=C.PROF_KEY_NONE, password=''): |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
214 """Retrieve the individual parameters, authenticate the profile |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
215 and initiate the connection to the associated XMPP server. |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
216 |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
217 @param password (string): the SàT profile password |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
218 @param profile_key: %(doc_profile_key)s |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
219 @return: Deferred: |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
220 - a deferred boolean if the profile authentication succeed: |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
221 - True if the XMPP connection was already established |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
222 - False if the XMPP connection has been initiated (it may still fail) |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
223 - a Failure if the profile authentication failed |
423
6c20c76abdcc
backend: - bridge async D-Bus method now automatically manage callback and errback, we just have to return a deferred
Goffi <goffi@goffi.org>
parents:
420
diff
changeset
|
224 """ |
1026
71fdc327b318
core: getReady and asyncConnect now wait full initialisation, not only memory
Goffi <goffi@goffi.org>
parents:
1023
diff
changeset
|
225 def backendInitialised(dummy): |
1023
8bae81e254a2
core: added a getReady method which can be called by frontends to ensure that backend is fully initialised before doing anything + this ckeck is automatically done in asyncConnect
Goffi <goffi@goffi.org>
parents:
1019
diff
changeset
|
226 profile = self.memory.getProfileName(profile_key) |
8bae81e254a2
core: added a getReady method which can be called by frontends to ensure that backend is fully initialised before doing anything + this ckeck is automatically done in asyncConnect
Goffi <goffi@goffi.org>
parents:
1019
diff
changeset
|
227 if not profile: |
8bae81e254a2
core: added a getReady method which can be called by frontends to ensure that backend is fully initialised before doing anything + this ckeck is automatically done in asyncConnect
Goffi <goffi@goffi.org>
parents:
1019
diff
changeset
|
228 log.error(_('Trying to connect a non-existant profile')) |
8bae81e254a2
core: added a getReady method which can be called by frontends to ensure that backend is fully initialised before doing anything + this ckeck is automatically done in asyncConnect
Goffi <goffi@goffi.org>
parents:
1019
diff
changeset
|
229 raise exceptions.ProfileUnknownError(profile_key) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
579
diff
changeset
|
230 |
1030
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
231 def connectXMPPClient(dummy=None): |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
232 if self.isConnected(profile): |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
233 log.info(_("already connected !")) |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
234 return True |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
235 self.memory.startProfileSession(profile) |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
236 d = self.memory.loadIndividualParams(profile) |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
237 d.addCallback(lambda dummy: self._connectXMPPClient(profile)) |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
238 return d.addCallback(lambda dummy: False) |
412 | 239 |
1030
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
240 d = self._authenticateProfile(password, profile) |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
241 d.addCallback(connectXMPPClient) |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
242 return d |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
243 |
1043
066308706dc6
core, stdui (profile manager), quick_app: ask for another XMPP password when profile authentication succeed but XMPP connection fails
souliane <souliane@mailoo.org>
parents:
1037
diff
changeset
|
244 self._initialised.addErrback(lambda dummy: None) # allow successive attempts |
1030
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
245 return self._initialised.addCallback(backendInitialised) |
1019 | 246 |
1030
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
247 @defer.inlineCallbacks |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
248 def _connectXMPPClient(self, profile): |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
249 """This part is called from asyncConnect when we have loaded individual parameters from memory""" |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
250 try: |
1088
b29452cab50b
core, memory, plugins, stdui, frontends: look for DNS SRV records when server is not specified:
souliane <souliane@mailoo.org>
parents:
1063
diff
changeset
|
251 port = int(self.memory.getParamA(C.FORCE_PORT_PARAM, "Connection", profile_key=profile)) |
1030
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
252 except ValueError: |
1096
77751f5b2242
core: use of debug log instead of error when port default value is used
Goffi <goffi@goffi.org>
parents:
1092
diff
changeset
|
253 log.debug(_("Can't parse port value, using default value")) |
1089
8e0072754413
core, plugins, stdui, frontends: fixes handling of "Force server" and "Force port" parameters:
souliane <souliane@mailoo.org>
parents:
1088
diff
changeset
|
254 port = None # will use default value 5222 or be retrieved from a DNS SRV record |
13
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
255 |
1030
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
256 password = yield self.memory.asyncGetParamA("Password", "Connection", profile_key=profile) |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
257 current = self.profiles[profile] = xmpp.SatXMPPClient(self, profile, |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
258 jid.JID(self.memory.getParamA("JabberID", "Connection", profile_key=profile)), |
1088
b29452cab50b
core, memory, plugins, stdui, frontends: look for DNS SRV records when server is not specified:
souliane <souliane@mailoo.org>
parents:
1063
diff
changeset
|
259 password, self.memory.getParamA(C.FORCE_SERVER_PARAM, "Connection", profile_key=profile), port) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
579
diff
changeset
|
260 |
1030
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
261 current.messageProt = xmpp.SatMessageProtocol(self) |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
262 current.messageProt.setHandlerParent(current) |
13
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
263 |
1030
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
264 current.roster = xmpp.SatRosterProtocol(self) |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
265 current.roster.setHandlerParent(current) |
13
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
266 |
1030
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
267 current.presence = xmpp.SatPresenceProtocol(self) |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
268 current.presence.setHandlerParent(current) |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
269 |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
270 current.fallBack = xmpp.SatFallbackHandler(self) |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
271 current.fallBack.setHandlerParent(current) |
412 | 272 |
1030
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
273 current.versionHandler = xmpp.SatVersionHandler(C.APP_NAME_FULL, |
1375
3a20312d4012
core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents:
1374
diff
changeset
|
274 self.full_version) |
1030
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
275 current.versionHandler.setHandlerParent(current) |
14 | 276 |
1030
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
277 current.identityHandler = xmpp.SatIdentityHandler() |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
278 current.identityHandler.setHandlerParent(current) |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
279 |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
280 log.debug(_("setting plugins parents")) |
666
2a7185b8452c
core: added SatIdentityHandler for Disco Identity, and set identity to "client/pc/Salut à Toi"
Goffi <goffi@goffi.org>
parents:
641
diff
changeset
|
281 |
1030
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
282 plugin_conn_cb = [] |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
283 for plugin in self.plugins.iteritems(): |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
284 if plugin[1].is_handler: |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
285 plugin[1].getHandler(profile).setHandlerParent(current) |
1316
8adcdf2cdfe1
core: added a "profileConnecting" method check:
Goffi <goffi@goffi.org>
parents:
1314
diff
changeset
|
286 connected_cb = getattr(plugin[1], "profileConnected", None) # profile connected is called after client is ready and roster is got |
1030
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
287 if connected_cb: |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
288 plugin_conn_cb.append((plugin[0], connected_cb)) |
1316
8adcdf2cdfe1
core: added a "profileConnecting" method check:
Goffi <goffi@goffi.org>
parents:
1314
diff
changeset
|
289 try: |
8adcdf2cdfe1
core: added a "profileConnecting" method check:
Goffi <goffi@goffi.org>
parents:
1314
diff
changeset
|
290 yield plugin[1].profileConnecting(profile) # profile connecting is called before actually starting client |
8adcdf2cdfe1
core: added a "profileConnecting" method check:
Goffi <goffi@goffi.org>
parents:
1314
diff
changeset
|
291 except AttributeError: |
8adcdf2cdfe1
core: added a "profileConnecting" method check:
Goffi <goffi@goffi.org>
parents:
1314
diff
changeset
|
292 pass |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
579
diff
changeset
|
293 |
1030
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
294 current.startService() |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
295 |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
296 yield current.getConnectionDeferred() |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
297 yield current.roster.got_roster # we want to be sure that we got the roster |
14 | 298 |
1030
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
299 # Call profileConnected callback for all plugins, and print error message if any of them fails |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
300 conn_cb_list = [] |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
301 for dummy, callback in plugin_conn_cb: |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
302 conn_cb_list.append(defer.maybeDeferred(callback, profile)) |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
303 list_d = defer.DeferredList(conn_cb_list) |
972
07b817f5a197
core: better plugin initialisation sequence:
Goffi <goffi@goffi.org>
parents:
963
diff
changeset
|
304 |
1030
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
305 def logPluginResults(results): |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
306 all_succeed = all([success for success, result in results]) |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
307 if not all_succeed: |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
308 log.error(_("Plugins initialisation error")) |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
309 for idx, (success, result) in enumerate(results): |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
310 if not success: |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
311 log.error("error (plugin %(name)s): %(failure)s" % |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
312 {'name': plugin_conn_cb[idx][0], 'failure': result}) |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
313 |
1189
7d640c303140
core (disco): added a timeout to get items
Goffi <goffi@goffi.org>
parents:
1148
diff
changeset
|
314 yield list_d.addCallback(logPluginResults) # FIXME: we should have a timeout here, and a way to know if a plugin freeze |
1316
8adcdf2cdfe1
core: added a "profileConnecting" method check:
Goffi <goffi@goffi.org>
parents:
1314
diff
changeset
|
315 # TODO: mesure launch time of each plugin |
1030
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
316 |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
317 def _authenticateProfile(self, password, profile): |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
318 """Authenticate the profile. |
972
07b817f5a197
core: better plugin initialisation sequence:
Goffi <goffi@goffi.org>
parents:
963
diff
changeset
|
319 |
1030
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
320 @param password (string): the SàT profile password |
1092
0eefc74c346b
core (menus): constants are used for menu types
Goffi <goffi@goffi.org>
parents:
1089
diff
changeset
|
321 @param profile: %(doc_profile)s |
1030
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
322 @return: Deferred: a deferred None in case of success, a failure otherwise. |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
323 """ |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
324 session_data = self.memory.auth_sessions.profileGetUnique(profile) |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
325 if not password and session_data: |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
326 # XXX: this allows any frontend to connect with the empty password as soon as |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
327 # the profile has been authenticated at least once before. It is OK as long as |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
328 # submitting a form with empty passwords is restricted to local frontends. |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
329 return defer.succeed(None) |
972
07b817f5a197
core: better plugin initialisation sequence:
Goffi <goffi@goffi.org>
parents:
963
diff
changeset
|
330 |
1030
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
331 def check_result(result): |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
332 if not result: |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
333 log.warning(_('Authentication failure of profile %s') % profile) |
1063
6ec513ad92c2
frontends: async failures are more detailed (full class name + error message)
souliane <souliane@mailoo.org>
parents:
1059
diff
changeset
|
334 raise exceptions.PasswordError(D_("The provided profile password doesn't match.")) |
1030
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
335 if not session_data: # avoid to create two profile sessions when password if specified |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
336 return self.memory.newAuthSession(password, profile) |
972
07b817f5a197
core: better plugin initialisation sequence:
Goffi <goffi@goffi.org>
parents:
963
diff
changeset
|
337 |
1030
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
338 d = self.memory.asyncGetParamA(C.PROFILE_PASS_PATH[1], C.PROFILE_PASS_PATH[0], profile_key=profile) |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
339 d.addCallback(lambda sat_cipher: PasswordHasher.verify(password, sat_cipher)) |
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
340 return d.addCallback(check_result) |
341 | 341 |
346
ca3a041fed30
core: fixed several subscription scheme issues + removed most of profile_key default value in core.sat_main and core.xmmp (source of bugs) + contact update
Goffi <goffi@goffi.org>
parents:
341
diff
changeset
|
342 def disconnect(self, profile_key): |
16
0a024d5e0cd0
New account creation (in-band registration)
Goffi <goffi@goffi.org>
parents:
15
diff
changeset
|
343 """disconnect from jabber server""" |
589
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
344 if not self.isConnected(profile_key): |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
991
diff
changeset
|
345 log.info(_("not connected !")) |
6
5799493fa548
connection and disconnection management
Goffi <goffi@goffi.org>
parents:
5
diff
changeset
|
346 return |
63
0db25931b60d
SàT: multi-profiles: somes fixes in core
Goffi <goffi@goffi.org>
parents:
62
diff
changeset
|
347 profile = self.memory.getProfileName(profile_key) |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
991
diff
changeset
|
348 log.info(_("Disconnecting...")) |
63
0db25931b60d
SàT: multi-profiles: somes fixes in core
Goffi <goffi@goffi.org>
parents:
62
diff
changeset
|
349 self.profiles[profile].stopService() |
438
62145e50eae5
core: plugins can now have profileConnected/profileDisconnected method to initialise/free profile dependant resources
Goffi <goffi@goffi.org>
parents:
434
diff
changeset
|
350 for plugin in self.plugins.iteritems(): |
62145e50eae5
core: plugins can now have profileConnected/profileDisconnected method to initialise/free profile dependant resources
Goffi <goffi@goffi.org>
parents:
434
diff
changeset
|
351 disconnected_cb = getattr(plugin[1], "profileDisconnected", None) |
62145e50eae5
core: plugins can now have profileConnected/profileDisconnected method to initialise/free profile dependant resources
Goffi <goffi@goffi.org>
parents:
434
diff
changeset
|
352 if disconnected_cb: |
62145e50eae5
core: plugins can now have profileConnected/profileDisconnected method to initialise/free profile dependant resources
Goffi <goffi@goffi.org>
parents:
434
diff
changeset
|
353 disconnected_cb(profile) |
6
5799493fa548
connection and disconnection management
Goffi <goffi@goffi.org>
parents:
5
diff
changeset
|
354 |
466
448ce3c9e2ac
core: Roster cache refactoring: cache is now managed by client's SatRosterProtocol instance.
Goffi <goffi@goffi.org>
parents:
460
diff
changeset
|
355 def getContacts(self, profile_key): |
448ce3c9e2ac
core: Roster cache refactoring: cache is now managed by client's SatRosterProtocol instance.
Goffi <goffi@goffi.org>
parents:
460
diff
changeset
|
356 client = self.getClient(profile_key) |
1262
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1234
diff
changeset
|
357 def got_roster(dummy): |
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1234
diff
changeset
|
358 ret = [] |
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1234
diff
changeset
|
359 for item in client.roster.getItems(): # we get all items for client's roster |
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1234
diff
changeset
|
360 # and convert them to expected format |
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1234
diff
changeset
|
361 attr = client.roster.getAttributes(item) |
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1234
diff
changeset
|
362 ret.append([item.jid.userhost(), attr, item.groups]) |
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1234
diff
changeset
|
363 return ret |
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1234
diff
changeset
|
364 |
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1234
diff
changeset
|
365 return client.roster.got_roster.addCallback(got_roster) |
466
448ce3c9e2ac
core: Roster cache refactoring: cache is now managed by client's SatRosterProtocol instance.
Goffi <goffi@goffi.org>
parents:
460
diff
changeset
|
366 |
501
e9634d2e7b38
core, quick_frontend, primitivus, wix: Contacts List refactoring phase 1:
Goffi <goffi@goffi.org>
parents:
489
diff
changeset
|
367 def getContactsFromGroup(self, group, profile_key): |
e9634d2e7b38
core, quick_frontend, primitivus, wix: Contacts List refactoring phase 1:
Goffi <goffi@goffi.org>
parents:
489
diff
changeset
|
368 client = self.getClient(profile_key) |
941
c6d8fc63b1db
core, plugins: host.getClient now raise an exception instead of returning None when no profile is found, plugins have been adapted consequently and a bit cleaned
Goffi <goffi@goffi.org>
parents:
930
diff
changeset
|
369 return [jid_.full() for jid_ in client.roster.getJidsFromGroup(group)] |
501
e9634d2e7b38
core, quick_frontend, primitivus, wix: Contacts List refactoring phase 1:
Goffi <goffi@goffi.org>
parents:
489
diff
changeset
|
370 |
416
32dc8b18c2ae
core: param loading/purging on profile connection/disconnection
Goffi <goffi@goffi.org>
parents:
413
diff
changeset
|
371 def purgeClient(self, profile): |
32dc8b18c2ae
core: param loading/purging on profile connection/disconnection
Goffi <goffi@goffi.org>
parents:
413
diff
changeset
|
372 """Remove reference to a profile client and purge cache |
32dc8b18c2ae
core: param loading/purging on profile connection/disconnection
Goffi <goffi@goffi.org>
parents:
413
diff
changeset
|
373 the garbage collector can then free the memory""" |
32dc8b18c2ae
core: param loading/purging on profile connection/disconnection
Goffi <goffi@goffi.org>
parents:
413
diff
changeset
|
374 try: |
32dc8b18c2ae
core: param loading/purging on profile connection/disconnection
Goffi <goffi@goffi.org>
parents:
413
diff
changeset
|
375 del self.profiles[profile] |
32dc8b18c2ae
core: param loading/purging on profile connection/disconnection
Goffi <goffi@goffi.org>
parents:
413
diff
changeset
|
376 except KeyError: |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
991
diff
changeset
|
377 log.error(_("Trying to remove reference to a client not referenced")) |
484
23cbdf0a0777
core: presence status + last resource refactored and kept in entitiesCache in memory.py, profile cache is purged on disconnection
Goffi <goffi@goffi.org>
parents:
480
diff
changeset
|
378 self.memory.purgeProfileSession(profile) |
416
32dc8b18c2ae
core: param loading/purging on profile connection/disconnection
Goffi <goffi@goffi.org>
parents:
413
diff
changeset
|
379 |
13
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
380 def startService(self): |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
991
diff
changeset
|
381 log.info(u"Salut à toi ô mon frère !") |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
579
diff
changeset
|
382 |
13
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
383 def stopService(self): |
1007
a7d33c7a8277
core (log): refactoring + twisted backend:
Goffi <goffi@goffi.org>
parents:
999
diff
changeset
|
384 log.info(u"Salut aussi à Rantanplan") |
0 | 385 |
386 def run(self): | |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
991
diff
changeset
|
387 log.debug(_("running app")) |
0 | 388 reactor.run() |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
579
diff
changeset
|
389 |
0 | 390 def stop(self): |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
991
diff
changeset
|
391 log.debug(_("stopping app")) |
0 | 392 reactor.stop() |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
579
diff
changeset
|
393 |
37
a61beb21d16d
Gateway registration, unregistration & edition
Goffi <goffi@goffi.org>
parents:
36
diff
changeset
|
394 ## Misc methods ## |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
579
diff
changeset
|
395 |
64 | 396 def getJidNStream(self, profile_key): |
397 """Convenient method to get jid and stream from profile key | |
398 @return: tuple (jid, xmlstream) from profile, can be None""" | |
399 profile = self.memory.getProfileName(profile_key) | |
400 if not profile or not self.profiles[profile].isConnected(): | |
401 return (None, None) | |
402 return (self.profiles[profile].jid, self.profiles[profile].xmlstream) | |
403 | |
404 def getClient(self, profile_key): | |
405 """Convenient method to get client from profile key | |
406 @return: client or None if it doesn't exist""" | |
407 profile = self.memory.getProfileName(profile_key) | |
408 if not profile: | |
941
c6d8fc63b1db
core, plugins: host.getClient now raise an exception instead of returning None when no profile is found, plugins have been adapted consequently and a bit cleaned
Goffi <goffi@goffi.org>
parents:
930
diff
changeset
|
409 raise exceptions.ProfileKeyUnknownError |
64 | 410 return self.profiles[profile] |
411 | |
728
e07afabc4a25
plugin XEP-0050: Ad-Hoc commands first draft (answering part)
Goffi <goffi@goffi.org>
parents:
727
diff
changeset
|
412 def getClients(self, profile_key): |
e07afabc4a25
plugin XEP-0050: Ad-Hoc commands first draft (answering part)
Goffi <goffi@goffi.org>
parents:
727
diff
changeset
|
413 """Convenient method to get list of clients from profile key (manage list through profile_key like @ALL@) |
e07afabc4a25
plugin XEP-0050: Ad-Hoc commands first draft (answering part)
Goffi <goffi@goffi.org>
parents:
727
diff
changeset
|
414 @param profile_key: %(doc_profile_key)s |
e07afabc4a25
plugin XEP-0050: Ad-Hoc commands first draft (answering part)
Goffi <goffi@goffi.org>
parents:
727
diff
changeset
|
415 @return: list of clients""" |
e07afabc4a25
plugin XEP-0050: Ad-Hoc commands first draft (answering part)
Goffi <goffi@goffi.org>
parents:
727
diff
changeset
|
416 profile = self.memory.getProfileName(profile_key, True) |
e07afabc4a25
plugin XEP-0050: Ad-Hoc commands first draft (answering part)
Goffi <goffi@goffi.org>
parents:
727
diff
changeset
|
417 if not profile: |
e07afabc4a25
plugin XEP-0050: Ad-Hoc commands first draft (answering part)
Goffi <goffi@goffi.org>
parents:
727
diff
changeset
|
418 return [] |
e07afabc4a25
plugin XEP-0050: Ad-Hoc commands first draft (answering part)
Goffi <goffi@goffi.org>
parents:
727
diff
changeset
|
419 if profile == "@ALL@": |
e07afabc4a25
plugin XEP-0050: Ad-Hoc commands first draft (answering part)
Goffi <goffi@goffi.org>
parents:
727
diff
changeset
|
420 return self.profiles.values() |
e07afabc4a25
plugin XEP-0050: Ad-Hoc commands first draft (answering part)
Goffi <goffi@goffi.org>
parents:
727
diff
changeset
|
421 if profile.count('@') > 1: |
e07afabc4a25
plugin XEP-0050: Ad-Hoc commands first draft (answering part)
Goffi <goffi@goffi.org>
parents:
727
diff
changeset
|
422 raise exceptions.ProfileKeyUnknownError |
e07afabc4a25
plugin XEP-0050: Ad-Hoc commands first draft (answering part)
Goffi <goffi@goffi.org>
parents:
727
diff
changeset
|
423 return [self.profiles[profile]] |
e07afabc4a25
plugin XEP-0050: Ad-Hoc commands first draft (answering part)
Goffi <goffi@goffi.org>
parents:
727
diff
changeset
|
424 |
1234
9c17bd37e6e5
core: better management of default value in getConfig
Goffi <goffi@goffi.org>
parents:
1189
diff
changeset
|
425 def _getConfig(self, section, name): |
9c17bd37e6e5
core: better management of default value in getConfig
Goffi <goffi@goffi.org>
parents:
1189
diff
changeset
|
426 """Get the main configuration option |
9c17bd37e6e5
core: better management of default value in getConfig
Goffi <goffi@goffi.org>
parents:
1189
diff
changeset
|
427 |
9c17bd37e6e5
core: better management of default value in getConfig
Goffi <goffi@goffi.org>
parents:
1189
diff
changeset
|
428 @param section: section of the config file (None or '' for DEFAULT) |
9c17bd37e6e5
core: better management of default value in getConfig
Goffi <goffi@goffi.org>
parents:
1189
diff
changeset
|
429 @param name: name of the option |
9c17bd37e6e5
core: better management of default value in getConfig
Goffi <goffi@goffi.org>
parents:
1189
diff
changeset
|
430 @return: unicode representation of the option |
9c17bd37e6e5
core: better management of default value in getConfig
Goffi <goffi@goffi.org>
parents:
1189
diff
changeset
|
431 """ |
9c17bd37e6e5
core: better management of default value in getConfig
Goffi <goffi@goffi.org>
parents:
1189
diff
changeset
|
432 return unicode(self.memory.getConfig(section, name, '')) |
9c17bd37e6e5
core: better management of default value in getConfig
Goffi <goffi@goffi.org>
parents:
1189
diff
changeset
|
433 |
16
0a024d5e0cd0
New account creation (in-band registration)
Goffi <goffi@goffi.org>
parents:
15
diff
changeset
|
434 ## Client management ## |
0 | 435 |
641
49587e170f53
core: added the security_limit to setParam
souliane <souliane@mailoo.org>
parents:
636
diff
changeset
|
436 def setParam(self, name, value, category, security_limit, profile_key): |
0 | 437 """set wanted paramater and notice observers""" |
641
49587e170f53
core: added the security_limit to setParam
souliane <souliane@mailoo.org>
parents:
636
diff
changeset
|
438 self.memory.setParam(name, value, category, security_limit, profile_key) |
0 | 439 |
346
ca3a041fed30
core: fixed several subscription scheme issues + removed most of profile_key default value in core.sat_main and core.xmmp (source of bugs) + contact update
Goffi <goffi@goffi.org>
parents:
341
diff
changeset
|
440 def isConnected(self, profile_key): |
62
93cb45a7420f
SàT multi-profile: connection using profiles
Goffi <goffi@goffi.org>
parents:
60
diff
changeset
|
441 """Return connection status of profile |
93cb45a7420f
SàT multi-profile: connection using profiles
Goffi <goffi@goffi.org>
parents:
60
diff
changeset
|
442 @param profile_key: key_word or profile name to determine profile name |
1030
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
443 @return: True if connected |
62
93cb45a7420f
SàT multi-profile: connection using profiles
Goffi <goffi@goffi.org>
parents:
60
diff
changeset
|
444 """ |
93cb45a7420f
SàT multi-profile: connection using profiles
Goffi <goffi@goffi.org>
parents:
60
diff
changeset
|
445 profile = self.memory.getProfileName(profile_key) |
93cb45a7420f
SàT multi-profile: connection using profiles
Goffi <goffi@goffi.org>
parents:
60
diff
changeset
|
446 if not profile: |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
991
diff
changeset
|
447 log.error(_('asking connection status for a non-existant profile')) |
1030
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
448 raise exceptions.ProfileUnknownError(profile_key) |
589
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
449 if profile not in self.profiles: |
62
93cb45a7420f
SàT multi-profile: connection using profiles
Goffi <goffi@goffi.org>
parents:
60
diff
changeset
|
450 return False |
93cb45a7420f
SàT multi-profile: connection using profiles
Goffi <goffi@goffi.org>
parents:
60
diff
changeset
|
451 return self.profiles[profile].isConnected() |
0 | 452 |
22
bb72c29f3432
added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents:
18
diff
changeset
|
453 |
1052
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
454 ## XMPP methods ## |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
579
diff
changeset
|
455 |
541
8b116fa42a31
core, bridge: waiting confirmation management (new getWaitingConf method)
Goffi <goffi@goffi.org>
parents:
538
diff
changeset
|
456 def getWaitingConf(self, profile_key=None): |
8b116fa42a31
core, bridge: waiting confirmation management (new getWaitingConf method)
Goffi <goffi@goffi.org>
parents:
538
diff
changeset
|
457 assert(profile_key) |
8b116fa42a31
core, bridge: waiting confirmation management (new getWaitingConf method)
Goffi <goffi@goffi.org>
parents:
538
diff
changeset
|
458 client = self.getClient(profile_key) |
8b116fa42a31
core, bridge: waiting confirmation management (new getWaitingConf method)
Goffi <goffi@goffi.org>
parents:
538
diff
changeset
|
459 ret = [] |
8b116fa42a31
core, bridge: waiting confirmation management (new getWaitingConf method)
Goffi <goffi@goffi.org>
parents:
538
diff
changeset
|
460 for conf_id in client._waiting_conf: |
8b116fa42a31
core, bridge: waiting confirmation management (new getWaitingConf method)
Goffi <goffi@goffi.org>
parents:
538
diff
changeset
|
461 conf_type, data = client._waiting_conf[conf_id][:2] |
8b116fa42a31
core, bridge: waiting confirmation management (new getWaitingConf method)
Goffi <goffi@goffi.org>
parents:
538
diff
changeset
|
462 ret.append((conf_id, conf_type, data)) |
8b116fa42a31
core, bridge: waiting confirmation management (new getWaitingConf method)
Goffi <goffi@goffi.org>
parents:
538
diff
changeset
|
463 return ret |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
579
diff
changeset
|
464 |
1052
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
465 def generateMessageXML(self, mess_data): |
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
466 mess_data['xml'] = domish.Element((None, 'message')) |
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
467 mess_data['xml']["to"] = mess_data["to"].full() |
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
468 mess_data['xml']["from"] = mess_data['from'].full() |
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
469 mess_data['xml']["type"] = mess_data["type"] |
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
470 mess_data['xml']['id'] = str(uuid4()) |
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
471 if mess_data["subject"]: |
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
472 mess_data['xml'].addElement("subject", None, mess_data['subject']) |
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
473 if mess_data["message"]: # message without body are used to send chat states |
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
474 mess_data['xml'].addElement("body", None, mess_data["message"]) |
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
475 return mess_data |
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
476 |
916
1a759096ccbd
core: use of Const for profile_key + replaced '@DEFAULT@' default profile_key by '@NONE@'
Goffi <goffi@goffi.org>
parents:
914
diff
changeset
|
477 def _sendMessage(self, to_s, msg, subject=None, mess_type='auto', extra={}, profile_key=C.PROF_KEY_NONE): |
602 | 478 to_jid = jid.JID(to_s) |
698
d731ae066158
core: sendMessage's options parameter has been renamed to extra to be consistent with newMessage
Goffi <goffi@goffi.org>
parents:
697
diff
changeset
|
479 #XXX: we need to use the dictionary comprehension because D-Bus return its own types, and pickle can't manage them. TODO: Need to find a better way |
752
f49945d728de
core,bridge: sendMessage bridge method is now async
Goffi <goffi@goffi.org>
parents:
748
diff
changeset
|
480 return self.sendMessage(to_jid, msg, subject, mess_type, {unicode(key): unicode(value) for key, value in extra.items()}, profile_key=profile_key) |
636
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
627
diff
changeset
|
481 |
916
1a759096ccbd
core: use of Const for profile_key + replaced '@DEFAULT@' default profile_key by '@NONE@'
Goffi <goffi@goffi.org>
parents:
914
diff
changeset
|
482 def sendMessage(self, to_jid, msg, subject=None, mess_type='auto', extra={}, no_trigger=False, profile_key=C.PROF_KEY_NONE): |
16
0a024d5e0cd0
New account creation (in-band registration)
Goffi <goffi@goffi.org>
parents:
15
diff
changeset
|
483 #FIXME: check validity of recipient |
62
93cb45a7420f
SàT multi-profile: connection using profiles
Goffi <goffi@goffi.org>
parents:
60
diff
changeset
|
484 profile = self.memory.getProfileName(profile_key) |
1262
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1234
diff
changeset
|
485 assert profile |
489 | 486 client = self.profiles[profile] |
698
d731ae066158
core: sendMessage's options parameter has been renamed to extra to be consistent with newMessage
Goffi <goffi@goffi.org>
parents:
697
diff
changeset
|
487 if extra is None: |
d731ae066158
core: sendMessage's options parameter has been renamed to extra to be consistent with newMessage
Goffi <goffi@goffi.org>
parents:
697
diff
changeset
|
488 extra = {} |
589
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
489 mess_data = { # we put data in a dict, so trigger methods can change them |
602 | 490 "to": to_jid, |
1052
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
491 "from": client.jid, |
589
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
492 "message": msg, |
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
493 "subject": subject, |
636
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
627
diff
changeset
|
494 "type": mess_type, |
698
d731ae066158
core: sendMessage's options parameter has been renamed to extra to be consistent with newMessage
Goffi <goffi@goffi.org>
parents:
697
diff
changeset
|
495 "extra": extra, |
589
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
496 } |
922
c897c8d321b3
core: sendMessageTrigger now manage pre and post treatments, which happen before or after XML generation
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
497 pre_xml_treatments = defer.Deferred() # XXX: plugin can add their pre XML treatments to this deferred |
c897c8d321b3
core: sendMessageTrigger now manage pre and post treatments, which happen before or after XML generation
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
498 post_xml_treatments = defer.Deferred() # XXX: plugin can add their post XML treatments to this deferred |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
579
diff
changeset
|
499 |
489 | 500 if mess_data["type"] == "auto": |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
579
diff
changeset
|
501 # we try to guess the type |
489 | 502 if mess_data["subject"]: |
503 mess_data["type"] = 'normal' | |
589
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
504 elif not mess_data["to"].resource: # if to JID has a resource, the type is not 'groupchat' |
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
505 # we may have a groupchat message, we check if the we know this jid |
489 | 506 try: |
507 entity_type = self.memory.getEntityData(mess_data["to"], ['type'], profile)["type"] | |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1262
diff
changeset
|
508 #FIXME: should entity_type manage resources ? |
627
d207c2186519
core, bridge, jp, quick_frontend: SàT stop more gracefully if bridge can't be initialised:
Goffi <goffi@goffi.org>
parents:
609
diff
changeset
|
509 except (exceptions.UnknownEntityError, KeyError): |
489 | 510 entity_type = "contact" |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
579
diff
changeset
|
511 |
489 | 512 if entity_type == "chatroom": |
513 mess_data["type"] = 'groupchat' | |
514 else: | |
515 mess_data["type"] = 'chat' | |
516 else: | |
517 mess_data["type"] == 'chat' | |
518 mess_data["type"] == "chat" if mess_data["subject"] else "normal" | |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
579
diff
changeset
|
519 |
1148
8cdb97e89d9b
core: sendMessage handles the extra data key 'send_only' to skip triggers, storage and echo
souliane <souliane@mailoo.org>
parents:
1145
diff
changeset
|
520 send_only = mess_data['extra'].get('send_only', None) |
8cdb97e89d9b
core: sendMessage handles the extra data key 'send_only' to skip triggers, storage and echo
souliane <souliane@mailoo.org>
parents:
1145
diff
changeset
|
521 |
8cdb97e89d9b
core: sendMessage handles the extra data key 'send_only' to skip triggers, storage and echo
souliane <souliane@mailoo.org>
parents:
1145
diff
changeset
|
522 if not no_trigger and not send_only: |
922
c897c8d321b3
core: sendMessageTrigger now manage pre and post treatments, which happen before or after XML generation
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
523 if not self.trigger.point("sendMessage", mess_data, pre_xml_treatments, post_xml_treatments, profile): |
752
f49945d728de
core,bridge: sendMessage bridge method is now async
Goffi <goffi@goffi.org>
parents:
748
diff
changeset
|
524 return defer.succeed(None) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
579
diff
changeset
|
525 |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1262
diff
changeset
|
526 log.debug(_(u"Sending message (type {type}, to {to})").format(type=mess_data["type"], to=to_jid.full())) |
922
c897c8d321b3
core: sendMessageTrigger now manage pre and post treatments, which happen before or after XML generation
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
527 |
1052
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
528 def cancelErrorTrap(failure): |
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
529 """A message sending can be cancelled by a plugin treatment""" |
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
530 failure.trap(exceptions.CancelError) |
697
0c84fb112d70
core: sendMessage triggers now use a treatments deferred;
Goffi <goffi@goffi.org>
parents:
677
diff
changeset
|
531 |
1052
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
532 pre_xml_treatments.addCallback(lambda dummy: self.generateMessageXML(mess_data)) |
922
c897c8d321b3
core: sendMessageTrigger now manage pre and post treatments, which happen before or after XML generation
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
533 pre_xml_treatments.chainDeferred(post_xml_treatments) |
1052
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
534 post_xml_treatments.addCallback(self._sendMessageToStream, client) |
1148
8cdb97e89d9b
core: sendMessage handles the extra data key 'send_only' to skip triggers, storage and echo
souliane <souliane@mailoo.org>
parents:
1145
diff
changeset
|
535 if send_only: |
8cdb97e89d9b
core: sendMessage handles the extra data key 'send_only' to skip triggers, storage and echo
souliane <souliane@mailoo.org>
parents:
1145
diff
changeset
|
536 log.debug(_("Triggers, storage and echo have been inhibited by the 'send_only' parameter")) |
8cdb97e89d9b
core: sendMessage handles the extra data key 'send_only' to skip triggers, storage and echo
souliane <souliane@mailoo.org>
parents:
1145
diff
changeset
|
537 else: |
8cdb97e89d9b
core: sendMessage handles the extra data key 'send_only' to skip triggers, storage and echo
souliane <souliane@mailoo.org>
parents:
1145
diff
changeset
|
538 post_xml_treatments.addCallback(self._storeMessage, client) |
8cdb97e89d9b
core: sendMessage handles the extra data key 'send_only' to skip triggers, storage and echo
souliane <souliane@mailoo.org>
parents:
1145
diff
changeset
|
539 post_xml_treatments.addCallback(self.sendMessageToBridge, client) |
8cdb97e89d9b
core: sendMessage handles the extra data key 'send_only' to skip triggers, storage and echo
souliane <souliane@mailoo.org>
parents:
1145
diff
changeset
|
540 post_xml_treatments.addErrback(cancelErrorTrap) |
922
c897c8d321b3
core: sendMessageTrigger now manage pre and post treatments, which happen before or after XML generation
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
541 pre_xml_treatments.callback(mess_data) |
c897c8d321b3
core: sendMessageTrigger now manage pre and post treatments, which happen before or after XML generation
Goffi <goffi@goffi.org>
parents:
919
diff
changeset
|
542 return pre_xml_treatments |
742
03744d9ebc13
plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
728
diff
changeset
|
543 |
1052
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
544 def _sendMessageToStream(self, mess_data, client): |
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
545 """Actualy send the message to the server |
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
546 |
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
547 @param mess_data: message data dictionnary |
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
548 @param client: profile's client |
742
03744d9ebc13
plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
728
diff
changeset
|
549 """ |
1052
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
550 client.xmlstream.send(mess_data['xml']) |
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
551 return mess_data |
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
552 |
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
553 def _storeMessage(self, mess_data, client): |
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
554 """Store message into database (for local history) |
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
555 |
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
556 @param mess_data: message data dictionnary |
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
557 @param client: profile's client |
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
558 """ |
742
03744d9ebc13
plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
728
diff
changeset
|
559 if mess_data["type"] != "groupchat": |
03744d9ebc13
plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
728
diff
changeset
|
560 # we don't add groupchat message to history, as we get them back |
03744d9ebc13
plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
728
diff
changeset
|
561 # and they will be added then |
03744d9ebc13
plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
728
diff
changeset
|
562 if mess_data['message']: # we need a message to save something |
1052
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
563 self.memory.addToHistory(client.jid, mess_data['to'], |
742
03744d9ebc13
plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
728
diff
changeset
|
564 unicode(mess_data["message"]), |
03744d9ebc13
plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
728
diff
changeset
|
565 unicode(mess_data["type"]), |
03744d9ebc13
plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
728
diff
changeset
|
566 mess_data['extra'], |
1052
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
567 profile=client.profile) |
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
568 else: |
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
569 log.warning(_("No message found")) # empty body should be managed by plugins before this point |
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
570 return mess_data |
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
571 |
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
572 def sendMessageToBridge(self, mess_data, client): |
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
573 """Send message to bridge, so frontends can display it |
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
574 |
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
575 @param mess_data: message data dictionnary |
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
576 @param client: profile's client |
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
577 """ |
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
578 if mess_data["type"] != "groupchat": |
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
579 # we don't send groupchat message back to bridge, as we get them back |
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
580 # and they will be added the |
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
581 if mess_data['message']: # we need a message to save something |
697
0c84fb112d70
core: sendMessage triggers now use a treatments deferred;
Goffi <goffi@goffi.org>
parents:
677
diff
changeset
|
582 # We send back the message, so all clients are aware of it |
1052
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
583 self.bridge.newMessage(mess_data['from'].full(), |
742
03744d9ebc13
plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
728
diff
changeset
|
584 unicode(mess_data["message"]), |
03744d9ebc13
plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
728
diff
changeset
|
585 mess_type=mess_data["type"], |
1052
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
586 to_jid=mess_data['to'].full(), |
742
03744d9ebc13
plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
728
diff
changeset
|
587 extra=mess_data['extra'], |
1052
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
588 profile=client.profile) |
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
589 else: |
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
590 log.warning(_("No message found")) |
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
591 return mess_data |
16
0a024d5e0cd0
New account creation (in-band registration)
Goffi <goffi@goffi.org>
parents:
15
diff
changeset
|
592 |
917
a9401694d2dc
bridge, frontends: display presence with the highest priority + reset your own presence when you (dis)connect
souliane <souliane@mailoo.org>
parents:
916
diff
changeset
|
593 def _setPresence(self, to="", show="", statuses=None, profile_key=C.PROF_KEY_NONE): |
a9401694d2dc
bridge, frontends: display presence with the highest priority + reset your own presence when you (dis)connect
souliane <souliane@mailoo.org>
parents:
916
diff
changeset
|
594 return self.setPresence(jid.JID(to) if to else None, show, statuses, profile_key) |
807
be4c5e24dab9
plugin XEP-0077, plugin XEP-0100, frontends: gateways have been entirely implemented in backend using the new refactored XMLUI and AdvancedListContainer. The now useless code has been removed from frontends.
Goffi <goffi@goffi.org>
parents:
806
diff
changeset
|
595 |
917
a9401694d2dc
bridge, frontends: display presence with the highest priority + reset your own presence when you (dis)connect
souliane <souliane@mailoo.org>
parents:
916
diff
changeset
|
596 def setPresence(self, to_jid=None, show="", statuses=None, profile_key=C.PROF_KEY_NONE): |
0 | 597 """Send our presence information""" |
727
c1cd6c0c2c38
core: fixed statuses parameter in setPresence, and using @NONE@ instead of @DEFAULT@ for default profile_key
Goffi <goffi@goffi.org>
parents:
700
diff
changeset
|
598 if statuses is None: |
c1cd6c0c2c38
core: fixed statuses parameter in setPresence, and using @NONE@ instead of @DEFAULT@ for default profile_key
Goffi <goffi@goffi.org>
parents:
700
diff
changeset
|
599 statuses = {} |
63
0db25931b60d
SàT: multi-profiles: somes fixes in core
Goffi <goffi@goffi.org>
parents:
62
diff
changeset
|
600 profile = self.memory.getProfileName(profile_key) |
1262
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1234
diff
changeset
|
601 assert profile |
917
a9401694d2dc
bridge, frontends: display presence with the highest priority + reset your own presence when you (dis)connect
souliane <souliane@mailoo.org>
parents:
916
diff
changeset
|
602 priority = int(self.memory.getParamA("Priority", "Connection", profile_key=profile)) |
63
0db25931b60d
SàT: multi-profiles: somes fixes in core
Goffi <goffi@goffi.org>
parents:
62
diff
changeset
|
603 self.profiles[profile].presence.available(to_jid, show, statuses, priority) |
313
cc8ffbfe938c
QnD workaround for presence broadcast openfire bug
Goffi <goffi@goffi.org>
parents:
305
diff
changeset
|
604 #XXX: FIXME: temporary fix to work around openfire 3.7.0 bug (presence is not broadcasted to generating resource) |
589
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
605 if '' in statuses: |
313
cc8ffbfe938c
QnD workaround for presence broadcast openfire bug
Goffi <goffi@goffi.org>
parents:
305
diff
changeset
|
606 statuses['default'] = statuses[''] |
cc8ffbfe938c
QnD workaround for presence broadcast openfire bug
Goffi <goffi@goffi.org>
parents:
305
diff
changeset
|
607 del statuses[''] |
589
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
608 self.bridge.presenceUpdate(self.profiles[profile].jid.full(), show, |
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
609 int(priority), statuses, profile) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
579
diff
changeset
|
610 |
346
ca3a041fed30
core: fixed several subscription scheme issues + removed most of profile_key default value in core.sat_main and core.xmmp (source of bugs) + contact update
Goffi <goffi@goffi.org>
parents:
341
diff
changeset
|
611 def subscription(self, subs_type, raw_jid, profile_key): |
187
12544ea2951f
Core: removed addItem for roster list, according to http://wokkel.ik.nu/ticket/56
Goffi <goffi@goffi.org>
parents:
155
diff
changeset
|
612 """Called to manage subscription |
12544ea2951f
Core: removed addItem for roster list, according to http://wokkel.ik.nu/ticket/56
Goffi <goffi@goffi.org>
parents:
155
diff
changeset
|
613 @param subs_type: subsciption type (cf RFC 3921) |
12544ea2951f
Core: removed addItem for roster list, according to http://wokkel.ik.nu/ticket/56
Goffi <goffi@goffi.org>
parents:
155
diff
changeset
|
614 @param raw_jid: unicode entity's jid |
12544ea2951f
Core: removed addItem for roster list, according to http://wokkel.ik.nu/ticket/56
Goffi <goffi@goffi.org>
parents:
155
diff
changeset
|
615 @param profile_key: profile""" |
63
0db25931b60d
SàT: multi-profiles: somes fixes in core
Goffi <goffi@goffi.org>
parents:
62
diff
changeset
|
616 profile = self.memory.getProfileName(profile_key) |
1262
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1234
diff
changeset
|
617 assert profile |
50 | 618 to_jid = jid.JID(raw_jid) |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
991
diff
changeset
|
619 log.debug(_('subsciption request [%(subs_type)s] for %(jid)s') % {'subs_type': subs_type, 'jid': to_jid.full()}) |
589
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
620 if subs_type == "subscribe": |
63
0db25931b60d
SàT: multi-profiles: somes fixes in core
Goffi <goffi@goffi.org>
parents:
62
diff
changeset
|
621 self.profiles[profile].presence.subscribe(to_jid) |
589
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
622 elif subs_type == "subscribed": |
89
23caf1051099
multi-profile/subscription misc fixes
Goffi <goffi@goffi.org>
parents:
79
diff
changeset
|
623 self.profiles[profile].presence.subscribed(to_jid) |
589
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
624 elif subs_type == "unsubscribe": |
63
0db25931b60d
SàT: multi-profiles: somes fixes in core
Goffi <goffi@goffi.org>
parents:
62
diff
changeset
|
625 self.profiles[profile].presence.unsubscribe(to_jid) |
589
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
626 elif subs_type == "unsubscribed": |
63
0db25931b60d
SàT: multi-profiles: somes fixes in core
Goffi <goffi@goffi.org>
parents:
62
diff
changeset
|
627 self.profiles[profile].presence.unsubscribed(to_jid) |
0 | 628 |
807
be4c5e24dab9
plugin XEP-0077, plugin XEP-0100, frontends: gateways have been entirely implemented in backend using the new refactored XMLUI and AdvancedListContainer. The now useless code has been removed from frontends.
Goffi <goffi@goffi.org>
parents:
806
diff
changeset
|
629 def _addContact(self, to_jid_s, profile_key): |
846
59d486726577
core: fix mispelled argument
souliane <souliane@mailoo.org>
parents:
834
diff
changeset
|
630 return self.addContact(jid.JID(to_jid_s), profile_key) |
807
be4c5e24dab9
plugin XEP-0077, plugin XEP-0100, frontends: gateways have been entirely implemented in backend using the new refactored XMLUI and AdvancedListContainer. The now useless code has been removed from frontends.
Goffi <goffi@goffi.org>
parents:
806
diff
changeset
|
631 |
be4c5e24dab9
plugin XEP-0077, plugin XEP-0100, frontends: gateways have been entirely implemented in backend using the new refactored XMLUI and AdvancedListContainer. The now useless code has been removed from frontends.
Goffi <goffi@goffi.org>
parents:
806
diff
changeset
|
632 def addContact(self, to_jid, profile_key): |
0 | 633 """Add a contact in roster list""" |
63
0db25931b60d
SàT: multi-profiles: somes fixes in core
Goffi <goffi@goffi.org>
parents:
62
diff
changeset
|
634 profile = self.memory.getProfileName(profile_key) |
1262
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1234
diff
changeset
|
635 assert profile |
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1234
diff
changeset
|
636 # presence is sufficient, as a roster push will be sent according to RFC 6121 §3.1.2 |
63
0db25931b60d
SàT: multi-profiles: somes fixes in core
Goffi <goffi@goffi.org>
parents:
62
diff
changeset
|
637 self.profiles[profile].presence.subscribe(to_jid) |
0 | 638 |
807
be4c5e24dab9
plugin XEP-0077, plugin XEP-0100, frontends: gateways have been entirely implemented in backend using the new refactored XMLUI and AdvancedListContainer. The now useless code has been removed from frontends.
Goffi <goffi@goffi.org>
parents:
806
diff
changeset
|
639 def _updateContact(self, to_jid_s, name, groups, profile_key): |
be4c5e24dab9
plugin XEP-0077, plugin XEP-0100, frontends: gateways have been entirely implemented in backend using the new refactored XMLUI and AdvancedListContainer. The now useless code has been removed from frontends.
Goffi <goffi@goffi.org>
parents:
806
diff
changeset
|
640 return self.updateContact(jid.JID(to_jid_s), name, groups, profile_key) |
be4c5e24dab9
plugin XEP-0077, plugin XEP-0100, frontends: gateways have been entirely implemented in backend using the new refactored XMLUI and AdvancedListContainer. The now useless code has been removed from frontends.
Goffi <goffi@goffi.org>
parents:
806
diff
changeset
|
641 |
be4c5e24dab9
plugin XEP-0077, plugin XEP-0100, frontends: gateways have been entirely implemented in backend using the new refactored XMLUI and AdvancedListContainer. The now useless code has been removed from frontends.
Goffi <goffi@goffi.org>
parents:
806
diff
changeset
|
642 def updateContact(self, to_jid, name, groups, profile_key): |
346
ca3a041fed30
core: fixed several subscription scheme issues + removed most of profile_key default value in core.sat_main and core.xmmp (source of bugs) + contact update
Goffi <goffi@goffi.org>
parents:
341
diff
changeset
|
643 """update a contact in roster list""" |
ca3a041fed30
core: fixed several subscription scheme issues + removed most of profile_key default value in core.sat_main and core.xmmp (source of bugs) + contact update
Goffi <goffi@goffi.org>
parents:
341
diff
changeset
|
644 profile = self.memory.getProfileName(profile_key) |
1262
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1234
diff
changeset
|
645 assert profile |
346
ca3a041fed30
core: fixed several subscription scheme issues + removed most of profile_key default value in core.sat_main and core.xmmp (source of bugs) + contact update
Goffi <goffi@goffi.org>
parents:
341
diff
changeset
|
646 groups = set(groups) |
ca3a041fed30
core: fixed several subscription scheme issues + removed most of profile_key default value in core.sat_main and core.xmmp (source of bugs) + contact update
Goffi <goffi@goffi.org>
parents:
341
diff
changeset
|
647 roster_item = RosterItem(to_jid) |
ca3a041fed30
core: fixed several subscription scheme issues + removed most of profile_key default value in core.sat_main and core.xmmp (source of bugs) + contact update
Goffi <goffi@goffi.org>
parents:
341
diff
changeset
|
648 roster_item.name = name or None |
ca3a041fed30
core: fixed several subscription scheme issues + removed most of profile_key default value in core.sat_main and core.xmmp (source of bugs) + contact update
Goffi <goffi@goffi.org>
parents:
341
diff
changeset
|
649 roster_item.groups = set(groups) |
1262
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1234
diff
changeset
|
650 return self.profiles[profile].roster.setItem(roster_item) |
346
ca3a041fed30
core: fixed several subscription scheme issues + removed most of profile_key default value in core.sat_main and core.xmmp (source of bugs) + contact update
Goffi <goffi@goffi.org>
parents:
341
diff
changeset
|
651 |
807
be4c5e24dab9
plugin XEP-0077, plugin XEP-0100, frontends: gateways have been entirely implemented in backend using the new refactored XMLUI and AdvancedListContainer. The now useless code has been removed from frontends.
Goffi <goffi@goffi.org>
parents:
806
diff
changeset
|
652 def _delContact(self, to_jid_s, profile_key): |
be4c5e24dab9
plugin XEP-0077, plugin XEP-0100, frontends: gateways have been entirely implemented in backend using the new refactored XMLUI and AdvancedListContainer. The now useless code has been removed from frontends.
Goffi <goffi@goffi.org>
parents:
806
diff
changeset
|
653 return self.delContact(jid.JID(to_jid_s), profile_key) |
be4c5e24dab9
plugin XEP-0077, plugin XEP-0100, frontends: gateways have been entirely implemented in backend using the new refactored XMLUI and AdvancedListContainer. The now useless code has been removed from frontends.
Goffi <goffi@goffi.org>
parents:
806
diff
changeset
|
654 |
be4c5e24dab9
plugin XEP-0077, plugin XEP-0100, frontends: gateways have been entirely implemented in backend using the new refactored XMLUI and AdvancedListContainer. The now useless code has been removed from frontends.
Goffi <goffi@goffi.org>
parents:
806
diff
changeset
|
655 def delContact(self, to_jid, profile_key): |
0 | 656 """Remove contact from roster list""" |
63
0db25931b60d
SàT: multi-profiles: somes fixes in core
Goffi <goffi@goffi.org>
parents:
62
diff
changeset
|
657 profile = self.memory.getProfileName(profile_key) |
1262
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1234
diff
changeset
|
658 assert profile |
1355
33a21f06551d
core: fixes bug introduced by 1262 (f8a8434dbac7) in SAT.delContact
souliane <souliane@mailoo.org>
parents:
1325
diff
changeset
|
659 self.profiles[profile].presence.unsubscribe(to_jid) # is not asynchronous |
33a21f06551d
core: fixes bug introduced by 1262 (f8a8434dbac7) in SAT.delContact
souliane <souliane@mailoo.org>
parents:
1325
diff
changeset
|
660 return self.profiles[profile].roster.removeItem(to_jid) |
742
03744d9ebc13
plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
728
diff
changeset
|
661 |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
943
diff
changeset
|
662 ## Discovery ## |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
943
diff
changeset
|
663 # discovery methods are shortcuts to self.memory.disco |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
943
diff
changeset
|
664 # the main difference with client.disco is that self.memory.disco manage cache |
742
03744d9ebc13
plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
728
diff
changeset
|
665 |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
943
diff
changeset
|
666 def hasFeature(self, *args, **kwargs): |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
943
diff
changeset
|
667 return self.memory.disco.hasFeature(*args, **kwargs) |
742
03744d9ebc13
plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
728
diff
changeset
|
668 |
951
027a054c6dda
core (disco): added checkFeature method + fixed hasFeature test
Goffi <goffi@goffi.org>
parents:
949
diff
changeset
|
669 def checkFeature(self, *args, **kwargs): |
027a054c6dda
core (disco): added checkFeature method + fixed hasFeature test
Goffi <goffi@goffi.org>
parents:
949
diff
changeset
|
670 return self.memory.disco.checkFeature(*args, **kwargs) |
027a054c6dda
core (disco): added checkFeature method + fixed hasFeature test
Goffi <goffi@goffi.org>
parents:
949
diff
changeset
|
671 |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
943
diff
changeset
|
672 def getDiscoInfos(self, *args, **kwargs): |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
943
diff
changeset
|
673 return self.memory.disco.getInfos(*args, **kwargs) |
0 | 674 |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
943
diff
changeset
|
675 def getDiscoItems(self, *args, **kwargs): |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
943
diff
changeset
|
676 return self.memory.disco.getItems(*args, **kwargs) |
0 | 677 |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
943
diff
changeset
|
678 def findServiceEntities(self, *args, **kwargs): |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
943
diff
changeset
|
679 return self.memory.disco.findServiceEntities(*args, **kwargs) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
579
diff
changeset
|
680 |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
943
diff
changeset
|
681 def findFeaturesSet(self, *args, **kwargs): |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
943
diff
changeset
|
682 return self.memory.disco.findFeaturesSet(*args, **kwargs) |
397
ccfd69d090c3
core: workaround to avoid a bug in item detection on jabber.fr. Need more investigation with jabber.fr admins (may be a bug in ejabberd)
Goffi <goffi@goffi.org>
parents:
391
diff
changeset
|
683 |
742
03744d9ebc13
plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
728
diff
changeset
|
684 |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
579
diff
changeset
|
685 ## Generic HMI ## |
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
579
diff
changeset
|
686 |
538
2c4016921403
core, frontends, bridgen plugins: fixed methods which were unproperly managing multi-profiles
Goffi <goffi@goffi.org>
parents:
536
diff
changeset
|
687 def actionResult(self, action_id, action_type, data, profile): |
22
bb72c29f3432
added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents:
18
diff
changeset
|
688 """Send the result of an action |
538
2c4016921403
core, frontends, bridgen plugins: fixed methods which were unproperly managing multi-profiles
Goffi <goffi@goffi.org>
parents:
536
diff
changeset
|
689 @param action_id: same action_id used with action |
2c4016921403
core, frontends, bridgen plugins: fixed methods which were unproperly managing multi-profiles
Goffi <goffi@goffi.org>
parents:
536
diff
changeset
|
690 @param action_type: result action_type ("PARAM", "SUCCESS", "ERROR", "XMLUI") |
37
a61beb21d16d
Gateway registration, unregistration & edition
Goffi <goffi@goffi.org>
parents:
36
diff
changeset
|
691 @param data: dictionary |
22
bb72c29f3432
added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents:
18
diff
changeset
|
692 """ |
538
2c4016921403
core, frontends, bridgen plugins: fixed methods which were unproperly managing multi-profiles
Goffi <goffi@goffi.org>
parents:
536
diff
changeset
|
693 self.bridge.actionResult(action_type, action_id, data, profile) |
22
bb72c29f3432
added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents:
18
diff
changeset
|
694 |
538
2c4016921403
core, frontends, bridgen plugins: fixed methods which were unproperly managing multi-profiles
Goffi <goffi@goffi.org>
parents:
536
diff
changeset
|
695 def actionResultExt(self, action_id, action_type, data, profile): |
25
53e921c8a357
new plugin: gateways plugin, and first implementation of findGateways
Goffi <goffi@goffi.org>
parents:
23
diff
changeset
|
696 """Send the result of an action, extended version |
538
2c4016921403
core, frontends, bridgen plugins: fixed methods which were unproperly managing multi-profiles
Goffi <goffi@goffi.org>
parents:
536
diff
changeset
|
697 @param action_id: same action_id used with action |
2c4016921403
core, frontends, bridgen plugins: fixed methods which were unproperly managing multi-profiles
Goffi <goffi@goffi.org>
parents:
536
diff
changeset
|
698 @param action_type: result action_type /!\ only "DICT_DICT" for this method |
37
a61beb21d16d
Gateway registration, unregistration & edition
Goffi <goffi@goffi.org>
parents:
36
diff
changeset
|
699 @param data: dictionary of dictionaries |
25
53e921c8a357
new plugin: gateways plugin, and first implementation of findGateways
Goffi <goffi@goffi.org>
parents:
23
diff
changeset
|
700 """ |
538
2c4016921403
core, frontends, bridgen plugins: fixed methods which were unproperly managing multi-profiles
Goffi <goffi@goffi.org>
parents:
536
diff
changeset
|
701 if action_type != "DICT_DICT": |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
991
diff
changeset
|
702 log.error(_("action_type for actionResultExt must be DICT_DICT, fixing it")) |
538
2c4016921403
core, frontends, bridgen plugins: fixed methods which were unproperly managing multi-profiles
Goffi <goffi@goffi.org>
parents:
536
diff
changeset
|
703 action_type = "DICT_DICT" |
2c4016921403
core, frontends, bridgen plugins: fixed methods which were unproperly managing multi-profiles
Goffi <goffi@goffi.org>
parents:
536
diff
changeset
|
704 self.bridge.actionResultExt(action_type, action_id, data, profile) |
25
53e921c8a357
new plugin: gateways plugin, and first implementation of findGateways
Goffi <goffi@goffi.org>
parents:
23
diff
changeset
|
705 |
538
2c4016921403
core, frontends, bridgen plugins: fixed methods which were unproperly managing multi-profiles
Goffi <goffi@goffi.org>
parents:
536
diff
changeset
|
706 def askConfirmation(self, conf_id, conf_type, data, cb, profile): |
22
bb72c29f3432
added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents:
18
diff
changeset
|
707 """Add a confirmation callback |
538
2c4016921403
core, frontends, bridgen plugins: fixed methods which were unproperly managing multi-profiles
Goffi <goffi@goffi.org>
parents:
536
diff
changeset
|
708 @param conf_id: conf_id used to get answer |
2c4016921403
core, frontends, bridgen plugins: fixed methods which were unproperly managing multi-profiles
Goffi <goffi@goffi.org>
parents:
536
diff
changeset
|
709 @param conf_type: confirmation conf_type ("YES/NO", "FILE_TRANSFER") |
2c4016921403
core, frontends, bridgen plugins: fixed methods which were unproperly managing multi-profiles
Goffi <goffi@goffi.org>
parents:
536
diff
changeset
|
710 @param data: data (depend of confirmation conf_type) |
37
a61beb21d16d
Gateway registration, unregistration & edition
Goffi <goffi@goffi.org>
parents:
36
diff
changeset
|
711 @param cb: callback called with the answer |
22
bb72c29f3432
added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents:
18
diff
changeset
|
712 """ |
759
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
713 # FIXME: use XMLUI and *callback methods for dialog |
538
2c4016921403
core, frontends, bridgen plugins: fixed methods which were unproperly managing multi-profiles
Goffi <goffi@goffi.org>
parents:
536
diff
changeset
|
714 client = self.getClient(profile) |
589
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
715 if conf_id in client._waiting_conf: |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
991
diff
changeset
|
716 log.error(_("Attempt to register two callbacks for the same confirmation")) |
0 | 717 else: |
541
8b116fa42a31
core, bridge: waiting confirmation management (new getWaitingConf method)
Goffi <goffi@goffi.org>
parents:
538
diff
changeset
|
718 client._waiting_conf[conf_id] = (conf_type, data, cb) |
8b116fa42a31
core, bridge: waiting confirmation management (new getWaitingConf method)
Goffi <goffi@goffi.org>
parents:
538
diff
changeset
|
719 self.bridge.askConfirmation(conf_id, conf_type, data, profile) |
0 | 720 |
538
2c4016921403
core, frontends, bridgen plugins: fixed methods which were unproperly managing multi-profiles
Goffi <goffi@goffi.org>
parents:
536
diff
changeset
|
721 def confirmationAnswer(self, conf_id, accepted, data, profile): |
0 | 722 """Called by frontends to answer confirmation requests""" |
538
2c4016921403
core, frontends, bridgen plugins: fixed methods which were unproperly managing multi-profiles
Goffi <goffi@goffi.org>
parents:
536
diff
changeset
|
723 client = self.getClient(profile) |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
991
diff
changeset
|
724 log.debug(_("Received confirmation answer for conf_id [%(conf_id)s]: %(success)s") % {'conf_id': conf_id, 'success': _("accepted") if accepted else _("refused")}) |
589
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
725 if conf_id not in client._waiting_conf: |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
991
diff
changeset
|
726 log.error(_("Received an unknown confirmation (%(id)s for %(profile)s)") % {'id': conf_id, 'profile': profile}) |
0 | 727 else: |
541
8b116fa42a31
core, bridge: waiting confirmation management (new getWaitingConf method)
Goffi <goffi@goffi.org>
parents:
538
diff
changeset
|
728 cb = client._waiting_conf[conf_id][-1] |
538
2c4016921403
core, frontends, bridgen plugins: fixed methods which were unproperly managing multi-profiles
Goffi <goffi@goffi.org>
parents:
536
diff
changeset
|
729 del client._waiting_conf[conf_id] |
2c4016921403
core, frontends, bridgen plugins: fixed methods which were unproperly managing multi-profiles
Goffi <goffi@goffi.org>
parents:
536
diff
changeset
|
730 cb(conf_id, accepted, data, profile) |
0 | 731 |
538
2c4016921403
core, frontends, bridgen plugins: fixed methods which were unproperly managing multi-profiles
Goffi <goffi@goffi.org>
parents:
536
diff
changeset
|
732 def registerProgressCB(self, progress_id, CB, profile): |
0 | 733 """Register a callback called when progress is requested for id""" |
538
2c4016921403
core, frontends, bridgen plugins: fixed methods which were unproperly managing multi-profiles
Goffi <goffi@goffi.org>
parents:
536
diff
changeset
|
734 client = self.getClient(profile) |
2c4016921403
core, frontends, bridgen plugins: fixed methods which were unproperly managing multi-profiles
Goffi <goffi@goffi.org>
parents:
536
diff
changeset
|
735 client._progress_cb_map[progress_id] = CB |
0 | 736 |
538
2c4016921403
core, frontends, bridgen plugins: fixed methods which were unproperly managing multi-profiles
Goffi <goffi@goffi.org>
parents:
536
diff
changeset
|
737 def removeProgressCB(self, progress_id, profile): |
0 | 738 """Remove a progress callback""" |
538
2c4016921403
core, frontends, bridgen plugins: fixed methods which were unproperly managing multi-profiles
Goffi <goffi@goffi.org>
parents:
536
diff
changeset
|
739 client = self.getClient(profile) |
589
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
740 if progress_id not in client._progress_cb_map: |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
991
diff
changeset
|
741 log.error(_("Trying to remove an unknow progress callback")) |
0 | 742 else: |
538
2c4016921403
core, frontends, bridgen plugins: fixed methods which were unproperly managing multi-profiles
Goffi <goffi@goffi.org>
parents:
536
diff
changeset
|
743 del client._progress_cb_map[progress_id] |
0 | 744 |
538
2c4016921403
core, frontends, bridgen plugins: fixed methods which were unproperly managing multi-profiles
Goffi <goffi@goffi.org>
parents:
536
diff
changeset
|
745 def getProgress(self, progress_id, profile): |
0 | 746 """Return a dict with progress information |
747 data['position'] : current possition | |
748 data['size'] : end_position | |
749 """ | |
538
2c4016921403
core, frontends, bridgen plugins: fixed methods which were unproperly managing multi-profiles
Goffi <goffi@goffi.org>
parents:
536
diff
changeset
|
750 client = self.getClient(profile) |
0 | 751 data = {} |
752 try: | |
538
2c4016921403
core, frontends, bridgen plugins: fixed methods which were unproperly managing multi-profiles
Goffi <goffi@goffi.org>
parents:
536
diff
changeset
|
753 client._progress_cb_map[progress_id](progress_id, data, profile) |
0 | 754 except KeyError: |
755 pass | |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
991
diff
changeset
|
756 #log.debug("Requested progress for unknown progress_id") |
0 | 757 return data |
758 | |
759
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
759 def registerCallback(self, callback, *args, **kwargs): |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
760 """ Register a callback. |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
761 Use with_data=True in kwargs if the callback use the optional data dict |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
762 use force_id=id to avoid generated id. Can lead to name conflict, avoid if possible |
806
5d6c45d6ee1b
core: added "one_shot" option to registered callback:
Goffi <goffi@goffi.org>
parents:
801
diff
changeset
|
763 use one_shot=True to delete callback once it have been called |
759
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
764 @param callback: any callable |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
765 @return: id of the registered callback |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
766 """ |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
767 callback_id = kwargs.pop('force_id', None) |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
768 if callback_id is None: |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
769 callback_id = str(uuid4()) |
22
bb72c29f3432
added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents:
18
diff
changeset
|
770 else: |
759
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
771 if callback_id in self._cb_map: |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
772 raise exceptions.ConflictError(_(u"id already registered")) |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
773 self._cb_map[callback_id] = (callback, args, kwargs) |
806
5d6c45d6ee1b
core: added "one_shot" option to registered callback:
Goffi <goffi@goffi.org>
parents:
801
diff
changeset
|
774 |
5d6c45d6ee1b
core: added "one_shot" option to registered callback:
Goffi <goffi@goffi.org>
parents:
801
diff
changeset
|
775 if "one_shot" in kwargs: # One Shot callback are removed after 30 min |
5d6c45d6ee1b
core: added "one_shot" option to registered callback:
Goffi <goffi@goffi.org>
parents:
801
diff
changeset
|
776 def purgeCallback(): |
5d6c45d6ee1b
core: added "one_shot" option to registered callback:
Goffi <goffi@goffi.org>
parents:
801
diff
changeset
|
777 try: |
5d6c45d6ee1b
core: added "one_shot" option to registered callback:
Goffi <goffi@goffi.org>
parents:
801
diff
changeset
|
778 self.removeCallback(callback_id) |
5d6c45d6ee1b
core: added "one_shot" option to registered callback:
Goffi <goffi@goffi.org>
parents:
801
diff
changeset
|
779 except KeyError: |
5d6c45d6ee1b
core: added "one_shot" option to registered callback:
Goffi <goffi@goffi.org>
parents:
801
diff
changeset
|
780 pass |
5d6c45d6ee1b
core: added "one_shot" option to registered callback:
Goffi <goffi@goffi.org>
parents:
801
diff
changeset
|
781 reactor.callLater(1800, purgeCallback) |
5d6c45d6ee1b
core: added "one_shot" option to registered callback:
Goffi <goffi@goffi.org>
parents:
801
diff
changeset
|
782 |
759
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
783 return callback_id |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
784 |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
785 def removeCallback(self, callback_id): |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
786 """ Remove a previously registered callback |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
787 @param callback_id: id returned by [registerCallback] """ |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
991
diff
changeset
|
788 log.debug("Removing callback [%s]" % callback_id) |
759
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
789 del self._cb_map[callback_id] |
22
bb72c29f3432
added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents:
18
diff
changeset
|
790 |
916
1a759096ccbd
core: use of Const for profile_key + replaced '@DEFAULT@' default profile_key by '@NONE@'
Goffi <goffi@goffi.org>
parents:
914
diff
changeset
|
791 def launchCallback(self, callback_id, data=None, profile_key=C.PROF_KEY_NONE): |
759
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
792 """Launch a specific callback |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
793 @param callback_id: id of the action (callback) to launch |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
794 @param data: optional data |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
795 @profile_key: %(doc_profile_key)s |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
796 @return: a deferred which fire a dict where key can be: |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
797 - xmlui: a XMLUI need to be displayed |
1262
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1234
diff
changeset
|
798 - validated: if present, can be used to launch a callback, it can have the values |
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1234
diff
changeset
|
799 - C.BOOL_TRUE |
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1234
diff
changeset
|
800 - C.BOOL_FALSE |
759
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
801 """ |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
802 profile = self.memory.getProfileName(profile_key) |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
803 if not profile: |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
804 raise exceptions.ProfileUnknownError(_('trying to launch action with a non-existant profile')) |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
805 |
22
bb72c29f3432
added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents:
18
diff
changeset
|
806 try: |
759
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
807 callback, args, kwargs = self._cb_map[callback_id] |
22
bb72c29f3432
added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents:
18
diff
changeset
|
808 except KeyError: |
759
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
809 raise exceptions.DataError("Unknown callback id") |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
810 |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
811 if kwargs.get("with_data", False): |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
812 if data is None: |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
813 raise exceptions.DataError("Required data for this callback is missing") |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
814 args,kwargs=list(args)[:],kwargs.copy() # we don't want to modify the original (kw)args |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
815 args.insert(0, data) |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
816 kwargs["profile"] = profile |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
817 del kwargs["with_data"] |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
818 |
806
5d6c45d6ee1b
core: added "one_shot" option to registered callback:
Goffi <goffi@goffi.org>
parents:
801
diff
changeset
|
819 if kwargs.pop('one_shot', False): |
5d6c45d6ee1b
core: added "one_shot" option to registered callback:
Goffi <goffi@goffi.org>
parents:
801
diff
changeset
|
820 self.removeCallback(callback_id) |
5d6c45d6ee1b
core: added "one_shot" option to registered callback:
Goffi <goffi@goffi.org>
parents:
801
diff
changeset
|
821 |
759
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
822 return defer.maybeDeferred(callback, *args, **kwargs) |
0 | 823 |
101 | 824 #Menus management |
825 | |
1092
0eefc74c346b
core (menus): constants are used for menu types
Goffi <goffi@goffi.org>
parents:
1089
diff
changeset
|
826 def importMenu(self, path, callback, security_limit=C.NO_SECURITY_LIMIT, help_string="", type_=C.MENU_GLOBAL): |
101 | 827 """register a new menu for frontends |
773 | 828 @param path: path to go to the menu (category/subcategory/.../item), must be an iterable (e.g.: ("File", "Open")) |
829 /!\ use D_() instead of _() for translations (e.g. (D_("File"), D_("Open"))) | |
830 @param callback: method to be called when menuitem is selected, callable or a callback id (string) as returned by [registerCallback] | |
831 @param security_limit: %(doc_security_limit)s | |
809 | 832 /!\ security_limit MUST be added to data in launchCallback if used #TODO |
773 | 833 @param help_string: string used to indicate what the menu do (can be show as a tooltip). |
834 /!\ use D_() instead of _() for translations | |
835 @param type: one of: | |
1092
0eefc74c346b
core (menus): constants are used for menu types
Goffi <goffi@goffi.org>
parents:
1089
diff
changeset
|
836 - C.MENU_GLOBAL: classical menu, can be shown in a menubar on top (e.g. something like File/Open) |
0eefc74c346b
core (menus): constants are used for menu types
Goffi <goffi@goffi.org>
parents:
1089
diff
changeset
|
837 - C.MENU_ROOM: like a global menu, but only shown in multi-user chat |
0eefc74c346b
core (menus): constants are used for menu types
Goffi <goffi@goffi.org>
parents:
1089
diff
changeset
|
838 menu_data must contain a "room_jid" data |
0eefc74c346b
core (menus): constants are used for menu types
Goffi <goffi@goffi.org>
parents:
1089
diff
changeset
|
839 - C.MENU_SINGLE: like a global menu, but only shown in one2one chat |
0eefc74c346b
core (menus): constants are used for menu types
Goffi <goffi@goffi.org>
parents:
1089
diff
changeset
|
840 menu_data must contain a "jid" data |
0eefc74c346b
core (menus): constants are used for menu types
Goffi <goffi@goffi.org>
parents:
1089
diff
changeset
|
841 - C.MENU_JID_CONTEXT: contextual menu, used with any jid (e.g.: ad hoc commands, jid is already filled) |
0eefc74c346b
core (menus): constants are used for menu types
Goffi <goffi@goffi.org>
parents:
1089
diff
changeset
|
842 menu_data must contain a "jid" data |
0eefc74c346b
core (menus): constants are used for menu types
Goffi <goffi@goffi.org>
parents:
1089
diff
changeset
|
843 - C.MENU_ROSTER_JID_CONTEXT: like JID_CONTEXT, but restricted to jids in roster. |
0eefc74c346b
core (menus): constants are used for menu types
Goffi <goffi@goffi.org>
parents:
1089
diff
changeset
|
844 menu_data must contain a "room_jid" data |
0eefc74c346b
core (menus): constants are used for menu types
Goffi <goffi@goffi.org>
parents:
1089
diff
changeset
|
845 - C.MENU_ROSTER_GROUP_CONTEXT: contextual menu, used with group (e.g.: publish microblog, group is already filled) |
0eefc74c346b
core (menus): constants are used for menu types
Goffi <goffi@goffi.org>
parents:
1089
diff
changeset
|
846 menu_data must contain a "group" data |
773 | 847 @return: menu_id (same as callback_id) |
755
e3ad48a2aab2
core, frontends: callMenu is now async and don't use callback_id anymore
Goffi <goffi@goffi.org>
parents:
752
diff
changeset
|
848 """ |
773 | 849 |
850 if callable(callback): | |
851 callback_id = self.registerCallback(callback, with_data=True) | |
852 elif isinstance(callback, basestring): | |
853 # The callback is already registered | |
854 callback_id = callback | |
855 try: | |
856 callback, args, kwargs = self._cb_map[callback_id] | |
857 except KeyError: | |
858 raise exceptions.DataError("Unknown callback id") | |
859 kwargs["with_data"] = True # we have to be sure that we use extra data | |
860 else: | |
861 raise exceptions.DataError("Unknown callback type") | |
862 | |
863 for menu_data in self._menus.itervalues(): | |
864 if menu_data['path'] == path and menu_data['type'] == type_: | |
865 raise exceptions.ConflictError(_("A menu with the same path and type already exists")) | |
866 | |
867 menu_data = {'path': path, | |
868 'security_limit': security_limit, | |
869 'help_string': help_string, | |
870 'type': type_ | |
871 } | |
872 | |
873 self._menus[callback_id] = menu_data | |
874 | |
875 return callback_id | |
101 | 876 |
914
1a3ba959f0ab
core (memory): moved Params in its own module + introduced a new core/constants module, and moved some constants there
Goffi <goffi@goffi.org>
parents:
909
diff
changeset
|
877 def getMenus(self, language='', security_limit=C.NO_SECURITY_LIMIT): |
773 | 878 """Return all menus registered |
1365
ba87b940f07a
core, quick_frontends: added an "extra" item in getMenus + use of new quick_menus module in QuickApp
Goffi <goffi@goffi.org>
parents:
1355
diff
changeset
|
879 |
773 | 880 @param language: language used for translation, or empty string for default |
881 @param security_limit: %(doc_security_limit)s | |
882 @return: array of tuple with: | |
883 - menu id (same as callback_id) | |
884 - menu type | |
885 - raw menu path (array of strings) | |
886 - translated menu path | |
1365
ba87b940f07a
core, quick_frontends: added an "extra" item in getMenus + use of new quick_menus module in QuickApp
Goffi <goffi@goffi.org>
parents:
1355
diff
changeset
|
887 - extra (dict(unicode, unicode)): extra data where key can be: |
ba87b940f07a
core, quick_frontends: added an "extra" item in getMenus + use of new quick_menus module in QuickApp
Goffi <goffi@goffi.org>
parents:
1355
diff
changeset
|
888 - icon: name of the icon to use (TODO) |
ba87b940f07a
core, quick_frontends: added an "extra" item in getMenus + use of new quick_menus module in QuickApp
Goffi <goffi@goffi.org>
parents:
1355
diff
changeset
|
889 - help_url: link to a page with more complete documentation (TODO) |
773 | 890 """ |
891 ret = [] | |
892 for menu_id, menu_data in self._menus.iteritems(): | |
893 type_ = menu_data['type'] | |
894 path = menu_data['path'] | |
809 | 895 menu_security_limit = menu_data['security_limit'] |
914
1a3ba959f0ab
core (memory): moved Params in its own module + introduced a new core/constants module, and moved some constants there
Goffi <goffi@goffi.org>
parents:
909
diff
changeset
|
896 if security_limit!=C.NO_SECURITY_LIMIT and (menu_security_limit==C.NO_SECURITY_LIMIT or menu_security_limit>security_limit): |
809 | 897 continue |
773 | 898 languageSwitch(language) |
899 path_i18n = [_(elt) for elt in path] | |
900 languageSwitch() | |
1365
ba87b940f07a
core, quick_frontends: added an "extra" item in getMenus + use of new quick_menus module in QuickApp
Goffi <goffi@goffi.org>
parents:
1355
diff
changeset
|
901 extra = {} # TODO: manage extra data like icon |
ba87b940f07a
core, quick_frontends: added an "extra" item in getMenus + use of new quick_menus module in QuickApp
Goffi <goffi@goffi.org>
parents:
1355
diff
changeset
|
902 ret.append((menu_id, type_, path, path_i18n, extra)) |
773 | 903 |
904 return ret | |
905 | |
906 def getMenuHelp(self, menu_id, language=''): | |
907 """ | |
908 return the help string of the menu | |
909 @param menu_id: id of the menu (same as callback_id) | |
910 @param language: language used for translation, or empty string for default | |
911 @param return: translated help | |
912 | |
913 """ | |
101 | 914 try: |
773 | 915 menu_data = self._menus[menu_id] |
101 | 916 except KeyError: |
755
e3ad48a2aab2
core, frontends: callMenu is now async and don't use callback_id anymore
Goffi <goffi@goffi.org>
parents:
752
diff
changeset
|
917 raise exceptions.DataError("Trying to access an unknown menu") |
773 | 918 languageSwitch(language) |
919 help_string = _(menu_data['help_string']) | |
920 languageSwitch() | |
921 return help_string |