Mercurial > libervia-backend
annotate sat/core/sat_main.py @ 3162:b5c058c7692e
core (xmpp), plugin android: fixed DNS, SRV handling on Android:
Android doesn't have a "/etc/resolv.conf" that Twisted expect. As a result, SRV records
can't be checked correctly on connection.
To work around that, DNS servers used on Android are checked when necessary (on Android
plugin startup and on connectivity change), using some hacks, and Twisted is patched to
use them.
author | Goffi <goffi@goffi.org> |
---|---|
date | Sun, 09 Feb 2020 23:56:42 +0100 |
parents | 46a6251713d3 |
children | d10b2368684e |
rev | line source |
---|---|
3028 | 1 #!/usr/bin/env python3 |
0 | 2 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
605
diff
changeset
|
3 # SAT: a jabber client |
3136 | 4 # Copyright (C) 2009-2020 Jérôme Poisson (goffi@goffi.org) |
0 | 5 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
605
diff
changeset
|
6 # 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
|
7 # 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
|
8 # 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
|
9 # (at your option) any later version. |
0 | 10 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
605
diff
changeset
|
11 # 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
|
12 # 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
|
13 # 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
|
14 # GNU Affero General Public License for more details. |
0 | 15 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
605
diff
changeset
|
16 # 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
|
17 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
0 | 18 |
2810
c161a294fffd
core: added a base menu allowing to set encryption session or show the trust management UI.
Goffi <goffi@goffi.org>
parents:
2791
diff
changeset
|
19 from glob import glob |
c161a294fffd
core: added a base menu allowing to set encryption session or show the trust management UI.
Goffi <goffi@goffi.org>
parents:
2791
diff
changeset
|
20 import sys |
c161a294fffd
core: added a base menu allowing to set encryption session or show the trust management UI.
Goffi <goffi@goffi.org>
parents:
2791
diff
changeset
|
21 import os.path |
c161a294fffd
core: added a base menu allowing to set encryption session or show the trust management UI.
Goffi <goffi@goffi.org>
parents:
2791
diff
changeset
|
22 import uuid |
1376
28fd9e838f8f
core: getRepositoryData now get the module in argument
Goffi <goffi@goffi.org>
parents:
1375
diff
changeset
|
23 import sat |
3120 | 24 from sat.core.i18n import _, D_, languageSwitch |
2687
e9cd473a2f46
core (xmpp): server certificate validation:
Goffi <goffi@goffi.org>
parents:
2666
diff
changeset
|
25 from sat.core import patches |
e9cd473a2f46
core (xmpp): server certificate validation:
Goffi <goffi@goffi.org>
parents:
2666
diff
changeset
|
26 patches.apply() |
331
0a8eb0461f31
core: main SAT class now moved in its own module core.sat_main
Goffi <goffi@goffi.org>
parents:
330
diff
changeset
|
27 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
|
28 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
|
29 from twisted.words.protocols.jabber import jid |
0 | 30 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
|
31 from wokkel.xmppim import RosterItem |
332 | 32 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
|
33 from sat.core import exceptions |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
991
diff
changeset
|
34 from sat.core.log import getLogger |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
35 |
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
|
36 from sat.core.constants import Const as C |
2509
d485e9416493
core (memory/cache): common cache:
Goffi <goffi@goffi.org>
parents:
2496
diff
changeset
|
37 from sat.memory import memory |
d485e9416493
core (memory/cache): common cache:
Goffi <goffi@goffi.org>
parents:
2496
diff
changeset
|
38 from sat.memory import cache |
2646
712cb4ff3e13
core: new EncryptionHandler class which manage encrypted session as a core feature:
Goffi <goffi@goffi.org>
parents:
2645
diff
changeset
|
39 from sat.memory import encryption |
2645 | 40 from sat.tools import async_trigger as 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
|
41 from sat.tools import utils |
3066
2cc2f65379f7
core: added imageCheck and imageResize methods:
Goffi <goffi@goffi.org>
parents:
3040
diff
changeset
|
42 from sat.tools import images |
2088
c02f96756d5c
core: bridge can now be changed in conf
Goffi <goffi@goffi.org>
parents:
2086
diff
changeset
|
43 from sat.tools.common import dynamic_import |
2496
769e8d9d2438
core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
44 from sat.tools.common import regex |
3066
2cc2f65379f7
core: added imageCheck and imageResize methods:
Goffi <goffi@goffi.org>
parents:
3040
diff
changeset
|
45 from sat.tools.common import data_format |
1032
b262ae6d53af
stdui: add ui_profile_manager to interact with frontends when profile authentication is needed
souliane <souliane@mailoo.org>
parents:
1030
diff
changeset
|
46 from sat.stdui import ui_contact_list, ui_profile_manager |
2105
c96fe007ca41
core(constants): added a constant for profile extension (PLUGIN_EXT):
Goffi <goffi@goffi.org>
parents:
2100
diff
changeset
|
47 import sat.plugins |
0 | 48 |
2691
1ecceac3df96
plugin XEP-0198: Stream Management implementation:
Goffi <goffi@goffi.org>
parents:
2689
diff
changeset
|
49 |
987
3a96920c07b7
core, frontends: unify the roster management UIs in sat/stdui/ui_contact_list.py
souliane <souliane@mailoo.org>
parents:
972
diff
changeset
|
50 try: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
51 from collections import OrderedDict # only available from python 2.7 |
987
3a96920c07b7
core, frontends: unify the roster management UIs in sat/stdui/ui_contact_list.py
souliane <souliane@mailoo.org>
parents:
972
diff
changeset
|
52 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
|
53 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
|
54 |
2810
c161a294fffd
core: added a base menu allowing to set encryption session or show the trust management UI.
Goffi <goffi@goffi.org>
parents:
2791
diff
changeset
|
55 log = getLogger(__name__) |
0 | 56 |
13
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
57 class SAT(service.Service): |
3110
3fcc99b2d6b7
core (sat_main): avoid double init + log version
Goffi <goffi@goffi.org>
parents:
3102
diff
changeset
|
58 def _init(self): |
3fcc99b2d6b7
core (sat_main): avoid double init + log version
Goffi <goffi@goffi.org>
parents:
3102
diff
changeset
|
59 # we don't use __init__ to avoid doule initialisation with twistd |
3fcc99b2d6b7
core (sat_main): avoid double init + log version
Goffi <goffi@goffi.org>
parents:
3102
diff
changeset
|
60 # this _init is called in startService |
3fcc99b2d6b7
core (sat_main): avoid double init + log version
Goffi <goffi@goffi.org>
parents:
3102
diff
changeset
|
61 log.info(f"{C.APP_NAME} {self.full_version}") |
759
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
62 self._cb_map = {} # map from callback_id to callbacks |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
63 self._menus = ( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
64 OrderedDict() |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
65 ) # dynamic menus. key: callback_id, value: menu data (dictionnary) |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
66 self._menus_paths = {} # path to id. key: (menu_type, lower case tuple of path), |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
67 # value: menu id |
1591
0df9c6247474
core: profile session starting and connection are now separated. Moved profile session starting/authentication to memory module
Goffi <goffi@goffi.org>
parents:
1587
diff
changeset
|
68 self.initialised = defer.Deferred() |
62
93cb45a7420f
SàT multi-profile: connection using profiles
Goffi <goffi@goffi.org>
parents:
60
diff
changeset
|
69 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
|
70 self.plugins = {} |
2688
943e78e18882
core (xmpp): added missing disco#info namespace to disco info result.
Goffi <goffi@goffi.org>
parents:
2687
diff
changeset
|
71 # map for short name to whole namespace, |
3088
d1464548055a
plugin file download: meta plugin to handle file download:
Goffi <goffi@goffi.org>
parents:
3066
diff
changeset
|
72 # extended by plugins with registerNamespace |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
73 self.ns_map = { |
3028 | 74 "x-data": xmpp.NS_X_DATA, |
75 "disco#info": xmpp.NS_DISCO_INFO, | |
2688
943e78e18882
core (xmpp): added missing disco#info namespace to disco info result.
Goffi <goffi@goffi.org>
parents:
2687
diff
changeset
|
76 } |
3088
d1464548055a
plugin file download: meta plugin to handle file download:
Goffi <goffi@goffi.org>
parents:
3066
diff
changeset
|
77 |
2509
d485e9416493
core (memory/cache): common cache:
Goffi <goffi@goffi.org>
parents:
2496
diff
changeset
|
78 self.memory = memory.Memory(self) |
3088
d1464548055a
plugin file download: meta plugin to handle file download:
Goffi <goffi@goffi.org>
parents:
3066
diff
changeset
|
79 |
d1464548055a
plugin file download: meta plugin to handle file download:
Goffi <goffi@goffi.org>
parents:
3066
diff
changeset
|
80 # trigger are used to change SàT behaviour |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
81 self.trigger = ( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
82 trigger.TriggerManager() |
3088
d1464548055a
plugin file download: meta plugin to handle file download:
Goffi <goffi@goffi.org>
parents:
3066
diff
changeset
|
83 ) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
579
diff
changeset
|
84 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
85 bridge_name = self.memory.getConfig("", "bridge", "dbus") |
2088
c02f96756d5c
core: bridge can now be changed in conf
Goffi <goffi@goffi.org>
parents:
2086
diff
changeset
|
86 |
c02f96756d5c
core: bridge can now be changed in conf
Goffi <goffi@goffi.org>
parents:
2086
diff
changeset
|
87 bridge_module = dynamic_import.bridge(bridge_name) |
c02f96756d5c
core: bridge can now be changed in conf
Goffi <goffi@goffi.org>
parents:
2086
diff
changeset
|
88 if bridge_module is None: |
3028 | 89 log.error("Can't find bridge module of name {}".format(bridge_name)) |
2088
c02f96756d5c
core: bridge can now be changed in conf
Goffi <goffi@goffi.org>
parents:
2086
diff
changeset
|
90 sys.exit(1) |
3028 | 91 log.info("using {} bridge".format(bridge_name)) |
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
|
92 try: |
2088
c02f96756d5c
core: bridge can now be changed in conf
Goffi <goffi@goffi.org>
parents:
2086
diff
changeset
|
93 self.bridge = bridge_module.Bridge() |
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
|
94 except exceptions.BridgeInitError: |
3028 | 95 log.error("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
|
96 sys.exit(1) |
2086 | 97 self.bridge.register_method("getReady", lambda: self.initialised) |
98 self.bridge.register_method("getVersion", lambda: self.full_version) | |
99 self.bridge.register_method("getFeatures", self.getFeatures) | |
2168
255830fdb80b
core, bridge: renamed getProfileName to profileNameGet according to new conventions
Goffi <goffi@goffi.org>
parents:
2167
diff
changeset
|
100 self.bridge.register_method("profileNameGet", self.memory.getProfileName) |
2146
1bb9bf1b4150
core, frontends: getProfilesList renamed to profilesGetList + behaviour change:
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
101 self.bridge.register_method("profilesListGet", self.memory.getProfilesList) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
102 self.bridge.register_method( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
103 "getEntityData", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
104 lambda jid_, keys, profile: self.memory.getEntityData( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
105 jid.JID(jid_), keys, profile |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
106 ), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
107 ) |
2086 | 108 self.bridge.register_method("getEntitiesData", self.memory._getEntitiesData) |
2144
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
109 self.bridge.register_method("profileCreate", self.memory.createProfile) |
2086 | 110 self.bridge.register_method("asyncDeleteProfile", self.memory.asyncDeleteProfile) |
111 self.bridge.register_method("profileStartSession", self.memory.startSession) | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
112 self.bridge.register_method( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
113 "profileIsSessionStarted", self.memory._isSessionStarted |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
114 ) |
2086 | 115 self.bridge.register_method("profileSetDefault", self.memory.profileSetDefault) |
2142
be96beb7ca14
core, bridge, frontends: renamed asyncConnect to connect, and added options parameters (not used yet)
Goffi <goffi@goffi.org>
parents:
2138
diff
changeset
|
116 self.bridge.register_method("connect", self._connect) |
2086 | 117 self.bridge.register_method("disconnect", self.disconnect) |
118 self.bridge.register_method("getContacts", self.getContacts) | |
119 self.bridge.register_method("getContactsFromGroup", self.getContactsFromGroup) | |
120 self.bridge.register_method("getMainResource", self.memory._getMainResource) | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
121 self.bridge.register_method( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
122 "getPresenceStatuses", self.memory._getPresenceStatuses |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
123 ) |
2086 | 124 self.bridge.register_method("getWaitingSub", self.memory.getWaitingSub) |
125 self.bridge.register_method("messageSend", self._messageSend) | |
2646
712cb4ff3e13
core: new EncryptionHandler class which manage encrypted session as a core feature:
Goffi <goffi@goffi.org>
parents:
2645
diff
changeset
|
126 self.bridge.register_method("messageEncryptionStart", |
712cb4ff3e13
core: new EncryptionHandler class which manage encrypted session as a core feature:
Goffi <goffi@goffi.org>
parents:
2645
diff
changeset
|
127 self._messageEncryptionStart) |
2658
4e130cc9bfc0
core (memore/encryption): new methods and checks:
Goffi <goffi@goffi.org>
parents:
2646
diff
changeset
|
128 self.bridge.register_method("messageEncryptionStop", |
4e130cc9bfc0
core (memore/encryption): new methods and checks:
Goffi <goffi@goffi.org>
parents:
2646
diff
changeset
|
129 self._messageEncryptionStop) |
4e130cc9bfc0
core (memore/encryption): new methods and checks:
Goffi <goffi@goffi.org>
parents:
2646
diff
changeset
|
130 self.bridge.register_method("messageEncryptionGet", |
4e130cc9bfc0
core (memore/encryption): new methods and checks:
Goffi <goffi@goffi.org>
parents:
2646
diff
changeset
|
131 self._messageEncryptionGet) |
2733
e347e32aa07f
core (memory/encryption): new encryptionNamespaceGet and encryptionTrustUIGet methods:
Goffi <goffi@goffi.org>
parents:
2691
diff
changeset
|
132 self.bridge.register_method("encryptionNamespaceGet", |
e347e32aa07f
core (memory/encryption): new encryptionNamespaceGet and encryptionTrustUIGet methods:
Goffi <goffi@goffi.org>
parents:
2691
diff
changeset
|
133 self._encryptionNamespaceGet) |
2658
4e130cc9bfc0
core (memore/encryption): new methods and checks:
Goffi <goffi@goffi.org>
parents:
2646
diff
changeset
|
134 self.bridge.register_method("encryptionPluginsGet", self._encryptionPluginsGet) |
2733
e347e32aa07f
core (memory/encryption): new encryptionNamespaceGet and encryptionTrustUIGet methods:
Goffi <goffi@goffi.org>
parents:
2691
diff
changeset
|
135 self.bridge.register_method("encryptionTrustUIGet", self._encryptionTrustUIGet) |
2086 | 136 self.bridge.register_method("getConfig", self._getConfig) |
137 self.bridge.register_method("setParam", self.setParam) | |
138 self.bridge.register_method("getParamA", self.memory.getStringParamA) | |
139 self.bridge.register_method("asyncGetParamA", self.memory.asyncGetStringParamA) | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
140 self.bridge.register_method( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
141 "asyncGetParamsValuesFromCategory", |
3123
130f9cb6e0ab
core (memory/params): added `extra` argument to filter out params notably in `getParamsUI`:
Goffi <goffi@goffi.org>
parents:
3120
diff
changeset
|
142 self.memory._getParamsValuesFromCategory, |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
143 ) |
3123
130f9cb6e0ab
core (memory/params): added `extra` argument to filter out params notably in `getParamsUI`:
Goffi <goffi@goffi.org>
parents:
3120
diff
changeset
|
144 self.bridge.register_method("getParamsUI", self.memory._getParamsUI) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
145 self.bridge.register_method( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
146 "getParamsCategories", self.memory.getParamsCategories |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
147 ) |
2086 | 148 self.bridge.register_method("paramsRegisterApp", self.memory.paramsRegisterApp) |
149 self.bridge.register_method("historyGet", self.memory._historyGet) | |
150 self.bridge.register_method("setPresence", self._setPresence) | |
151 self.bridge.register_method("subscription", self.subscription) | |
152 self.bridge.register_method("addContact", self._addContact) | |
153 self.bridge.register_method("updateContact", self._updateContact) | |
154 self.bridge.register_method("delContact", self._delContact) | |
2892
82b781c46841
core: added a rosterResync method to bridge:
Goffi <goffi@goffi.org>
parents:
2886
diff
changeset
|
155 self.bridge.register_method("rosterResync", self._rosterResync) |
2086 | 156 self.bridge.register_method("isConnected", self.isConnected) |
157 self.bridge.register_method("launchAction", self.launchCallback) | |
158 self.bridge.register_method("actionsGet", self.actionsGet) | |
159 self.bridge.register_method("progressGet", self._progressGet) | |
160 self.bridge.register_method("progressGetAll", self._progressGetAll) | |
2126 | 161 self.bridge.register_method("menusGet", self.getMenus) |
162 self.bridge.register_method("menuHelpGet", self.getMenuHelp) | |
163 self.bridge.register_method("menuLaunch", self._launchMenu) | |
2086 | 164 self.bridge.register_method("discoInfos", self.memory.disco._discoInfos) |
165 self.bridge.register_method("discoItems", self.memory.disco._discoItems) | |
2534
7da86e1633a5
core: new discoFindFeatures method which return all server services/roster entities implementing a set of features.
Goffi <goffi@goffi.org>
parents:
2525
diff
changeset
|
166 self.bridge.register_method("discoFindByFeatures", self._findByFeatures) |
2086 | 167 self.bridge.register_method("saveParamsTemplate", self.memory.save_xml) |
168 self.bridge.register_method("loadParamsTemplate", self.memory.load_xml) | |
2113
9c861d07b5b6
core: added sessionGetInfos bridge method to retrieve various data on current profile session + client.started keep start time
Goffi <goffi@goffi.org>
parents:
2105
diff
changeset
|
169 self.bridge.register_method("sessionInfosGet", self.getSessionInfos) |
2443
81a45e7886c9
core: added a mechanism to associate short names to namespaces:
Goffi <goffi@goffi.org>
parents:
2431
diff
changeset
|
170 self.bridge.register_method("namespacesGet", self.getNamespaces) |
3066
2cc2f65379f7
core: added imageCheck and imageResize methods:
Goffi <goffi@goffi.org>
parents:
3040
diff
changeset
|
171 self.bridge.register_method("imageCheck", self._imageCheck) |
2cc2f65379f7
core: added imageCheck and imageResize methods:
Goffi <goffi@goffi.org>
parents:
3040
diff
changeset
|
172 self.bridge.register_method("imageResize", self._imageResize) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
579
diff
changeset
|
173 |
3120 | 174 self.memory.initialized.addCallback(lambda __: defer.ensureDeferred(self._postMemoryInit())) |
0 | 175 |
1550 | 176 @property |
177 def version(self): | |
178 """Return the short version of SàT""" | |
179 return C.APP_VERSION | |
180 | |
181 @property | |
182 def full_version(self): | |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
183 """Return the full version of SàT |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
184 |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
185 In developement mode, release name and extra data are returned too |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
186 """ |
1550 | 187 version = self.version |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
188 if version[-1] == "D": |
1550 | 189 # we are in debug version, we add extra data |
190 try: | |
191 return self._version_cache | |
192 except AttributeError: | |
3028 | 193 self._version_cache = "{} « {} » ({})".format( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
194 version, C.APP_RELEASE_NAME, utils.getRepositoryData(sat) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
195 ) |
1550 | 196 return self._version_cache |
197 else: | |
198 return version | |
199 | |
2088
c02f96756d5c
core: bridge can now be changed in conf
Goffi <goffi@goffi.org>
parents:
2086
diff
changeset
|
200 @property |
c02f96756d5c
core: bridge can now be changed in conf
Goffi <goffi@goffi.org>
parents:
2086
diff
changeset
|
201 def bridge_name(self): |
c02f96756d5c
core: bridge can now be changed in conf
Goffi <goffi@goffi.org>
parents:
2086
diff
changeset
|
202 return os.path.splitext(os.path.basename(self.bridge.__file__))[0] |
c02f96756d5c
core: bridge can now be changed in conf
Goffi <goffi@goffi.org>
parents:
2086
diff
changeset
|
203 |
3120 | 204 async def _postMemoryInit(self): |
412 | 205 """Method called after memory initialization is done""" |
2509
d485e9416493
core (memory/cache): common cache:
Goffi <goffi@goffi.org>
parents:
2496
diff
changeset
|
206 self.common_cache = cache.Cache(self, None) |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
991
diff
changeset
|
207 log.info(_("Memory initialised")) |
2262
24f5a4d5f195
core: check uncatched exceptions during plugin import and stdui init, log error and exit if any found
Goffi <goffi@goffi.org>
parents:
2251
diff
changeset
|
208 try: |
24f5a4d5f195
core: check uncatched exceptions during plugin import and stdui init, log error and exit if any found
Goffi <goffi@goffi.org>
parents:
2251
diff
changeset
|
209 self._import_plugins() |
24f5a4d5f195
core: check uncatched exceptions during plugin import and stdui init, log error and exit if any found
Goffi <goffi@goffi.org>
parents:
2251
diff
changeset
|
210 ui_contact_list.ContactList(self) |
24f5a4d5f195
core: check uncatched exceptions during plugin import and stdui init, log error and exit if any found
Goffi <goffi@goffi.org>
parents:
2251
diff
changeset
|
211 ui_profile_manager.ProfileManager(self) |
24f5a4d5f195
core: check uncatched exceptions during plugin import and stdui init, log error and exit if any found
Goffi <goffi@goffi.org>
parents:
2251
diff
changeset
|
212 except Exception as e: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
213 log.error( |
3028 | 214 _("Could not initialize backend: {reason}").format( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
215 reason=str(e).decode("utf-8", "ignore") |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
216 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
217 ) |
2262
24f5a4d5f195
core: check uncatched exceptions during plugin import and stdui init, log error and exit if any found
Goffi <goffi@goffi.org>
parents:
2251
diff
changeset
|
218 sys.exit(1) |
2810
c161a294fffd
core: added a base menu allowing to set encryption session or show the trust management UI.
Goffi <goffi@goffi.org>
parents:
2791
diff
changeset
|
219 self._addBaseMenus() |
3120 | 220 |
1591
0df9c6247474
core: profile session starting and connection are now separated. Moved profile session starting/authentication to memory module
Goffi <goffi@goffi.org>
parents:
1587
diff
changeset
|
221 self.initialised.callback(None) |
3028 | 222 log.info(_("Backend is ready")) |
0 | 223 |
3120 | 224 # profile autoconnection must be done after self.initialised is called because |
225 # startSession waits for it. | |
226 autoconnect_dict = await self.memory.storage.getIndParamValues( | |
227 category='Connection', name='autoconnect_backend', | |
228 ) | |
229 profiles_autoconnect = [p for p, v in autoconnect_dict.items() if C.bool(v)] | |
230 if not self.trigger.point("profilesAutoconnect", profiles_autoconnect): | |
231 return | |
232 if profiles_autoconnect: | |
233 log.info(D_( | |
234 "Following profiles will be connected automatically: {profiles}" | |
235 ).format(profiles= ', '.join(profiles_autoconnect))) | |
236 connect_d_list = [] | |
237 for profile in profiles_autoconnect: | |
238 connect_d_list.append(defer.ensureDeferred(self.connect(profile))) | |
239 | |
240 if connect_d_list: | |
241 results = await defer.DeferredList(connect_d_list) | |
242 for idx, (success, result) in enumerate(results): | |
243 if not success: | |
244 profile = profiles_autoconnect[0] | |
245 log.warning( | |
246 _("Can't autoconnect profile {profile}: {reason}").format( | |
247 profile = profile, | |
248 reason = result) | |
249 ) | |
250 | |
2810
c161a294fffd
core: added a base menu allowing to set encryption session or show the trust management UI.
Goffi <goffi@goffi.org>
parents:
2791
diff
changeset
|
251 def _addBaseMenus(self): |
c161a294fffd
core: added a base menu allowing to set encryption session or show the trust management UI.
Goffi <goffi@goffi.org>
parents:
2791
diff
changeset
|
252 """Add base menus""" |
c161a294fffd
core: added a base menu allowing to set encryption session or show the trust management UI.
Goffi <goffi@goffi.org>
parents:
2791
diff
changeset
|
253 encryption.EncryptionHandler._importMenus(self) |
c161a294fffd
core: added a base menu allowing to set encryption session or show the trust management UI.
Goffi <goffi@goffi.org>
parents:
2791
diff
changeset
|
254 |
2144
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
255 def _unimport_plugin(self, plugin_path): |
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
256 """remove a plugin from sys.modules if it is there""" |
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
257 try: |
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
258 del sys.modules[plugin_path] |
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
259 except KeyError: |
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
260 pass |
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
261 |
0 | 262 def _import_plugins(self): |
263 """Import all plugins found in plugins directory""" | |
2144
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
264 # FIXME: module imported but cancelled should be deleted |
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
265 # TODO: make this more generic and reusable in tools.common |
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
266 # FIXME: should use imp |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
267 # TODO: do not import all plugins if no needed: component plugins are not needed |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
268 # if we just use a client, and plugin blacklisting should be possible in |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
269 # sat.conf |
2105
c96fe007ca41
core(constants): added a constant for profile extension (PLUGIN_EXT):
Goffi <goffi@goffi.org>
parents:
2100
diff
changeset
|
270 plugins_path = os.path.dirname(sat.plugins.__file__) |
c96fe007ca41
core(constants): added a constant for profile extension (PLUGIN_EXT):
Goffi <goffi@goffi.org>
parents:
2100
diff
changeset
|
271 plugin_glob = "plugin*." + C.PLUGIN_EXT |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
272 plug_lst = [ |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
273 os.path.splitext(plugin)[0] |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
274 for plugin in map( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
275 os.path.basename, glob(os.path.join(plugins_path, plugin_glob)) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
276 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
277 ] |
1503
f681788097ba
core (plugins): detect import_name conflicts
Goffi <goffi@goffi.org>
parents:
1491
diff
changeset
|
278 plugins_to_import = {} # plugins we still have to import |
0 | 279 for plug in plug_lst: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
280 plugin_path = "sat.plugins." + plug |
1145
4e1a0a1523f1
core: more robust plugins importation
Goffi <goffi@goffi.org>
parents:
1130
diff
changeset
|
281 try: |
4e1a0a1523f1
core: more robust plugins importation
Goffi <goffi@goffi.org>
parents:
1130
diff
changeset
|
282 __import__(plugin_path) |
1535
c9ef16de3f13
core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents:
1533
diff
changeset
|
283 except exceptions.MissingModule as e: |
2144
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
284 self._unimport_plugin(plugin_path) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
285 log.warning( |
3028 | 286 "Can't import plugin [{path}] because of an unavailale third party " |
287 "module:\n{msg}".format( | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
288 path=plugin_path, msg=e |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
289 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
290 ) |
1535
c9ef16de3f13
core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents:
1533
diff
changeset
|
291 continue |
2100 | 292 except exceptions.CancelError as e: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
293 log.info( |
3028 | 294 "Plugin [{path}] cancelled its own import: {msg}".format( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
295 path=plugin_path, msg=e |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
296 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
297 ) |
2144
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
298 self._unimport_plugin(plugin_path) |
2100 | 299 continue |
3040 | 300 except Exception: |
1535
c9ef16de3f13
core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents:
1533
diff
changeset
|
301 import traceback |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
302 |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
303 log.error( |
3028 | 304 _("Can't import plugin [{path}]:\n{error}").format( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
305 path=plugin_path, error=traceback.format_exc() |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
306 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
307 ) |
2144
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
308 self._unimport_plugin(plugin_path) |
1145
4e1a0a1523f1
core: more robust plugins importation
Goffi <goffi@goffi.org>
parents:
1130
diff
changeset
|
309 continue |
287
2720536b5a22
core: added plugin dependency management
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
310 mod = sys.modules[plugin_path] |
2720536b5a22
core: added plugin dependency management
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
311 plugin_info = mod.PLUGIN_INFO |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
312 import_name = plugin_info["import_name"] |
2144
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
313 |
3028 | 314 plugin_modes = plugin_info["modes"] = set( |
315 plugin_info.setdefault("modes", C.PLUG_MODE_DEFAULT) | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
316 ) |
2144
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
317 |
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
318 # if the plugin is an entry point, it must work in component mode |
3028 | 319 if plugin_info["type"] == C.PLUG_TYPE_ENTRY_POINT: |
2144
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
320 # if plugin is an entrypoint, we cache it |
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
321 if C.PLUG_MODE_COMPONENT not in plugin_modes: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
322 log.error( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
323 _( |
3028 | 324 "{type} type must be used with {mode} mode, ignoring plugin" |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
325 ).format(type=C.PLUG_TYPE_ENTRY_POINT, mode=C.PLUG_MODE_COMPONENT) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
326 ) |
2144
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
327 self._unimport_plugin(plugin_path) |
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
328 continue |
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
329 |
1503
f681788097ba
core (plugins): detect import_name conflicts
Goffi <goffi@goffi.org>
parents:
1491
diff
changeset
|
330 if import_name in plugins_to_import: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
331 log.error( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
332 _( |
3028 | 333 "Name conflict for import name [{import_name}], can't import " |
334 "plugin [{name}]" | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
335 ).format(**plugin_info) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
336 ) |
1503
f681788097ba
core (plugins): detect import_name conflicts
Goffi <goffi@goffi.org>
parents:
1491
diff
changeset
|
337 continue |
f681788097ba
core (plugins): detect import_name conflicts
Goffi <goffi@goffi.org>
parents:
1491
diff
changeset
|
338 plugins_to_import[import_name] = (plugin_path, mod, plugin_info) |
287
2720536b5a22
core: added plugin dependency management
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
339 while True: |
1535
c9ef16de3f13
core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents:
1533
diff
changeset
|
340 try: |
c9ef16de3f13
core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents:
1533
diff
changeset
|
341 self._import_plugins_from_dict(plugins_to_import) |
c9ef16de3f13
core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents:
1533
diff
changeset
|
342 except ImportError: |
c9ef16de3f13
core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents:
1533
diff
changeset
|
343 pass |
1503
f681788097ba
core (plugins): detect import_name conflicts
Goffi <goffi@goffi.org>
parents:
1491
diff
changeset
|
344 if not plugins_to_import: |
287
2720536b5a22
core: added plugin dependency management
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
345 break |
2720536b5a22
core: added plugin dependency management
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
346 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
347 def _import_plugins_from_dict( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
348 self, plugins_to_import, import_name=None, optional=False |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
349 ): |
287
2720536b5a22
core: added plugin dependency management
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
350 """Recursively import and their dependencies in the right order |
925
5c78cefd233f
core: plugins now accepts recommendations:
Goffi <goffi@goffi.org>
parents:
923
diff
changeset
|
351 |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
352 @param plugins_to_import(dict): key=import_name and values=(plugin_path, module, |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
353 plugin_info) |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
354 @param import_name(unicode, None): name of the plugin to import as found in |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
355 PLUGIN_INFO['import_name'] |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
356 @param optional(bool): if False and plugin is not found, an ImportError exception |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
357 is raised |
925
5c78cefd233f
core: plugins now accepts recommendations:
Goffi <goffi@goffi.org>
parents:
923
diff
changeset
|
358 """ |
589
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
359 if import_name in self.plugins: |
3028 | 360 log.debug("Plugin {} already imported, passing".format(import_name)) |
287
2720536b5a22
core: added plugin dependency management
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
361 return |
2720536b5a22
core: added plugin dependency management
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
362 if not import_name: |
589
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
363 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
|
364 else: |
288
76247af9917c
core: added plugin dependency not found import error
Goffi <goffi@goffi.org>
parents:
287
diff
changeset
|
365 if not import_name in plugins_to_import: |
925
5c78cefd233f
core: plugins now accepts recommendations:
Goffi <goffi@goffi.org>
parents:
923
diff
changeset
|
366 if optional: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
367 log.warning( |
3028 | 368 _("Recommended plugin not found: {}").format(import_name) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
369 ) |
925
5c78cefd233f
core: plugins now accepts recommendations:
Goffi <goffi@goffi.org>
parents:
923
diff
changeset
|
370 return |
3028 | 371 msg = "Dependency not found: {}".format(import_name) |
1535
c9ef16de3f13
core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents:
1533
diff
changeset
|
372 log.error(msg) |
c9ef16de3f13
core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents:
1533
diff
changeset
|
373 raise ImportError(msg) |
287
2720536b5a22
core: added plugin dependency management
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
374 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
|
375 dependencies = plugin_info.setdefault("dependencies", []) |
925
5c78cefd233f
core: plugins now accepts recommendations:
Goffi <goffi@goffi.org>
parents:
923
diff
changeset
|
376 recommendations = plugin_info.setdefault("recommendations", []) |
5c78cefd233f
core: plugins now accepts recommendations:
Goffi <goffi@goffi.org>
parents:
923
diff
changeset
|
377 for to_import in dependencies + recommendations: |
5c78cefd233f
core: plugins now accepts recommendations:
Goffi <goffi@goffi.org>
parents:
923
diff
changeset
|
378 if to_import not in self.plugins: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
379 log.debug( |
3028 | 380 "Recursively import dependency of [%s]: [%s]" |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
381 % (import_name, to_import) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
382 ) |
1145
4e1a0a1523f1
core: more robust plugins importation
Goffi <goffi@goffi.org>
parents:
1130
diff
changeset
|
383 try: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
384 self._import_plugins_from_dict( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
385 plugins_to_import, to_import, to_import not in dependencies |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
386 ) |
1145
4e1a0a1523f1
core: more robust plugins importation
Goffi <goffi@goffi.org>
parents:
1130
diff
changeset
|
387 except ImportError as e: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
388 log.warning( |
3028 | 389 _("Can't import plugin {name}: {error}").format( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
390 name=plugin_info["name"], error=e |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
391 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
392 ) |
1535
c9ef16de3f13
core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents:
1533
diff
changeset
|
393 if optional: |
c9ef16de3f13
core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents:
1533
diff
changeset
|
394 return |
c9ef16de3f13
core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents:
1533
diff
changeset
|
395 raise e |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
396 log.info("importing plugin: {}".format(plugin_info["name"])) |
1535
c9ef16de3f13
core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents:
1533
diff
changeset
|
397 # we instanciate the plugin here |
c9ef16de3f13
core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents:
1533
diff
changeset
|
398 try: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
399 self.plugins[import_name] = getattr(mod, plugin_info["main"])(self) |
1535
c9ef16de3f13
core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents:
1533
diff
changeset
|
400 except Exception as e: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
401 log.warning( |
3028 | 402 'Error while loading plugin "{name}", ignoring it: {error}'.format( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
403 name=plugin_info["name"], error=e |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
404 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
405 ) |
1535
c9ef16de3f13
core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents:
1533
diff
changeset
|
406 if optional: |
c9ef16de3f13
core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents:
1533
diff
changeset
|
407 return |
3028 | 408 raise ImportError("Error during initiation") |
2525
e8e1507049b7
core: use C.bool to detect value of "handler" field in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2509
diff
changeset
|
409 if C.bool(plugin_info.get(C.PI_HANDLER, C.BOOL_FALSE)): |
287
2720536b5a22
core: added plugin dependency management
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
410 self.plugins[import_name].is_handler = True |
2720536b5a22
core: added plugin dependency management
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
411 else: |
2720536b5a22
core: added plugin dependency management
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
412 self.plugins[import_name].is_handler = False |
2144
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
413 # we keep metadata as a Class attribute |
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
414 self.plugins[import_name]._info = plugin_info |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
415 # TODO: test xmppclient presence and register handler parent |
0 | 416 |
1550 | 417 def pluginsUnload(self): |
418 """Call unload method on every loaded plugin, if exists | |
419 | |
420 @return (D): A deferred which return None when all method have been called | |
421 """ | |
422 # TODO: in the futur, it should be possible to hot unload a plugin | |
423 # pluging depending on the unloaded one should be unloaded too | |
424 # for now, just a basic call on plugin.unload is done | |
425 defers_list = [] | |
3028 | 426 for plugin in self.plugins.values(): |
1550 | 427 try: |
428 unload = plugin.unload | |
429 except AttributeError: | |
430 continue | |
431 else: | |
432 defers_list.append(defer.maybeDeferred(unload)) | |
433 return defers_list | |
434 | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
435 def _connect(self, profile_key, password="", options=None): |
1591
0df9c6247474
core: profile session starting and connection are now separated. Moved profile session starting/authentication to memory module
Goffi <goffi@goffi.org>
parents:
1587
diff
changeset
|
436 profile = self.memory.getProfileName(profile_key) |
3120 | 437 return defer.ensureDeferred(self.connect(profile, password, options)) |
1591
0df9c6247474
core: profile session starting and connection are now separated. Moved profile session starting/authentication to memory module
Goffi <goffi@goffi.org>
parents:
1587
diff
changeset
|
438 |
3120 | 439 async def connect( |
440 self, profile, password="", options=None, max_retries=C.XMPP_MAX_RETRIES): | |
2144
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
441 """Connect a profile (i.e. connect client.component to XMPP server) |
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
442 |
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
443 Retrieve the individual parameters, authenticate the profile |
1030
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
444 and initiate the connection to the associated XMPP server. |
1725
c1be6363bfab
core, plugin misc_account: set XMPP connection max retries to 0 when checking if an external account exists
souliane <souliane@mailoo.org>
parents:
1694
diff
changeset
|
445 @param profile: %(doc_profile)s |
1030
15f43b54d697
core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents:
1027
diff
changeset
|
446 @param password (string): the SàT profile password |
2144
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
447 @param options (dict): connection options. Key can be: |
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
448 - |
1725
c1be6363bfab
core, plugin misc_account: set XMPP connection max retries to 0 when checking if an external account exists
souliane <souliane@mailoo.org>
parents:
1694
diff
changeset
|
449 @param max_retries (int): max number of connection retries |
1591
0df9c6247474
core: profile session starting and connection are now separated. Moved profile session starting/authentication to memory module
Goffi <goffi@goffi.org>
parents:
1587
diff
changeset
|
450 @return (D(bool)): |
0df9c6247474
core: profile session starting and connection are now separated. Moved profile session starting/authentication to memory module
Goffi <goffi@goffi.org>
parents:
1587
diff
changeset
|
451 - True if the XMPP connection was already established |
0df9c6247474
core: profile session starting and connection are now separated. Moved profile session starting/authentication to memory module
Goffi <goffi@goffi.org>
parents:
1587
diff
changeset
|
452 - False if the XMPP connection has been initiated (it may still fail) |
0df9c6247474
core: profile session starting and connection are now separated. Moved profile session starting/authentication to memory module
Goffi <goffi@goffi.org>
parents:
1587
diff
changeset
|
453 @raise exceptions.PasswordError: Profile password is wrong |
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
|
454 """ |
2142
be96beb7ca14
core, bridge, frontends: renamed asyncConnect to connect, and added options parameters (not used yet)
Goffi <goffi@goffi.org>
parents:
2138
diff
changeset
|
455 if options is None: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
456 options = {} |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
457 |
3120 | 458 await self.memory.startSession(password, profile) |
459 | |
460 if self.isConnected(profile): | |
461 log.info(_("already connected !")) | |
462 return True | |
2144
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
463 |
3120 | 464 if self.memory.isComponent(profile): |
465 await xmpp.SatXMPPComponent.startConnection(self, profile, max_retries) | |
466 else: | |
467 await xmpp.SatXMPPClient.startConnection(self, profile, max_retries) | |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
579
diff
changeset
|
468 |
3120 | 469 return False |
1019 | 470 |
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
|
471 def disconnect(self, profile_key): |
16
0a024d5e0cd0
New account creation (in-band registration)
Goffi <goffi@goffi.org>
parents:
15
diff
changeset
|
472 """disconnect from jabber server""" |
2144
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
473 # FIXME: client should not be deleted if only disconnected |
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
474 # it shoud be deleted only when session is finished |
589
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
475 if not self.isConnected(profile_key): |
2144
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
476 # isConnected is checked here and not on client |
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
477 # because client is deleted when session is ended |
3028 | 478 log.info(_("not connected !")) |
2144
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
479 return defer.succeed(None) |
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
480 client = self.getClient(profile_key) |
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
481 return client.entityDisconnect() |
6
5799493fa548
connection and disconnection management
Goffi <goffi@goffi.org>
parents:
5
diff
changeset
|
482 |
1482
80cd55dd5b04
core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents:
1470
diff
changeset
|
483 def getFeatures(self, profile_key=C.PROF_KEY_NONE): |
80cd55dd5b04
core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents:
1470
diff
changeset
|
484 """Get available features |
80cd55dd5b04
core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents:
1470
diff
changeset
|
485 |
80cd55dd5b04
core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents:
1470
diff
changeset
|
486 Return list of activated plugins and plugin specific data |
80cd55dd5b04
core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents:
1470
diff
changeset
|
487 @param profile_key: %(doc_profile_key)s |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
488 C.PROF_KEY_NONE can be used to have general plugins data (i.e. not profile |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
489 dependent) |
1482
80cd55dd5b04
core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents:
1470
diff
changeset
|
490 @return (dict)[Deferred]: features data where: |
80cd55dd5b04
core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents:
1470
diff
changeset
|
491 - key is plugin import name, present only for activated plugins |
1650
b08b828a87c9
quick frontend (blog): fixed group blog panels (displaying only, sending is not working yet)
Goffi <goffi@goffi.org>
parents:
1644
diff
changeset
|
492 - value is a an other dict, when meaning is specific to each plugin. |
1482
80cd55dd5b04
core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents:
1470
diff
changeset
|
493 this dict is return by plugin's getFeature method. |
80cd55dd5b04
core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents:
1470
diff
changeset
|
494 If this method doesn't exists, an empty dict is returned. |
80cd55dd5b04
core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents:
1470
diff
changeset
|
495 """ |
80cd55dd5b04
core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents:
1470
diff
changeset
|
496 try: |
80cd55dd5b04
core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents:
1470
diff
changeset
|
497 # FIXME: there is no method yet to check profile session |
80cd55dd5b04
core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents:
1470
diff
changeset
|
498 # as soon as one is implemented, it should be used here |
80cd55dd5b04
core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents:
1470
diff
changeset
|
499 self.getClient(profile_key) |
80cd55dd5b04
core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents:
1470
diff
changeset
|
500 except KeyError: |
80cd55dd5b04
core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents:
1470
diff
changeset
|
501 log.warning("Requesting features for a profile outside a session") |
80cd55dd5b04
core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents:
1470
diff
changeset
|
502 profile_key = C.PROF_KEY_NONE |
80cd55dd5b04
core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents:
1470
diff
changeset
|
503 except exceptions.ProfileNotSetError: |
80cd55dd5b04
core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents:
1470
diff
changeset
|
504 pass |
80cd55dd5b04
core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents:
1470
diff
changeset
|
505 |
80cd55dd5b04
core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents:
1470
diff
changeset
|
506 features = [] |
3028 | 507 for import_name, plugin in self.plugins.items(): |
1482
80cd55dd5b04
core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents:
1470
diff
changeset
|
508 try: |
80cd55dd5b04
core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents:
1470
diff
changeset
|
509 features_d = defer.maybeDeferred(plugin.getFeatures, profile_key) |
80cd55dd5b04
core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents:
1470
diff
changeset
|
510 except AttributeError: |
80cd55dd5b04
core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents:
1470
diff
changeset
|
511 features_d = defer.succeed({}) |
80cd55dd5b04
core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents:
1470
diff
changeset
|
512 features.append(features_d) |
80cd55dd5b04
core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents:
1470
diff
changeset
|
513 |
80cd55dd5b04
core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents:
1470
diff
changeset
|
514 d_list = defer.DeferredList(features) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
515 |
1482
80cd55dd5b04
core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents:
1470
diff
changeset
|
516 def buildFeatures(result, import_names): |
80cd55dd5b04
core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents:
1470
diff
changeset
|
517 assert len(result) == len(import_names) |
80cd55dd5b04
core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents:
1470
diff
changeset
|
518 ret = {} |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
519 for name, (success, data) in zip(import_names, result): |
1482
80cd55dd5b04
core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents:
1470
diff
changeset
|
520 if success: |
80cd55dd5b04
core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents:
1470
diff
changeset
|
521 ret[name] = data |
80cd55dd5b04
core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents:
1470
diff
changeset
|
522 else: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
523 log.warning( |
3028 | 524 "Error while getting features for {name}: {failure}".format( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
525 name=name, failure=data |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
526 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
527 ) |
1482
80cd55dd5b04
core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents:
1470
diff
changeset
|
528 ret[name] = {} |
80cd55dd5b04
core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents:
1470
diff
changeset
|
529 return ret |
80cd55dd5b04
core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents:
1470
diff
changeset
|
530 |
3028 | 531 d_list.addCallback(buildFeatures, list(self.plugins.keys())) |
1482
80cd55dd5b04
core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents:
1470
diff
changeset
|
532 return d_list |
80cd55dd5b04
core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents:
1470
diff
changeset
|
533 |
466
448ce3c9e2ac
core: Roster cache refactoring: cache is now managed by client's SatRosterProtocol instance.
Goffi <goffi@goffi.org>
parents:
460
diff
changeset
|
534 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
|
535 client = self.getClient(profile_key) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
536 |
2765
378188abe941
misc: replaced all "dummy" by the more conventional and readable "__" ("_" being used for gettext)
Goffi <goffi@goffi.org>
parents:
2733
diff
changeset
|
537 def got_roster(__): |
1262
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1234
diff
changeset
|
538 ret = [] |
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1234
diff
changeset
|
539 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
|
540 # and convert them to expected format |
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1234
diff
changeset
|
541 attr = client.roster.getAttributes(item) |
2977
06f30ad8e110
core: return full jid in bridge's getContacts:
Goffi <goffi@goffi.org>
parents:
2914
diff
changeset
|
542 # we use full() and not userhost() because jid with resources are allowed |
06f30ad8e110
core: return full jid in bridge's getContacts:
Goffi <goffi@goffi.org>
parents:
2914
diff
changeset
|
543 # in roster, even if it's not common. |
06f30ad8e110
core: return full jid in bridge's getContacts:
Goffi <goffi@goffi.org>
parents:
2914
diff
changeset
|
544 ret.append([item.entity.full(), attr, item.groups]) |
1262
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1234
diff
changeset
|
545 return ret |
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1234
diff
changeset
|
546 |
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1234
diff
changeset
|
547 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
|
548 |
501
e9634d2e7b38
core, quick_frontend, primitivus, wix: Contacts List refactoring phase 1:
Goffi <goffi@goffi.org>
parents:
489
diff
changeset
|
549 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
|
550 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
|
551 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
|
552 |
2144
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
553 def purgeEntity(self, profile): |
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
554 """Remove reference to a profile client/component and purge cache |
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
555 |
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
556 the garbage collector can then free the memory |
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
557 """ |
416
32dc8b18c2ae
core: param loading/purging on profile connection/disconnection
Goffi <goffi@goffi.org>
parents:
413
diff
changeset
|
558 try: |
32dc8b18c2ae
core: param loading/purging on profile connection/disconnection
Goffi <goffi@goffi.org>
parents:
413
diff
changeset
|
559 del self.profiles[profile] |
32dc8b18c2ae
core: param loading/purging on profile connection/disconnection
Goffi <goffi@goffi.org>
parents:
413
diff
changeset
|
560 except KeyError: |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
991
diff
changeset
|
561 log.error(_("Trying to remove reference to a client not referenced")) |
2144
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
562 else: |
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
563 self.memory.purgeProfileSession(profile) |
416
32dc8b18c2ae
core: param loading/purging on profile connection/disconnection
Goffi <goffi@goffi.org>
parents:
413
diff
changeset
|
564 |
13
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
565 def startService(self): |
3110
3fcc99b2d6b7
core (sat_main): avoid double init + log version
Goffi <goffi@goffi.org>
parents:
3102
diff
changeset
|
566 self._init() |
3028 | 567 log.info("Salut à toi ô mon frère !") |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
579
diff
changeset
|
568 |
13
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
569 def stopService(self): |
3028 | 570 log.info("Salut aussi à Rantanplan") |
1550 | 571 return self.pluginsUnload() |
0 | 572 |
573 def run(self): | |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
991
diff
changeset
|
574 log.debug(_("running app")) |
0 | 575 reactor.run() |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
579
diff
changeset
|
576 |
0 | 577 def stop(self): |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
991
diff
changeset
|
578 log.debug(_("stopping app")) |
0 | 579 reactor.stop() |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
579
diff
changeset
|
580 |
37
a61beb21d16d
Gateway registration, unregistration & edition
Goffi <goffi@goffi.org>
parents:
36
diff
changeset
|
581 ## Misc methods ## |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
579
diff
changeset
|
582 |
64 | 583 def getJidNStream(self, profile_key): |
584 """Convenient method to get jid and stream from profile key | |
585 @return: tuple (jid, xmlstream) from profile, can be None""" | |
1573
6338677f3a89
core (client): added a sendError method to easily build error response from <IQ\> stanza
Goffi <goffi@goffi.org>
parents:
1550
diff
changeset
|
586 # TODO: deprecate this method (getClient is enough) |
64 | 587 profile = self.memory.getProfileName(profile_key) |
588 if not profile or not self.profiles[profile].isConnected(): | |
589 return (None, None) | |
590 return (self.profiles[profile].jid, self.profiles[profile].xmlstream) | |
591 | |
592 def getClient(self, profile_key): | |
593 """Convenient method to get client from profile key | |
1624 | 594 |
595 @return: client or None if it doesn't exist | |
596 @raise exceptions.ProfileKeyUnknown: the profile or profile key doesn't exist | |
597 @raise exceptions.NotFound: client is not available | |
2176
61128d260eef
plugin account: removed dependency to Prosody/prosodyctl and properly use in-band registration instead
Goffi <goffi@goffi.org>
parents:
2168
diff
changeset
|
598 This happen if profile has not been used yet |
1624 | 599 """ |
64 | 600 profile = self.memory.getProfileName(profile_key) |
601 if not profile: | |
1624 | 602 raise exceptions.ProfileKeyUnknown |
603 try: | |
604 return self.profiles[profile] | |
605 except KeyError: | |
2445
0199c0bd4c60
core: specify profile on NotFound exception
Goffi <goffi@goffi.org>
parents:
2443
diff
changeset
|
606 raise exceptions.NotFound(profile_key) |
64 | 607 |
728
e07afabc4a25
plugin XEP-0050: Ad-Hoc commands first draft (answering part)
Goffi <goffi@goffi.org>
parents:
727
diff
changeset
|
608 def getClients(self, profile_key): |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
609 """Convenient method to get list of clients from profile key |
1522
7d7e57a84792
core: progression handling improvments:
Goffi <goffi@goffi.org>
parents:
1503
diff
changeset
|
610 |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
611 Manage list through profile_key like C.PROF_KEY_ALL |
728
e07afabc4a25
plugin XEP-0050: Ad-Hoc commands first draft (answering part)
Goffi <goffi@goffi.org>
parents:
727
diff
changeset
|
612 @param profile_key: %(doc_profile_key)s |
1522
7d7e57a84792
core: progression handling improvments:
Goffi <goffi@goffi.org>
parents:
1503
diff
changeset
|
613 @return: list of clients |
7d7e57a84792
core: progression handling improvments:
Goffi <goffi@goffi.org>
parents:
1503
diff
changeset
|
614 """ |
2251
83bcd9ec4782
core: fixed profile key detection in getClients + raise DataError on empty profile
Goffi <goffi@goffi.org>
parents:
2176
diff
changeset
|
615 if not profile_key: |
3028 | 616 raise exceptions.DataError(_("profile_key must not be empty")) |
1522
7d7e57a84792
core: progression handling improvments:
Goffi <goffi@goffi.org>
parents:
1503
diff
changeset
|
617 try: |
7d7e57a84792
core: progression handling improvments:
Goffi <goffi@goffi.org>
parents:
1503
diff
changeset
|
618 profile = self.memory.getProfileName(profile_key, True) |
7d7e57a84792
core: progression handling improvments:
Goffi <goffi@goffi.org>
parents:
1503
diff
changeset
|
619 except exceptions.ProfileUnknownError: |
728
e07afabc4a25
plugin XEP-0050: Ad-Hoc commands first draft (answering part)
Goffi <goffi@goffi.org>
parents:
727
diff
changeset
|
620 return [] |
1522
7d7e57a84792
core: progression handling improvments:
Goffi <goffi@goffi.org>
parents:
1503
diff
changeset
|
621 if profile == C.PROF_KEY_ALL: |
3028 | 622 return list(self.profiles.values()) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
623 elif profile[0] == "@": # only profile keys can start with "@" |
1624 | 624 raise exceptions.ProfileKeyUnknown |
728
e07afabc4a25
plugin XEP-0050: Ad-Hoc commands first draft (answering part)
Goffi <goffi@goffi.org>
parents:
727
diff
changeset
|
625 return [self.profiles[profile]] |
e07afabc4a25
plugin XEP-0050: Ad-Hoc commands first draft (answering part)
Goffi <goffi@goffi.org>
parents:
727
diff
changeset
|
626 |
1234
9c17bd37e6e5
core: better management of default value in getConfig
Goffi <goffi@goffi.org>
parents:
1189
diff
changeset
|
627 def _getConfig(self, section, name): |
9c17bd37e6e5
core: better management of default value in getConfig
Goffi <goffi@goffi.org>
parents:
1189
diff
changeset
|
628 """Get the main configuration option |
9c17bd37e6e5
core: better management of default value in getConfig
Goffi <goffi@goffi.org>
parents:
1189
diff
changeset
|
629 |
9c17bd37e6e5
core: better management of default value in getConfig
Goffi <goffi@goffi.org>
parents:
1189
diff
changeset
|
630 @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
|
631 @param name: name of the option |
9c17bd37e6e5
core: better management of default value in getConfig
Goffi <goffi@goffi.org>
parents:
1189
diff
changeset
|
632 @return: unicode representation of the option |
9c17bd37e6e5
core: better management of default value in getConfig
Goffi <goffi@goffi.org>
parents:
1189
diff
changeset
|
633 """ |
3028 | 634 return str(self.memory.getConfig(section, name, "")) |
1234
9c17bd37e6e5
core: better management of default value in getConfig
Goffi <goffi@goffi.org>
parents:
1189
diff
changeset
|
635 |
3028 | 636 def logErrback(self, failure_, msg=_("Unexpected error: {failure_}")): |
2990
6959c71ab8bf
plugin XEP-0045: log "failure" on configure error
Goffi <goffi@goffi.org>
parents:
2977
diff
changeset
|
637 """Generic errback logging |
2144
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
638 |
2990
6959c71ab8bf
plugin XEP-0045: log "failure" on configure error
Goffi <goffi@goffi.org>
parents:
2977
diff
changeset
|
639 @param msg(unicode): error message ("failure_" key will be use for format) |
2144
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
640 can be used as last errback to show unexpected error |
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
641 """ |
2990
6959c71ab8bf
plugin XEP-0045: log "failure" on configure error
Goffi <goffi@goffi.org>
parents:
2977
diff
changeset
|
642 log.error(msg.format(failure_=failure_)) |
2144
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
643 return failure_ |
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
644 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
645 # namespaces |
2496
769e8d9d2438
core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
646 |
769e8d9d2438
core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
647 def registerNamespace(self, short_name, namespace): |
769e8d9d2438
core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
648 """associate a namespace to a short name""" |
769e8d9d2438
core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
649 if short_name in self.ns_map: |
3028 | 650 raise exceptions.ConflictError("this short name is already used") |
3117
385fdd684f87
core: added a debug log when a namespace is registered
Goffi <goffi@goffi.org>
parents:
3110
diff
changeset
|
651 log.debug(f"registering namespace {short_name} => {namespace}") |
2496
769e8d9d2438
core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
652 self.ns_map[short_name] = namespace |
769e8d9d2438
core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
653 |
769e8d9d2438
core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
654 def getNamespaces(self): |
769e8d9d2438
core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
655 return self.ns_map |
769e8d9d2438
core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
656 |
2914
25f14fbd364e
core: added getNamespace method to retrieve a namespace from short name.
Goffi <goffi@goffi.org>
parents:
2892
diff
changeset
|
657 def getNamespace(self, short_name): |
25f14fbd364e
core: added getNamespace method to retrieve a namespace from short name.
Goffi <goffi@goffi.org>
parents:
2892
diff
changeset
|
658 try: |
25f14fbd364e
core: added getNamespace method to retrieve a namespace from short name.
Goffi <goffi@goffi.org>
parents:
2892
diff
changeset
|
659 return self.ns_map[short_name] |
25f14fbd364e
core: added getNamespace method to retrieve a namespace from short name.
Goffi <goffi@goffi.org>
parents:
2892
diff
changeset
|
660 except KeyError: |
3028 | 661 raise exceptions.NotFound("namespace {short_name} is not registered" |
2914
25f14fbd364e
core: added getNamespace method to retrieve a namespace from short name.
Goffi <goffi@goffi.org>
parents:
2892
diff
changeset
|
662 .format(short_name=short_name)) |
25f14fbd364e
core: added getNamespace method to retrieve a namespace from short name.
Goffi <goffi@goffi.org>
parents:
2892
diff
changeset
|
663 |
2496
769e8d9d2438
core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
664 def getSessionInfos(self, profile_key): |
769e8d9d2438
core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
665 """compile interesting data on current profile session""" |
769e8d9d2438
core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
666 client = self.getClient(profile_key) |
2689
d715d912afac
plugin XEP-0199: implementation of XMPP Ping
Goffi <goffi@goffi.org>
parents:
2688
diff
changeset
|
667 data = { |
d715d912afac
plugin XEP-0199: implementation of XMPP Ping
Goffi <goffi@goffi.org>
parents:
2688
diff
changeset
|
668 "jid": client.jid.full(), |
3028 | 669 "started": str(int(client.started)) |
2689
d715d912afac
plugin XEP-0199: implementation of XMPP Ping
Goffi <goffi@goffi.org>
parents:
2688
diff
changeset
|
670 } |
2496
769e8d9d2438
core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
671 return defer.succeed(data) |
769e8d9d2438
core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
672 |
3066
2cc2f65379f7
core: added imageCheck and imageResize methods:
Goffi <goffi@goffi.org>
parents:
3040
diff
changeset
|
673 # images |
2cc2f65379f7
core: added imageCheck and imageResize methods:
Goffi <goffi@goffi.org>
parents:
3040
diff
changeset
|
674 |
2cc2f65379f7
core: added imageCheck and imageResize methods:
Goffi <goffi@goffi.org>
parents:
3040
diff
changeset
|
675 def _imageCheck(self, path): |
2cc2f65379f7
core: added imageCheck and imageResize methods:
Goffi <goffi@goffi.org>
parents:
3040
diff
changeset
|
676 report = images.checkImage(self, path) |
2cc2f65379f7
core: added imageCheck and imageResize methods:
Goffi <goffi@goffi.org>
parents:
3040
diff
changeset
|
677 return data_format.serialise(report) |
2cc2f65379f7
core: added imageCheck and imageResize methods:
Goffi <goffi@goffi.org>
parents:
3040
diff
changeset
|
678 |
2cc2f65379f7
core: added imageCheck and imageResize methods:
Goffi <goffi@goffi.org>
parents:
3040
diff
changeset
|
679 def _imageResize(self, path, width, height): |
2cc2f65379f7
core: added imageCheck and imageResize methods:
Goffi <goffi@goffi.org>
parents:
3040
diff
changeset
|
680 d = images.resizeImage(path, (width, height)) |
2cc2f65379f7
core: added imageCheck and imageResize methods:
Goffi <goffi@goffi.org>
parents:
3040
diff
changeset
|
681 d.addCallback(lambda new_image_path: str(new_image_path)) |
2cc2f65379f7
core: added imageCheck and imageResize methods:
Goffi <goffi@goffi.org>
parents:
3040
diff
changeset
|
682 return d |
2cc2f65379f7
core: added imageCheck and imageResize methods:
Goffi <goffi@goffi.org>
parents:
3040
diff
changeset
|
683 |
2496
769e8d9d2438
core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
684 # local dirs |
769e8d9d2438
core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
685 |
769e8d9d2438
core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
686 def getLocalPath(self, client, dir_name, *extra_path, **kwargs): |
769e8d9d2438
core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
687 """retrieve path for local data |
769e8d9d2438
core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
688 |
769e8d9d2438
core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
689 if path doesn't exist, it will be created |
769e8d9d2438
core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
690 @param client(SatXMPPClient, None): client instance |
769e8d9d2438
core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
691 used when profile is set, can be None if profile is False |
769e8d9d2438
core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
692 @param dir_name(unicode): name of the main path directory |
769e8d9d2438
core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
693 @param component(bool): if True, path will be prefixed with C.COMPONENTS_DIR |
769e8d9d2438
core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
694 @param profile(bool): if True, path will be suffixed by profile name |
769e8d9d2438
core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
695 @param *extra_path: extra path element(s) to use |
769e8d9d2438
core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
696 @return (unicode): path |
769e8d9d2438
core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
697 """ |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
698 # FIXME: component and profile are parsed with **kwargs because of python 2 |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
699 # limitations. Once moved to python 3, this can be fixed |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
700 component = kwargs.pop("component", False) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
701 profile = kwargs.pop("profile", True) |
2496
769e8d9d2438
core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
702 assert not kwargs |
769e8d9d2438
core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
703 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
704 path_elts = [self.memory.getConfig("", "local_dir")] |
2496
769e8d9d2438
core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
705 if component: |
769e8d9d2438
core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
706 path_elts.append(C.COMPONENTS_DIR) |
769e8d9d2438
core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
707 path_elts.append(regex.pathEscape(dir_name)) |
769e8d9d2438
core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
708 if extra_path: |
769e8d9d2438
core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
709 path_elts.extend([regex.pathEscape(p) for p in extra_path]) |
769e8d9d2438
core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
710 if profile: |
769e8d9d2438
core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
711 regex.pathEscape(client.profile) |
769e8d9d2438
core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
712 path = os.path.join(*path_elts) |
769e8d9d2438
core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
713 if not os.path.exists(path): |
769e8d9d2438
core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
714 os.makedirs(path) |
769e8d9d2438
core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
715 return path |
769e8d9d2438
core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
716 |
16
0a024d5e0cd0
New account creation (in-band registration)
Goffi <goffi@goffi.org>
parents:
15
diff
changeset
|
717 ## Client management ## |
0 | 718 |
641
49587e170f53
core: added the security_limit to setParam
souliane <souliane@mailoo.org>
parents:
636
diff
changeset
|
719 def setParam(self, name, value, category, security_limit, profile_key): |
0 | 720 """set wanted paramater and notice observers""" |
641
49587e170f53
core: added the security_limit to setParam
souliane <souliane@mailoo.org>
parents:
636
diff
changeset
|
721 self.memory.setParam(name, value, category, security_limit, profile_key) |
0 | 722 |
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
|
723 def isConnected(self, profile_key): |
62
93cb45a7420f
SàT multi-profile: connection using profiles
Goffi <goffi@goffi.org>
parents:
60
diff
changeset
|
724 """Return connection status of profile |
3125
c3ce8c997fdf
plugin android: reconnect profiles with autoconnect if network is activated:
Goffi <goffi@goffi.org>
parents:
3123
diff
changeset
|
725 |
62
93cb45a7420f
SàT multi-profile: connection using profiles
Goffi <goffi@goffi.org>
parents:
60
diff
changeset
|
726 @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
|
727 @return: True if connected |
62
93cb45a7420f
SàT multi-profile: connection using profiles
Goffi <goffi@goffi.org>
parents:
60
diff
changeset
|
728 """ |
93cb45a7420f
SàT multi-profile: connection using profiles
Goffi <goffi@goffi.org>
parents:
60
diff
changeset
|
729 profile = self.memory.getProfileName(profile_key) |
93cb45a7420f
SàT multi-profile: connection using profiles
Goffi <goffi@goffi.org>
parents:
60
diff
changeset
|
730 if not profile: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
731 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
|
732 raise exceptions.ProfileUnknownError(profile_key) |
589
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
733 if profile not in self.profiles: |
62
93cb45a7420f
SàT multi-profile: connection using profiles
Goffi <goffi@goffi.org>
parents:
60
diff
changeset
|
734 return False |
93cb45a7420f
SàT multi-profile: connection using profiles
Goffi <goffi@goffi.org>
parents:
60
diff
changeset
|
735 return self.profiles[profile].isConnected() |
0 | 736 |
2646
712cb4ff3e13
core: new EncryptionHandler class which manage encrypted session as a core feature:
Goffi <goffi@goffi.org>
parents:
2645
diff
changeset
|
737 ## Encryption ## |
712cb4ff3e13
core: new EncryptionHandler class which manage encrypted session as a core feature:
Goffi <goffi@goffi.org>
parents:
2645
diff
changeset
|
738 |
712cb4ff3e13
core: new EncryptionHandler class which manage encrypted session as a core feature:
Goffi <goffi@goffi.org>
parents:
2645
diff
changeset
|
739 def registerEncryptionPlugin(self, *args, **kwargs): |
712cb4ff3e13
core: new EncryptionHandler class which manage encrypted session as a core feature:
Goffi <goffi@goffi.org>
parents:
2645
diff
changeset
|
740 return encryption.EncryptionHandler.registerPlugin(*args, **kwargs) |
712cb4ff3e13
core: new EncryptionHandler class which manage encrypted session as a core feature:
Goffi <goffi@goffi.org>
parents:
2645
diff
changeset
|
741 |
2733
e347e32aa07f
core (memory/encryption): new encryptionNamespaceGet and encryptionTrustUIGet methods:
Goffi <goffi@goffi.org>
parents:
2691
diff
changeset
|
742 def _messageEncryptionStart(self, to_jid_s, namespace, replace=False, |
e347e32aa07f
core (memory/encryption): new encryptionNamespaceGet and encryptionTrustUIGet methods:
Goffi <goffi@goffi.org>
parents:
2691
diff
changeset
|
743 profile_key=C.PROF_KEY_NONE): |
e347e32aa07f
core (memory/encryption): new encryptionNamespaceGet and encryptionTrustUIGet methods:
Goffi <goffi@goffi.org>
parents:
2691
diff
changeset
|
744 client = self.getClient(profile_key) |
e347e32aa07f
core (memory/encryption): new encryptionNamespaceGet and encryptionTrustUIGet methods:
Goffi <goffi@goffi.org>
parents:
2691
diff
changeset
|
745 to_jid = jid.JID(to_jid_s) |
e347e32aa07f
core (memory/encryption): new encryptionNamespaceGet and encryptionTrustUIGet methods:
Goffi <goffi@goffi.org>
parents:
2691
diff
changeset
|
746 return client.encryption.start(to_jid, namespace or None, replace) |
e347e32aa07f
core (memory/encryption): new encryptionNamespaceGet and encryptionTrustUIGet methods:
Goffi <goffi@goffi.org>
parents:
2691
diff
changeset
|
747 |
e347e32aa07f
core (memory/encryption): new encryptionNamespaceGet and encryptionTrustUIGet methods:
Goffi <goffi@goffi.org>
parents:
2691
diff
changeset
|
748 def _messageEncryptionStop(self, to_jid_s, profile_key=C.PROF_KEY_NONE): |
e347e32aa07f
core (memory/encryption): new encryptionNamespaceGet and encryptionTrustUIGet methods:
Goffi <goffi@goffi.org>
parents:
2691
diff
changeset
|
749 client = self.getClient(profile_key) |
e347e32aa07f
core (memory/encryption): new encryptionNamespaceGet and encryptionTrustUIGet methods:
Goffi <goffi@goffi.org>
parents:
2691
diff
changeset
|
750 to_jid = jid.JID(to_jid_s) |
e347e32aa07f
core (memory/encryption): new encryptionNamespaceGet and encryptionTrustUIGet methods:
Goffi <goffi@goffi.org>
parents:
2691
diff
changeset
|
751 return client.encryption.stop(to_jid) |
e347e32aa07f
core (memory/encryption): new encryptionNamespaceGet and encryptionTrustUIGet methods:
Goffi <goffi@goffi.org>
parents:
2691
diff
changeset
|
752 |
e347e32aa07f
core (memory/encryption): new encryptionNamespaceGet and encryptionTrustUIGet methods:
Goffi <goffi@goffi.org>
parents:
2691
diff
changeset
|
753 def _messageEncryptionGet(self, to_jid_s, profile_key=C.PROF_KEY_NONE): |
e347e32aa07f
core (memory/encryption): new encryptionNamespaceGet and encryptionTrustUIGet methods:
Goffi <goffi@goffi.org>
parents:
2691
diff
changeset
|
754 client = self.getClient(profile_key) |
e347e32aa07f
core (memory/encryption): new encryptionNamespaceGet and encryptionTrustUIGet methods:
Goffi <goffi@goffi.org>
parents:
2691
diff
changeset
|
755 to_jid = jid.JID(to_jid_s) |
e347e32aa07f
core (memory/encryption): new encryptionNamespaceGet and encryptionTrustUIGet methods:
Goffi <goffi@goffi.org>
parents:
2691
diff
changeset
|
756 session_data = client.encryption.getSession(to_jid) |
e347e32aa07f
core (memory/encryption): new encryptionNamespaceGet and encryptionTrustUIGet methods:
Goffi <goffi@goffi.org>
parents:
2691
diff
changeset
|
757 return client.encryption.getBridgeData(session_data) |
e347e32aa07f
core (memory/encryption): new encryptionNamespaceGet and encryptionTrustUIGet methods:
Goffi <goffi@goffi.org>
parents:
2691
diff
changeset
|
758 |
e347e32aa07f
core (memory/encryption): new encryptionNamespaceGet and encryptionTrustUIGet methods:
Goffi <goffi@goffi.org>
parents:
2691
diff
changeset
|
759 def _encryptionNamespaceGet(self, name): |
e347e32aa07f
core (memory/encryption): new encryptionNamespaceGet and encryptionTrustUIGet methods:
Goffi <goffi@goffi.org>
parents:
2691
diff
changeset
|
760 return encryption.EncryptionHandler.getNSFromName(name) |
e347e32aa07f
core (memory/encryption): new encryptionNamespaceGet and encryptionTrustUIGet methods:
Goffi <goffi@goffi.org>
parents:
2691
diff
changeset
|
761 |
2658
4e130cc9bfc0
core (memore/encryption): new methods and checks:
Goffi <goffi@goffi.org>
parents:
2646
diff
changeset
|
762 def _encryptionPluginsGet(self): |
4e130cc9bfc0
core (memore/encryption): new methods and checks:
Goffi <goffi@goffi.org>
parents:
2646
diff
changeset
|
763 plugins = encryption.EncryptionHandler.getPlugins() |
4e130cc9bfc0
core (memore/encryption): new methods and checks:
Goffi <goffi@goffi.org>
parents:
2646
diff
changeset
|
764 ret = [] |
4e130cc9bfc0
core (memore/encryption): new methods and checks:
Goffi <goffi@goffi.org>
parents:
2646
diff
changeset
|
765 for p in plugins: |
4e130cc9bfc0
core (memore/encryption): new methods and checks:
Goffi <goffi@goffi.org>
parents:
2646
diff
changeset
|
766 ret.append({ |
3028 | 767 "name": p.name, |
768 "namespace": p.namespace, | |
3102
7574f795bd1e
core, bridge: encryptionPluginsGet now returns a serialised list + added "directed" in metadata
Goffi <goffi@goffi.org>
parents:
3088
diff
changeset
|
769 "priority": p.priority, |
7574f795bd1e
core, bridge: encryptionPluginsGet now returns a serialised list + added "directed" in metadata
Goffi <goffi@goffi.org>
parents:
3088
diff
changeset
|
770 "directed": p.directed, |
2658
4e130cc9bfc0
core (memore/encryption): new methods and checks:
Goffi <goffi@goffi.org>
parents:
2646
diff
changeset
|
771 }) |
3102
7574f795bd1e
core, bridge: encryptionPluginsGet now returns a serialised list + added "directed" in metadata
Goffi <goffi@goffi.org>
parents:
3088
diff
changeset
|
772 return data_format.serialise(ret) |
2658
4e130cc9bfc0
core (memore/encryption): new methods and checks:
Goffi <goffi@goffi.org>
parents:
2646
diff
changeset
|
773 |
2733
e347e32aa07f
core (memory/encryption): new encryptionNamespaceGet and encryptionTrustUIGet methods:
Goffi <goffi@goffi.org>
parents:
2691
diff
changeset
|
774 def _encryptionTrustUIGet(self, to_jid_s, namespace, profile_key): |
e347e32aa07f
core (memory/encryption): new encryptionNamespaceGet and encryptionTrustUIGet methods:
Goffi <goffi@goffi.org>
parents:
2691
diff
changeset
|
775 client = self.getClient(profile_key) |
e347e32aa07f
core (memory/encryption): new encryptionNamespaceGet and encryptionTrustUIGet methods:
Goffi <goffi@goffi.org>
parents:
2691
diff
changeset
|
776 to_jid = jid.JID(to_jid_s) |
e347e32aa07f
core (memory/encryption): new encryptionNamespaceGet and encryptionTrustUIGet methods:
Goffi <goffi@goffi.org>
parents:
2691
diff
changeset
|
777 d = client.encryption.getTrustUI(to_jid, namespace=namespace or None) |
e347e32aa07f
core (memory/encryption): new encryptionNamespaceGet and encryptionTrustUIGet methods:
Goffi <goffi@goffi.org>
parents:
2691
diff
changeset
|
778 d.addCallback(lambda xmlui: xmlui.toXml()) |
e347e32aa07f
core (memory/encryption): new encryptionNamespaceGet and encryptionTrustUIGet methods:
Goffi <goffi@goffi.org>
parents:
2691
diff
changeset
|
779 return d |
e347e32aa07f
core (memory/encryption): new encryptionNamespaceGet and encryptionTrustUIGet methods:
Goffi <goffi@goffi.org>
parents:
2691
diff
changeset
|
780 |
1052
e88bff4c8b77
core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents:
1043
diff
changeset
|
781 ## XMPP methods ## |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
579
diff
changeset
|
782 |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
783 def _messageSend(self, to_jid_s, message, subject=None, mess_type="auto", extra=None, |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
784 profile_key=C.PROF_KEY_NONE,): |
1955
633b5c21aefd
backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
785 client = self.getClient(profile_key) |
633b5c21aefd
backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
786 to_jid = jid.JID(to_jid_s) |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
787 # XXX: we need to use the dictionary comprehension because D-Bus return its own |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
788 # types, and pickle can't manage them. TODO: Need to find a better way |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
789 return client.sendMessage( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
790 to_jid, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
791 message, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
792 subject, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
793 mess_type, |
3028 | 794 {str(key): str(value) for key, value in list(extra.items())}, |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
795 ) |
16
0a024d5e0cd0
New account creation (in-band registration)
Goffi <goffi@goffi.org>
parents:
15
diff
changeset
|
796 |
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
|
797 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
|
798 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
|
799 |
2658
4e130cc9bfc0
core (memore/encryption): new methods and checks:
Goffi <goffi@goffi.org>
parents:
2646
diff
changeset
|
800 def setPresence(self, to_jid=None, show="", statuses=None, |
4e130cc9bfc0
core (memore/encryption): new methods and checks:
Goffi <goffi@goffi.org>
parents:
2646
diff
changeset
|
801 profile_key=C.PROF_KEY_NONE): |
0 | 802 """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
|
803 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
|
804 statuses = {} |
63
0db25931b60d
SàT: multi-profiles: somes fixes in core
Goffi <goffi@goffi.org>
parents:
62
diff
changeset
|
805 profile = self.memory.getProfileName(profile_key) |
1262
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1234
diff
changeset
|
806 assert profile |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
807 priority = int( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
808 self.memory.getParamA("Priority", "Connection", profile_key=profile) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
809 ) |
63
0db25931b60d
SàT: multi-profiles: somes fixes in core
Goffi <goffi@goffi.org>
parents:
62
diff
changeset
|
810 self.profiles[profile].presence.available(to_jid, show, statuses, priority) |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
811 # XXX: FIXME: temporary fix to work around openfire 3.7.0 bug (presence is not |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
812 # broadcasted to generating resource) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
813 if "" in statuses: |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
814 statuses[C.PRESENCE_STATUSES_DEFAULT] = statuses.pop("") |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
815 self.bridge.presenceUpdate( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
816 self.profiles[profile].jid.full(), show, int(priority), statuses, profile |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
817 ) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
579
diff
changeset
|
818 |
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
|
819 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
|
820 """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
|
821 @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
|
822 @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
|
823 @param profile_key: profile""" |
63
0db25931b60d
SàT: multi-profiles: somes fixes in core
Goffi <goffi@goffi.org>
parents:
62
diff
changeset
|
824 profile = self.memory.getProfileName(profile_key) |
1262
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1234
diff
changeset
|
825 assert profile |
50 | 826 to_jid = jid.JID(raw_jid) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
827 log.debug( |
3028 | 828 _("subsciption request [%(subs_type)s] for %(jid)s") |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
829 % {"subs_type": subs_type, "jid": to_jid.full()} |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
830 ) |
589
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
831 if subs_type == "subscribe": |
63
0db25931b60d
SàT: multi-profiles: somes fixes in core
Goffi <goffi@goffi.org>
parents:
62
diff
changeset
|
832 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
|
833 elif subs_type == "subscribed": |
89
23caf1051099
multi-profile/subscription misc fixes
Goffi <goffi@goffi.org>
parents:
79
diff
changeset
|
834 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
|
835 elif subs_type == "unsubscribe": |
63
0db25931b60d
SàT: multi-profiles: somes fixes in core
Goffi <goffi@goffi.org>
parents:
62
diff
changeset
|
836 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
|
837 elif subs_type == "unsubscribed": |
63
0db25931b60d
SàT: multi-profiles: somes fixes in core
Goffi <goffi@goffi.org>
parents:
62
diff
changeset
|
838 self.profiles[profile].presence.unsubscribed(to_jid) |
0 | 839 |
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
|
840 def _addContact(self, to_jid_s, profile_key): |
846
59d486726577
core: fix mispelled argument
souliane <souliane@mailoo.org>
parents:
834
diff
changeset
|
841 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
|
842 |
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
|
843 def addContact(self, to_jid, profile_key): |
0 | 844 """Add a contact in roster list""" |
63
0db25931b60d
SàT: multi-profiles: somes fixes in core
Goffi <goffi@goffi.org>
parents:
62
diff
changeset
|
845 profile = self.memory.getProfileName(profile_key) |
1262
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1234
diff
changeset
|
846 assert profile |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
847 # presence is sufficient, as a roster push will be sent according to |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
848 # RFC 6121 §3.1.2 |
63
0db25931b60d
SàT: multi-profiles: somes fixes in core
Goffi <goffi@goffi.org>
parents:
62
diff
changeset
|
849 self.profiles[profile].presence.subscribe(to_jid) |
0 | 850 |
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
|
851 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
|
852 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
|
853 |
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
|
854 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
|
855 """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
|
856 profile = self.memory.getProfileName(profile_key) |
1262
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1234
diff
changeset
|
857 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
|
858 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
|
859 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
|
860 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
|
861 roster_item.groups = set(groups) |
1262
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1234
diff
changeset
|
862 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
|
863 |
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
|
864 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
|
865 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
|
866 |
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
|
867 def delContact(self, to_jid, profile_key): |
0 | 868 """Remove contact from roster list""" |
63
0db25931b60d
SàT: multi-profiles: somes fixes in core
Goffi <goffi@goffi.org>
parents:
62
diff
changeset
|
869 profile = self.memory.getProfileName(profile_key) |
1262
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1234
diff
changeset
|
870 assert profile |
1355
33a21f06551d
core: fixes bug introduced by 1262 (f8a8434dbac7) in SAT.delContact
souliane <souliane@mailoo.org>
parents:
1325
diff
changeset
|
871 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
|
872 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
|
873 |
2892
82b781c46841
core: added a rosterResync method to bridge:
Goffi <goffi@goffi.org>
parents:
2886
diff
changeset
|
874 def _rosterResync(self, profile_key): |
82b781c46841
core: added a rosterResync method to bridge:
Goffi <goffi@goffi.org>
parents:
2886
diff
changeset
|
875 client = self.getClient(profile_key) |
82b781c46841
core: added a rosterResync method to bridge:
Goffi <goffi@goffi.org>
parents:
2886
diff
changeset
|
876 return client.roster.resync() |
82b781c46841
core: added a rosterResync method to bridge:
Goffi <goffi@goffi.org>
parents:
2886
diff
changeset
|
877 |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
943
diff
changeset
|
878 ## Discovery ## |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
943
diff
changeset
|
879 # discovery methods are shortcuts to self.memory.disco |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
943
diff
changeset
|
880 # 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
|
881 |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
943
diff
changeset
|
882 def hasFeature(self, *args, **kwargs): |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
943
diff
changeset
|
883 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
|
884 |
951
027a054c6dda
core (disco): added checkFeature method + fixed hasFeature test
Goffi <goffi@goffi.org>
parents:
949
diff
changeset
|
885 def checkFeature(self, *args, **kwargs): |
027a054c6dda
core (disco): added checkFeature method + fixed hasFeature test
Goffi <goffi@goffi.org>
parents:
949
diff
changeset
|
886 return self.memory.disco.checkFeature(*args, **kwargs) |
027a054c6dda
core (disco): added checkFeature method + fixed hasFeature test
Goffi <goffi@goffi.org>
parents:
949
diff
changeset
|
887 |
1491
704ca56f5ca9
core (disco): added checkFeatures to check several features at once + identities are now managed with a tuple in findFeaturesSet and checkFeatures
Goffi <goffi@goffi.org>
parents:
1482
diff
changeset
|
888 def checkFeatures(self, *args, **kwargs): |
704ca56f5ca9
core (disco): added checkFeatures to check several features at once + identities are now managed with a tuple in findFeaturesSet and checkFeatures
Goffi <goffi@goffi.org>
parents:
1482
diff
changeset
|
889 return self.memory.disco.checkFeatures(*args, **kwargs) |
704ca56f5ca9
core (disco): added checkFeatures to check several features at once + identities are now managed with a tuple in findFeaturesSet and checkFeatures
Goffi <goffi@goffi.org>
parents:
1482
diff
changeset
|
890 |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
943
diff
changeset
|
891 def getDiscoInfos(self, *args, **kwargs): |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
943
diff
changeset
|
892 return self.memory.disco.getInfos(*args, **kwargs) |
0 | 893 |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
943
diff
changeset
|
894 def getDiscoItems(self, *args, **kwargs): |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
943
diff
changeset
|
895 return self.memory.disco.getItems(*args, **kwargs) |
0 | 896 |
2431
a9fac72825a2
memory (disco): added findServiceEntity helper method to get first service of a kind
Goffi <goffi@goffi.org>
parents:
2414
diff
changeset
|
897 def findServiceEntity(self, *args, **kwargs): |
a9fac72825a2
memory (disco): added findServiceEntity helper method to get first service of a kind
Goffi <goffi@goffi.org>
parents:
2414
diff
changeset
|
898 return self.memory.disco.findServiceEntity(*args, **kwargs) |
a9fac72825a2
memory (disco): added findServiceEntity helper method to get first service of a kind
Goffi <goffi@goffi.org>
parents:
2414
diff
changeset
|
899 |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
943
diff
changeset
|
900 def findServiceEntities(self, *args, **kwargs): |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
943
diff
changeset
|
901 return self.memory.disco.findServiceEntities(*args, **kwargs) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
579
diff
changeset
|
902 |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
943
diff
changeset
|
903 def findFeaturesSet(self, *args, **kwargs): |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
943
diff
changeset
|
904 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
|
905 |
2666 | 906 def _findByFeatures(self, namespaces, identities, bare_jids, service, roster, own_jid, |
907 local_device, profile_key): | |
2534
7da86e1633a5
core: new discoFindFeatures method which return all server services/roster entities implementing a set of features.
Goffi <goffi@goffi.org>
parents:
2525
diff
changeset
|
908 client = self.getClient(profile_key) |
3140 | 909 return defer.ensureDeferred(self.findByFeatures( |
910 client, namespaces, identities, bare_jids, service, roster, own_jid, | |
911 local_device)) | |
2534
7da86e1633a5
core: new discoFindFeatures method which return all server services/roster entities implementing a set of features.
Goffi <goffi@goffi.org>
parents:
2525
diff
changeset
|
912 |
3140 | 913 async def findByFeatures( |
914 self, client, namespaces, identities=None, bare_jids=False, service=True, | |
915 roster=True, own_jid=True, local_device=False): | |
916 """Retrieve all services or contacts managing a set a features | |
2534
7da86e1633a5
core: new discoFindFeatures method which return all server services/roster entities implementing a set of features.
Goffi <goffi@goffi.org>
parents:
2525
diff
changeset
|
917 |
7da86e1633a5
core: new discoFindFeatures method which return all server services/roster entities implementing a set of features.
Goffi <goffi@goffi.org>
parents:
2525
diff
changeset
|
918 @param namespaces(list[unicode]): features which must be handled |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
919 @param identities(list[tuple[unicode,unicode]], None): if not None or empty, |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
920 only keep those identities tuple must by (category, type) |
2536
27539029a662
core: added bare_jid and identities arguments to discoGetByFeatures:
Goffi <goffi@goffi.org>
parents:
2534
diff
changeset
|
921 @param bare_jids(bool): retrieve only bare_jids if True |
27539029a662
core: added bare_jid and identities arguments to discoGetByFeatures:
Goffi <goffi@goffi.org>
parents:
2534
diff
changeset
|
922 if False, retrieve full jid of connected devices |
2534
7da86e1633a5
core: new discoFindFeatures method which return all server services/roster entities implementing a set of features.
Goffi <goffi@goffi.org>
parents:
2525
diff
changeset
|
923 @param service(bool): if True return service from our roster |
7da86e1633a5
core: new discoFindFeatures method which return all server services/roster entities implementing a set of features.
Goffi <goffi@goffi.org>
parents:
2525
diff
changeset
|
924 @param roster(bool): if True, return entities in roster |
7da86e1633a5
core: new discoFindFeatures method which return all server services/roster entities implementing a set of features.
Goffi <goffi@goffi.org>
parents:
2525
diff
changeset
|
925 full jid of all matching resources available will be returned |
7da86e1633a5
core: new discoFindFeatures method which return all server services/roster entities implementing a set of features.
Goffi <goffi@goffi.org>
parents:
2525
diff
changeset
|
926 @param own_jid(bool): if True, return profile's jid resources |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
927 @param local_device(bool): if True, return profile's jid local resource |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
928 (i.e. client.jid) |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
929 @return (tuple(dict[jid.JID(), tuple[unicode, unicode, unicode]]*3)): found |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
930 entities in a tuple with: |
2534
7da86e1633a5
core: new discoFindFeatures method which return all server services/roster entities implementing a set of features.
Goffi <goffi@goffi.org>
parents:
2525
diff
changeset
|
931 - service entities |
7da86e1633a5
core: new discoFindFeatures method which return all server services/roster entities implementing a set of features.
Goffi <goffi@goffi.org>
parents:
2525
diff
changeset
|
932 - own entities |
7da86e1633a5
core: new discoFindFeatures method which return all server services/roster entities implementing a set of features.
Goffi <goffi@goffi.org>
parents:
2525
diff
changeset
|
933 - roster entities |
7da86e1633a5
core: new discoFindFeatures method which return all server services/roster entities implementing a set of features.
Goffi <goffi@goffi.org>
parents:
2525
diff
changeset
|
934 """ |
2666 | 935 assert isinstance(namespaces, list) |
2536
27539029a662
core: added bare_jid and identities arguments to discoGetByFeatures:
Goffi <goffi@goffi.org>
parents:
2534
diff
changeset
|
936 if not identities: |
27539029a662
core: added bare_jid and identities arguments to discoGetByFeatures:
Goffi <goffi@goffi.org>
parents:
2534
diff
changeset
|
937 identities = None |
27539029a662
core: added bare_jid and identities arguments to discoGetByFeatures:
Goffi <goffi@goffi.org>
parents:
2534
diff
changeset
|
938 if not namespaces and not identities: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
939 raise exceptions.DataError( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
940 "at least one namespace or one identity must be set" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
941 ) |
2534
7da86e1633a5
core: new discoFindFeatures method which return all server services/roster entities implementing a set of features.
Goffi <goffi@goffi.org>
parents:
2525
diff
changeset
|
942 found_service = {} |
7da86e1633a5
core: new discoFindFeatures method which return all server services/roster entities implementing a set of features.
Goffi <goffi@goffi.org>
parents:
2525
diff
changeset
|
943 found_own = {} |
7da86e1633a5
core: new discoFindFeatures method which return all server services/roster entities implementing a set of features.
Goffi <goffi@goffi.org>
parents:
2525
diff
changeset
|
944 found_roster = {} |
7da86e1633a5
core: new discoFindFeatures method which return all server services/roster entities implementing a set of features.
Goffi <goffi@goffi.org>
parents:
2525
diff
changeset
|
945 if service: |
3140 | 946 services_jids = await self.findFeaturesSet(client, namespaces) |
2791
034c88e9cd93
core (findByFeatures): fixed services discovery
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
947 services_jids = list(services_jids) # we need a list to map results below |
3140 | 948 services_infos = await defer.DeferredList( |
2767
a97c43dc4924
core: findByFeatures speed improvments:
Goffi <goffi@goffi.org>
parents:
2765
diff
changeset
|
949 [self.getDiscoInfos(client, service_jid) for service_jid in services_jids] |
a97c43dc4924
core: findByFeatures speed improvments:
Goffi <goffi@goffi.org>
parents:
2765
diff
changeset
|
950 ) |
a97c43dc4924
core: findByFeatures speed improvments:
Goffi <goffi@goffi.org>
parents:
2765
diff
changeset
|
951 |
a97c43dc4924
core: findByFeatures speed improvments:
Goffi <goffi@goffi.org>
parents:
2765
diff
changeset
|
952 for idx, (success, infos) in enumerate(services_infos): |
a97c43dc4924
core: findByFeatures speed improvments:
Goffi <goffi@goffi.org>
parents:
2765
diff
changeset
|
953 service_jid = services_jids[idx] |
a97c43dc4924
core: findByFeatures speed improvments:
Goffi <goffi@goffi.org>
parents:
2765
diff
changeset
|
954 if not success: |
a97c43dc4924
core: findByFeatures speed improvments:
Goffi <goffi@goffi.org>
parents:
2765
diff
changeset
|
955 log.warning( |
3028 | 956 _("Can't find features for service {service_jid}, ignoring") |
2767
a97c43dc4924
core: findByFeatures speed improvments:
Goffi <goffi@goffi.org>
parents:
2765
diff
changeset
|
957 .format(service_jid=service_jid.full())) |
a97c43dc4924
core: findByFeatures speed improvments:
Goffi <goffi@goffi.org>
parents:
2765
diff
changeset
|
958 continue |
a97c43dc4924
core: findByFeatures speed improvments:
Goffi <goffi@goffi.org>
parents:
2765
diff
changeset
|
959 if (identities is not None |
a97c43dc4924
core: findByFeatures speed improvments:
Goffi <goffi@goffi.org>
parents:
2765
diff
changeset
|
960 and not set(infos.identities.keys()).issuperset(identities)): |
2536
27539029a662
core: added bare_jid and identities arguments to discoGetByFeatures:
Goffi <goffi@goffi.org>
parents:
2534
diff
changeset
|
961 continue |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
962 found_identities = [ |
3028 | 963 (cat, type_, name or "") |
964 for (cat, type_), name in infos.identities.items() | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
965 ] |
2536
27539029a662
core: added bare_jid and identities arguments to discoGetByFeatures:
Goffi <goffi@goffi.org>
parents:
2534
diff
changeset
|
966 found_service[service_jid.full()] = found_identities |
2534
7da86e1633a5
core: new discoFindFeatures method which return all server services/roster entities implementing a set of features.
Goffi <goffi@goffi.org>
parents:
2525
diff
changeset
|
967 |
2666 | 968 to_find = [] |
2534
7da86e1633a5
core: new discoFindFeatures method which return all server services/roster entities implementing a set of features.
Goffi <goffi@goffi.org>
parents:
2525
diff
changeset
|
969 if own_jid: |
2666 | 970 to_find.append((found_own, [client.jid.userhostJID()])) |
971 if roster: | |
972 to_find.append((found_roster, client.roster.getJids())) | |
2534
7da86e1633a5
core: new discoFindFeatures method which return all server services/roster entities implementing a set of features.
Goffi <goffi@goffi.org>
parents:
2525
diff
changeset
|
973 |
3140 | 974 for found, jids in to_find: |
975 full_jids = [] | |
976 disco_defers = [] | |
2767
a97c43dc4924
core: findByFeatures speed improvments:
Goffi <goffi@goffi.org>
parents:
2765
diff
changeset
|
977 |
2534
7da86e1633a5
core: new discoFindFeatures method which return all server services/roster entities implementing a set of features.
Goffi <goffi@goffi.org>
parents:
2525
diff
changeset
|
978 for jid_ in jids: |
7da86e1633a5
core: new discoFindFeatures method which return all server services/roster entities implementing a set of features.
Goffi <goffi@goffi.org>
parents:
2525
diff
changeset
|
979 if jid_.resource: |
2536
27539029a662
core: added bare_jid and identities arguments to discoGetByFeatures:
Goffi <goffi@goffi.org>
parents:
2534
diff
changeset
|
980 if bare_jids: |
27539029a662
core: added bare_jid and identities arguments to discoGetByFeatures:
Goffi <goffi@goffi.org>
parents:
2534
diff
changeset
|
981 continue |
2534
7da86e1633a5
core: new discoFindFeatures method which return all server services/roster entities implementing a set of features.
Goffi <goffi@goffi.org>
parents:
2525
diff
changeset
|
982 resources = [jid_.resource] |
7da86e1633a5
core: new discoFindFeatures method which return all server services/roster entities implementing a set of features.
Goffi <goffi@goffi.org>
parents:
2525
diff
changeset
|
983 else: |
2536
27539029a662
core: added bare_jid and identities arguments to discoGetByFeatures:
Goffi <goffi@goffi.org>
parents:
2534
diff
changeset
|
984 if bare_jids: |
27539029a662
core: added bare_jid and identities arguments to discoGetByFeatures:
Goffi <goffi@goffi.org>
parents:
2534
diff
changeset
|
985 resources = [None] |
27539029a662
core: added bare_jid and identities arguments to discoGetByFeatures:
Goffi <goffi@goffi.org>
parents:
2534
diff
changeset
|
986 else: |
27539029a662
core: added bare_jid and identities arguments to discoGetByFeatures:
Goffi <goffi@goffi.org>
parents:
2534
diff
changeset
|
987 try: |
2597
9446f1ea9eac
core: discoFindByFeatures now return only available resources
Goffi <goffi@goffi.org>
parents:
2595
diff
changeset
|
988 resources = self.memory.getAvailableResources(client, jid_) |
2536
27539029a662
core: added bare_jid and identities arguments to discoGetByFeatures:
Goffi <goffi@goffi.org>
parents:
2534
diff
changeset
|
989 except exceptions.UnknownEntityError: |
27539029a662
core: added bare_jid and identities arguments to discoGetByFeatures:
Goffi <goffi@goffi.org>
parents:
2534
diff
changeset
|
990 continue |
2666 | 991 if not resources and jid_ == client.jid.userhostJID() and own_jid: |
992 # small hack to avoid missing our own resource when this | |
993 # method is called at the very beginning of the session | |
994 # and our presence has not been received yet | |
995 resources = [client.jid.resource] | |
2534
7da86e1633a5
core: new discoFindFeatures method which return all server services/roster entities implementing a set of features.
Goffi <goffi@goffi.org>
parents:
2525
diff
changeset
|
996 for resource in resources: |
7da86e1633a5
core: new discoFindFeatures method which return all server services/roster entities implementing a set of features.
Goffi <goffi@goffi.org>
parents:
2525
diff
changeset
|
997 full_jid = jid.JID(tuple=(jid_.user, jid_.host, resource)) |
2595
973d4551ffae
core: added local_device argument to discoFindByFeatures
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
998 if full_jid == client.jid and not local_device: |
973d4551ffae
core: added local_device argument to discoFindByFeatures
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
999 continue |
2767
a97c43dc4924
core: findByFeatures speed improvments:
Goffi <goffi@goffi.org>
parents:
2765
diff
changeset
|
1000 full_jids.append(full_jid) |
a97c43dc4924
core: findByFeatures speed improvments:
Goffi <goffi@goffi.org>
parents:
2765
diff
changeset
|
1001 |
3140 | 1002 disco_defers.append(self.getDiscoInfos(client, full_jid)) |
2767
a97c43dc4924
core: findByFeatures speed improvments:
Goffi <goffi@goffi.org>
parents:
2765
diff
changeset
|
1003 |
3140 | 1004 d_list = defer.DeferredList(disco_defers) |
1005 # XXX: 10 seconds may be too low for slow connections (e.g. mobiles) | |
1006 # but for discovery, that's also the time the user will wait the first time | |
1007 # before seing the page, if something goes wrong. | |
1008 d_list.addTimeout(10, reactor) | |
1009 infos_data = await d_list | |
2767
a97c43dc4924
core: findByFeatures speed improvments:
Goffi <goffi@goffi.org>
parents:
2765
diff
changeset
|
1010 |
3140 | 1011 for idx, (success, infos) in enumerate(infos_data): |
1012 full_jid = full_jids[idx] | |
1013 if not success: | |
1014 log.warning( | |
1015 _("Can't retrieve {full_jid} infos, ignoring") | |
1016 .format(full_jid=full_jid.full())) | |
2767
a97c43dc4924
core: findByFeatures speed improvments:
Goffi <goffi@goffi.org>
parents:
2765
diff
changeset
|
1017 continue |
3140 | 1018 if infos.features.issuperset(namespaces): |
1019 if identities is not None and not set( | |
1020 infos.identities.keys() | |
1021 ).issuperset(identities): | |
1022 continue | |
1023 found_identities = [ | |
1024 (cat, type_, name or "") | |
1025 for (cat, type_), name in infos.identities.items() | |
1026 ] | |
1027 found[full_jid.full()] = found_identities | |
2534
7da86e1633a5
core: new discoFindFeatures method which return all server services/roster entities implementing a set of features.
Goffi <goffi@goffi.org>
parents:
2525
diff
changeset
|
1028 |
3140 | 1029 return (found_service, found_own, found_roster) |
742
03744d9ebc13
plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
728
diff
changeset
|
1030 |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
579
diff
changeset
|
1031 ## Generic HMI ## |
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
579
diff
changeset
|
1032 |
1622 | 1033 def _killAction(self, keep_id, client): |
3028 | 1034 log.debug("Killing action {} for timeout".format(keep_id)) |
1622 | 1035 client.actions[keep_id] |
1036 | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1037 def actionNew( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1038 self, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1039 action_data, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1040 security_limit=C.NO_SECURITY_LIMIT, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1041 keep_id=None, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1042 profile=C.PROF_KEY_NONE, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1043 ): |
1622 | 1044 """Shortcut to bridge.actionNew which generate and id and keep for retrieval |
1467
ceba6fd77739
core, bridge: new signal actionNew to launch an action from the backend (e.g. display a dialog message):
Goffi <goffi@goffi.org>
parents:
1417
diff
changeset
|
1045 |
ceba6fd77739
core, bridge: new signal actionNew to launch an action from the backend (e.g. display a dialog message):
Goffi <goffi@goffi.org>
parents:
1417
diff
changeset
|
1046 @param action_data(dict): action data (see bridge documentation) |
1599
e2ed8009e66e
backend, bridge, frontends: actionNew has now a security_limit argument + added some docstring to explain data argument
Goffi <goffi@goffi.org>
parents:
1598
diff
changeset
|
1047 @param security_limit: %(doc_security_limit)s |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
1048 @param keep_id(None, unicode): if not None, used to keep action for differed |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
1049 retrieval. Must be set to the callback_id. |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
1050 Action will be deleted after 30 min. |
1467
ceba6fd77739
core, bridge: new signal actionNew to launch an action from the backend (e.g. display a dialog message):
Goffi <goffi@goffi.org>
parents:
1417
diff
changeset
|
1051 @param profile: %(doc_profile)s |
ceba6fd77739
core, bridge: new signal actionNew to launch an action from the backend (e.g. display a dialog message):
Goffi <goffi@goffi.org>
parents:
1417
diff
changeset
|
1052 """ |
3028 | 1053 id_ = str(uuid.uuid4()) |
1622 | 1054 if keep_id is not None: |
1055 client = self.getClient(profile) | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1056 action_timer = reactor.callLater(60 * 30, self._killAction, keep_id, client) |
1622 | 1057 client.actions[keep_id] = (action_data, id_, security_limit, action_timer) |
1058 | |
1599
e2ed8009e66e
backend, bridge, frontends: actionNew has now a security_limit argument + added some docstring to explain data argument
Goffi <goffi@goffi.org>
parents:
1598
diff
changeset
|
1059 self.bridge.actionNew(action_data, id_, security_limit, profile) |
1467
ceba6fd77739
core, bridge: new signal actionNew to launch an action from the backend (e.g. display a dialog message):
Goffi <goffi@goffi.org>
parents:
1417
diff
changeset
|
1060 |
1622 | 1061 def actionsGet(self, profile): |
1062 """Return current non answered actions | |
1063 | |
1064 @param profile: %(doc_profile)s | |
1065 """ | |
1066 client = self.getClient(profile) | |
3028 | 1067 return [action_tuple[:-1] for action_tuple in client.actions.values()] |
1622 | 1068 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1069 def registerProgressCb( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1070 self, progress_id, callback, metadata=None, profile=C.PROF_KEY_NONE |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1071 ): |
0 | 1072 """Register a callback called when progress is requested for id""" |
1626
63cef4dbf2a4
core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents:
1624
diff
changeset
|
1073 if metadata is None: |
63cef4dbf2a4
core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents:
1624
diff
changeset
|
1074 metadata = {} |
538
2c4016921403
core, frontends, bridgen plugins: fixed methods which were unproperly managing multi-profiles
Goffi <goffi@goffi.org>
parents:
536
diff
changeset
|
1075 client = self.getClient(profile) |
1522
7d7e57a84792
core: progression handling improvments:
Goffi <goffi@goffi.org>
parents:
1503
diff
changeset
|
1076 if progress_id in client._progress_cb: |
3028 | 1077 raise exceptions.ConflictError("Progress ID is not unique !") |
1626
63cef4dbf2a4
core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents:
1624
diff
changeset
|
1078 client._progress_cb[progress_id] = (callback, metadata) |
0 | 1079 |
1522
7d7e57a84792
core: progression handling improvments:
Goffi <goffi@goffi.org>
parents:
1503
diff
changeset
|
1080 def removeProgressCb(self, progress_id, profile): |
0 | 1081 """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
|
1082 client = self.getClient(profile) |
1522
7d7e57a84792
core: progression handling improvments:
Goffi <goffi@goffi.org>
parents:
1503
diff
changeset
|
1083 try: |
7d7e57a84792
core: progression handling improvments:
Goffi <goffi@goffi.org>
parents:
1503
diff
changeset
|
1084 del client._progress_cb[progress_id] |
7d7e57a84792
core: progression handling improvments:
Goffi <goffi@goffi.org>
parents:
1503
diff
changeset
|
1085 except KeyError: |
3028 | 1086 log.error(_("Trying to remove an unknow progress callback")) |
1522
7d7e57a84792
core: progression handling improvments:
Goffi <goffi@goffi.org>
parents:
1503
diff
changeset
|
1087 |
7d7e57a84792
core: progression handling improvments:
Goffi <goffi@goffi.org>
parents:
1503
diff
changeset
|
1088 def _progressGet(self, progress_id, profile): |
7d7e57a84792
core: progression handling improvments:
Goffi <goffi@goffi.org>
parents:
1503
diff
changeset
|
1089 data = self.progressGet(progress_id, profile) |
3028 | 1090 return {k: str(v) for k, v in data.items()} |
0 | 1091 |
1522
7d7e57a84792
core: progression handling improvments:
Goffi <goffi@goffi.org>
parents:
1503
diff
changeset
|
1092 def progressGet(self, progress_id, profile): |
0 | 1093 """Return a dict with progress information |
1522
7d7e57a84792
core: progression handling improvments:
Goffi <goffi@goffi.org>
parents:
1503
diff
changeset
|
1094 |
7d7e57a84792
core: progression handling improvments:
Goffi <goffi@goffi.org>
parents:
1503
diff
changeset
|
1095 @param progress_id(unicode): unique id of the progressing element |
7d7e57a84792
core: progression handling improvments:
Goffi <goffi@goffi.org>
parents:
1503
diff
changeset
|
1096 @param profile: %(doc_profile)s |
7d7e57a84792
core: progression handling improvments:
Goffi <goffi@goffi.org>
parents:
1503
diff
changeset
|
1097 @return (dict): data with the following keys: |
7d7e57a84792
core: progression handling improvments:
Goffi <goffi@goffi.org>
parents:
1503
diff
changeset
|
1098 'position' (int): current possition |
7d7e57a84792
core: progression handling improvments:
Goffi <goffi@goffi.org>
parents:
1503
diff
changeset
|
1099 'size' (int): end_position |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
1100 if id doesn't exists (may be a finished progression), and empty dict is |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
1101 returned |
0 | 1102 """ |
538
2c4016921403
core, frontends, bridgen plugins: fixed methods which were unproperly managing multi-profiles
Goffi <goffi@goffi.org>
parents:
536
diff
changeset
|
1103 client = self.getClient(profile) |
0 | 1104 try: |
1626
63cef4dbf2a4
core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents:
1624
diff
changeset
|
1105 data = client._progress_cb[progress_id][0](progress_id, profile) |
0 | 1106 except KeyError: |
1598
b144babc2658
core, plugin file: fixed progress id + data is now returned by getProgress, instead of being an argument to fill
Goffi <goffi@goffi.org>
parents:
1595
diff
changeset
|
1107 data = {} |
0 | 1108 return data |
1109 | |
1522
7d7e57a84792
core: progression handling improvments:
Goffi <goffi@goffi.org>
parents:
1503
diff
changeset
|
1110 def _progressGetAll(self, profile_key): |
7d7e57a84792
core: progression handling improvments:
Goffi <goffi@goffi.org>
parents:
1503
diff
changeset
|
1111 progress_all = self.progressGetAll(profile_key) |
3028 | 1112 for profile, progress_dict in progress_all.items(): |
1113 for progress_id, data in progress_dict.items(): | |
1114 for key, value in data.items(): | |
1115 data[key] = str(value) | |
1522
7d7e57a84792
core: progression handling improvments:
Goffi <goffi@goffi.org>
parents:
1503
diff
changeset
|
1116 return progress_all |
7d7e57a84792
core: progression handling improvments:
Goffi <goffi@goffi.org>
parents:
1503
diff
changeset
|
1117 |
1626
63cef4dbf2a4
core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents:
1624
diff
changeset
|
1118 def progressGetAllMetadata(self, profile_key): |
63cef4dbf2a4
core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents:
1624
diff
changeset
|
1119 """Return all progress metadata at once |
1522
7d7e57a84792
core: progression handling improvments:
Goffi <goffi@goffi.org>
parents:
1503
diff
changeset
|
1120 |
1626
63cef4dbf2a4
core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents:
1624
diff
changeset
|
1121 @param profile_key: %(doc_profile)s |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
1122 if C.PROF_KEY_ALL is used, all progress metadata from all profiles are |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
1123 returned |
1626
63cef4dbf2a4
core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents:
1624
diff
changeset
|
1124 @return (dict[dict[dict]]): a dict which map profile to progress_dict |
63cef4dbf2a4
core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents:
1624
diff
changeset
|
1125 progress_dict map progress_id to progress_data |
63cef4dbf2a4
core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents:
1624
diff
changeset
|
1126 progress_metadata is the same dict as sent by [progressStarted] |
63cef4dbf2a4
core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents:
1624
diff
changeset
|
1127 """ |
63cef4dbf2a4
core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents:
1624
diff
changeset
|
1128 clients = self.getClients(profile_key) |
63cef4dbf2a4
core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents:
1624
diff
changeset
|
1129 progress_all = {} |
63cef4dbf2a4
core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents:
1624
diff
changeset
|
1130 for client in clients: |
63cef4dbf2a4
core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents:
1624
diff
changeset
|
1131 profile = client.profile |
63cef4dbf2a4
core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents:
1624
diff
changeset
|
1132 progress_dict = {} |
63cef4dbf2a4
core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents:
1624
diff
changeset
|
1133 progress_all[profile] = progress_dict |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1134 for ( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1135 progress_id, |
2765
378188abe941
misc: replaced all "dummy" by the more conventional and readable "__" ("_" being used for gettext)
Goffi <goffi@goffi.org>
parents:
2733
diff
changeset
|
1136 (__, progress_metadata), |
3028 | 1137 ) in client._progress_cb.items(): |
1626
63cef4dbf2a4
core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents:
1624
diff
changeset
|
1138 progress_dict[progress_id] = progress_metadata |
63cef4dbf2a4
core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents:
1624
diff
changeset
|
1139 return progress_all |
63cef4dbf2a4
core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents:
1624
diff
changeset
|
1140 |
63cef4dbf2a4
core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents:
1624
diff
changeset
|
1141 def progressGetAll(self, profile_key): |
63cef4dbf2a4
core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents:
1624
diff
changeset
|
1142 """Return all progress status at once |
63cef4dbf2a4
core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents:
1624
diff
changeset
|
1143 |
63cef4dbf2a4
core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents:
1624
diff
changeset
|
1144 @param profile_key: %(doc_profile)s |
63cef4dbf2a4
core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents:
1624
diff
changeset
|
1145 if C.PROF_KEY_ALL is used, all progress status from all profiles are returned |
1598
b144babc2658
core, plugin file: fixed progress id + data is now returned by getProgress, instead of being an argument to fill
Goffi <goffi@goffi.org>
parents:
1595
diff
changeset
|
1146 @return (dict[dict[dict]]): a dict which map profile to progress_dict |
b144babc2658
core, plugin file: fixed progress id + data is now returned by getProgress, instead of being an argument to fill
Goffi <goffi@goffi.org>
parents:
1595
diff
changeset
|
1147 progress_dict map progress_id to progress_data |
b144babc2658
core, plugin file: fixed progress id + data is now returned by getProgress, instead of being an argument to fill
Goffi <goffi@goffi.org>
parents:
1595
diff
changeset
|
1148 progress_data is the same dict as returned by [progressGet] |
1522
7d7e57a84792
core: progression handling improvments:
Goffi <goffi@goffi.org>
parents:
1503
diff
changeset
|
1149 """ |
7d7e57a84792
core: progression handling improvments:
Goffi <goffi@goffi.org>
parents:
1503
diff
changeset
|
1150 clients = self.getClients(profile_key) |
7d7e57a84792
core: progression handling improvments:
Goffi <goffi@goffi.org>
parents:
1503
diff
changeset
|
1151 progress_all = {} |
7d7e57a84792
core: progression handling improvments:
Goffi <goffi@goffi.org>
parents:
1503
diff
changeset
|
1152 for client in clients: |
7d7e57a84792
core: progression handling improvments:
Goffi <goffi@goffi.org>
parents:
1503
diff
changeset
|
1153 profile = client.profile |
7d7e57a84792
core: progression handling improvments:
Goffi <goffi@goffi.org>
parents:
1503
diff
changeset
|
1154 progress_dict = {} |
7d7e57a84792
core: progression handling improvments:
Goffi <goffi@goffi.org>
parents:
1503
diff
changeset
|
1155 progress_all[profile] = progress_dict |
3028 | 1156 for progress_id, (progress_cb, __) in client._progress_cb.items(): |
1626
63cef4dbf2a4
core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents:
1624
diff
changeset
|
1157 progress_dict[progress_id] = progress_cb(progress_id, profile) |
1522
7d7e57a84792
core: progression handling improvments:
Goffi <goffi@goffi.org>
parents:
1503
diff
changeset
|
1158 return progress_all |
7d7e57a84792
core: progression handling improvments:
Goffi <goffi@goffi.org>
parents:
1503
diff
changeset
|
1159 |
759
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
1160 def registerCallback(self, callback, *args, **kwargs): |
1603
2b82d846848e
core: added callback_id in DataError message of launchCallback
Goffi <goffi@goffi.org>
parents:
1599
diff
changeset
|
1161 """Register a callback. |
2b82d846848e
core: added callback_id in DataError message of launchCallback
Goffi <goffi@goffi.org>
parents:
1599
diff
changeset
|
1162 |
2126 | 1163 @param callback(callable): method to call |
1164 @param kwargs: can contain: | |
1165 with_data(bool): True if the callback use the optional data dict | |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
1166 force_id(unicode): id to avoid generated id. Can lead to name conflict, avoid |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
1167 if possible |
2733
e347e32aa07f
core (memory/encryption): new encryptionNamespaceGet and encryptionTrustUIGet methods:
Goffi <goffi@goffi.org>
parents:
2691
diff
changeset
|
1168 one_shot(bool): True to delete callback once it has been called |
759
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
1169 @return: id of the registered callback |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
1170 """ |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1171 callback_id = kwargs.pop("force_id", None) |
759
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
1172 if callback_id is None: |
2167
4b78b4c7f805
core, frontends: various fixes for Libervia:
Goffi <goffi@goffi.org>
parents:
2147
diff
changeset
|
1173 callback_id = str(uuid.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
|
1174 else: |
759
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
1175 if callback_id in self._cb_map: |
3028 | 1176 raise exceptions.ConflictError(_("id already registered")) |
759
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
1177 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
|
1178 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1179 if "one_shot" in kwargs: # One Shot callback are removed after 30 min |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1180 |
806
5d6c45d6ee1b
core: added "one_shot" option to registered callback:
Goffi <goffi@goffi.org>
parents:
801
diff
changeset
|
1181 def purgeCallback(): |
5d6c45d6ee1b
core: added "one_shot" option to registered callback:
Goffi <goffi@goffi.org>
parents:
801
diff
changeset
|
1182 try: |
5d6c45d6ee1b
core: added "one_shot" option to registered callback:
Goffi <goffi@goffi.org>
parents:
801
diff
changeset
|
1183 self.removeCallback(callback_id) |
5d6c45d6ee1b
core: added "one_shot" option to registered callback:
Goffi <goffi@goffi.org>
parents:
801
diff
changeset
|
1184 except KeyError: |
5d6c45d6ee1b
core: added "one_shot" option to registered callback:
Goffi <goffi@goffi.org>
parents:
801
diff
changeset
|
1185 pass |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1186 |
806
5d6c45d6ee1b
core: added "one_shot" option to registered callback:
Goffi <goffi@goffi.org>
parents:
801
diff
changeset
|
1187 reactor.callLater(1800, purgeCallback) |
5d6c45d6ee1b
core: added "one_shot" option to registered callback:
Goffi <goffi@goffi.org>
parents:
801
diff
changeset
|
1188 |
759
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
1189 return callback_id |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
1190 |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
1191 def removeCallback(self, callback_id): |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
1192 """ Remove a previously registered callback |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
1193 @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
|
1194 log.debug("Removing callback [%s]" % callback_id) |
759
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
1195 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
|
1196 |
916
1a759096ccbd
core: use of Const for profile_key + replaced '@DEFAULT@' default profile_key by '@NONE@'
Goffi <goffi@goffi.org>
parents:
914
diff
changeset
|
1197 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
|
1198 """Launch a specific callback |
2126 | 1199 |
759
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
1200 @param callback_id: id of the action (callback) to launch |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
1201 @param data: optional data |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
1202 @profile_key: %(doc_profile_key)s |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
1203 @return: a deferred which fire a dict where key can be: |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
1204 - xmlui: a XMLUI need to be displayed |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
1205 - validated: if present, can be used to launch a callback, it can have the |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
1206 values |
1262
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1234
diff
changeset
|
1207 - C.BOOL_TRUE |
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1234
diff
changeset
|
1208 - C.BOOL_FALSE |
759
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
1209 """ |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1210 # FIXME: security limit need to be checked here |
1622 | 1211 try: |
1624 | 1212 client = self.getClient(profile_key) |
1213 except exceptions.NotFound: | |
1214 # client is not available yet | |
1215 profile = self.memory.getProfileName(profile_key) | |
1216 if not profile: | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1217 raise exceptions.ProfileUnknownError( |
3028 | 1218 _("trying to launch action with a non-existant profile") |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1219 ) |
1622 | 1220 else: |
1624 | 1221 profile = client.profile |
1222 # we check if the action is kept, and remove it | |
1223 try: | |
1224 action_tuple = client.actions[callback_id] | |
1225 except KeyError: | |
1226 pass | |
1227 else: | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1228 action_tuple[-1].cancel() # the last item is the action timer |
1624 | 1229 del client.actions[callback_id] |
759
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
1230 |
22
bb72c29f3432
added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents:
18
diff
changeset
|
1231 try: |
759
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
1232 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
|
1233 except KeyError: |
3028 | 1234 raise exceptions.DataError("Unknown callback id {}".format(callback_id)) |
759
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
1235 |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
1236 if kwargs.get("with_data", False): |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
1237 if data is None: |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
1238 raise exceptions.DataError("Required data for this callback is missing") |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1239 args, kwargs = ( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1240 list(args)[:], |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1241 kwargs.copy(), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1242 ) # we don't want to modify the original (kw)args |
759
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
1243 args.insert(0, data) |
1624 | 1244 kwargs["profile"] = profile |
759
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
1245 del kwargs["with_data"] |
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
1246 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1247 if kwargs.pop("one_shot", False): |
806
5d6c45d6ee1b
core: added "one_shot" option to registered callback:
Goffi <goffi@goffi.org>
parents:
801
diff
changeset
|
1248 self.removeCallback(callback_id) |
5d6c45d6ee1b
core: added "one_shot" option to registered callback:
Goffi <goffi@goffi.org>
parents:
801
diff
changeset
|
1249 |
759
93bd868b8fb6
backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents:
755
diff
changeset
|
1250 return defer.maybeDeferred(callback, *args, **kwargs) |
0 | 1251 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1252 # Menus management |
101 | 1253 |
2126 | 1254 def _getMenuCanonicalPath(self, path): |
1255 """give canonical form of path | |
1256 | |
1257 canonical form is a tuple of the path were every element is stripped and lowercase | |
1258 @param path(iterable[unicode]): untranslated path to menu | |
1259 @return (tuple[unicode]): canonical form of path | |
1260 """ | |
1261 return tuple((p.lower().strip() for p in path)) | |
1262 | |
2810
c161a294fffd
core: added a base menu allowing to set encryption session or show the trust management UI.
Goffi <goffi@goffi.org>
parents:
2791
diff
changeset
|
1263 def importMenu(self, path, callback, security_limit=C.NO_SECURITY_LIMIT, |
c161a294fffd
core: added a base menu allowing to set encryption session or show the trust management UI.
Goffi <goffi@goffi.org>
parents:
2791
diff
changeset
|
1264 help_string="", type_=C.MENU_GLOBAL): |
3028 | 1265 r"""register a new menu for frontends |
1963
a2bc5089c2eb
backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents:
1955
diff
changeset
|
1266 |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
1267 @param path(iterable[unicode]): path to go to the menu |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
1268 (category/subcategory/.../item) (e.g.: ("File", "Open")) |
773 | 1269 /!\ use D_() instead of _() for translations (e.g. (D_("File"), D_("Open"))) |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
1270 untranslated/lower case path can be used to identity a menu, for this reason |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
1271 it must be unique independently of case. |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
1272 @param callback(callable): method to be called when menuitem is selected, callable |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
1273 or a callback id (string) as returned by [registerCallback] |
2126 | 1274 @param security_limit(int): %(doc_security_limit)s |
809 | 1275 /!\ security_limit MUST be added to data in launchCallback if used #TODO |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
1276 @param help_string(unicode): string used to indicate what the menu do (can be |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
1277 show as a tooltip). |
773 | 1278 /!\ use D_() instead of _() for translations |
2126 | 1279 @param type(unicode): one of: |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
1280 - C.MENU_GLOBAL: classical menu, can be shown in a menubar on top (e.g. |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
1281 something like File/Open) |
1092
0eefc74c346b
core (menus): constants are used for menu types
Goffi <goffi@goffi.org>
parents:
1089
diff
changeset
|
1282 - 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
|
1283 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
|
1284 - 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
|
1285 menu_data must contain a "jid" data |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
1286 - C.MENU_JID_CONTEXT: contextual menu, used with any jid (e.g.: ad hoc |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
1287 commands, jid is already filled) |
1092
0eefc74c346b
core (menus): constants are used for menu types
Goffi <goffi@goffi.org>
parents:
1089
diff
changeset
|
1288 menu_data must contain a "jid" data |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
1289 - C.MENU_ROSTER_JID_CONTEXT: like JID_CONTEXT, but restricted to jids in |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
1290 roster. |
1092
0eefc74c346b
core (menus): constants are used for menu types
Goffi <goffi@goffi.org>
parents:
1089
diff
changeset
|
1291 menu_data must contain a "room_jid" data |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
1292 - C.MENU_ROSTER_GROUP_CONTEXT: contextual menu, used with group (e.g.: publish |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
1293 microblog, group is already filled) |
1092
0eefc74c346b
core (menus): constants are used for menu types
Goffi <goffi@goffi.org>
parents:
1089
diff
changeset
|
1294 menu_data must contain a "group" data |
2126 | 1295 @return (unicode): 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
|
1296 """ |
773 | 1297 |
1298 if callable(callback): | |
1299 callback_id = self.registerCallback(callback, with_data=True) | |
3028 | 1300 elif isinstance(callback, str): |
773 | 1301 # The callback is already registered |
1302 callback_id = callback | |
1303 try: | |
1304 callback, args, kwargs = self._cb_map[callback_id] | |
1305 except KeyError: | |
1306 raise exceptions.DataError("Unknown callback id") | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1307 kwargs["with_data"] = True # we have to be sure that we use extra data |
773 | 1308 else: |
1309 raise exceptions.DataError("Unknown callback type") | |
1310 | |
3028 | 1311 for menu_data in self._menus.values(): |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1312 if menu_data["path"] == path and menu_data["type"] == type_: |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1313 raise exceptions.ConflictError( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1314 _("A menu with the same path and type already exists") |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1315 ) |
773 | 1316 |
2126 | 1317 path_canonical = self._getMenuCanonicalPath(path) |
1318 menu_key = (type_, path_canonical) | |
1319 | |
1320 if menu_key in self._menus_paths: | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1321 raise exceptions.ConflictError( |
3028 | 1322 "this menu path is already used: {path} ({menu_key})".format( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1323 path=path_canonical, menu_key=menu_key |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1324 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1325 ) |
2126 | 1326 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1327 menu_data = { |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1328 "path": tuple(path), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1329 "path_canonical": path_canonical, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1330 "security_limit": security_limit, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1331 "help_string": help_string, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1332 "type": type_, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1333 } |
773 | 1334 |
1335 self._menus[callback_id] = menu_data | |
2126 | 1336 self._menus_paths[menu_key] = callback_id |
773 | 1337 |
1338 return callback_id | |
101 | 1339 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1340 def getMenus(self, language="", security_limit=C.NO_SECURITY_LIMIT): |
773 | 1341 """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
|
1342 |
773 | 1343 @param language: language used for translation, or empty string for default |
1344 @param security_limit: %(doc_security_limit)s | |
1345 @return: array of tuple with: | |
1346 - menu id (same as callback_id) | |
1347 - menu type | |
1348 - raw menu path (array of strings) | |
1349 - 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
|
1350 - 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
|
1351 - 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
|
1352 - help_url: link to a page with more complete documentation (TODO) |
773 | 1353 """ |
1354 ret = [] | |
3028 | 1355 for menu_id, menu_data in self._menus.items(): |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1356 type_ = menu_data["type"] |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1357 path = menu_data["path"] |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1358 menu_security_limit = menu_data["security_limit"] |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1359 if security_limit != C.NO_SECURITY_LIMIT and ( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1360 menu_security_limit == C.NO_SECURITY_LIMIT |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1361 or menu_security_limit > security_limit |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1362 ): |
809 | 1363 continue |
773 | 1364 languageSwitch(language) |
1365 path_i18n = [_(elt) for elt in path] | |
1366 languageSwitch() | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1367 extra = {} # TODO: manage extra data like icon |
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
|
1368 ret.append((menu_id, type_, path, path_i18n, extra)) |
773 | 1369 |
1370 return ret | |
1371 | |
2879 | 1372 def _launchMenu(self, menu_type, path, data=None, security_limit=C.NO_SECURITY_LIMIT, |
1373 profile_key=C.PROF_KEY_NONE): | |
2126 | 1374 client = self.getClient(profile_key) |
1375 return self.launchMenu(client, menu_type, path, data, security_limit) | |
1376 | |
2879 | 1377 def launchMenu(self, client, menu_type, path, data=None, |
1378 security_limit=C.NO_SECURITY_LIMIT): | |
2126 | 1379 """launch action a menu action |
1380 | |
1381 @param menu_type(unicode): type of menu to launch | |
1382 @param path(iterable[unicode]): canonical path of the menu | |
1383 @params data(dict): menu data | |
1384 @raise NotFound: this path is not known | |
1385 """ | |
1386 # FIXME: manage security_limit here | |
1387 # defaut security limit should be high instead of C.NO_SECURITY_LIMIT | |
1388 canonical_path = self._getMenuCanonicalPath(path) | |
1389 menu_key = (menu_type, canonical_path) | |
1390 try: | |
1391 callback_id = self._menus_paths[menu_key] | |
1392 except KeyError: | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1393 raise exceptions.NotFound( |
3028 | 1394 "Can't find menu {path} ({menu_type})".format( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1395 path=canonical_path, menu_type=menu_type |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1396 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1397 ) |
2126 | 1398 return self.launchCallback(callback_id, data, client.profile) |
1399 | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1400 def getMenuHelp(self, menu_id, language=""): |
2113
9c861d07b5b6
core: added sessionGetInfos bridge method to retrieve various data on current profile session + client.started keep start time
Goffi <goffi@goffi.org>
parents:
2105
diff
changeset
|
1401 """return the help string of the menu |
9c861d07b5b6
core: added sessionGetInfos bridge method to retrieve various data on current profile session + client.started keep start time
Goffi <goffi@goffi.org>
parents:
2105
diff
changeset
|
1402 |
773 | 1403 @param menu_id: id of the menu (same as callback_id) |
1404 @param language: language used for translation, or empty string for default | |
1405 @param return: translated help | |
1406 | |
1407 """ | |
101 | 1408 try: |
773 | 1409 menu_data = self._menus[menu_id] |
101 | 1410 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
|
1411 raise exceptions.DataError("Trying to access an unknown menu") |
773 | 1412 languageSwitch(language) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2597
diff
changeset
|
1413 help_string = _(menu_data["help_string"]) |
773 | 1414 languageSwitch() |
1415 return help_string |