annotate libervia/frontends/quick_frontend/quick_app.py @ 4232:0fbe5c605eb6

tests (unit/webrtc,XEP-0176, XEP-0234): Fix tests and add webrtc file transfer tests: fix 441
author Goffi <goffi@goffi.org>
date Sat, 06 Apr 2024 12:59:50 +0200
parents 45e3bb8607d8
children d01b8d002619
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3137
559a625a236b fixed shebangs
Goffi <goffi@goffi.org>
parents: 3136
diff changeset
1 #!/usr/bin/env python3
559a625a236b fixed shebangs
Goffi <goffi@goffi.org>
parents: 3136
diff changeset
2
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 587
diff changeset
3 # helper class for making a SAT frontend
3479
be6d91572633 date update
Goffi <goffi@goffi.org>
parents: 3254
diff changeset
4 # Copyright (C) 2009-2021 Jérôme Poisson (goffi@goffi.org)
0
goffi@necton2
parents:
diff changeset
5
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 587
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: 587
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: 587
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: 587
diff changeset
9 # (at your option) any later version.
0
goffi@necton2
parents:
diff changeset
10
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 587
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: 587
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: 587
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: 587
diff changeset
14 # GNU Affero General Public License for more details.
0
goffi@necton2
parents:
diff changeset
15
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 587
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: 587
diff changeset
17 # along with this program. If not, see <http://www.gnu.org/licenses/>.
0
goffi@necton2
parents:
diff changeset
18
4126
45e3bb8607d8 frontends (quick app): allow frontend to register an action handler:
Goffi <goffi@goffi.org>
parents: 4125
diff changeset
19 import sys
45e3bb8607d8 frontends (quick app): allow frontend to register an action handler:
Goffi <goffi@goffi.org>
parents: 4125
diff changeset
20 import time
45e3bb8607d8 frontends (quick app): allow frontend to register an action handler:
Goffi <goffi@goffi.org>
parents: 4125
diff changeset
21 from typing import Callable
45e3bb8607d8 frontends (quick app): allow frontend to register an action handler:
Goffi <goffi@goffi.org>
parents: 4125
diff changeset
22
45e3bb8607d8 frontends (quick app): allow frontend to register an action handler:
Goffi <goffi@goffi.org>
parents: 4125
diff changeset
23 from libervia.backend.core import exceptions
4071
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4041
diff changeset
24 from libervia.backend.core.i18n import _
4126
45e3bb8607d8 frontends (quick app): allow frontend to register an action handler:
Goffi <goffi@goffi.org>
parents: 4125
diff changeset
25 from libervia.backend.core.log import getLogger
4071
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4041
diff changeset
26 from libervia.backend.tools import trigger
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4041
diff changeset
27 from libervia.backend.tools.common import data_format
4074
26b7ed2817da refactoring: rename `sat_frontends` to `libervia.frontends`
Goffi <goffi@goffi.org>
parents: 4071
diff changeset
28 from libervia.frontends.quick_frontend import quick_widgets
26b7ed2817da refactoring: rename `sat_frontends` to `libervia.frontends`
Goffi <goffi@goffi.org>
parents: 4071
diff changeset
29 from libervia.frontends.quick_frontend import quick_menus
26b7ed2817da refactoring: rename `sat_frontends` to `libervia.frontends`
Goffi <goffi@goffi.org>
parents: 4071
diff changeset
30 from libervia.frontends.quick_frontend import quick_blog
26b7ed2817da refactoring: rename `sat_frontends` to `libervia.frontends`
Goffi <goffi@goffi.org>
parents: 4071
diff changeset
31 from libervia.frontends.quick_frontend import quick_chat, quick_games
26b7ed2817da refactoring: rename `sat_frontends` to `libervia.frontends`
Goffi <goffi@goffi.org>
parents: 4071
diff changeset
32 from libervia.frontends.quick_frontend import quick_contact_list
26b7ed2817da refactoring: rename `sat_frontends` to `libervia.frontends`
Goffi <goffi@goffi.org>
parents: 4071
diff changeset
33 from libervia.frontends.quick_frontend.constants import Const as C
4126
45e3bb8607d8 frontends (quick app): allow frontend to register an action handler:
Goffi <goffi@goffi.org>
parents: 4125
diff changeset
34 from libervia.frontends.tools import jid
906
1cbae66fa725 quick_app: better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 811
diff changeset
35
3113
b067736d5099 quick frontend (app): removed workaround for pyjamas
Goffi <goffi@goffi.org>
parents: 3102
diff changeset
36
b067736d5099 quick frontend (app): removed workaround for pyjamas
Goffi <goffi@goffi.org>
parents: 3102
diff changeset
37 log = getLogger(__name__)
1326
88e40f31b17e quick_frontend (quick_app): fixes the call to a bridge method that was done with a JID instead of unicode
souliane <souliane@mailoo.org>
parents: 1325
diff changeset
38
88e40f31b17e quick_frontend (quick_app): fixes the call to a bridge method that was done with a JID instead of unicode
souliane <souliane@mailoo.org>
parents: 1325
diff changeset
39
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
40 class ProfileManager(object):
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
41 """Class managing all data relative to one profile, and plugging in mechanism"""
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
42
2050
046449cc2bff core, bridge, frontends: removed deprecated bridge method askConfirmation, confirmationAnswer, actionResult, actionResultExt and getWaitingConf
Goffi <goffi@goffi.org>
parents: 2049
diff changeset
43 # TODO: handle waiting XMLUI requests: getWaitingConf doesn't exist anymore
046449cc2bff core, bridge, frontends: removed deprecated bridge method askConfirmation, confirmationAnswer, actionResult, actionResultExt and getWaitingConf
Goffi <goffi@goffi.org>
parents: 2049
diff changeset
44 # and a way to keep some XMLUI request between sessions is expected in backend
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
45 host = None
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
46 bridge = None
3254
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3232
diff changeset
47 cache_keys_to_get = ['avatar', 'nicknames']
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
48
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
49 def __init__(self, profile):
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
50 self.profile = profile
2091
f413bfc24458 bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
51 self.connected = False
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
52 self.whoami = None
1972
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1970
diff changeset
53 self.notifications = {} # key: bare jid or '' for general, value: notif data
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
54
2091
f413bfc24458 bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
55 @property
f413bfc24458 bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
56 def autodisconnect(self):
f413bfc24458 bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
57 try:
f413bfc24458 bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
58 autodisconnect = self._autodisconnect
f413bfc24458 bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
59 except AttributeError:
f413bfc24458 bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
60 autodisconnect = False
f413bfc24458 bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
61 return autodisconnect
f413bfc24458 bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
62
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
63 def plug(self):
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
64 """Plug the profile to the host"""
2685
eb69ec549d05 quick frontend (app): create the contact list immediatly on plug
Goffi <goffi@goffi.org>
parents: 2669
diff changeset
65 # first of all we create the contact lists
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
66 self.host.contact_lists.add_profile(self.profile)
2685
eb69ec549d05 quick frontend (app): create the contact list immediatly on plug
Goffi <goffi@goffi.org>
parents: 2669
diff changeset
67
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
68 # we get the essential params
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
69 self.bridge.param_get_a_async(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
70 "JabberID",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
71 "Connection",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
72 profile_key=self.profile,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
73 callback=self._plug_profile_jid,
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
74 errback=self._get_param_error,
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
75 )
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
76
1435
7590bbf44eed bridge, quick_frontend: the JID that is assigned by the server can differ from the one we asked for (resource)
souliane <souliane@mailoo.org>
parents: 1429
diff changeset
77 def _plug_profile_jid(self, jid_s):
7590bbf44eed bridge, quick_frontend: the JID that is assigned by the server can differ from the one we asked for (resource)
souliane <souliane@mailoo.org>
parents: 1429
diff changeset
78 self.whoami = jid.JID(jid_s) # resource might change after the connection
3130
b9486a7f9b4f quick frontend (app): log own jid when received
Goffi <goffi@goffi.org>
parents: 3118
diff changeset
79 log.info(f"Our current jid is: {self.whoami}")
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
80 self.bridge.is_connected(self.profile, callback=self._plug_profile_isconnected)
2091
f413bfc24458 bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
81
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
82 def _autodisconnect_eb(self, failure_):
2167
4b78b4c7f805 core, frontends: various fixes for Libervia:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
83 # XXX: we ignore error on this parameter, as Libervia can't access it
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
84 log.warning(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
85 _("Error while trying to get autodisconnect param, ignoring: {}").format(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
86 failure_
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
87 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
88 )
2167
4b78b4c7f805 core, frontends: various fixes for Libervia:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
89 self._plug_profile_autodisconnect("false")
4b78b4c7f805 core, frontends: various fixes for Libervia:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
90
2091
f413bfc24458 bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
91 def _plug_profile_isconnected(self, connected):
f413bfc24458 bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
92 self.connected = connected
3204
fc2bea41e402 quick frontend(app): new `QuickApp.profileConnected` method
Goffi <goffi@goffi.org>
parents: 3193
diff changeset
93 if connected:
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
94 self.host.profile_connected(self.profile)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
95 self.bridge.param_get_a_async(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
96 "autodisconnect",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
97 "Connection",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
98 profile_key=self.profile,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
99 callback=self._plug_profile_autodisconnect,
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
100 errback=self._autodisconnect_eb,
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
101 )
2091
f413bfc24458 bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
102
f413bfc24458 bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
103 def _plug_profile_autodisconnect(self, autodisconnect):
f413bfc24458 bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
104 if C.bool(autodisconnect):
f413bfc24458 bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
105 self._autodisconnect = True
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
106 self.bridge.param_get_a_async(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
107 "autoconnect",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
108 "Connection",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
109 profile_key=self.profile,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
110 callback=self._plug_profile_autoconnect,
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
111 errback=self._get_param_error,
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
112 )
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
113
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
114 def _plug_profile_autoconnect(self, value_str):
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
115 autoconnect = C.bool(value_str)
2091
f413bfc24458 bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
116 if autoconnect and not self.connected:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
117 self.host.connect(
2765
378188abe941 misc: replaced all "dummy" by the more conventional and readable "__" ("_" being used for gettext)
Goffi <goffi@goffi.org>
parents: 2685
diff changeset
118 self.profile, callback=lambda __: self._plug_profile_afterconnect()
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
119 )
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
120 else:
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
121 self._plug_profile_afterconnect()
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
122
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
123 def _plug_profile_afterconnect(self):
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
124 # Profile can be connected or not
1318
6c7d89843f1b frontends (quick frontend): use of new getEntitiesData to get cached values for avatars on profile connection.
Goffi <goffi@goffi.org>
parents: 1290
diff changeset
125 # we get cached data
2091
f413bfc24458 bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
126 self.connected = True
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
127 self.host.bridge.features_get(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
128 profile_key=self.profile,
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
129 callback=self._plug_profile_get_features_cb,
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
130 errback=self._plug_profile_get_features_eb,
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
131 )
1655
ad2ad28b8923 quick_frontend: getFeatures is called on profile plug, and saved in host.features
Goffi <goffi@goffi.org>
parents: 1636
diff changeset
132
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
133 def _plug_profile_get_features_eb(self, failure):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 3017
diff changeset
134 log.error("Couldn't get features: {}".format(failure))
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
135 self._plug_profile_get_features_cb({})
1655
ad2ad28b8923 quick_frontend: getFeatures is called on profile plug, and saved in host.features
Goffi <goffi@goffi.org>
parents: 1636
diff changeset
136
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
137 def _plug_profile_get_features_cb(self, features):
1655
ad2ad28b8923 quick_frontend: getFeatures is called on profile plug, and saved in host.features
Goffi <goffi@goffi.org>
parents: 1636
diff changeset
138 self.host.features = features
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
139 self.host.bridge.entities_data_get([], ProfileManager.cache_keys_to_get,
3254
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3232
diff changeset
140 profile=self.profile,
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
141 callback=self._plug_profile_got_cached_values,
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
142 errback=self._plug_profile_failed_cached_values)
1318
6c7d89843f1b frontends (quick frontend): use of new getEntitiesData to get cached values for avatars on profile connection.
Goffi <goffi@goffi.org>
parents: 1290
diff changeset
143
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
144 def _plug_profile_failed_cached_values(self, failure):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 3017
diff changeset
145 log.error("Couldn't get cached values: {}".format(failure))
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
146 self._plug_profile_got_cached_values({})
1318
6c7d89843f1b frontends (quick frontend): use of new getEntitiesData to get cached values for avatars on profile connection.
Goffi <goffi@goffi.org>
parents: 1290
diff changeset
147
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
148 def _plug_profile_got_cached_values(self, cached_values):
2685
eb69ec549d05 quick frontend (app): create the contact list immediatly on plug
Goffi <goffi@goffi.org>
parents: 2669
diff changeset
149 contact_list = self.host.contact_lists[self.profile]
1332
0f92b6a150ff quick_frontend, primitivus: use a listener to update the contact list when receiving a presence
souliane <souliane@mailoo.org>
parents: 1331
diff changeset
150 # add the contact list and its listener
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 3017
diff changeset
151 for entity_s, data in cached_values.items():
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 3017
diff changeset
152 for key, value in data.items():
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
153 self.host.entity_data_updated_handler(entity_s, key, value, self.profile)
1318
6c7d89843f1b frontends (quick frontend): use of new getEntitiesData to get cached values for avatars on profile connection.
Goffi <goffi@goffi.org>
parents: 1290
diff changeset
154
2091
f413bfc24458 bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
155 if not self.connected:
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
156 self.host.set_presence_status(C.PRESENCE_UNAVAILABLE, "", profile=self.profile)
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
157 else:
1429
798e5e38516b quick_frontend (quick_app): properly fixed roster loss:
Goffi <goffi@goffi.org>
parents: 1418
diff changeset
158
798e5e38516b quick_frontend (quick_app): properly fixed roster loss:
Goffi <goffi@goffi.org>
parents: 1418
diff changeset
159 contact_list.fill()
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
160 self.host.set_presence_status(profile=self.profile)
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
161
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
162 # The waiting subscription requests
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
163 self.bridge.sub_waiting_get(
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
164 self.profile, callback=self._plug_profile_got_waiting_sub
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
165 )
1290
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1265
diff changeset
166
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
167 def _plug_profile_got_waiting_sub(self, waiting_sub):
1290
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1265
diff changeset
168 for sub in waiting_sub:
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
169 self.host.subscribe_handler(waiting_sub[sub], sub, self.profile)
1290
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1265
diff changeset
170
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
171 self.bridge.muc_get_rooms_joined(
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
172 self.profile, callback=self._plug_profile_got_rooms_joined
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
173 )
1290
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1265
diff changeset
174
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
175 def _plug_profile_got_rooms_joined(self, rooms_args):
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
176 # Now we open the MUC window where we already are:
1290
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1265
diff changeset
177 for room_args in rooms_args:
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
178 self.host.muc_room_joined_handler(*room_args, profile=self.profile)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
179 # Presence must be requested after rooms are filled
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
180 self.host.bridge.presence_statuses_get(
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
181 self.profile, callback=self._plug_profile_got_presences
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
182 )
1290
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1265
diff changeset
183
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
184 def _plug_profile_got_presences(self, presences):
1290
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1265
diff changeset
185 for contact in presences:
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1265
diff changeset
186 for res in presences[contact]:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 3017
diff changeset
187 jabber_id = ("%s/%s" % (jid.JID(contact).bare, res)) if res else contact
1290
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1265
diff changeset
188 show = presences[contact][res][0]
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1265
diff changeset
189 priority = presences[contact][res][1]
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1265
diff changeset
190 statuses = presences[contact][res][2]
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
191 self.host.presence_update_handler(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
192 jabber_id, show, priority, statuses, self.profile
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
193 )
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
194
1290
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1265
diff changeset
195 # At this point, profile should be fully plugged
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1265
diff changeset
196 # and we launch frontend specific method
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
197 self.host.profile_plugged(self.profile)
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
198
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
199 def _get_param_error(self, failure):
2091
f413bfc24458 bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
200 log.error(_("Can't get profile parameter: {msg}").format(msg=failure))
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
201
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
202
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
203 class ProfilesManager(object):
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
204 """Class managing collection of profiles"""
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
205
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
206 def __init__(self):
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
207 self._profiles = {}
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
208
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
209 def __contains__(self, profile):
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
210 return profile in self._profiles
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
211
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
212 def __iter__(self):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 3017
diff changeset
213 return iter(self._profiles.keys())
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
214
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
215 def __getitem__(self, profile):
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
216 return self._profiles[profile]
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
217
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
218 def __len__(self):
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
219 return len(self._profiles)
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
220
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 3017
diff changeset
221 def items(self):
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 3017
diff changeset
222 return self._profiles.items()
2091
f413bfc24458 bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
223
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 3017
diff changeset
224 def values(self):
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 3017
diff changeset
225 return self._profiles.values()
2590
bd9d92bc0d6c quick frontends (app): retrieve namespaces on startup
Goffi <goffi@goffi.org>
parents: 2586
diff changeset
226
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
227 def plug(self, profile):
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
228 if profile in self._profiles:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
229 raise exceptions.ConflictError(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
230 "A profile of the name [{}] is already plugged".format(profile)
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
231 )
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
232 self._profiles[profile] = ProfileManager(profile)
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
233 self._profiles[profile].plug()
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
234
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
235 def unplug(self, profile):
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
236 if profile not in self._profiles:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
237 raise ValueError("The profile [{}] is not plugged".format(profile))
1332
0f92b6a150ff quick_frontend, primitivus: use a listener to update the contact list when receiving a presence
souliane <souliane@mailoo.org>
parents: 1331
diff changeset
238
0f92b6a150ff quick_frontend, primitivus: use a listener to update the contact list when receiving a presence
souliane <souliane@mailoo.org>
parents: 1331
diff changeset
239 # remove the contact list and its listener
0f92b6a150ff quick_frontend, primitivus: use a listener to update the contact list when receiving a presence
souliane <souliane@mailoo.org>
parents: 1331
diff changeset
240 host = self._profiles[profile].host
1938
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
241 host.contact_lists[profile].unplug()
1332
0f92b6a150ff quick_frontend, primitivus: use a listener to update the contact list when receiving a presence
souliane <souliane@mailoo.org>
parents: 1331
diff changeset
242
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
243 del self._profiles[profile]
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
244
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
245 def choose_one_profile(self):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 3017
diff changeset
246 return list(self._profiles.keys())[0]
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
247
1332
0f92b6a150ff quick_frontend, primitivus: use a listener to update the contact list when receiving a presence
souliane <souliane@mailoo.org>
parents: 1331
diff changeset
248
4125
bb74f7dc3b10 frontend (quick app): allow to specify an async bridge:
Goffi <goffi@goffi.org>
parents: 4124
diff changeset
249 class QuickApp:
0
goffi@necton2
parents:
diff changeset
250 """This class contain the main methods needed for the frontend"""
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
251
2846
58ea675d0f05 quick frontend (app): added AUTO_RESYNC attribute in QuickApp, when set (default) the resync method is called on all widgets automatically:
Goffi <goffi@goffi.org>
parents: 2845
diff changeset
252 MB_HANDLER = True #: Set to False if the frontend doesn't manage microblog
58ea675d0f05 quick frontend (app): added AUTO_RESYNC attribute in QuickApp, when set (default) the resync method is called on all widgets automatically:
Goffi <goffi@goffi.org>
parents: 2845
diff changeset
253 AVATARS_HANDLER = True #: set to False if avatars are not used
58ea675d0f05 quick frontend (app): added AUTO_RESYNC attribute in QuickApp, when set (default) the resync method is called on all widgets automatically:
Goffi <goffi@goffi.org>
parents: 2845
diff changeset
254 ENCRYPTION_HANDLERS = True #: set to False if encryption is handled separatly
58ea675d0f05 quick frontend (app): added AUTO_RESYNC attribute in QuickApp, when set (default) the resync method is called on all widgets automatically:
Goffi <goffi@goffi.org>
parents: 2845
diff changeset
255 #: if True, QuickApp will call resync itself, on all widgets at the same time
58ea675d0f05 quick frontend (app): added AUTO_RESYNC attribute in QuickApp, when set (default) the resync method is called on all widgets automatically:
Goffi <goffi@goffi.org>
parents: 2845
diff changeset
256 #: if False, frontend must call resync itself when suitable (e.g. widget is being
58ea675d0f05 quick frontend (app): added AUTO_RESYNC attribute in QuickApp, when set (default) the resync method is called on all widgets automatically:
Goffi <goffi@goffi.org>
parents: 2845
diff changeset
257 #: visible)
58ea675d0f05 quick frontend (app): added AUTO_RESYNC attribute in QuickApp, when set (default) the resync method is called on all widgets automatically:
Goffi <goffi@goffi.org>
parents: 2845
diff changeset
258 AUTO_RESYNC = True
0
goffi@necton2
parents:
diff changeset
259
4125
bb74f7dc3b10 frontend (quick app): allow to specify an async bridge:
Goffi <goffi@goffi.org>
parents: 4124
diff changeset
260 def __init__(
bb74f7dc3b10 frontend (quick app): allow to specify an async bridge:
Goffi <goffi@goffi.org>
parents: 4124
diff changeset
261 self, bridge_factory, xmlui, check_options=None, connect_bridge=True,
bb74f7dc3b10 frontend (quick app): allow to specify an async bridge:
Goffi <goffi@goffi.org>
parents: 4124
diff changeset
262 async_bridge_factory=None
bb74f7dc3b10 frontend (quick app): allow to specify an async bridge:
Goffi <goffi@goffi.org>
parents: 4124
diff changeset
263 ):
1290
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1265
diff changeset
264 """Create a frontend application
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1265
diff changeset
265
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
266 @param bridge_factory: method to use to create the bridge
1468
731fbed0b9cf quick_frontend, primitivus: handling of actionNew signal
Goffi <goffi@goffi.org>
parents: 1461
diff changeset
267 @param xmlui: xmlui module
2664
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2626
diff changeset
268 @param check_options: method to call to check options (usually command line
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2626
diff changeset
269 arguments)
1290
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1265
diff changeset
270 """
1468
731fbed0b9cf quick_frontend, primitivus: handling of actionNew signal
Goffi <goffi@goffi.org>
parents: 1461
diff changeset
271 self.xmlui = xmlui
1365
ba87b940f07a core, quick_frontends: added an "extra" item in getMenus + use of new quick_menus module in QuickApp
Goffi <goffi@goffi.org>
parents: 1363
diff changeset
272 self.menus = quick_menus.QuickMenusManager(self)
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
273 ProfileManager.host = self
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
274 self.profiles = ProfilesManager()
3065
f8e3789912d0 quick frontend (contact list): added "contactsFilled" event
Goffi <goffi@goffi.org>
parents: 3028
diff changeset
275 # profiles currently being plugged, used to (un)lock contact list updates
f8e3789912d0 quick frontend (contact list): added "contactsFilled" event
Goffi <goffi@goffi.org>
parents: 3028
diff changeset
276 self._plugs_in_progress = set()
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
277 self.ready_profiles = set() # profiles which are connected and ready
2664
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2626
diff changeset
278 self.signals_cache = {} # used to keep signal received between start of
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2626
diff changeset
279 # plug_profile and when the profile is actualy ready
1938
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
280 self.contact_lists = quick_contact_list.QuickContactListHandler(self)
1365
ba87b940f07a core, quick_frontends: added an "extra" item in getMenus + use of new quick_menus module in QuickApp
Goffi <goffi@goffi.org>
parents: 1363
diff changeset
281 self.widgets = quick_widgets.QuickWidgetsManager(self)
1290
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1265
diff changeset
282 if check_options is not None:
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1265
diff changeset
283 self.options = check_options()
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1265
diff changeset
284 else:
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1265
diff changeset
285 self.options = None
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 585
diff changeset
286
3159
30e08d904208 quick_frontend (app, widget): CagouWidget.onSelected is called when the widget is selected:
Goffi <goffi@goffi.org>
parents: 3158
diff changeset
287 # see selected_widget setter and getter
30e08d904208 quick_frontend (app, widget): CagouWidget.onSelected is called when the widget is selected:
Goffi <goffi@goffi.org>
parents: 3158
diff changeset
288 self._selected_widget = None
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
289
2862
b2e898384c25 quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents: 2861
diff changeset
290 # listeners are callable watching events
2664
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2626
diff changeset
291 self._listeners = {} # key: listener type ("avatar", "selected", etc),
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2626
diff changeset
292 # value: list of callbacks
1319
781ee3539252 quick frontends(quick app): add a listeners (observer/observable) mechanism to call a callback when a event happen. Implemented an "avatar" event.
Goffi <goffi@goffi.org>
parents: 1318
diff changeset
293
4126
45e3bb8607d8 frontends (quick app): allow frontend to register an action handler:
Goffi <goffi@goffi.org>
parents: 4125
diff changeset
294 # cf. [register_action_handler]
45e3bb8607d8 frontends (quick app): allow frontend to register an action handler:
Goffi <goffi@goffi.org>
parents: 4125
diff changeset
295 self._action_handlers: dict[str, Callable[[dict, str, int, str], None]] = {}
45e3bb8607d8 frontends (quick app): allow frontend to register an action handler:
Goffi <goffi@goffi.org>
parents: 4125
diff changeset
296
1347
ba41a81d14c2 frontends (QuickApp), tools (TriggerManager): frontends can also use triggers + add those for sending and receiving a message
souliane <souliane@mailoo.org>
parents: 1345
diff changeset
297 # triggers
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
298 self.trigger = (
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
299 trigger.TriggerManager()
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
300 ) # trigger are used to change the default behaviour
1347
ba41a81d14c2 frontends (QuickApp), tools (TriggerManager): frontends can also use triggers + add those for sending and receiving a message
souliane <souliane@mailoo.org>
parents: 1345
diff changeset
301
0
goffi@necton2
parents:
diff changeset
302 ## bridge ##
2091
f413bfc24458 bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
303 self.bridge = bridge_factory()
4125
bb74f7dc3b10 frontend (quick app): allow to specify an async bridge:
Goffi <goffi@goffi.org>
parents: 4124
diff changeset
304 if async_bridge_factory is None:
bb74f7dc3b10 frontend (quick app): allow to specify an async bridge:
Goffi <goffi@goffi.org>
parents: 4124
diff changeset
305 log.warning("No async bridge specified")
bb74f7dc3b10 frontend (quick app): allow to specify an async bridge:
Goffi <goffi@goffi.org>
parents: 4124
diff changeset
306 self.a_bridge = None
bb74f7dc3b10 frontend (quick app): allow to specify an async bridge:
Goffi <goffi@goffi.org>
parents: 4124
diff changeset
307 else:
bb74f7dc3b10 frontend (quick app): allow to specify an async bridge:
Goffi <goffi@goffi.org>
parents: 4124
diff changeset
308 self.a_bridge = async_bridge_factory()
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
309 ProfileManager.bridge = self.bridge
2091
f413bfc24458 bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
310 if connect_bridge:
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
311 self.connect_bridge()
2091
f413bfc24458 bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
312
2862
b2e898384c25 quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents: 2861
diff changeset
313 # frontend notifications
2091
f413bfc24458 bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
314 self._notif_id = 0
3166
122075ceaa53 quick frontend (app): replaced OrderedDict by regular dict:
Goffi <goffi@goffi.org>
parents: 3164
diff changeset
315 self._notifications = {}
2862
b2e898384c25 quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents: 2861
diff changeset
316 # watched progresses and associated callbacks
b2e898384c25 quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents: 2861
diff changeset
317 self._progress_ids = {}
b2e898384c25 quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents: 2861
diff changeset
318 # available features
b2e898384c25 quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents: 2861
diff changeset
319 # FIXME: features are profile specific, to be checked
2091
f413bfc24458 bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
320 self.features = None
2862
b2e898384c25 quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents: 2861
diff changeset
321 #: map of short name to namespaces
b2e898384c25 quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents: 2861
diff changeset
322 self.ns_map = {}
b2e898384c25 quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents: 2861
diff changeset
323 #: available encryptions
2664
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2626
diff changeset
324 self.encryption_plugins = []
2862
b2e898384c25 quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents: 2861
diff changeset
325 # state of synchronisation with backend
b2e898384c25 quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents: 2861
diff changeset
326 self._sync = True
2091
f413bfc24458 bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
327
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
328 def connect_bridge(self):
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
329 self.bridge.bridge_connect(callback=self._bridge_cb, errback=self._bridge_eb)
2091
f413bfc24458 bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
330
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
331 def _namespaces_get_cb(self, ns_map):
2590
bd9d92bc0d6c quick frontends (app): retrieve namespaces on startup
Goffi <goffi@goffi.org>
parents: 2586
diff changeset
332 self.ns_map = ns_map
bd9d92bc0d6c quick frontends (app): retrieve namespaces on startup
Goffi <goffi@goffi.org>
parents: 2586
diff changeset
333
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
334 def _namespaces_get_eb(self, failure_):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 3017
diff changeset
335 log.error(_("Can't get namespaces map: {msg}").format(msg=failure_))
2590
bd9d92bc0d6c quick frontends (app): retrieve namespaces on startup
Goffi <goffi@goffi.org>
parents: 2586
diff changeset
336
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
337 def _encryption_plugins_get_cb(self, plugins_ser):
3102
7574f795bd1e core, bridge: encryptionPluginsGet now returns a serialised list + added "directed" in metadata
Goffi <goffi@goffi.org>
parents: 3101
diff changeset
338 self.encryption_plugins = data_format.deserialise(plugins_ser, type_check=list)
2664
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2626
diff changeset
339
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
340 def _encryption_plugins_get_eb(self, failure_):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 3017
diff changeset
341 log.warning(_("Can't retrieve encryption plugins: {msg}").format(msg=failure_))
2664
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2626
diff changeset
342
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
343 def on_bridge_connected(self):
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
344 self.bridge.ready_get(self.on_backend_ready)
2097
4bc408b549cd quick_frontend(QuickApp): added onBridgeConnected method
Goffi <goffi@goffi.org>
parents: 2091
diff changeset
345
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
346 def _bridge_cb(self):
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
347 self.register_signal("connected")
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
348 self.register_signal("disconnected")
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
349 self.register_signal("action_new")
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
350 self.register_signal("contact_new")
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
351 self.register_signal("message_new")
2664
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2626
diff changeset
352 if self.ENCRYPTION_HANDLERS:
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
353 self.register_signal("message_encryption_started")
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
354 self.register_signal("message_encryption_stopped")
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
355 self.register_signal("presence_update")
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
356 self.register_signal("subscribe")
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
357 self.register_signal("param_update")
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
358 self.register_signal("contact_deleted")
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
359 self.register_signal("entity_data_updated")
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
360 self.register_signal("progress_started")
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
361 self.register_signal("progress_finished")
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
362 self.register_signal("progress_error")
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
363 self.register_signal("muc_room_joined", iface="plugin")
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
364 self.register_signal("muc_room_left", iface="plugin")
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
365 self.register_signal("muc_room_user_changed_nick", iface="plugin")
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
366 self.register_signal("muc_room_new_subject", iface="plugin")
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
367 self.register_signal("chat_state_received", iface="plugin")
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
368 self.register_signal("message_state", iface="plugin")
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
369 self.register_signal("ps_event", iface="plugin")
2854
eb9fa72eb62b core: added a "_debug" signal:
Goffi <goffi@goffi.org>
parents: 2848
diff changeset
370 # useful for debugging
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
371 self.register_signal("_debug", iface="core")
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 585
diff changeset
372
1360
8ea8fa13c351 frontends (quick_frontend, primitivus): fixes room games:
souliane <souliane@mailoo.org>
parents: 1352
diff changeset
373 # FIXME: do it dynamically
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
374 quick_games.Tarot.register_signals(self)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
375 quick_games.Quiz.register_signals(self)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
376 quick_games.Radiocol.register_signals(self)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
377 self.on_bridge_connected()
1360
8ea8fa13c351 frontends (quick_frontend, primitivus): fixes room games:
souliane <souliane@mailoo.org>
parents: 1352
diff changeset
378
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
379 def _bridge_eb(self, failure):
2091
f413bfc24458 bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
380 if isinstance(failure, exceptions.BridgeExceptionNoService):
4124
6b581d4c249f frontends (quick app): reformulate backend not running message + use "Libervia" instead of "SàT"
Goffi <goffi@goffi.org>
parents: 4074
diff changeset
381 print(
6b581d4c249f frontends (quick app): reformulate backend not running message + use "Libervia" instead of "SàT"
Goffi <goffi@goffi.org>
parents: 4074
diff changeset
382 _("Unable to connect to the Libervia backend. Are you sure it's running?")
6b581d4c249f frontends (quick app): reformulate backend not running message + use "Libervia" instead of "SàT"
Goffi <goffi@goffi.org>
parents: 4074
diff changeset
383 )
3490
509f7a1c67dc frontends: use new EXIT_BACKEND_NOT_FOUND exit code:
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
384 sys.exit(C.EXIT_BACKEND_NOT_FOUND)
2091
f413bfc24458 bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
385 elif isinstance(failure, exceptions.BridgeInitError):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 3017
diff changeset
386 print((_("Can't init bridge")))
3490
509f7a1c67dc frontends: use new EXIT_BACKEND_NOT_FOUND exit code:
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
387 sys.exit(C.EXIT_BRIDGE_ERROR)
2091
f413bfc24458 bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
388 else:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 3017
diff changeset
389 print((_("Error while initialising bridge: {}".format(failure))))
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 585
diff changeset
390
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
391 def on_backend_ready(self):
3118
02492db1ce39 quick frontend (app): call `getReady` once connected to bridge:
Goffi <goffi@goffi.org>
parents: 3113
diff changeset
392 log.info("backend is ready")
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
393 self.bridge.namespaces_get(
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
394 callback=self._namespaces_get_cb, errback=self._namespaces_get_eb)
3118
02492db1ce39 quick frontend (app): call `getReady` once connected to bridge:
Goffi <goffi@goffi.org>
parents: 3113
diff changeset
395 # we cache available encryption plugins, as we'll use them on each
02492db1ce39 quick frontend (app): call `getReady` once connected to bridge:
Goffi <goffi@goffi.org>
parents: 3113
diff changeset
396 # new chat widget
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
397 self.bridge.encryption_plugins_get(
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
398 callback=self._encryption_plugins_get_cb,
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
399 errback=self._encryption_plugins_get_eb)
3118
02492db1ce39 quick frontend (app): call `getReady` once connected to bridge:
Goffi <goffi@goffi.org>
parents: 3113
diff changeset
400
02492db1ce39 quick frontend (app): call `getReady` once connected to bridge:
Goffi <goffi@goffi.org>
parents: 3113
diff changeset
401
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
402 @property
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
403 def current_profile(self):
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
404 """Profile that a user would expect to use"""
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
405 try:
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
406 return self.selected_widget.profile
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
407 except (TypeError, AttributeError):
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
408 return self.profiles.choose_one_profile()
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
409
1290
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1265
diff changeset
410 @property
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1265
diff changeset
411 def visible_widgets(self):
2790
19ab67e28822 quick frontends: visible_widgets can now keep any kind of widget, new visible_quick_widgets only iters on QuickWidgets
Goffi <goffi@goffi.org>
parents: 2789
diff changeset
412 """Widgets currently visible
2049
b67aece4a667 quick frontend (app): avatar filename is not requested anymore if value is empty
Goffi <goffi@goffi.org>
parents: 2042
diff changeset
413
2790
19ab67e28822 quick frontends: visible_widgets can now keep any kind of widget, new visible_quick_widgets only iters on QuickWidgets
Goffi <goffi@goffi.org>
parents: 2789
diff changeset
414 This must be implemented by frontend
19ab67e28822 quick frontends: visible_widgets can now keep any kind of widget, new visible_quick_widgets only iters on QuickWidgets
Goffi <goffi@goffi.org>
parents: 2789
diff changeset
415 @return (iter[object]): iterable on visible widgets
19ab67e28822 quick frontends: visible_widgets can now keep any kind of widget, new visible_quick_widgets only iters on QuickWidgets
Goffi <goffi@goffi.org>
parents: 2789
diff changeset
416 widgets can be QuickWidgets or not
2049
b67aece4a667 quick frontend (app): avatar filename is not requested anymore if value is empty
Goffi <goffi@goffi.org>
parents: 2042
diff changeset
417 """
1290
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1265
diff changeset
418 raise NotImplementedError
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1265
diff changeset
419
2790
19ab67e28822 quick frontends: visible_widgets can now keep any kind of widget, new visible_quick_widgets only iters on QuickWidgets
Goffi <goffi@goffi.org>
parents: 2789
diff changeset
420 @property
19ab67e28822 quick frontends: visible_widgets can now keep any kind of widget, new visible_quick_widgets only iters on QuickWidgets
Goffi <goffi@goffi.org>
parents: 2789
diff changeset
421 def visible_quick_widgets(self):
19ab67e28822 quick frontends: visible_widgets can now keep any kind of widget, new visible_quick_widgets only iters on QuickWidgets
Goffi <goffi@goffi.org>
parents: 2789
diff changeset
422 """QuickWidgets currently visible
19ab67e28822 quick frontends: visible_widgets can now keep any kind of widget, new visible_quick_widgets only iters on QuickWidgets
Goffi <goffi@goffi.org>
parents: 2789
diff changeset
423
19ab67e28822 quick frontends: visible_widgets can now keep any kind of widget, new visible_quick_widgets only iters on QuickWidgets
Goffi <goffi@goffi.org>
parents: 2789
diff changeset
424 This generator iterate only on QuickWidgets, discarding other kinds of
19ab67e28822 quick frontends: visible_widgets can now keep any kind of widget, new visible_quick_widgets only iters on QuickWidgets
Goffi <goffi@goffi.org>
parents: 2789
diff changeset
425 widget the frontend may have.
19ab67e28822 quick frontends: visible_widgets can now keep any kind of widget, new visible_quick_widgets only iters on QuickWidgets
Goffi <goffi@goffi.org>
parents: 2789
diff changeset
426 @return (iter[object]): iterable on visible widgets
19ab67e28822 quick frontends: visible_widgets can now keep any kind of widget, new visible_quick_widgets only iters on QuickWidgets
Goffi <goffi@goffi.org>
parents: 2789
diff changeset
427 """
19ab67e28822 quick frontends: visible_widgets can now keep any kind of widget, new visible_quick_widgets only iters on QuickWidgets
Goffi <goffi@goffi.org>
parents: 2789
diff changeset
428 for w in self.visisble_widgets:
19ab67e28822 quick frontends: visible_widgets can now keep any kind of widget, new visible_quick_widgets only iters on QuickWidgets
Goffi <goffi@goffi.org>
parents: 2789
diff changeset
429 if isinstance(w, quick_widgets.QuickWidget):
19ab67e28822 quick frontends: visible_widgets can now keep any kind of widget, new visible_quick_widgets only iters on QuickWidgets
Goffi <goffi@goffi.org>
parents: 2789
diff changeset
430 return w
19ab67e28822 quick frontends: visible_widgets can now keep any kind of widget, new visible_quick_widgets only iters on QuickWidgets
Goffi <goffi@goffi.org>
parents: 2789
diff changeset
431
3159
30e08d904208 quick_frontend (app, widget): CagouWidget.onSelected is called when the widget is selected:
Goffi <goffi@goffi.org>
parents: 3158
diff changeset
432 @property
30e08d904208 quick_frontend (app, widget): CagouWidget.onSelected is called when the widget is selected:
Goffi <goffi@goffi.org>
parents: 3158
diff changeset
433 def selected_widget(self):
30e08d904208 quick_frontend (app, widget): CagouWidget.onSelected is called when the widget is selected:
Goffi <goffi@goffi.org>
parents: 3158
diff changeset
434 """widget currently selected
30e08d904208 quick_frontend (app, widget): CagouWidget.onSelected is called when the widget is selected:
Goffi <goffi@goffi.org>
parents: 3158
diff changeset
435
30e08d904208 quick_frontend (app, widget): CagouWidget.onSelected is called when the widget is selected:
Goffi <goffi@goffi.org>
parents: 3158
diff changeset
436 This must be set by frontend using setter.
30e08d904208 quick_frontend (app, widget): CagouWidget.onSelected is called when the widget is selected:
Goffi <goffi@goffi.org>
parents: 3158
diff changeset
437 """
30e08d904208 quick_frontend (app, widget): CagouWidget.onSelected is called when the widget is selected:
Goffi <goffi@goffi.org>
parents: 3158
diff changeset
438 return self._selected_widget
30e08d904208 quick_frontend (app, widget): CagouWidget.onSelected is called when the widget is selected:
Goffi <goffi@goffi.org>
parents: 3158
diff changeset
439
30e08d904208 quick_frontend (app, widget): CagouWidget.onSelected is called when the widget is selected:
Goffi <goffi@goffi.org>
parents: 3158
diff changeset
440 @selected_widget.setter
30e08d904208 quick_frontend (app, widget): CagouWidget.onSelected is called when the widget is selected:
Goffi <goffi@goffi.org>
parents: 3158
diff changeset
441 def selected_widget(self, wid):
30e08d904208 quick_frontend (app, widget): CagouWidget.onSelected is called when the widget is selected:
Goffi <goffi@goffi.org>
parents: 3158
diff changeset
442 """Set the currently selected widget
30e08d904208 quick_frontend (app, widget): CagouWidget.onSelected is called when the widget is selected:
Goffi <goffi@goffi.org>
parents: 3158
diff changeset
443
30e08d904208 quick_frontend (app, widget): CagouWidget.onSelected is called when the widget is selected:
Goffi <goffi@goffi.org>
parents: 3158
diff changeset
444 Must be set by frontend
30e08d904208 quick_frontend (app, widget): CagouWidget.onSelected is called when the widget is selected:
Goffi <goffi@goffi.org>
parents: 3158
diff changeset
445 """
3164
9dc170635bee quick frontend(app): added listener for selected widget
Goffi <goffi@goffi.org>
parents: 3159
diff changeset
446 if self._selected_widget == wid:
9dc170635bee quick frontend(app): added listener for selected widget
Goffi <goffi@goffi.org>
parents: 3159
diff changeset
447 return
3159
30e08d904208 quick_frontend (app, widget): CagouWidget.onSelected is called when the widget is selected:
Goffi <goffi@goffi.org>
parents: 3158
diff changeset
448 self._selected_widget = wid
30e08d904208 quick_frontend (app, widget): CagouWidget.onSelected is called when the widget is selected:
Goffi <goffi@goffi.org>
parents: 3158
diff changeset
449 try:
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
450 on_selected = wid.on_selected
3159
30e08d904208 quick_frontend (app, widget): CagouWidget.onSelected is called when the widget is selected:
Goffi <goffi@goffi.org>
parents: 3158
diff changeset
451 except AttributeError:
30e08d904208 quick_frontend (app, widget): CagouWidget.onSelected is called when the widget is selected:
Goffi <goffi@goffi.org>
parents: 3158
diff changeset
452 pass
30e08d904208 quick_frontend (app, widget): CagouWidget.onSelected is called when the widget is selected:
Goffi <goffi@goffi.org>
parents: 3158
diff changeset
453 else:
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
454 on_selected()
3159
30e08d904208 quick_frontend (app, widget): CagouWidget.onSelected is called when the widget is selected:
Goffi <goffi@goffi.org>
parents: 3158
diff changeset
455
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
456 self.call_listeners("selected", wid)
3164
9dc170635bee quick frontend(app): added listener for selected widget
Goffi <goffi@goffi.org>
parents: 3159
diff changeset
457
2845
42380a4f6433 quick frontend (app): new synchronisation mechanism:
Goffi <goffi@goffi.org>
parents: 2829
diff changeset
458 # backend state management
42380a4f6433 quick frontend (app): new synchronisation mechanism:
Goffi <goffi@goffi.org>
parents: 2829
diff changeset
459
42380a4f6433 quick frontend (app): new synchronisation mechanism:
Goffi <goffi@goffi.org>
parents: 2829
diff changeset
460 @property
42380a4f6433 quick frontend (app): new synchronisation mechanism:
Goffi <goffi@goffi.org>
parents: 2829
diff changeset
461 def sync(self):
2862
b2e898384c25 quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents: 2861
diff changeset
462 """Synchronization flag
2845
42380a4f6433 quick frontend (app): new synchronisation mechanism:
Goffi <goffi@goffi.org>
parents: 2829
diff changeset
463
42380a4f6433 quick frontend (app): new synchronisation mechanism:
Goffi <goffi@goffi.org>
parents: 2829
diff changeset
464 True if this frontend is synchronised with backend
42380a4f6433 quick frontend (app): new synchronisation mechanism:
Goffi <goffi@goffi.org>
parents: 2829
diff changeset
465 """
42380a4f6433 quick frontend (app): new synchronisation mechanism:
Goffi <goffi@goffi.org>
parents: 2829
diff changeset
466 return self._sync
42380a4f6433 quick frontend (app): new synchronisation mechanism:
Goffi <goffi@goffi.org>
parents: 2829
diff changeset
467
42380a4f6433 quick frontend (app): new synchronisation mechanism:
Goffi <goffi@goffi.org>
parents: 2829
diff changeset
468 @sync.setter
42380a4f6433 quick frontend (app): new synchronisation mechanism:
Goffi <goffi@goffi.org>
parents: 2829
diff changeset
469 def sync(self, state):
42380a4f6433 quick frontend (app): new synchronisation mechanism:
Goffi <goffi@goffi.org>
parents: 2829
diff changeset
470 """Called when backend is desynchronised or resynchronising
42380a4f6433 quick frontend (app): new synchronisation mechanism:
Goffi <goffi@goffi.org>
parents: 2829
diff changeset
471
42380a4f6433 quick frontend (app): new synchronisation mechanism:
Goffi <goffi@goffi.org>
parents: 2829
diff changeset
472 @param state(bool): True: if the backend is resynchronising
42380a4f6433 quick frontend (app): new synchronisation mechanism:
Goffi <goffi@goffi.org>
parents: 2829
diff changeset
473 False when we lose synchronisation, for instance if frontend is going to sleep
42380a4f6433 quick frontend (app): new synchronisation mechanism:
Goffi <goffi@goffi.org>
parents: 2829
diff changeset
474 or if connection has been lost and a reconnection is needed
42380a4f6433 quick frontend (app): new synchronisation mechanism:
Goffi <goffi@goffi.org>
parents: 2829
diff changeset
475 """
42380a4f6433 quick frontend (app): new synchronisation mechanism:
Goffi <goffi@goffi.org>
parents: 2829
diff changeset
476 if state:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 3017
diff changeset
477 log.debug("we are synchronised with server")
2846
58ea675d0f05 quick frontend (app): added AUTO_RESYNC attribute in QuickApp, when set (default) the resync method is called on all widgets automatically:
Goffi <goffi@goffi.org>
parents: 2845
diff changeset
478 if self.AUTO_RESYNC:
58ea675d0f05 quick frontend (app): added AUTO_RESYNC attribute in QuickApp, when set (default) the resync method is called on all widgets automatically:
Goffi <goffi@goffi.org>
parents: 2845
diff changeset
479 # we are resynchronising all widgets
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 3017
diff changeset
480 log.debug("doing a full widgets resynchronisation")
2846
58ea675d0f05 quick frontend (app): added AUTO_RESYNC attribute in QuickApp, when set (default) the resync method is called on all widgets automatically:
Goffi <goffi@goffi.org>
parents: 2845
diff changeset
481 for w in self.widgets:
58ea675d0f05 quick frontend (app): added AUTO_RESYNC attribute in QuickApp, when set (default) the resync method is called on all widgets automatically:
Goffi <goffi@goffi.org>
parents: 2845
diff changeset
482 try:
58ea675d0f05 quick frontend (app): added AUTO_RESYNC attribute in QuickApp, when set (default) the resync method is called on all widgets automatically:
Goffi <goffi@goffi.org>
parents: 2845
diff changeset
483 resync = w.resync
58ea675d0f05 quick frontend (app): added AUTO_RESYNC attribute in QuickApp, when set (default) the resync method is called on all widgets automatically:
Goffi <goffi@goffi.org>
parents: 2845
diff changeset
484 except AttributeError:
58ea675d0f05 quick frontend (app): added AUTO_RESYNC attribute in QuickApp, when set (default) the resync method is called on all widgets automatically:
Goffi <goffi@goffi.org>
parents: 2845
diff changeset
485 pass
58ea675d0f05 quick frontend (app): added AUTO_RESYNC attribute in QuickApp, when set (default) the resync method is called on all widgets automatically:
Goffi <goffi@goffi.org>
parents: 2845
diff changeset
486 else:
58ea675d0f05 quick frontend (app): added AUTO_RESYNC attribute in QuickApp, when set (default) the resync method is called on all widgets automatically:
Goffi <goffi@goffi.org>
parents: 2845
diff changeset
487 resync()
2898
fc78d53f0ffa quick frontend (app): added debug logs on sync state change + refill contact lists on resync when AUTO_RESYNC is set
Goffi <goffi@goffi.org>
parents: 2894
diff changeset
488 self.contact_lists.fill()
fc78d53f0ffa quick frontend (app): added debug logs on sync state change + refill contact lists on resync when AUTO_RESYNC is set
Goffi <goffi@goffi.org>
parents: 2894
diff changeset
489
2845
42380a4f6433 quick frontend (app): new synchronisation mechanism:
Goffi <goffi@goffi.org>
parents: 2829
diff changeset
490 self._sync = state
42380a4f6433 quick frontend (app): new synchronisation mechanism:
Goffi <goffi@goffi.org>
parents: 2829
diff changeset
491 else:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 3017
diff changeset
492 log.debug("we have lost synchronisation with server")
2845
42380a4f6433 quick frontend (app): new synchronisation mechanism:
Goffi <goffi@goffi.org>
parents: 2829
diff changeset
493 self._sync = state
2846
58ea675d0f05 quick frontend (app): added AUTO_RESYNC attribute in QuickApp, when set (default) the resync method is called on all widgets automatically:
Goffi <goffi@goffi.org>
parents: 2845
diff changeset
494 # we've lost synchronisation, all widgets must be notified
58ea675d0f05 quick frontend (app): added AUTO_RESYNC attribute in QuickApp, when set (default) the resync method is called on all widgets automatically:
Goffi <goffi@goffi.org>
parents: 2845
diff changeset
495 # note: this is always called independently of AUTO_RESYNC
2845
42380a4f6433 quick frontend (app): new synchronisation mechanism:
Goffi <goffi@goffi.org>
parents: 2829
diff changeset
496 for w in self.widgets:
42380a4f6433 quick frontend (app): new synchronisation mechanism:
Goffi <goffi@goffi.org>
parents: 2829
diff changeset
497 try:
42380a4f6433 quick frontend (app): new synchronisation mechanism:
Goffi <goffi@goffi.org>
parents: 2829
diff changeset
498 w.sync = False
42380a4f6433 quick frontend (app): new synchronisation mechanism:
Goffi <goffi@goffi.org>
parents: 2829
diff changeset
499 except AttributeError:
42380a4f6433 quick frontend (app): new synchronisation mechanism:
Goffi <goffi@goffi.org>
parents: 2829
diff changeset
500 pass
42380a4f6433 quick frontend (app): new synchronisation mechanism:
Goffi <goffi@goffi.org>
parents: 2829
diff changeset
501
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
502 def register_signal(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
503 self, function_name, handler=None, iface="core", with_profile=True
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
504 ):
1103
a096b8579a3c frontends: signals are managed in a more generic way
Goffi <goffi@goffi.org>
parents: 1093
diff changeset
505 """Register a handler for a signal
a096b8579a3c frontends: signals are managed in a more generic way
Goffi <goffi@goffi.org>
parents: 1093
diff changeset
506
1345
b26dd78de495 quick frontends: signal cache: if a signal arrives between the beginning of profile plugging, and the when the profile is actually ready, it is cached and replayed when the profile is ready.
Goffi <goffi@goffi.org>
parents: 1342
diff changeset
507 @param function_name (str): name of the signal to handle
2664
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2626
diff changeset
508 @param handler (instancemethod): method to call when the signal arrive,
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2626
diff changeset
509 None for calling an automatically named handler (function_name + 'Handler')
1117
6053fb8a6466 quick_frontend: fixes an issue with the profile in the signal handler
souliane <souliane@mailoo.org>
parents: 1103
diff changeset
510 @param iface (str): interface of the bridge to use ('core' or 'plugin')
2664
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2626
diff changeset
511 @param with_profile (boolean): True if the signal concerns a specific profile,
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2626
diff changeset
512 in that case the profile name has to be passed by the caller
1103
a096b8579a3c frontends: signals are managed in a more generic way
Goffi <goffi@goffi.org>
parents: 1093
diff changeset
513 """
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 3017
diff changeset
514 log.debug("registering signal {name}".format(name=function_name))
1103
a096b8579a3c frontends: signals are managed in a more generic way
Goffi <goffi@goffi.org>
parents: 1093
diff changeset
515 if handler is None:
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
516 handler = getattr(self, "{}{}".format(function_name, "_handler"))
1117
6053fb8a6466 quick_frontend: fixes an issue with the profile in the signal handler
souliane <souliane@mailoo.org>
parents: 1103
diff changeset
517 if not with_profile:
2086
4633cfcbcccb bridge (D-Bus): bad design fixes:
Goffi <goffi@goffi.org>
parents: 2067
diff changeset
518 self.bridge.register_signal(function_name, handler, iface)
1117
6053fb8a6466 quick_frontend: fixes an issue with the profile in the signal handler
souliane <souliane@mailoo.org>
parents: 1103
diff changeset
519 return
6053fb8a6466 quick_frontend: fixes an issue with the profile in the signal handler
souliane <souliane@mailoo.org>
parents: 1103
diff changeset
520
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
521 def signal_received(*args, **kwargs):
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
522 profile = kwargs.get("profile")
1117
6053fb8a6466 quick_frontend: fixes an issue with the profile in the signal handler
souliane <souliane@mailoo.org>
parents: 1103
diff changeset
523 if profile is None:
6053fb8a6466 quick_frontend: fixes an issue with the profile in the signal handler
souliane <souliane@mailoo.org>
parents: 1103
diff changeset
524 if not args:
6053fb8a6466 quick_frontend: fixes an issue with the profile in the signal handler
souliane <souliane@mailoo.org>
parents: 1103
diff changeset
525 raise exceptions.ProfileNotSetError
6053fb8a6466 quick_frontend: fixes an issue with the profile in the signal handler
souliane <souliane@mailoo.org>
parents: 1103
diff changeset
526 profile = args[-1]
1345
b26dd78de495 quick frontends: signal cache: if a signal arrives between the beginning of profile plugging, and the when the profile is actually ready, it is cached and replayed when the profile is ready.
Goffi <goffi@goffi.org>
parents: 1342
diff changeset
527 if profile is not None:
b26dd78de495 quick frontends: signal cache: if a signal arrives between the beginning of profile plugging, and the when the profile is actually ready, it is cached and replayed when the profile is ready.
Goffi <goffi@goffi.org>
parents: 1342
diff changeset
528 if not self.check_profile(profile):
b26dd78de495 quick frontends: signal cache: if a signal arrives between the beginning of profile plugging, and the when the profile is actually ready, it is cached and replayed when the profile is ready.
Goffi <goffi@goffi.org>
parents: 1342
diff changeset
529 if profile in self.profiles:
2664
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2626
diff changeset
530 # profile is not ready but is in self.profiles, that's mean that
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2626
diff changeset
531 # it's being connecting and we need to cache the signal
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
532 self.signals_cache.setdefault(profile, []).append(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
533 (function_name, handler, args, kwargs)
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
534 )
1345
b26dd78de495 quick frontends: signal cache: if a signal arrives between the beginning of profile plugging, and the when the profile is actually ready, it is cached and replayed when the profile is ready.
Goffi <goffi@goffi.org>
parents: 1342
diff changeset
535 return # we ignore signal for profiles we don't manage
1103
a096b8579a3c frontends: signals are managed in a more generic way
Goffi <goffi@goffi.org>
parents: 1093
diff changeset
536 handler(*args, **kwargs)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
537
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
538 self.bridge.register_signal(function_name, signal_received, iface)
1103
a096b8579a3c frontends: signals are managed in a more generic way
Goffi <goffi@goffi.org>
parents: 1093
diff changeset
539
1331
7fa07c7b0761 quick_frontend (quick_app): addListener takes a profiles_filter argument to check the profile before calling a listener (profile must be passed right after the event type in callListeners)
souliane <souliane@mailoo.org>
parents: 1329
diff changeset
540 def addListener(self, type_, callback, profiles_filter=None):
1323
a599b6a70dc0 frontends (quick_frontend): fixes a typo (listerner --> listener)
souliane <souliane@mailoo.org>
parents: 1319
diff changeset
541 """Add a listener for an event
1319
781ee3539252 quick frontends(quick app): add a listeners (observer/observable) mechanism to call a callback when a event happen. Implemented an "avatar" event.
Goffi <goffi@goffi.org>
parents: 1318
diff changeset
542
2664
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2626
diff changeset
543 /!\ don't forget to remove listener when not used anymore (e.g. if you delete a
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2626
diff changeset
544 widget)
1319
781ee3539252 quick frontends(quick app): add a listeners (observer/observable) mechanism to call a callback when a event happen. Implemented an "avatar" event.
Goffi <goffi@goffi.org>
parents: 1318
diff changeset
545 @param type_: type of event, can be:
3065
f8e3789912d0 quick frontend (contact list): added "contactsFilled" event
Goffi <goffi@goffi.org>
parents: 3028
diff changeset
546 - contactsFilled: called when contact have been fully filled for a profiles
f8e3789912d0 quick frontend (contact list): added "contactsFilled" event
Goffi <goffi@goffi.org>
parents: 3028
diff changeset
547 kwargs: profile
1319
781ee3539252 quick frontends(quick app): add a listeners (observer/observable) mechanism to call a callback when a event happen. Implemented an "avatar" event.
Goffi <goffi@goffi.org>
parents: 1318
diff changeset
548 - avatar: called when avatar data is updated
3254
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3232
diff changeset
549 args: (entity, avatar_data, profile)
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3232
diff changeset
550 - nicknames: called when nicknames data is updated
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3232
diff changeset
551 args: (entity, nicknames, profile)
1331
7fa07c7b0761 quick_frontend (quick_app): addListener takes a profiles_filter argument to check the profile before calling a listener (profile must be passed right after the event type in callListeners)
souliane <souliane@mailoo.org>
parents: 1329
diff changeset
552 - presence: called when a presence is received
1363
fa77e40eb17b quick_frontends: added "menu" listeners, which is called when a menu is added or removed.
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
553 args: (entity, show, priority, statuses, profile)
3164
9dc170635bee quick frontend(app): added listener for selected widget
Goffi <goffi@goffi.org>
parents: 3159
diff changeset
554 - selected: called when a widget is selected
9dc170635bee quick frontend(app): added listener for selected widget
Goffi <goffi@goffi.org>
parents: 3159
diff changeset
555 args: (selected_widget,)
1972
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1970
diff changeset
556 - notification: called when a new notification is emited
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1970
diff changeset
557 args: (entity, notification_data, profile)
3168
1cb232c9e845 quick frontends (widgets): added widgetNew and widgetDelete listeners:
Goffi <goffi@goffi.org>
parents: 3167
diff changeset
558 - notificationsClear: called when notifications are cleared
1972
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1970
diff changeset
559 args: (entity, type_, profile)
3168
1cb232c9e845 quick frontends (widgets): added widgetNew and widgetDelete listeners:
Goffi <goffi@goffi.org>
parents: 3167
diff changeset
560 - widgetNew: a new QuickWidget has been created
1cb232c9e845 quick frontends (widgets): added widgetNew and widgetDelete listeners:
Goffi <goffi@goffi.org>
parents: 3167
diff changeset
561 args: (widget,)
1cb232c9e845 quick frontends (widgets): added widgetNew and widgetDelete listeners:
Goffi <goffi@goffi.org>
parents: 3167
diff changeset
562 - widgetDeleted: all instances of a widget with specific hash have been
1cb232c9e845 quick frontends (widgets): added widgetNew and widgetDelete listeners:
Goffi <goffi@goffi.org>
parents: 3167
diff changeset
563 deleted
1cb232c9e845 quick frontends (widgets): added widgetNew and widgetDelete listeners:
Goffi <goffi@goffi.org>
parents: 3167
diff changeset
564 args: (widget_deleted,)
1363
fa77e40eb17b quick_frontends: added "menu" listeners, which is called when a menu is added or removed.
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
565 - menu: called when a menu item is added or removed
fa77e40eb17b quick_frontends: added "menu" listeners, which is called when a menu is added or removed.
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
566 args: (type_, path, path_i18n, item) were values are:
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
567 type_: same as in [sat.core.sat_main.SAT.import_menu]
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
568 path: same as in [sat.core.sat_main.SAT.import_menu]
1363
fa77e40eb17b quick_frontends: added "menu" listeners, which is called when a menu is added or removed.
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
569 path_i18n: translated path (or None if the item is removed)
2664
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2626
diff changeset
570 item: instance of quick_menus.MenuItemBase or None if the item is
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2626
diff changeset
571 removed
1363
fa77e40eb17b quick_frontends: added "menu" listeners, which is called when a menu is added or removed.
Goffi <goffi@goffi.org>
parents: 1361
diff changeset
572 - gotMenus: called only once when menu are available (no arg)
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
573 - progress_finished: called when a progressing action has just finished
2103
b44558286bbb quick frontend (quick app): added progressFinished and progressError listeners
Goffi <goffi@goffi.org>
parents: 2102
diff changeset
574 args: (progress_id, metadata, profile)
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
575 - progress_error: called when a progressing action failed
2103
b44558286bbb quick frontend (quick app): added progressFinished and progressError listeners
Goffi <goffi@goffi.org>
parents: 2102
diff changeset
576 args: (progress_id, error_msg, profile):
1319
781ee3539252 quick frontends(quick app): add a listeners (observer/observable) mechanism to call a callback when a event happen. Implemented an "avatar" event.
Goffi <goffi@goffi.org>
parents: 1318
diff changeset
577 @param callback: method to call on event
1331
7fa07c7b0761 quick_frontend (quick_app): addListener takes a profiles_filter argument to check the profile before calling a listener (profile must be passed right after the event type in callListeners)
souliane <souliane@mailoo.org>
parents: 1329
diff changeset
578 @param profiles_filter (set[unicode]): if set and not empty, the
7fa07c7b0761 quick_frontend (quick_app): addListener takes a profiles_filter argument to check the profile before calling a listener (profile must be passed right after the event type in callListeners)
souliane <souliane@mailoo.org>
parents: 1329
diff changeset
579 listener will be callable only by one of the given profiles.
1319
781ee3539252 quick frontends(quick app): add a listeners (observer/observable) mechanism to call a callback when a event happen. Implemented an "avatar" event.
Goffi <goffi@goffi.org>
parents: 1318
diff changeset
580 """
781ee3539252 quick frontends(quick app): add a listeners (observer/observable) mechanism to call a callback when a event happen. Implemented an "avatar" event.
Goffi <goffi@goffi.org>
parents: 1318
diff changeset
581 assert type_ in C.LISTENERS
3166
122075ceaa53 quick frontend (app): replaced OrderedDict by regular dict:
Goffi <goffi@goffi.org>
parents: 3164
diff changeset
582 self._listeners.setdefault(type_, {})[callback] = profiles_filter
1319
781ee3539252 quick frontends(quick app): add a listeners (observer/observable) mechanism to call a callback when a event happen. Implemented an "avatar" event.
Goffi <goffi@goffi.org>
parents: 1318
diff changeset
583
3167
d0fb79f97466 quick frontends (app): added an "ignore_missing" argument to RemoveListener:
Goffi <goffi@goffi.org>
parents: 3166
diff changeset
584 def removeListener(self, type_, callback, ignore_missing=False):
1319
781ee3539252 quick frontends(quick app): add a listeners (observer/observable) mechanism to call a callback when a event happen. Implemented an "avatar" event.
Goffi <goffi@goffi.org>
parents: 1318
diff changeset
585 """Remove a callback from listeners
781ee3539252 quick frontends(quick app): add a listeners (observer/observable) mechanism to call a callback when a event happen. Implemented an "avatar" event.
Goffi <goffi@goffi.org>
parents: 1318
diff changeset
586
3167
d0fb79f97466 quick frontends (app): added an "ignore_missing" argument to RemoveListener:
Goffi <goffi@goffi.org>
parents: 3166
diff changeset
587 @param type_(str): same as for [addListener]
d0fb79f97466 quick frontends (app): added an "ignore_missing" argument to RemoveListener:
Goffi <goffi@goffi.org>
parents: 3166
diff changeset
588 @param callback(callable): callback to remove
d0fb79f97466 quick frontends (app): added an "ignore_missing" argument to RemoveListener:
Goffi <goffi@goffi.org>
parents: 3166
diff changeset
589 @param ignore_missing(bool): if True, don't log error if the listener doesn't
d0fb79f97466 quick frontends (app): added an "ignore_missing" argument to RemoveListener:
Goffi <goffi@goffi.org>
parents: 3166
diff changeset
590 exist
1319
781ee3539252 quick frontends(quick app): add a listeners (observer/observable) mechanism to call a callback when a event happen. Implemented an "avatar" event.
Goffi <goffi@goffi.org>
parents: 1318
diff changeset
591 """
781ee3539252 quick frontends(quick app): add a listeners (observer/observable) mechanism to call a callback when a event happen. Implemented an "avatar" event.
Goffi <goffi@goffi.org>
parents: 1318
diff changeset
592 assert type_ in C.LISTENERS
3077
ab8be8f1c92d quick frontend(app): catch exception when trying to remove a missing listener, and log it
Goffi <goffi@goffi.org>
parents: 3065
diff changeset
593 try:
ab8be8f1c92d quick frontend(app): catch exception when trying to remove a missing listener, and log it
Goffi <goffi@goffi.org>
parents: 3065
diff changeset
594 self._listeners[type_].pop(callback)
ab8be8f1c92d quick frontend(app): catch exception when trying to remove a missing listener, and log it
Goffi <goffi@goffi.org>
parents: 3065
diff changeset
595 except KeyError:
3167
d0fb79f97466 quick frontends (app): added an "ignore_missing" argument to RemoveListener:
Goffi <goffi@goffi.org>
parents: 3166
diff changeset
596 if not ignore_missing:
d0fb79f97466 quick frontends (app): added an "ignore_missing" argument to RemoveListener:
Goffi <goffi@goffi.org>
parents: 3166
diff changeset
597 log.error(
d0fb79f97466 quick frontends (app): added an "ignore_missing" argument to RemoveListener:
Goffi <goffi@goffi.org>
parents: 3166
diff changeset
598 f"Trying to remove an inexisting listener (type = {type_}): "
d0fb79f97466 quick frontends (app): added an "ignore_missing" argument to RemoveListener:
Goffi <goffi@goffi.org>
parents: 3166
diff changeset
599 f"{callback}")
1319
781ee3539252 quick frontends(quick app): add a listeners (observer/observable) mechanism to call a callback when a event happen. Implemented an "avatar" event.
Goffi <goffi@goffi.org>
parents: 1318
diff changeset
600
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
601 def call_listeners(self, type_, *args, **kwargs):
1331
7fa07c7b0761 quick_frontend (quick_app): addListener takes a profiles_filter argument to check the profile before calling a listener (profile must be passed right after the event type in callListeners)
souliane <souliane@mailoo.org>
parents: 1329
diff changeset
602 """Call the methods which listen type_ event. If a profiles filter has
7fa07c7b0761 quick_frontend (quick_app): addListener takes a profiles_filter argument to check the profile before calling a listener (profile must be passed right after the event type in callListeners)
souliane <souliane@mailoo.org>
parents: 1329
diff changeset
603 been register with a listener and profile argument is not None, the
7fa07c7b0761 quick_frontend (quick_app): addListener takes a profiles_filter argument to check the profile before calling a listener (profile must be passed right after the event type in callListeners)
souliane <souliane@mailoo.org>
parents: 1329
diff changeset
604 listener will be called only if profile is in the profiles filter list.
1319
781ee3539252 quick frontends(quick app): add a listeners (observer/observable) mechanism to call a callback when a event happen. Implemented an "avatar" event.
Goffi <goffi@goffi.org>
parents: 1318
diff changeset
605
1323
a599b6a70dc0 frontends (quick_frontend): fixes a typo (listerner --> listener)
souliane <souliane@mailoo.org>
parents: 1319
diff changeset
606 @param type_: same as for [addListener]
1319
781ee3539252 quick frontends(quick app): add a listeners (observer/observable) mechanism to call a callback when a event happen. Implemented an "avatar" event.
Goffi <goffi@goffi.org>
parents: 1318
diff changeset
607 @param *args: arguments sent to callback
1338
139263ee85c5 quick frontends: fixed use of profile for listeners
Goffi <goffi@goffi.org>
parents: 1337
diff changeset
608 @param **kwargs: keywords argument, mainly used to pass "profile" when needed
1319
781ee3539252 quick frontends(quick app): add a listeners (observer/observable) mechanism to call a callback when a event happen. Implemented an "avatar" event.
Goffi <goffi@goffi.org>
parents: 1318
diff changeset
609 """
781ee3539252 quick frontends(quick app): add a listeners (observer/observable) mechanism to call a callback when a event happen. Implemented an "avatar" event.
Goffi <goffi@goffi.org>
parents: 1318
diff changeset
610 assert type_ in C.LISTENERS
781ee3539252 quick frontends(quick app): add a listeners (observer/observable) mechanism to call a callback when a event happen. Implemented an "avatar" event.
Goffi <goffi@goffi.org>
parents: 1318
diff changeset
611 try:
781ee3539252 quick frontends(quick app): add a listeners (observer/observable) mechanism to call a callback when a event happen. Implemented an "avatar" event.
Goffi <goffi@goffi.org>
parents: 1318
diff changeset
612 listeners = self._listeners[type_]
781ee3539252 quick frontends(quick app): add a listeners (observer/observable) mechanism to call a callback when a event happen. Implemented an "avatar" event.
Goffi <goffi@goffi.org>
parents: 1318
diff changeset
613 except KeyError:
781ee3539252 quick frontends(quick app): add a listeners (observer/observable) mechanism to call a callback when a event happen. Implemented an "avatar" event.
Goffi <goffi@goffi.org>
parents: 1318
diff changeset
614 pass
781ee3539252 quick frontends(quick app): add a listeners (observer/observable) mechanism to call a callback when a event happen. Implemented an "avatar" event.
Goffi <goffi@goffi.org>
parents: 1318
diff changeset
615 else:
1338
139263ee85c5 quick frontends: fixed use of profile for listeners
Goffi <goffi@goffi.org>
parents: 1337
diff changeset
616 profile = kwargs.get("profile")
3193
65d89a339dd3 quick frontend (app): avoid crash when a listener is removed while being called
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
617 for listener, profiles_filter in list(listeners.items()):
1331
7fa07c7b0761 quick_frontend (quick_app): addListener takes a profiles_filter argument to check the profile before calling a listener (profile must be passed right after the event type in callListeners)
souliane <souliane@mailoo.org>
parents: 1329
diff changeset
618 if profile is None or not profiles_filter or profile in profiles_filter:
1339
18cd46a264e9 quick frontends, primitivus: fixed listener calls (kwargs where forgotten) + fixed presence listener + renamed updatePresence to onPresenceUpdate for consistency with oter listeners
Goffi <goffi@goffi.org>
parents: 1338
diff changeset
619 listener(*args, **kwargs)
1319
781ee3539252 quick frontends(quick app): add a listeners (observer/observable) mechanism to call a callback when a event happen. Implemented an "avatar" event.
Goffi <goffi@goffi.org>
parents: 1318
diff changeset
620
125
8d611eb9ae48 primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents: 124
diff changeset
621 def check_profile(self, profile):
1345
b26dd78de495 quick frontends: signal cache: if a signal arrives between the beginning of profile plugging, and the when the profile is actually ready, it is cached and replayed when the profile is ready.
Goffi <goffi@goffi.org>
parents: 1342
diff changeset
622 """Tell if the profile is currently followed by the application, and ready"""
b26dd78de495 quick frontends: signal cache: if a signal arrives between the beginning of profile plugging, and the when the profile is actually ready, it is cached and replayed when the profile is ready.
Goffi <goffi@goffi.org>
parents: 1342
diff changeset
623 return profile in self.ready_profiles
66
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
624
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
625 def post_init(self, profile_manager):
2664
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2626
diff changeset
626 """Must be called after initialization is done, do all automatic task
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
627
2664
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2626
diff changeset
628 (auto plug profile)
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2626
diff changeset
629 @param profile_manager: instance of a subclass of
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2626
diff changeset
630 Quick_frontend.QuickProfileManager
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
631 """
1290
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1265
diff changeset
632 if self.options and self.options.profile:
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
633 profile_manager.autoconnect([self.options.profile])
119
ded2431cea5a Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents: 117
diff changeset
634
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
635 def profile_plugged(self, profile):
2664
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2626
diff changeset
636 """Method called when the profile is fully plugged
91
39c672544593 Tarot: bidding phase
Goffi <goffi@goffi.org>
parents: 90
diff changeset
637
2664
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2626
diff changeset
638 This will launch frontend specific workflow
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2626
diff changeset
639
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2626
diff changeset
640 /!\ if you override the method and don't call the parent, be sure to add the
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2626
diff changeset
641 profile to ready_profiles ! if you don't, all signals will stay in cache
1345
b26dd78de495 quick frontends: signal cache: if a signal arrives between the beginning of profile plugging, and the when the profile is actually ready, it is cached and replayed when the profile is ready.
Goffi <goffi@goffi.org>
parents: 1342
diff changeset
642
1290
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1265
diff changeset
643 @param profile(unicode): %(doc_profile)s
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1265
diff changeset
644 """
1939
e68483c5a999 quick app (contact list): when a new profile is plugged, updates are locked until the end of the process, this avoid many useless refreshes
Goffi <goffi@goffi.org>
parents: 1938
diff changeset
645 self._plugs_in_progress.remove(profile)
1345
b26dd78de495 quick frontends: signal cache: if a signal arrives between the beginning of profile plugging, and the when the profile is actually ready, it is cached and replayed when the profile is ready.
Goffi <goffi@goffi.org>
parents: 1342
diff changeset
646 self.ready_profiles.add(profile)
b26dd78de495 quick frontends: signal cache: if a signal arrives between the beginning of profile plugging, and the when the profile is actually ready, it is cached and replayed when the profile is ready.
Goffi <goffi@goffi.org>
parents: 1342
diff changeset
647
b26dd78de495 quick frontends: signal cache: if a signal arrives between the beginning of profile plugging, and the when the profile is actually ready, it is cached and replayed when the profile is ready.
Goffi <goffi@goffi.org>
parents: 1342
diff changeset
648 # profile is ready, we can call send signals that where is cache
b26dd78de495 quick frontends: signal cache: if a signal arrives between the beginning of profile plugging, and the when the profile is actually ready, it is cached and replayed when the profile is ready.
Goffi <goffi@goffi.org>
parents: 1342
diff changeset
649 cached_signals = self.signals_cache.pop(profile, [])
b26dd78de495 quick frontends: signal cache: if a signal arrives between the beginning of profile plugging, and the when the profile is actually ready, it is cached and replayed when the profile is ready.
Goffi <goffi@goffi.org>
parents: 1342
diff changeset
650 for function_name, handler, args, kwargs in cached_signals:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
651 log.debug(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 3017
diff changeset
652 "Calling cached signal [%s] with args %s and kwargs %s"
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
653 % (function_name, args, kwargs)
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
654 )
1393
50d5d6325f62 quick_frontend, primitivus: various fixes (MUC and cached signals):
souliane <souliane@mailoo.org>
parents: 1391
diff changeset
655 handler(*args, **kwargs)
91
39c672544593 Tarot: bidding phase
Goffi <goffi@goffi.org>
parents: 90
diff changeset
656
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
657 self.call_listeners("profile_plugged", profile=profile)
1939
e68483c5a999 quick app (contact list): when a new profile is plugged, updates are locked until the end of the process, this avoid many useless refreshes
Goffi <goffi@goffi.org>
parents: 1938
diff changeset
658 if not self._plugs_in_progress:
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
659 self.contact_lists.lock_update(False)
1348
a39d2db03c80 frontends: add listeners 'profilePlugged', 'disconnect' and 'gotMenus' (the last one to be removed when the menus are refactored to quick_app)
souliane <souliane@mailoo.org>
parents: 1347
diff changeset
660
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
661 def profile_connected(self, profile):
3204
fc2bea41e402 quick frontend(app): new `QuickApp.profileConnected` method
Goffi <goffi@goffi.org>
parents: 3193
diff changeset
662 """Called when a plugged profile is connected
fc2bea41e402 quick frontend(app): new `QuickApp.profileConnected` method
Goffi <goffi@goffi.org>
parents: 3193
diff changeset
663
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
664 it is called independently of profile_plugged (may be called before or after
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
665 profile_plugged)
3204
fc2bea41e402 quick frontend(app): new `QuickApp.profileConnected` method
Goffi <goffi@goffi.org>
parents: 3193
diff changeset
666 """
fc2bea41e402 quick frontend(app): new `QuickApp.profileConnected` method
Goffi <goffi@goffi.org>
parents: 3193
diff changeset
667 pass
fc2bea41e402 quick frontend(app): new `QuickApp.profileConnected` method
Goffi <goffi@goffi.org>
parents: 3193
diff changeset
668
2142
be96beb7ca14 core, bridge, frontends: renamed asyncConnect to connect, and added options parameters (not used yet)
Goffi <goffi@goffi.org>
parents: 2135
diff changeset
669 def connect(self, profile, callback=None, errback=None):
1060
aa15453ec54d core (xmpp), stdui (profile_manager), bridge, frontends: raise an exception if the XMPP connection failed instead of sending a signal
souliane <souliane@mailoo.org>
parents: 1058
diff changeset
670 if not callback:
2765
378188abe941 misc: replaced all "dummy" by the more conventional and readable "__" ("_" being used for gettext)
Goffi <goffi@goffi.org>
parents: 2685
diff changeset
671 callback = lambda __: None
1060
aa15453ec54d core (xmpp), stdui (profile_manager), bridge, frontends: raise an exception if the XMPP connection failed instead of sending a signal
souliane <souliane@mailoo.org>
parents: 1058
diff changeset
672 if not errback:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
673
1060
aa15453ec54d core (xmpp), stdui (profile_manager), bridge, frontends: raise an exception if the XMPP connection failed instead of sending a signal
souliane <souliane@mailoo.org>
parents: 1058
diff changeset
674 def errback(failure):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 3017
diff changeset
675 log.error(_("Can't connect profile [%s]") % failure)
2089
0931b5a6213c core, quick_frontends: android compatibility hacks:
Goffi <goffi@goffi.org>
parents: 2086
diff changeset
676 try:
0931b5a6213c core, quick_frontends: android compatibility hacks:
Goffi <goffi@goffi.org>
parents: 2086
diff changeset
677 module = failure.module
0931b5a6213c core, quick_frontends: android compatibility hacks:
Goffi <goffi@goffi.org>
parents: 2086
diff changeset
678 except AttributeError:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
679 module = ""
2089
0931b5a6213c core, quick_frontends: android compatibility hacks:
Goffi <goffi@goffi.org>
parents: 2086
diff changeset
680 try:
0931b5a6213c core, quick_frontends: android compatibility hacks:
Goffi <goffi@goffi.org>
parents: 2086
diff changeset
681 message = failure.message
0931b5a6213c core, quick_frontends: android compatibility hacks:
Goffi <goffi@goffi.org>
parents: 2086
diff changeset
682 except AttributeError:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
683 message = "error"
2089
0931b5a6213c core, quick_frontends: android compatibility hacks:
Goffi <goffi@goffi.org>
parents: 2086
diff changeset
684 try:
0931b5a6213c core, quick_frontends: android compatibility hacks:
Goffi <goffi@goffi.org>
parents: 2086
diff changeset
685 fullname = failure.fullname
0931b5a6213c core, quick_frontends: android compatibility hacks:
Goffi <goffi@goffi.org>
parents: 2086
diff changeset
686 except AttributeError:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
687 fullname = "error"
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
688 if (
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
689 module.startswith("twisted.words.protocols.jabber")
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
690 and failure.condition == "not-authorized"
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
691 ):
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
692 self.action_launch(C.CHANGE_XMPP_PASSWD_ID, {}, profile=profile)
1074
a47995155e55 frontends (quick_frontend): fixes the handling of asyncConnect failure
souliane <souliane@mailoo.org>
parents: 1063
diff changeset
693 else:
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
694 self.show_dialog(message, fullname, "error")
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
695
2142
be96beb7ca14 core, bridge, frontends: renamed asyncConnect to connect, and added options parameters (not used yet)
Goffi <goffi@goffi.org>
parents: 2135
diff changeset
696 self.bridge.connect(profile, callback=callback, errback=errback)
1060
aa15453ec54d core (xmpp), stdui (profile_manager), bridge, frontends: raise an exception if the XMPP connection failed instead of sending a signal
souliane <souliane@mailoo.org>
parents: 1058
diff changeset
697
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
698 def plug_profiles(self, profiles):
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
699 """Tell application which profiles must be used
0
goffi@necton2
parents:
diff changeset
700
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
701 @param profiles: list of valid profile names
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
702 """
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
703 self.contact_lists.lock_update()
1939
e68483c5a999 quick app (contact list): when a new profile is plugged, updates are locked until the end of the process, this avoid many useless refreshes
Goffi <goffi@goffi.org>
parents: 1938
diff changeset
704 self._plugs_in_progress.update(profiles)
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
705 self.plugging_profiles()
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
706 for profile in profiles:
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
707 self.profiles.plug(profile)
51
8c67ea98ab91 frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents: 28
diff changeset
708
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
709 def plugging_profiles(self):
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
710 """Method to subclass to manage frontend specific things to do
0
goffi@necton2
parents:
diff changeset
711
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
712 will be called when profiles are choosen and are to be plugged soon
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
713 """
1290
faa1129559b8 core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents: 1265
diff changeset
714 pass
542
3eeb6c865e4d frontends: incoming files transfer management:
Goffi <goffi@goffi.org>
parents: 538
diff changeset
715
66
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
716 def unplug_profile(self, profile):
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
717 """Tell the application to not follow anymore the profile"""
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
718 if not profile in self.profiles:
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
719 raise ValueError("The profile [{}] is not plugged".format(profile))
1332
0f92b6a150ff quick_frontend, primitivus: use a listener to update the contact list when receiving a presence
souliane <souliane@mailoo.org>
parents: 1331
diff changeset
720 self.profiles.unplug(profile)
66
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
721
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
722 def clear_profile(self):
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
723 self.profiles.clear()
8147b4f40809 SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents: 64
diff changeset
724
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
725 def new_widget(self, widget):
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
726 raise NotImplementedError
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
727
2128
aa94f33fd2ad plugin otr: various improvments:
Goffi <goffi@goffi.org>
parents: 2126
diff changeset
728 # bridge signals hanlers
aa94f33fd2ad plugin otr: various improvments:
Goffi <goffi@goffi.org>
parents: 2126
diff changeset
729
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
730 def connected_handler(self, jid_s, profile):
1435
7590bbf44eed bridge, quick_frontend: the JID that is assigned by the server can differ from the one we asked for (resource)
souliane <souliane@mailoo.org>
parents: 1429
diff changeset
731 """Called when the connection is made.
7590bbf44eed bridge, quick_frontend: the JID that is assigned by the server can differ from the one we asked for (resource)
souliane <souliane@mailoo.org>
parents: 1429
diff changeset
732
7590bbf44eed bridge, quick_frontend: the JID that is assigned by the server can differ from the one we asked for (resource)
souliane <souliane@mailoo.org>
parents: 1429
diff changeset
733 @param jid_s (unicode): the JID that we were assigned by the server,
7590bbf44eed bridge, quick_frontend: the JID that is assigned by the server can differ from the one we asked for (resource)
souliane <souliane@mailoo.org>
parents: 1429
diff changeset
734 as the resource might differ from the JID we asked for.
7590bbf44eed bridge, quick_frontend: the JID that is assigned by the server can differ from the one we asked for (resource)
souliane <souliane@mailoo.org>
parents: 1429
diff changeset
735 """
1009
d1084f7e56a5 quick_frontend: use of new logging system
Goffi <goffi@goffi.org>
parents: 955
diff changeset
736 log.debug(_("Connected"))
1435
7590bbf44eed bridge, quick_frontend: the JID that is assigned by the server can differ from the one we asked for (resource)
souliane <souliane@mailoo.org>
parents: 1429
diff changeset
737 self.profiles[profile].whoami = jid.JID(jid_s)
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
738 self.set_presence_status(profile=profile)
2899
5b0f897689b7 quick frontend (app): (un)set sync state on (dis)connect:
Goffi <goffi@goffi.org>
parents: 2898
diff changeset
739 # FIXME: fill() is already called for all profiles when doing self.sync = True
5b0f897689b7 quick frontend (app): (un)set sync state on (dis)connect:
Goffi <goffi@goffi.org>
parents: 2898
diff changeset
740 # a per-profile fill() should be done once, see below note
1418
6adf1b0be609 quick_frontend: ask for the roster in connectedHandler instead of in ProfileManager, because we need it also when reconnecting after a disconnection whithout restarting the frontend
souliane <souliane@mailoo.org>
parents: 1417
diff changeset
741 self.contact_lists[profile].fill()
2899
5b0f897689b7 quick frontend (app): (un)set sync state on (dis)connect:
Goffi <goffi@goffi.org>
parents: 2898
diff changeset
742 # if we were already displaying widgets, they must be resynchronized
5b0f897689b7 quick frontend (app): (un)set sync state on (dis)connect:
Goffi <goffi@goffi.org>
parents: 2898
diff changeset
743 # FIXME: self.sync is for all profiles
5b0f897689b7 quick frontend (app): (un)set sync state on (dis)connect:
Goffi <goffi@goffi.org>
parents: 2898
diff changeset
744 # while (dis)connection is per-profile.
5b0f897689b7 quick frontend (app): (un)set sync state on (dis)connect:
Goffi <goffi@goffi.org>
parents: 2898
diff changeset
745 # A mechanism similar to sync should be available
5b0f897689b7 quick frontend (app): (un)set sync state on (dis)connect:
Goffi <goffi@goffi.org>
parents: 2898
diff changeset
746 # on a per-profile basis
5b0f897689b7 quick frontend (app): (un)set sync state on (dis)connect:
Goffi <goffi@goffi.org>
parents: 2898
diff changeset
747 self.sync = True
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
748 self.profile_connected(profile)
52
6455fb62ff83 Connection/disconnection signals
Goffi <goffi@goffi.org>
parents: 51
diff changeset
749
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
750 def disconnected_handler(self, profile):
52
6455fb62ff83 Connection/disconnection signals
Goffi <goffi@goffi.org>
parents: 51
diff changeset
751 """called when the connection is closed"""
1009
d1084f7e56a5 quick_frontend: use of new logging system
Goffi <goffi@goffi.org>
parents: 955
diff changeset
752 log.debug(_("Disconnected"))
1938
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
753 self.contact_lists[profile].disconnect()
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
754 # FIXME: see note on connected_handler
2899
5b0f897689b7 quick frontend (app): (un)set sync state on (dis)connect:
Goffi <goffi@goffi.org>
parents: 2898
diff changeset
755 self.sync = False
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
756 self.set_presence_status(C.PRESENCE_UNAVAILABLE, "", profile=profile)
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 585
diff changeset
757
4126
45e3bb8607d8 frontends (quick app): allow frontend to register an action handler:
Goffi <goffi@goffi.org>
parents: 4125
diff changeset
758 def action_new_handler(self, action_data_s, action_id, security_limit, profile):
45e3bb8607d8 frontends (quick app): allow frontend to register an action handler:
Goffi <goffi@goffi.org>
parents: 4125
diff changeset
759 action_data = data_format.deserialise(action_data_s)
45e3bb8607d8 frontends (quick app): allow frontend to register an action handler:
Goffi <goffi@goffi.org>
parents: 4125
diff changeset
760 action_type = action_data.get("type")
45e3bb8607d8 frontends (quick app): allow frontend to register an action handler:
Goffi <goffi@goffi.org>
parents: 4125
diff changeset
761 action_handler = self._action_handlers.get(action_type)
45e3bb8607d8 frontends (quick app): allow frontend to register an action handler:
Goffi <goffi@goffi.org>
parents: 4125
diff changeset
762 if action_handler is not None:
45e3bb8607d8 frontends (quick app): allow frontend to register an action handler:
Goffi <goffi@goffi.org>
parents: 4125
diff changeset
763 action_handler(action_data, action_id, security_limit, profile)
45e3bb8607d8 frontends (quick app): allow frontend to register an action handler:
Goffi <goffi@goffi.org>
parents: 4125
diff changeset
764 else:
45e3bb8607d8 frontends (quick app): allow frontend to register an action handler:
Goffi <goffi@goffi.org>
parents: 4125
diff changeset
765 self.action_manager(
45e3bb8607d8 frontends (quick app): allow frontend to register an action handler:
Goffi <goffi@goffi.org>
parents: 4125
diff changeset
766 action_data, user_action=False, profile=profile
45e3bb8607d8 frontends (quick app): allow frontend to register an action handler:
Goffi <goffi@goffi.org>
parents: 4125
diff changeset
767 )
1468
731fbed0b9cf quick_frontend, primitivus: handling of actionNew signal
Goffi <goffi@goffi.org>
parents: 1461
diff changeset
768
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
769 def contact_new_handler(self, jid_s, attributes, groups, profile):
1435
7590bbf44eed bridge, quick_frontend: the JID that is assigned by the server can differ from the one we asked for (resource)
souliane <souliane@mailoo.org>
parents: 1429
diff changeset
770 entity = jid.JID(jid_s)
1938
011eff37e21d quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
771 groups = list(groups)
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
772 self.contact_lists[profile].set_contact(entity, groups, attributes, in_roster=True)
510
886754295efe quick frontend, primitivus, wix: MUC private messages management
Goffi <goffi@goffi.org>
parents: 507
diff changeset
773
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
774 def message_new_handler(
3170
39d7327583e1 core: use serialised dict for `extra` in messageNew and historyGet
Goffi <goffi@goffi.org>
parents: 3168
diff changeset
775 self, uid, timestamp, from_jid_s, to_jid_s, msg, subject, type_, extra_s,
39d7327583e1 core: use serialised dict for `extra` in messageNew and historyGet
Goffi <goffi@goffi.org>
parents: 3168
diff changeset
776 profile):
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
777 from_jid = jid.JID(from_jid_s)
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
778 to_jid = jid.JID(to_jid_s)
3170
39d7327583e1 core: use serialised dict for `extra` in messageNew and historyGet
Goffi <goffi@goffi.org>
parents: 3168
diff changeset
779 extra = data_format.deserialise(extra_s)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
780 if not self.trigger.point(
2848
b9da74c9d46e quick_frontend(app): fixed use of bare jid for target when getting a new message:
Goffi <goffi@goffi.org>
parents: 2846
diff changeset
781 "messageNewTrigger", uid, timestamp, from_jid, to_jid, msg, subject, type_,
b9da74c9d46e quick_frontend(app): fixed use of bare jid for target when getting a new message:
Goffi <goffi@goffi.org>
parents: 2846
diff changeset
782 extra, profile=profile,):
1347
ba41a81d14c2 frontends (QuickApp), tools (TriggerManager): frontends can also use triggers + add those for sending and receiving a message
souliane <souliane@mailoo.org>
parents: 1345
diff changeset
783 return
ba41a81d14c2 frontends (QuickApp), tools (TriggerManager): frontends can also use triggers + add those for sending and receiving a message
souliane <souliane@mailoo.org>
parents: 1345
diff changeset
784
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
785 from_me = from_jid.bare == self.profiles[profile].whoami.bare
2848
b9da74c9d46e quick_frontend(app): fixed use of bare jid for target when getting a new message:
Goffi <goffi@goffi.org>
parents: 2846
diff changeset
786 mess_to_jid = to_jid if from_me else from_jid
b9da74c9d46e quick_frontend(app): fixed use of bare jid for target when getting a new message:
Goffi <goffi@goffi.org>
parents: 2846
diff changeset
787 target = mess_to_jid.bare
1336
2ecc07a8f91b primitivus, quick_frontends: moved newMessage signal handler to quick_frontend
Goffi <goffi@goffi.org>
parents: 1319
diff changeset
788 contact_list = self.contact_lists[profile]
2792
441b536e28ed quick frontend (chat): use right type in getOrCreateWidget on new message
Goffi <goffi@goffi.org>
parents: 2790
diff changeset
789
441b536e28ed quick frontend (chat): use right type in getOrCreateWidget on new message
Goffi <goffi@goffi.org>
parents: 2790
diff changeset
790 try:
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
791 is_room = contact_list.is_room(target)
2792
441b536e28ed quick frontend (chat): use right type in getOrCreateWidget on new message
Goffi <goffi@goffi.org>
parents: 2790
diff changeset
792 except exceptions.NotFound:
441b536e28ed quick frontend (chat): use right type in getOrCreateWidget on new message
Goffi <goffi@goffi.org>
parents: 2790
diff changeset
793 is_room = False
441b536e28ed quick frontend (chat): use right type in getOrCreateWidget on new message
Goffi <goffi@goffi.org>
parents: 2790
diff changeset
794
441b536e28ed quick frontend (chat): use right type in getOrCreateWidget on new message
Goffi <goffi@goffi.org>
parents: 2790
diff changeset
795 if target.resource and not is_room:
2664
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2626
diff changeset
796 # we avoid resource locking, but we must keep resource for private MUC
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2626
diff changeset
797 # messages
2848
b9da74c9d46e quick_frontend(app): fixed use of bare jid for target when getting a new message:
Goffi <goffi@goffi.org>
parents: 2846
diff changeset
798 target = target
2040
f607349a01a4 quick frontend (chat): fixed messageNew signal dispatching when several widgets are handling the target
Goffi <goffi@goffi.org>
parents: 2036
diff changeset
799 # we want to be sure to have at least one QuickChat instance
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
800 self.widgets.get_or_create_widget(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
801 quick_chat.QuickChat,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
802 target,
2792
441b536e28ed quick frontend (chat): use right type in getOrCreateWidget on new message
Goffi <goffi@goffi.org>
parents: 2790
diff changeset
803 type_ = C.CHAT_GROUP if is_room else C.CHAT_ONE2ONE,
441b536e28ed quick frontend (chat): use right type in getOrCreateWidget on new message
Goffi <goffi@goffi.org>
parents: 2790
diff changeset
804 on_new_widget = None,
441b536e28ed quick frontend (chat): use right type in getOrCreateWidget on new message
Goffi <goffi@goffi.org>
parents: 2790
diff changeset
805 profile = profile,
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
806 )
510
886754295efe quick frontend, primitivus, wix: MUC private messages management
Goffi <goffi@goffi.org>
parents: 507
diff changeset
807
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
808 if (
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
809 not from_jid in contact_list
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
810 and from_jid.bare != self.profiles[profile].whoami.bare
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
811 ):
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
812 # XXX: needed to show entities which haven't sent any
1336
2ecc07a8f91b primitivus, quick_frontends: moved newMessage signal handler to quick_frontend
Goffi <goffi@goffi.org>
parents: 1319
diff changeset
813 # presence information and which are not in roster
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
814 contact_list.set_contact(from_jid)
1336
2ecc07a8f91b primitivus, quick_frontends: moved newMessage signal handler to quick_frontend
Goffi <goffi@goffi.org>
parents: 1319
diff changeset
815
2040
f607349a01a4 quick frontend (chat): fixed messageNew signal dispatching when several widgets are handling the target
Goffi <goffi@goffi.org>
parents: 2036
diff changeset
816 # we dispatch the message in the widgets
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
817 for widget in self.widgets.get_widgets(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
818 quick_chat.QuickChat, target=target, profiles=(profile,)
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
819 ):
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
820 widget.message_new(
2848
b9da74c9d46e quick_frontend(app): fixed use of bare jid for target when getting a new message:
Goffi <goffi@goffi.org>
parents: 2846
diff changeset
821 uid, timestamp, from_jid, mess_to_jid, msg, subject, type_, extra, profile
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
822 )
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
823
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
824 def message_encryption_started_handler(self, destinee_jid_s, plugin_data, profile):
2664
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2626
diff changeset
825 destinee_jid = jid.JID(destinee_jid_s)
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2626
diff changeset
826 plugin_data = data_format.deserialise(plugin_data)
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
827 for widget in self.widgets.get_widgets(quick_chat.QuickChat,
2664
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2626
diff changeset
828 target=destinee_jid.bare,
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2626
diff changeset
829 profiles=(profile,)):
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
830 widget.message_encryption_started(plugin_data)
2664
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2626
diff changeset
831
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
832 def message_encryption_stopped_handler(self, destinee_jid_s, plugin_data, profile):
2664
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2626
diff changeset
833 destinee_jid = jid.JID(destinee_jid_s)
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
834 for widget in self.widgets.get_widgets(quick_chat.QuickChat,
2664
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2626
diff changeset
835 target=destinee_jid.bare,
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2626
diff changeset
836 profiles=(profile,)):
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
837 widget.message_encryption_stopped(plugin_data)
2664
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2626
diff changeset
838
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
839 def message_state_handler(self, uid, status, profile):
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
840 for widget in self.widgets.get_widgets(quick_chat.QuickChat, profiles=(profile,)):
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
841 widget.on_message_state(uid, status, profile)
2024
01aff34e8873 quick frontends, primitivus: messageState signal handling
Goffi <goffi@goffi.org>
parents: 2016
diff changeset
842
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
843 def message_send(self, to_jid, message, subject=None, mess_type="auto", extra=None, callback=None, errback=None, profile_key=C.PROF_KEY_NONE):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 3017
diff changeset
844 if not subject and not extra and (not message or message == {'': ''}):
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 3017
diff changeset
845 log.debug("Not sending empty message")
2829
649cb3fd7711 quick frontend(app): avoid sending empty messages
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
846 return
649cb3fd7711 quick frontend(app): avoid sending empty messages
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
847
1955
633b5c21aefd backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents: 1939
diff changeset
848 if subject is None:
633b5c21aefd backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents: 1939
diff changeset
849 subject = {}
633b5c21aefd backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents: 1939
diff changeset
850 if extra is None:
633b5c21aefd backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents: 1939
diff changeset
851 extra = {}
776
f89173f44850 frontends: fixed sendMessage calls, sendMessage is now async so callback and errback need to be specified + redraw in PrimivitusApp.notify
Goffi <goffi@goffi.org>
parents: 771
diff changeset
852 if callback is None:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
853 callback = (
2765
378188abe941 misc: replaced all "dummy" by the more conventional and readable "__" ("_" being used for gettext)
Goffi <goffi@goffi.org>
parents: 2685
diff changeset
854 lambda __=None: None
2664
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2626
diff changeset
855 ) # FIXME: optional argument is here because pyjamas doesn't support callback
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2626
diff changeset
856 # without arg with json proxy
776
f89173f44850 frontends: fixed sendMessage calls, sendMessage is now async so callback and errback need to be specified + redraw in PrimivitusApp.notify
Goffi <goffi@goffi.org>
parents: 771
diff changeset
857 if errback is None:
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
858 errback = lambda failure: self.show_dialog(
3232
f3c99e96ac03 quick frontend (app): fixed argument order in `messageSend` default errback
Goffi <goffi@goffi.org>
parents: 3204
diff changeset
859 message=failure.message, title=failure.fullname, type="error"
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
860 )
1347
ba41a81d14c2 frontends (QuickApp), tools (TriggerManager): frontends can also use triggers + add those for sending and receiving a message
souliane <souliane@mailoo.org>
parents: 1345
diff changeset
861
2829
649cb3fd7711 quick frontend(app): avoid sending empty messages
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
862 if not self.trigger.point("messageSendTrigger", to_jid, message, subject, mess_type, extra, callback, errback, profile_key=profile_key):
1347
ba41a81d14c2 frontends (QuickApp), tools (TriggerManager): frontends can also use triggers + add those for sending and receiving a message
souliane <souliane@mailoo.org>
parents: 1345
diff changeset
863 return
ba41a81d14c2 frontends (QuickApp), tools (TriggerManager): frontends can also use triggers + add those for sending and receiving a message
souliane <souliane@mailoo.org>
parents: 1345
diff changeset
864
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
865 self.bridge.message_send(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 3017
diff changeset
866 str(to_jid),
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
867 message,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
868 subject,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
869 mess_type,
3179
84a94b385760 bridge: messageSend's extra is now serialised
Goffi <goffi@goffi.org>
parents: 3170
diff changeset
870 data_format.serialise(extra),
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
871 profile_key,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
872 callback=callback,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
873 errback=errback,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
874 )
0
goffi@necton2
parents:
diff changeset
875
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
876 def set_presence_status(self, show="", status=None, profile=C.PROF_KEY_NONE):
737
378af36155c2 frontends: set and retrieve your own presence and status
souliane <souliane@mailoo.org>
parents: 736
diff changeset
877 raise NotImplementedError
0
goffi@necton2
parents:
diff changeset
878
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
879 def presence_update_handler(self, entity_s, show, priority, statuses, profile):
2976
49458e12e414 quick frontends (app, chat): disabled the 2 most verbose logs, as they are barely useful and make reading logs difficult.
Goffi <goffi@goffi.org>
parents: 2899
diff changeset
880 # XXX: this log is commented because it's really too verbose even for DEBUG logs
49458e12e414 quick frontends (app, chat): disabled the 2 most verbose logs, as they are barely useful and make reading logs difficult.
Goffi <goffi@goffi.org>
parents: 2899
diff changeset
881 # but it is kept here as it may still be useful for troubleshooting
49458e12e414 quick frontends (app, chat): disabled the 2 most verbose logs, as they are barely useful and make reading logs difficult.
Goffi <goffi@goffi.org>
parents: 2899
diff changeset
882 # log.debug(
49458e12e414 quick frontends (app, chat): disabled the 2 most verbose logs, as they are barely useful and make reading logs difficult.
Goffi <goffi@goffi.org>
parents: 2899
diff changeset
883 # _(
49458e12e414 quick frontends (app, chat): disabled the 2 most verbose logs, as they are barely useful and make reading logs difficult.
Goffi <goffi@goffi.org>
parents: 2899
diff changeset
884 # u"presence update for %(entity)s (show=%(show)s, priority=%(priority)s, "
49458e12e414 quick frontends (app, chat): disabled the 2 most verbose logs, as they are barely useful and make reading logs difficult.
Goffi <goffi@goffi.org>
parents: 2899
diff changeset
885 # u"statuses=%(statuses)s) [profile:%(profile)s]"
49458e12e414 quick frontends (app, chat): disabled the 2 most verbose logs, as they are barely useful and make reading logs difficult.
Goffi <goffi@goffi.org>
parents: 2899
diff changeset
886 # )
49458e12e414 quick frontends (app, chat): disabled the 2 most verbose logs, as they are barely useful and make reading logs difficult.
Goffi <goffi@goffi.org>
parents: 2899
diff changeset
887 # % {
49458e12e414 quick frontends (app, chat): disabled the 2 most verbose logs, as they are barely useful and make reading logs difficult.
Goffi <goffi@goffi.org>
parents: 2899
diff changeset
888 # "entity": entity_s,
49458e12e414 quick frontends (app, chat): disabled the 2 most verbose logs, as they are barely useful and make reading logs difficult.
Goffi <goffi@goffi.org>
parents: 2899
diff changeset
889 # C.PRESENCE_SHOW: show,
49458e12e414 quick frontends (app, chat): disabled the 2 most verbose logs, as they are barely useful and make reading logs difficult.
Goffi <goffi@goffi.org>
parents: 2899
diff changeset
890 # C.PRESENCE_PRIORITY: priority,
49458e12e414 quick frontends (app, chat): disabled the 2 most verbose logs, as they are barely useful and make reading logs difficult.
Goffi <goffi@goffi.org>
parents: 2899
diff changeset
891 # C.PRESENCE_STATUSES: statuses,
49458e12e414 quick frontends (app, chat): disabled the 2 most verbose logs, as they are barely useful and make reading logs difficult.
Goffi <goffi@goffi.org>
parents: 2899
diff changeset
892 # "profile": profile,
49458e12e414 quick frontends (app, chat): disabled the 2 most verbose logs, as they are barely useful and make reading logs difficult.
Goffi <goffi@goffi.org>
parents: 2899
diff changeset
893 # }
49458e12e414 quick frontends (app, chat): disabled the 2 most verbose logs, as they are barely useful and make reading logs difficult.
Goffi <goffi@goffi.org>
parents: 2899
diff changeset
894 # )
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
895 entity = jid.JID(entity_s)
0
goffi@necton2
parents:
diff changeset
896
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
897 if entity == self.profiles[profile].whoami:
1417
176de79c8c39 core, plugin XEP-0045, frontends: change frontend method "setStatusOnline" for "setPresenceStatus":
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
898 if show == C.PRESENCE_UNAVAILABLE:
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
899 self.set_presence_status(C.PRESENCE_UNAVAILABLE, "", profile=profile)
735
682933ca304c frontends: presence update in quick app:
souliane <souliane@mailoo.org>
parents: 698
diff changeset
900 else:
1417
176de79c8c39 core, plugin XEP-0045, frontends: change frontend method "setStatusOnline" for "setPresenceStatus":
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
901 # FIXME: try to retrieve user language status before fallback to default
176de79c8c39 core, plugin XEP-0045, frontends: change frontend method "setStatusOnline" for "setPresenceStatus":
souliane <souliane@mailoo.org>
parents: 1409
diff changeset
902 status = statuses.get(C.PRESENCE_STATUSES_DEFAULT, None)
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
903 self.set_presence_status(show, status, profile=profile)
0
goffi@necton2
parents:
diff changeset
904 return
goffi@necton2
parents:
diff changeset
905
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
906 self.call_listeners("presence", entity, show, priority, statuses, profile=profile)
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 585
diff changeset
907
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
908 def muc_room_joined_handler(
3101
ab7e8ade848a plugin XEP-0045: added room statuses to metadata:
Goffi <goffi@goffi.org>
parents: 3077
diff changeset
909 self, room_jid_s, occupants, user_nick, subject, statuses, profile):
72
f271fff3a713 MUC implementation: first draft
Goffi <goffi@goffi.org>
parents: 71
diff changeset
910 """Called when a MUC room is joined"""
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
911 log.debug(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 3017
diff changeset
912 "Room [{room_jid}] joined by {profile}, users presents:{users}".format(
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 3017
diff changeset
913 room_jid=room_jid_s, profile=profile, users=list(occupants.keys())
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
914 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
915 )
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
916 room_jid = jid.JID(room_jid_s)
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
917 self.contact_lists[profile].set_special(room_jid, C.CONTACT_SPECIAL_GROUP)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
918 self.widgets.get_or_create_widget(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
919 quick_chat.QuickChat,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
920 room_jid,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
921 type_=C.CHAT_GROUP,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
922 nick=user_nick,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
923 occupants=occupants,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
924 subject=subject,
3101
ab7e8ade848a plugin XEP-0045: added room statuses to metadata:
Goffi <goffi@goffi.org>
parents: 3077
diff changeset
925 statuses=statuses,
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
926 profile=profile,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
927 )
72
f271fff3a713 MUC implementation: first draft
Goffi <goffi@goffi.org>
parents: 71
diff changeset
928
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
929 def muc_room_left_handler(self, room_jid_s, profile):
507
f98bef71a918 frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents: 504
diff changeset
930 """Called when a MUC room is left"""
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
931 log.debug(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 3017
diff changeset
932 "Room [%(room_jid)s] left by %(profile)s"
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
933 % {"room_jid": room_jid_s, "profile": profile}
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
934 )
1351
ec43552f5f8b quick_frontend: replace last occurences of QuickApp.chat_wins with QuickApp.widgets
souliane <souliane@mailoo.org>
parents: 1348
diff changeset
935 room_jid = jid.JID(room_jid_s)
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
936 chat_widget = self.widgets.get_widget(quick_chat.QuickChat, room_jid, profile)
1351
ec43552f5f8b quick_frontend: replace last occurences of QuickApp.chat_wins with QuickApp.widgets
souliane <souliane@mailoo.org>
parents: 1348
diff changeset
937 if chat_widget:
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
938 self.widgets.delete_widget(
3158
6032245c927e quick frontend (app): added "explicit_close" to deleteWidget, and use it on mucRoomLeftHandler:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
939 chat_widget, all_instances=True, explicit_close=True)
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
940 self.contact_lists[profile].remove_contact(room_jid)
72
f271fff3a713 MUC implementation: first draft
Goffi <goffi@goffi.org>
parents: 71
diff changeset
941
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
942 def muc_room_user_changed_nick_handler(self, room_jid_s, old_nick, new_nick, profile):
507
f98bef71a918 frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents: 504
diff changeset
943 """Called when an user joined a MUC room"""
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
944 room_jid = jid.JID(room_jid_s)
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
945 chat_widget = self.widgets.get_or_create_widget(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
946 quick_chat.QuickChat, room_jid, type_=C.CHAT_GROUP, profile=profile
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
947 )
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
948 chat_widget.change_user_nick(old_nick, new_nick)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
949 log.debug(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 3017
diff changeset
950 "user [%(old_nick)s] is now known as [%(new_nick)s] in room [%(room_jid)s]"
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
951 % {"old_nick": old_nick, "new_nick": new_nick, "room_jid": room_jid}
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
952 )
507
f98bef71a918 frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents: 504
diff changeset
953
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
954 def muc_room_new_subject_handler(self, room_jid_s, subject, profile):
76
8becde8a967c MUC: added subject management
Goffi <goffi@goffi.org>
parents: 75
diff changeset
955 """Called when subject of MUC room change"""
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
956 room_jid = jid.JID(room_jid_s)
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
957 chat_widget = self.widgets.get_or_create_widget(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
958 quick_chat.QuickChat, room_jid, type_=C.CHAT_GROUP, profile=profile
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
959 )
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
960 chat_widget.set_subject(subject)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
961 log.debug(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 3017
diff changeset
962 "new subject for room [%(room_jid)s]: %(subject)s"
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
963 % {"room_jid": room_jid, "subject": subject}
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
964 )
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 585
diff changeset
965
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
966 def chat_state_received_handler(self, from_jid_s, state, profile):
1378
3dae6964c071 quick_frontends, primitivus: move the chat states logic to quick_frontend
souliane <souliane@mailoo.org>
parents: 1377
diff changeset
967 """Called when a new chat state (XEP-0085) is received.
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
968
1378
3dae6964c071 quick_frontends, primitivus: move the chat states logic to quick_frontend
souliane <souliane@mailoo.org>
parents: 1377
diff changeset
969 @param from_jid_s (unicode): JID of a contact or C.ENTITY_ALL
3dae6964c071 quick_frontends, primitivus: move the chat states logic to quick_frontend
souliane <souliane@mailoo.org>
parents: 1377
diff changeset
970 @param state (unicode): new state
3dae6964c071 quick_frontends, primitivus: move the chat states logic to quick_frontend
souliane <souliane@mailoo.org>
parents: 1377
diff changeset
971 @param profile (unicode): current profile
907
cd02f5ef30df primitivus: display chat states (with symbols) for MUC participants
souliane <souliane@mailoo.org>
parents: 906
diff changeset
972 """
2007
19b9d3f8a6c7 plugin XEP-0085, quick_frontends, primitivus: chat states are working again
Goffi <goffi@goffi.org>
parents: 1972
diff changeset
973 from_jid = jid.JID(from_jid_s)
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
974 for widget in self.widgets.get_widgets(quick_chat.QuickChat, target=from_jid.bare,
2789
d350f4571d82 quick frontend (app): fixed filtering for chat state notifications
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
975 profiles=(profile,)):
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
976 widget.on_chat_state(from_jid, state, profile)
907
cd02f5ef30df primitivus: display chat states (with symbols) for MUC participants
souliane <souliane@mailoo.org>
parents: 906
diff changeset
977
2861
e9e33e05d143 quick frontend (app): fixed notifications ids
Goffi <goffi@goffi.org>
parents: 2854
diff changeset
978 def notify(self, type_, entity=None, message=None, subject=None, callback=None,
e9e33e05d143 quick frontend (app): fixed notifications ids
Goffi <goffi@goffi.org>
parents: 2854
diff changeset
979 cb_args=None, widget=None, profile=C.PROF_KEY_NONE):
1972
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1970
diff changeset
980 """Trigger an event notification
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1970
diff changeset
981
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1970
diff changeset
982 @param type_(unicode): notifation kind,
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1970
diff changeset
983 one of C.NOTIFY_* constant or any custom type specific to frontend
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1970
diff changeset
984 @param entity(jid.JID, None): entity involved in the notification
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1970
diff changeset
985 if entity is in contact list, a indicator may be added in front of it
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1970
diff changeset
986 @param message(unicode, None): message of the notification
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1970
diff changeset
987 @param subject(unicode, None): subject of the notification
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1970
diff changeset
988 @param callback(callable, None): method to call when notification is selected
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1970
diff changeset
989 @param cb_args(list, None): list of args for callback
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1970
diff changeset
990 @param widget(object, None): widget where the notification happened
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1970
diff changeset
991 """
2135
4e67d6ffea66 quick app: check type in notify
Goffi <goffi@goffi.org>
parents: 2128
diff changeset
992 assert type_ in C.NOTIFY_ALL
1972
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1970
diff changeset
993 notif_dict = self.profiles[profile].notifications
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
994 key = "" if entity is None else entity.bare
1972
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1970
diff changeset
995 type_notifs = notif_dict.setdefault(key, {}).setdefault(type_, [])
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1970
diff changeset
996 notif_data = {
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
997 "id": self._notif_id,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
998 "time": time.time(),
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
999 "entity": entity,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1000 "callback": callback,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1001 "cb_args": cb_args,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1002 "message": message,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1003 "subject": subject,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1004 }
1972
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1970
diff changeset
1005 if widget is not None:
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1970
diff changeset
1006 notif_data[widget] = widget
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1970
diff changeset
1007 type_notifs.append(notif_data)
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1970
diff changeset
1008 self._notifications[self._notif_id] = notif_data
2861
e9e33e05d143 quick frontend (app): fixed notifications ids
Goffi <goffi@goffi.org>
parents: 2854
diff changeset
1009 self._notif_id += 1
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1010 self.call_listeners("notification", entity, notif_data, profile=profile)
1972
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1970
diff changeset
1011
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1012 def get_notifs(self, entity=None, type_=None, exact_jid=None, profile=C.PROF_KEY_NONE):
1972
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1970
diff changeset
1013 """return notifications for given entity
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1970
diff changeset
1014
2016
f09562b0704d quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents: 2009
diff changeset
1015 @param entity(jid.JID, None, C.ENTITY_ALL): jid of the entity to check
f09562b0704d quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents: 2009
diff changeset
1016 bare jid to get all notifications, full jid to filter on resource
1972
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1970
diff changeset
1017 None to get general notifications
2009
90134b2e3dc4 primitivus, quick_frontends: show global notifications counter in contact_list + method to get these notifications in QuickApp
Goffi <goffi@goffi.org>
parents: 2007
diff changeset
1018 C.ENTITY_ALL to get all notifications
1972
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1970
diff changeset
1019 @param type_(unicode, None): notification type to filter
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1970
diff changeset
1020 None to get all notifications
2016
f09562b0704d quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents: 2009
diff changeset
1021 @param exact_jid(bool, None): if True, only return notifications from
f09562b0704d quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents: 2009
diff changeset
1022 exact entity jid (i.e. not including other resources)
f09562b0704d quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents: 2009
diff changeset
1023 None for automatic selection (True for full jid, False else)
f09562b0704d quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents: 2009
diff changeset
1024 False to get resources notifications
f09562b0704d quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents: 2009
diff changeset
1025 False doesn't do anything if entity is not a bare jid
f09562b0704d quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents: 2009
diff changeset
1026 @return (iter[dict]): notifications
1972
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1970
diff changeset
1027 """
2016
f09562b0704d quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents: 2009
diff changeset
1028 main_notif_dict = self.profiles[profile].notifications
f09562b0704d quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents: 2009
diff changeset
1029
f09562b0704d quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents: 2009
diff changeset
1030 if entity is C.ENTITY_ALL:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 3017
diff changeset
1031 selected_notifs = iter(main_notif_dict.values())
2016
f09562b0704d quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents: 2009
diff changeset
1032 exact_jid = False
f09562b0704d quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents: 2009
diff changeset
1033 else:
f09562b0704d quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents: 2009
diff changeset
1034 if entity is None:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1035 key = ""
2016
f09562b0704d quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents: 2009
diff changeset
1036 exact_jid = False
f09562b0704d quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents: 2009
diff changeset
1037 else:
f09562b0704d quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents: 2009
diff changeset
1038 key = entity.bare
f09562b0704d quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents: 2009
diff changeset
1039 if exact_jid is None:
f09562b0704d quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents: 2009
diff changeset
1040 exact_jid = bool(entity.resource)
f09562b0704d quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents: 2009
diff changeset
1041 selected_notifs = (main_notif_dict.setdefault(key, {}),)
f09562b0704d quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents: 2009
diff changeset
1042
f09562b0704d quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents: 2009
diff changeset
1043 for notifs_from_select in selected_notifs:
f09562b0704d quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents: 2009
diff changeset
1044
f09562b0704d quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents: 2009
diff changeset
1045 if type_ is None:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 3017
diff changeset
1046 type_notifs = iter(notifs_from_select.values())
2016
f09562b0704d quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents: 2009
diff changeset
1047 else:
f09562b0704d quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents: 2009
diff changeset
1048 type_notifs = (notifs_from_select.get(type_, []),)
f09562b0704d quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents: 2009
diff changeset
1049
f09562b0704d quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents: 2009
diff changeset
1050 for notifs in type_notifs:
f09562b0704d quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents: 2009
diff changeset
1051 for notif in notifs:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1052 if exact_jid and notif["entity"] != entity:
2016
f09562b0704d quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents: 2009
diff changeset
1053 continue
f09562b0704d quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents: 2009
diff changeset
1054 yield notif
1972
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1970
diff changeset
1055
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1056 def clear_notifs(self, entity, type_=None, profile=C.PROF_KEY_NONE):
1972
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1970
diff changeset
1057 """return notifications for given entity
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1970
diff changeset
1058
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1970
diff changeset
1059 @param entity(jid.JID, None): bare jid of the entity to check
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1970
diff changeset
1060 None to clear general notifications (but keep entities ones)
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1970
diff changeset
1061 @param type_(unicode, None): notification type to filter
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1970
diff changeset
1062 None to clear all notifications
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1970
diff changeset
1063 @return (list[dict]): list of notifications
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1970
diff changeset
1064 """
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1970
diff changeset
1065 notif_dict = self.profiles[profile].notifications
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1066 key = "" if entity is None else entity.bare
1972
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1970
diff changeset
1067 try:
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1970
diff changeset
1068 if type_ is None:
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1970
diff changeset
1069 del notif_dict[key]
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1970
diff changeset
1070 else:
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1970
diff changeset
1071 del notif_dict[key][type_]
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1970
diff changeset
1072 except KeyError:
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1970
diff changeset
1073 return
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1074 self.call_listeners("notificationsClear", entity, type_, profile=profile)
1972
02d21a589be2 quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents: 1970
diff changeset
1075
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1076 def ps_event_handler(self, category, service_s, node, event_type, data, profile):
1461
9fce331ba0fd quick_frontend (constants, quick_app, quick_contact_list): blogging refactoring (not finished):
Goffi <goffi@goffi.org>
parents: 1442
diff changeset
1077 """Called when a PubSub event is received.
1352
56c14cb29e0f quick_frontend: register the 'personalEvent' signal
souliane <souliane@mailoo.org>
parents: 1351
diff changeset
1078
1461
9fce331ba0fd quick_frontend (constants, quick_app, quick_contact_list): blogging refactoring (not finished):
Goffi <goffi@goffi.org>
parents: 1442
diff changeset
1079 @param category(unicode): event category (e.g. "PEP", "MICROBLOG")
9fce331ba0fd quick_frontend (constants, quick_app, quick_contact_list): blogging refactoring (not finished):
Goffi <goffi@goffi.org>
parents: 1442
diff changeset
1080 @param service_s (unicode): pubsub service
9fce331ba0fd quick_frontend (constants, quick_app, quick_contact_list): blogging refactoring (not finished):
Goffi <goffi@goffi.org>
parents: 1442
diff changeset
1081 @param node (unicode): pubsub node
9fce331ba0fd quick_frontend (constants, quick_app, quick_contact_list): blogging refactoring (not finished):
Goffi <goffi@goffi.org>
parents: 1442
diff changeset
1082 @param event_type (unicode): event type (one of C.PUBLISH, C.RETRACT, C.DELETE)
2807
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2792
diff changeset
1083 @param data (serialised_dict): event data
1352
56c14cb29e0f quick_frontend: register the 'personalEvent' signal
souliane <souliane@mailoo.org>
parents: 1351
diff changeset
1084 """
2807
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2792
diff changeset
1085 data = data_format.deserialise(data)
1461
9fce331ba0fd quick_frontend (constants, quick_app, quick_contact_list): blogging refactoring (not finished):
Goffi <goffi@goffi.org>
parents: 1442
diff changeset
1086 service_s = jid.JID(service_s)
9fce331ba0fd quick_frontend (constants, quick_app, quick_contact_list): blogging refactoring (not finished):
Goffi <goffi@goffi.org>
parents: 1442
diff changeset
1087
2067
7834743705f0 quich frontend, primivius (chat): better avatar handling:
Goffi <goffi@goffi.org>
parents: 2066
diff changeset
1088 if category == C.PS_MICROBLOG and self.MB_HANDLER:
1461
9fce331ba0fd quick_frontend (constants, quick_app, quick_contact_list): blogging refactoring (not finished):
Goffi <goffi@goffi.org>
parents: 1442
diff changeset
1089 if event_type == C.PS_PUBLISH:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1090 if not "content" in data:
1461
9fce331ba0fd quick_frontend (constants, quick_app, quick_contact_list): blogging refactoring (not finished):
Goffi <goffi@goffi.org>
parents: 1442
diff changeset
1091 log.warning("No content found in microblog data")
9fce331ba0fd quick_frontend (constants, quick_app, quick_contact_list): blogging refactoring (not finished):
Goffi <goffi@goffi.org>
parents: 1442
diff changeset
1092 return
2807
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2792
diff changeset
1093
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2792
diff changeset
1094 # FIXME: check if [] make sense (instead of None)
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2792
diff changeset
1095 _groups = data.get("group")
1461
9fce331ba0fd quick_frontend (constants, quick_app, quick_contact_list): blogging refactoring (not finished):
Goffi <goffi@goffi.org>
parents: 1442
diff changeset
1096
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1097 for wid in self.widgets.get_widgets(quick_blog.QuickBlog):
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1098 wid.add_entry_if_accepted(service_s, node, data, _groups, profile)
1461
9fce331ba0fd quick_frontend (constants, quick_app, quick_contact_list): blogging refactoring (not finished):
Goffi <goffi@goffi.org>
parents: 1442
diff changeset
1099
9fce331ba0fd quick_frontend (constants, quick_app, quick_contact_list): blogging refactoring (not finished):
Goffi <goffi@goffi.org>
parents: 1442
diff changeset
1100 try:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1101 comments_node, comments_service = (
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1102 data["comments_node"],
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1103 data["comments_service"],
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1104 )
1461
9fce331ba0fd quick_frontend (constants, quick_app, quick_contact_list): blogging refactoring (not finished):
Goffi <goffi@goffi.org>
parents: 1442
diff changeset
1105 except KeyError:
9fce331ba0fd quick_frontend (constants, quick_app, quick_contact_list): blogging refactoring (not finished):
Goffi <goffi@goffi.org>
parents: 1442
diff changeset
1106 pass
9fce331ba0fd quick_frontend (constants, quick_app, quick_contact_list): blogging refactoring (not finished):
Goffi <goffi@goffi.org>
parents: 1442
diff changeset
1107 else:
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1108 self.bridge.mb_get(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1109 comments_service,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1110 comments_node,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1111 C.NO_LIMIT,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1112 [],
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1113 {"subscribe": C.BOOL_TRUE},
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1114 profile=profile,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1115 )
1461
9fce331ba0fd quick_frontend (constants, quick_app, quick_contact_list): blogging refactoring (not finished):
Goffi <goffi@goffi.org>
parents: 1442
diff changeset
1116 elif event_type == C.PS_RETRACT:
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1117 for wid in self.widgets.get_widgets(quick_blog.QuickBlog):
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1118 wid.delete_entry_if_present(service_s, node, data["id"], profile)
1461
9fce331ba0fd quick_frontend (constants, quick_app, quick_contact_list): blogging refactoring (not finished):
Goffi <goffi@goffi.org>
parents: 1442
diff changeset
1119 pass
9fce331ba0fd quick_frontend (constants, quick_app, quick_contact_list): blogging refactoring (not finished):
Goffi <goffi@goffi.org>
parents: 1442
diff changeset
1120 else:
9fce331ba0fd quick_frontend (constants, quick_app, quick_contact_list): blogging refactoring (not finished):
Goffi <goffi@goffi.org>
parents: 1442
diff changeset
1121 log.warning("Unmanaged PubSub event type {}".format(event_type))
1352
56c14cb29e0f quick_frontend: register the 'personalEvent' signal
souliane <souliane@mailoo.org>
parents: 1351
diff changeset
1122
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1123 def register_progress_cbs(self, progress_id, callback, errback):
2862
b2e898384c25 quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents: 2861
diff changeset
1124 """Register progression callbacks
b2e898384c25 quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents: 2861
diff changeset
1125
b2e898384c25 quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents: 2861
diff changeset
1126 @param progress_id(unicode): id of the progression to check
b2e898384c25 quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents: 2861
diff changeset
1127 @param callback(callable, None): method to call when progressing action
b2e898384c25 quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents: 2861
diff changeset
1128 successfuly finished.
b2e898384c25 quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents: 2861
diff changeset
1129 None to ignore
b2e898384c25 quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents: 2861
diff changeset
1130 @param errback(callable, None): method to call when progressions action failed
b2e898384c25 quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents: 2861
diff changeset
1131 None to ignore
b2e898384c25 quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents: 2861
diff changeset
1132 """
b2e898384c25 quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents: 2861
diff changeset
1133 callbacks = self._progress_ids.setdefault(progress_id, [])
b2e898384c25 quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents: 2861
diff changeset
1134 callbacks.append((callback, errback))
b2e898384c25 quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents: 2861
diff changeset
1135
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1136 def progress_started_handler(self, pid, metadata, profile):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 3017
diff changeset
1137 log.info("Progress {} started".format(pid))
1636
e00f450c25fc primitivus: fixed progress panel
Goffi <goffi@goffi.org>
parents: 1633
diff changeset
1138
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1139 def progress_finished_handler(self, pid, metadata, profile):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 3017
diff changeset
1140 log.info("Progress {} finished".format(pid))
2862
b2e898384c25 quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents: 2861
diff changeset
1141 try:
b2e898384c25 quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents: 2861
diff changeset
1142 callbacks = self._progress_ids.pop(pid)
b2e898384c25 quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents: 2861
diff changeset
1143 except KeyError:
b2e898384c25 quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents: 2861
diff changeset
1144 pass
b2e898384c25 quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents: 2861
diff changeset
1145 else:
b2e898384c25 quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents: 2861
diff changeset
1146 for callback, __ in callbacks:
b2e898384c25 quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents: 2861
diff changeset
1147 if callback is not None:
b2e898384c25 quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents: 2861
diff changeset
1148 callback(metadata, profile=profile)
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1149 self.call_listeners("progress_finished", pid, metadata, profile=profile)
1636
e00f450c25fc primitivus: fixed progress panel
Goffi <goffi@goffi.org>
parents: 1633
diff changeset
1150
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1151 def progress_error_handler(self, pid, err_msg, profile):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 3017
diff changeset
1152 log.warning("Progress {pid} error: {err_msg}".format(pid=pid, err_msg=err_msg))
2862
b2e898384c25 quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents: 2861
diff changeset
1153 try:
b2e898384c25 quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents: 2861
diff changeset
1154 callbacks = self._progress_ids.pop(pid)
b2e898384c25 quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents: 2861
diff changeset
1155 except KeyError:
b2e898384c25 quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents: 2861
diff changeset
1156 pass
b2e898384c25 quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents: 2861
diff changeset
1157 else:
b2e898384c25 quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents: 2861
diff changeset
1158 for __, errback in callbacks:
b2e898384c25 quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents: 2861
diff changeset
1159 if errback is not None:
b2e898384c25 quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents: 2861
diff changeset
1160 errback(err_msg, profile=profile)
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1161 self.call_listeners("progress_error", pid, err_msg, profile=profile)
1636
e00f450c25fc primitivus: fixed progress panel
Goffi <goffi@goffi.org>
parents: 1633
diff changeset
1162
182
556c2bd7c344 Primitivus now implement showDialog + new "newAlert" bridge method to show a dialog from core
Goffi <goffi@goffi.org>
parents: 165
diff changeset
1163 def _subscribe_cb(self, answer, data):
556c2bd7c344 Primitivus now implement showDialog + new "newAlert" bridge method to show a dialog from core
Goffi <goffi@goffi.org>
parents: 165
diff changeset
1164 entity, profile = data
1326
88e40f31b17e quick_frontend (quick_app): fixes the call to a bridge method that was done with a JID instead of unicode
souliane <souliane@mailoo.org>
parents: 1325
diff changeset
1165 type_ = "subscribed" if answer else "unsubscribed"
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 3017
diff changeset
1166 self.bridge.subscription(type_, str(entity.bare), profile_key=profile)
182
556c2bd7c344 Primitivus now implement showDialog + new "newAlert" bridge method to show a dialog from core
Goffi <goffi@goffi.org>
parents: 165
diff changeset
1167
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1168 def subscribe_handler(self, type, raw_jid, profile):
87
66d784082930 Tarot game
Goffi <goffi@goffi.org>
parents: 86
diff changeset
1169 """Called when a subsciption management signal is received"""
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
1170 entity = jid.JID(raw_jid)
906
1cbae66fa725 quick_app: better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 811
diff changeset
1171 if type == "subscribed":
51
8c67ea98ab91 frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents: 28
diff changeset
1172 # this is a subscription confirmation, we just have to inform user
1436
e27963c9c219 quick_frontend: add a couple of TODOs
souliane <souliane@mailoo.org>
parents: 1435
diff changeset
1173 # TODO: call self.getEntityMBlog to add the new contact blogs
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1174 self.show_dialog(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 3017
diff changeset
1175 _("The contact {contact} has accepted your subscription").format(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1176 contact=entity.bare
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1177 ),
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 3017
diff changeset
1178 _("Subscription confirmation"),
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1179 )
906
1cbae66fa725 quick_app: better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 811
diff changeset
1180 elif type == "unsubscribed":
51
8c67ea98ab91 frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents: 28
diff changeset
1181 # this is a subscription refusal, we just have to inform user
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1182 self.show_dialog(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 3017
diff changeset
1183 _("The contact {contact} has refused your subscription").format(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1184 contact=entity.bare
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1185 ),
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 3017
diff changeset
1186 _("Subscription refusal"),
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1187 "error",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1188 )
906
1cbae66fa725 quick_app: better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 811
diff changeset
1189 elif type == "subscribe":
51
8c67ea98ab91 frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents: 28
diff changeset
1190 # this is a subscriptionn request, we have to ask for user confirmation
1436
e27963c9c219 quick_frontend: add a couple of TODOs
souliane <souliane@mailoo.org>
parents: 1435
diff changeset
1191 # TODO: use sat.stdui.ui_contact_list to display the groups selector
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1192 self.show_dialog(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1193 _(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 3017
diff changeset
1194 "The contact {contact} wants to subscribe to your presence"
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 3017
diff changeset
1195 ".\nDo you accept ?"
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1196 ).format(contact=entity.bare),
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1197 _("Subscription confirmation"),
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1198 "yes/no",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1199 answer_cb=self._subscribe_cb,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1200 answer_data=(entity, profile),
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1201 )
0
goffi@necton2
parents:
diff changeset
1202
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1203 def _debug_handler(self, action, parameters, profile):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 3017
diff changeset
1204 if action == "widgets_dump":
2854
eb9fa72eb62b core: added a "_debug" signal:
Goffi <goffi@goffi.org>
parents: 2848
diff changeset
1205 from pprint import pformat
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 3017
diff changeset
1206 log.info("Widgets dump:\n{data}".format(data=pformat(self.widgets._widgets)))
2854
eb9fa72eb62b core: added a "_debug" signal:
Goffi <goffi@goffi.org>
parents: 2848
diff changeset
1207 else:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 3017
diff changeset
1208 log.warning("Unknown debug action: {action}".format(action=action))
2854
eb9fa72eb62b core: added a "_debug" signal:
Goffi <goffi@goffi.org>
parents: 2848
diff changeset
1209
eb9fa72eb62b core: added a "_debug" signal:
Goffi <goffi@goffi.org>
parents: 2848
diff changeset
1210
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1211 def show_dialog(self, message, title, type="info", answer_cb=None, answer_data=None):
2618
fe9888d3fcb6 quick app: added missing docstring in showDialog
Goffi <goffi@goffi.org>
parents: 2590
diff changeset
1212 """Show a dialog to user
fe9888d3fcb6 quick app: added missing docstring in showDialog
Goffi <goffi@goffi.org>
parents: 2590
diff changeset
1213
fe9888d3fcb6 quick app: added missing docstring in showDialog
Goffi <goffi@goffi.org>
parents: 2590
diff changeset
1214 Frontends must override this method
fe9888d3fcb6 quick app: added missing docstring in showDialog
Goffi <goffi@goffi.org>
parents: 2590
diff changeset
1215 @param message(unicode): body of the dialog
fe9888d3fcb6 quick app: added missing docstring in showDialog
Goffi <goffi@goffi.org>
parents: 2590
diff changeset
1216 @param title(unicode): title of the dialog
fe9888d3fcb6 quick app: added missing docstring in showDialog
Goffi <goffi@goffi.org>
parents: 2590
diff changeset
1217 @param type(unicode): one of:
fe9888d3fcb6 quick app: added missing docstring in showDialog
Goffi <goffi@goffi.org>
parents: 2590
diff changeset
1218 - "info": information dialog (callbacks not used)
fe9888d3fcb6 quick app: added missing docstring in showDialog
Goffi <goffi@goffi.org>
parents: 2590
diff changeset
1219 - "warning": important information to notice (callbacks not used)
fe9888d3fcb6 quick app: added missing docstring in showDialog
Goffi <goffi@goffi.org>
parents: 2590
diff changeset
1220 - "error": something went wrong (callbacks not used)
fe9888d3fcb6 quick app: added missing docstring in showDialog
Goffi <goffi@goffi.org>
parents: 2590
diff changeset
1221 - "yes/no": a dialog with 2 choices (yes and no)
fe9888d3fcb6 quick app: added missing docstring in showDialog
Goffi <goffi@goffi.org>
parents: 2590
diff changeset
1222 @param answer_cb(callable): method to call on answer.
fe9888d3fcb6 quick app: added missing docstring in showDialog
Goffi <goffi@goffi.org>
parents: 2590
diff changeset
1223 Arguments depend on dialog type:
fe9888d3fcb6 quick app: added missing docstring in showDialog
Goffi <goffi@goffi.org>
parents: 2590
diff changeset
1224 - "yes/no": argument is a boolean (True for yes)
fe9888d3fcb6 quick app: added missing docstring in showDialog
Goffi <goffi@goffi.org>
parents: 2590
diff changeset
1225 @param answer_data(object): data to link on callback
fe9888d3fcb6 quick app: added missing docstring in showDialog
Goffi <goffi@goffi.org>
parents: 2590
diff changeset
1226 """
fe9888d3fcb6 quick app: added missing docstring in showDialog
Goffi <goffi@goffi.org>
parents: 2590
diff changeset
1227 # FIXME: misnamed method + types are not well chosen. Need to be rethought
0
goffi@necton2
parents:
diff changeset
1228 raise NotImplementedError
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 585
diff changeset
1229
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1230 def show_alert(self, message):
2618
fe9888d3fcb6 quick app: added missing docstring in showDialog
Goffi <goffi@goffi.org>
parents: 2590
diff changeset
1231 # FIXME: doesn't seems used anymore, to remove?
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1232 pass # FIXME
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 585
diff changeset
1233
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1234 def dialog_failure(self, failure):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 3017
diff changeset
1235 log.warning("Failure: {}".format(failure))
1468
731fbed0b9cf quick_frontend, primitivus: handling of actionNew signal
Goffi <goffi@goffi.org>
parents: 1461
diff changeset
1236
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1237 def progress_id_handler(self, progress_id, profile):
1633
2071d5cec5d6 quick frontend: added progressIdHandler to managed progress id on action result + ignore meta_* action results
Goffi <goffi@goffi.org>
parents: 1599
diff changeset
1238 """Callback used when an action result in a progress id"""
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 3017
diff changeset
1239 log.info("Progress ID received: {}".format(progress_id))
1633
2071d5cec5d6 quick frontend: added progressIdHandler to managed progress id on action result + ignore meta_* action results
Goffi <goffi@goffi.org>
parents: 1599
diff changeset
1240
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1241 def is_hidden(self):
1787
d678b723460b quick_frontend, primitivus: mechanism to signal a new message reception when the window is hidden (even if the message is actually displayed):
souliane <souliane@mailoo.org>
parents: 1766
diff changeset
1242 """Tells if the frontend window is hidden.
1442
6ce18c4e5708 quick_frontend: display over whole alerts counter
souliane <souliane@mailoo.org>
parents: 1436
diff changeset
1243
1787
d678b723460b quick_frontend, primitivus: mechanism to signal a new message reception when the window is hidden (even if the message is actually displayed):
souliane <souliane@mailoo.org>
parents: 1766
diff changeset
1244 @return bool
d678b723460b quick_frontend, primitivus: mechanism to signal a new message reception when the window is hidden (even if the message is actually displayed):
souliane <souliane@mailoo.org>
parents: 1766
diff changeset
1245 """
d678b723460b quick_frontend, primitivus: mechanism to signal a new message reception when the window is hidden (even if the message is actually displayed):
souliane <souliane@mailoo.org>
parents: 1766
diff changeset
1246 raise NotImplementedError
d678b723460b quick_frontend, primitivus: mechanism to signal a new message reception when the window is hidden (even if the message is actually displayed):
souliane <souliane@mailoo.org>
parents: 1766
diff changeset
1247
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1248 def param_update_handler(self, name, value, namespace, profile):
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1249 log.debug(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 3017
diff changeset
1250 _("param update: [%(namespace)s] %(name)s = %(value)s")
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1251 % {"namespace": namespace, "name": name, "value": value}
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1252 )
906
1cbae66fa725 quick_app: better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 811
diff changeset
1253 if (namespace, name) == ("Connection", "JabberID"):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 3017
diff changeset
1254 log.debug(_("Changing JID to %s") % value)
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
1255 self.profiles[profile].whoami = jid.JID(value)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1256 elif (namespace, name) == ("General", C.SHOW_OFFLINE_CONTACTS):
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1257 self.contact_lists[profile].show_offline_contacts(C.bool(value))
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1258 elif (namespace, name) == ("General", C.SHOW_EMPTY_GROUPS):
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1259 self.contact_lists[profile].show_empty_groups(C.bool(value))
0
goffi@necton2
parents:
diff changeset
1260
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1261 def contact_deleted_handler(self, jid_s, profile):
1325
49f967fc87aa core, quick_frontends: fixes one typo and a variable naming issue
souliane <souliane@mailoo.org>
parents: 1323
diff changeset
1262 target = jid.JID(jid_s)
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1263 self.contact_lists[profile].remove_contact(target)
51
8c67ea98ab91 frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents: 28
diff changeset
1264
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1265 def entity_data_updated_handler(self, entity_s, key, value_raw, profile):
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
1266 entity = jid.JID(entity_s)
3254
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3232
diff changeset
1267 value = data_format.deserialise(value_raw, type_check=None)
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3232
diff changeset
1268 if key == "nicknames":
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3232
diff changeset
1269 assert isinstance(value, list) or value is None
1265
e3a9ea76de35 quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents: 1241
diff changeset
1270 if entity in self.contact_lists[profile]:
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1271 self.contact_lists[profile].set_cache(entity, "nicknames", value)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1272 self.call_listeners("nicknames", entity, value, profile=profile)
2123
c42aab22c2c0 plugin XEP-0054, quick frontend(app): various improvments:
Goffi <goffi@goffi.org>
parents: 2103
diff changeset
1273 elif key == "avatar" and self.AVATARS_HANDLER:
3254
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3232
diff changeset
1274 assert isinstance(value, dict) or value is None
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1275 self.contact_lists[profile].set_cache(entity, "avatar", value)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1276 self.call_listeners("avatar", entity, value, profile=profile)
51
8c67ea98ab91 frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents: 28
diff changeset
1277
4126
45e3bb8607d8 frontends (quick app): allow frontend to register an action handler:
Goffi <goffi@goffi.org>
parents: 4125
diff changeset
1278 def register_action_handler(
45e3bb8607d8 frontends (quick app): allow frontend to register an action handler:
Goffi <goffi@goffi.org>
parents: 4125
diff changeset
1279 self,
45e3bb8607d8 frontends (quick app): allow frontend to register an action handler:
Goffi <goffi@goffi.org>
parents: 4125
diff changeset
1280 action_type: str,
45e3bb8607d8 frontends (quick app): allow frontend to register an action handler:
Goffi <goffi@goffi.org>
parents: 4125
diff changeset
1281 handler: Callable[[dict, str, int, str], None]
45e3bb8607d8 frontends (quick app): allow frontend to register an action handler:
Goffi <goffi@goffi.org>
parents: 4125
diff changeset
1282 ) -> None:
45e3bb8607d8 frontends (quick app): allow frontend to register an action handler:
Goffi <goffi@goffi.org>
parents: 4125
diff changeset
1283 """Register a handler for action type.
45e3bb8607d8 frontends (quick app): allow frontend to register an action handler:
Goffi <goffi@goffi.org>
parents: 4125
diff changeset
1284
45e3bb8607d8 frontends (quick app): allow frontend to register an action handler:
Goffi <goffi@goffi.org>
parents: 4125
diff changeset
1285 If an action of this type is received, the handler will be used, otherwise,
45e3bb8607d8 frontends (quick app): allow frontend to register an action handler:
Goffi <goffi@goffi.org>
parents: 4125
diff changeset
1286 generic ``action_manager`` is used
45e3bb8607d8 frontends (quick app): allow frontend to register an action handler:
Goffi <goffi@goffi.org>
parents: 4125
diff changeset
1287 @param action_type: type of action that the handler manage
45e3bb8607d8 frontends (quick app): allow frontend to register an action handler:
Goffi <goffi@goffi.org>
parents: 4125
diff changeset
1288 @param handler: method to call when an actipn of ``action_type`` is received.
45e3bb8607d8 frontends (quick app): allow frontend to register an action handler:
Goffi <goffi@goffi.org>
parents: 4125
diff changeset
1289 Will have following args:
45e3bb8607d8 frontends (quick app): allow frontend to register an action handler:
Goffi <goffi@goffi.org>
parents: 4125
diff changeset
1290 ``action_data``
45e3bb8607d8 frontends (quick app): allow frontend to register an action handler:
Goffi <goffi@goffi.org>
parents: 4125
diff changeset
1291 Data of the action.
45e3bb8607d8 frontends (quick app): allow frontend to register an action handler:
Goffi <goffi@goffi.org>
parents: 4125
diff changeset
1292 ``action_id``
45e3bb8607d8 frontends (quick app): allow frontend to register an action handler:
Goffi <goffi@goffi.org>
parents: 4125
diff changeset
1293 ID of the action.
45e3bb8607d8 frontends (quick app): allow frontend to register an action handler:
Goffi <goffi@goffi.org>
parents: 4125
diff changeset
1294 ``security_limit``
45e3bb8607d8 frontends (quick app): allow frontend to register an action handler:
Goffi <goffi@goffi.org>
parents: 4125
diff changeset
1295 Security limit, used to check if this action can be used in current security
45e3bb8607d8 frontends (quick app): allow frontend to register an action handler:
Goffi <goffi@goffi.org>
parents: 4125
diff changeset
1296 context.
45e3bb8607d8 frontends (quick app): allow frontend to register an action handler:
Goffi <goffi@goffi.org>
parents: 4125
diff changeset
1297 ``profile``
45e3bb8607d8 frontends (quick app): allow frontend to register an action handler:
Goffi <goffi@goffi.org>
parents: 4125
diff changeset
1298 Profile name.
45e3bb8607d8 frontends (quick app): allow frontend to register an action handler:
Goffi <goffi@goffi.org>
parents: 4125
diff changeset
1299 """
45e3bb8607d8 frontends (quick app): allow frontend to register an action handler:
Goffi <goffi@goffi.org>
parents: 4125
diff changeset
1300 if handler in self._action_handlers:
45e3bb8607d8 frontends (quick app): allow frontend to register an action handler:
Goffi <goffi@goffi.org>
parents: 4125
diff changeset
1301 raise exceptions.ConflictError(
45e3bb8607d8 frontends (quick app): allow frontend to register an action handler:
Goffi <goffi@goffi.org>
parents: 4125
diff changeset
1302 f"There is already a registered handler for {action_type} actions: "
45e3bb8607d8 frontends (quick app): allow frontend to register an action handler:
Goffi <goffi@goffi.org>
parents: 4125
diff changeset
1303 f"{handler}"
45e3bb8607d8 frontends (quick app): allow frontend to register an action handler:
Goffi <goffi@goffi.org>
parents: 4125
diff changeset
1304 )
45e3bb8607d8 frontends (quick app): allow frontend to register an action handler:
Goffi <goffi@goffi.org>
parents: 4125
diff changeset
1305 self._action_handlers[action_type] = handler
45e3bb8607d8 frontends (quick app): allow frontend to register an action handler:
Goffi <goffi@goffi.org>
parents: 4125
diff changeset
1306
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1307 def action_manager(self, action_data, callback=None, ui_show_cb=None, user_action=True,
2862
b2e898384c25 quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents: 2861
diff changeset
1308 progress_cb=None, progress_eb=None, profile=C.PROF_KEY_NONE):
1930
70ce9421c4d3 quick frontend (QuickApp): added ui_show_cb in actionManager, so frontend can handle the display of the XMLUI itself
Goffi <goffi@goffi.org>
parents: 1787
diff changeset
1309 """Handle backend action
70ce9421c4d3 quick frontend (QuickApp): added ui_show_cb in actionManager, so frontend can handle the display of the XMLUI itself
Goffi <goffi@goffi.org>
parents: 1787
diff changeset
1310
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1311 @param action_data(dict): action dict as sent by action_launch or returned by an
2664
e35a265ec174 quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents: 2626
diff changeset
1312 UI action
1930
70ce9421c4d3 quick frontend (QuickApp): added ui_show_cb in actionManager, so frontend can handle the display of the XMLUI itself
Goffi <goffi@goffi.org>
parents: 1787
diff changeset
1313 @param callback(None, callback): if not None, callback to use on XMLUI answer
70ce9421c4d3 quick frontend (QuickApp): added ui_show_cb in actionManager, so frontend can handle the display of the XMLUI itself
Goffi <goffi@goffi.org>
parents: 1787
diff changeset
1314 @param ui_show_cb(None, callback): if not None, method to call to show the XMLUI
2036
db3bbbd745e4 frontends (xmlui): added a user_action attribute:
Goffi <goffi@goffi.org>
parents: 2034
diff changeset
1315 @param user_action(bool): if True, the action is a result of a user interaction
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1316 else the action come from backend direclty (i.e. action_new).
2862
b2e898384c25 quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents: 2861
diff changeset
1317 This is useful to know if the frontend can display a popup immediately (if
b2e898384c25 quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents: 2861
diff changeset
1318 True) or if it should add it to a queue that the user can activate later.
b2e898384c25 quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents: 2861
diff changeset
1319 @param progress_cb(None, callable): method to call when progression is finished.
b2e898384c25 quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents: 2861
diff changeset
1320 Only make sense if a progress is expected in this action
b2e898384c25 quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents: 2861
diff changeset
1321 @param progress_eb(None, callable): method to call when something went wrong
b2e898384c25 quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents: 2861
diff changeset
1322 during progression.
b2e898384c25 quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents: 2861
diff changeset
1323 Only make sense if a progress is expected in this action
1930
70ce9421c4d3 quick frontend (QuickApp): added ui_show_cb in actionManager, so frontend can handle the display of the XMLUI itself
Goffi <goffi@goffi.org>
parents: 1787
diff changeset
1324 """
1489
039d96e131be frontends: callback are now always used in QuickApp launchAction (before it was only used if validated is present):
Goffi <goffi@goffi.org>
parents: 1481
diff changeset
1325 try:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1326 xmlui = action_data.pop("xmlui")
1489
039d96e131be frontends: callback are now always used in QuickApp launchAction (before it was only used if validated is present):
Goffi <goffi@goffi.org>
parents: 1481
diff changeset
1327 except KeyError:
039d96e131be frontends: callback are now always used in QuickApp launchAction (before it was only used if validated is present):
Goffi <goffi@goffi.org>
parents: 1481
diff changeset
1328 pass
039d96e131be frontends: callback are now always used in QuickApp launchAction (before it was only used if validated is present):
Goffi <goffi@goffi.org>
parents: 1481
diff changeset
1329 else:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1330 ui = self.xmlui.create(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1331 self,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1332 xml_data=xmlui,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1333 flags=("FROM_BACKEND",) if not user_action else None,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1334 callback=callback,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1335 profile=profile,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1336 )
1930
70ce9421c4d3 quick frontend (QuickApp): added ui_show_cb in actionManager, so frontend can handle the display of the XMLUI itself
Goffi <goffi@goffi.org>
parents: 1787
diff changeset
1337 if ui_show_cb is None:
70ce9421c4d3 quick frontend (QuickApp): added ui_show_cb in actionManager, so frontend can handle the display of the XMLUI itself
Goffi <goffi@goffi.org>
parents: 1787
diff changeset
1338 ui.show()
70ce9421c4d3 quick frontend (QuickApp): added ui_show_cb in actionManager, so frontend can handle the display of the XMLUI itself
Goffi <goffi@goffi.org>
parents: 1787
diff changeset
1339 else:
70ce9421c4d3 quick frontend (QuickApp): added ui_show_cb in actionManager, so frontend can handle the display of the XMLUI itself
Goffi <goffi@goffi.org>
parents: 1787
diff changeset
1340 ui_show_cb(ui)
1633
2071d5cec5d6 quick frontend: added progressIdHandler to managed progress id on action result + ignore meta_* action results
Goffi <goffi@goffi.org>
parents: 1599
diff changeset
1341
2071d5cec5d6 quick frontend: added progressIdHandler to managed progress id on action result + ignore meta_* action results
Goffi <goffi@goffi.org>
parents: 1599
diff changeset
1342 try:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1343 progress_id = action_data.pop("progress")
1633
2071d5cec5d6 quick frontend: added progressIdHandler to managed progress id on action result + ignore meta_* action results
Goffi <goffi@goffi.org>
parents: 1599
diff changeset
1344 except KeyError:
2071d5cec5d6 quick frontend: added progressIdHandler to managed progress id on action result + ignore meta_* action results
Goffi <goffi@goffi.org>
parents: 1599
diff changeset
1345 pass
2071d5cec5d6 quick frontend: added progressIdHandler to managed progress id on action result + ignore meta_* action results
Goffi <goffi@goffi.org>
parents: 1599
diff changeset
1346 else:
2862
b2e898384c25 quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents: 2861
diff changeset
1347 if progress_cb or progress_eb:
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1348 self.register_progress_cbs(progress_id, progress_cb, progress_eb)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1349 self.progress_id_handler(progress_id, profile)
1633
2071d5cec5d6 quick frontend: added progressIdHandler to managed progress id on action result + ignore meta_* action results
Goffi <goffi@goffi.org>
parents: 1599
diff changeset
1350
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1351 def _action_cb(self, data, callback, callback_id, profile):
2126
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2123
diff changeset
1352 if callback is None:
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1353 self.action_manager(data, profile=profile)
2126
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2123
diff changeset
1354 else:
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2123
diff changeset
1355 callback(data=data, cb_id=callback_id, profile=profile)
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2123
diff changeset
1356
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1357 def action_launch(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1358 self, callback_id, data=None, callback=None, profile=C.PROF_KEY_NONE
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1359 ):
2126
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2123
diff changeset
1360 """Launch a dynamic action
1468
731fbed0b9cf quick_frontend, primitivus: handling of actionNew signal
Goffi <goffi@goffi.org>
parents: 1461
diff changeset
1361
1060
aa15453ec54d core (xmpp), stdui (profile_manager), bridge, frontends: raise an exception if the XMPP connection failed instead of sending a signal
souliane <souliane@mailoo.org>
parents: 1058
diff changeset
1362 @param callback_id: id of the action to launch
aa15453ec54d core (xmpp), stdui (profile_manager), bridge, frontends: raise an exception if the XMPP connection failed instead of sending a signal
souliane <souliane@mailoo.org>
parents: 1058
diff changeset
1363 @param data: data needed only for certain actions
1489
039d96e131be frontends: callback are now always used in QuickApp launchAction (before it was only used if validated is present):
Goffi <goffi@goffi.org>
parents: 1481
diff changeset
1364 @param callback(callable, None): will be called with the resut
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1365 if None, self.action_manager will be called
1489
039d96e131be frontends: callback are now always used in QuickApp launchAction (before it was only used if validated is present):
Goffi <goffi@goffi.org>
parents: 1481
diff changeset
1366 else the callable will be called with the following kw parameters:
039d96e131be frontends: callback are now always used in QuickApp launchAction (before it was only used if validated is present):
Goffi <goffi@goffi.org>
parents: 1481
diff changeset
1367 - data: action_data
039d96e131be frontends: callback are now always used in QuickApp launchAction (before it was only used if validated is present):
Goffi <goffi@goffi.org>
parents: 1481
diff changeset
1368 - cb_id: callback id
039d96e131be frontends: callback are now always used in QuickApp launchAction (before it was only used if validated is present):
Goffi <goffi@goffi.org>
parents: 1481
diff changeset
1369 - profile: %(doc_profile)s
1468
731fbed0b9cf quick_frontend, primitivus: handling of actionNew signal
Goffi <goffi@goffi.org>
parents: 1461
diff changeset
1370 @param profile: %(doc_profile)s
1060
aa15453ec54d core (xmpp), stdui (profile_manager), bridge, frontends: raise an exception if the XMPP connection failed instead of sending a signal
souliane <souliane@mailoo.org>
parents: 1058
diff changeset
1371
aa15453ec54d core (xmpp), stdui (profile_manager), bridge, frontends: raise an exception if the XMPP connection failed instead of sending a signal
souliane <souliane@mailoo.org>
parents: 1058
diff changeset
1372 """
1468
731fbed0b9cf quick_frontend, primitivus: handling of actionNew signal
Goffi <goffi@goffi.org>
parents: 1461
diff changeset
1373 if data is None:
731fbed0b9cf quick_frontend, primitivus: handling of actionNew signal
Goffi <goffi@goffi.org>
parents: 1461
diff changeset
1374 data = dict()
4041
2594e1951cf7 core (bridge): `action_new` now use serialised dict for extra data.
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
1375 action_cb = lambda data: self._action_cb(
2594e1951cf7 core (bridge): `action_new` now use serialised dict for extra data.
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
1376 data_format.deserialise(data), callback, callback_id, profile
2594e1951cf7 core (bridge): `action_new` now use serialised dict for extra data.
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
1377 )
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1378 self.bridge.action_launch(
4041
2594e1951cf7 core (bridge): `action_new` now use serialised dict for extra data.
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
1379 callback_id, data_format.serialise(data), profile, callback=action_cb,
2594e1951cf7 core (bridge): `action_new` now use serialised dict for extra data.
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
1380 errback=self.dialog_failure
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1381 )
1468
731fbed0b9cf quick_frontend, primitivus: handling of actionNew signal
Goffi <goffi@goffi.org>
parents: 1461
diff changeset
1382
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1383 def launch_menu(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1384 self,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1385 menu_type,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1386 path,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1387 data=None,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1388 callback=None,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1389 security_limit=C.SECURITY_LIMIT_MAX,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1390 profile=C.PROF_KEY_NONE,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1391 ):
2126
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2123
diff changeset
1392 """Launch a menu manually
1580
641cfd2faefe Primitivus: better popups handling:
Goffi <goffi@goffi.org>
parents: 1513
diff changeset
1393
2126
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2123
diff changeset
1394 @param menu_type(unicode): type of the menu to launch
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2123
diff changeset
1395 @param path(iterable[unicode]): path to the menu
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2123
diff changeset
1396 @param data: data needed only for certain actions
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2123
diff changeset
1397 @param callback(callable, None): will be called with the resut
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1398 if None, self.action_manager will be called
2126
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2123
diff changeset
1399 else the callable will be called with the following kw parameters:
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2123
diff changeset
1400 - data: action_data
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2123
diff changeset
1401 - cb_id: (menu_type, path) tuple
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2123
diff changeset
1402 - profile: %(doc_profile)s
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2123
diff changeset
1403 @param profile: %(doc_profile)s
1468
731fbed0b9cf quick_frontend, primitivus: handling of actionNew signal
Goffi <goffi@goffi.org>
parents: 1461
diff changeset
1404
2126
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2123
diff changeset
1405 """
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2123
diff changeset
1406 if data is None:
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2123
diff changeset
1407 data = dict()
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1408 action_cb = lambda data: self._action_cb(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1409 data, callback, (menu_type, path), profile
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1410 )
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1411 self.bridge.menu_launch(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1412 menu_type,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1413 path,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1414 data,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1415 security_limit,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1416 profile,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1417 callback=action_cb,
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1418 errback=self.dialog_failure,
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1419 )
1060
aa15453ec54d core (xmpp), stdui (profile_manager), bridge, frontends: raise an exception if the XMPP connection failed instead of sending a signal
souliane <souliane@mailoo.org>
parents: 1058
diff changeset
1420
1348
a39d2db03c80 frontends: add listeners 'profilePlugged', 'disconnect' and 'gotMenus' (the last one to be removed when the menus are refactored to quick_app)
souliane <souliane@mailoo.org>
parents: 1347
diff changeset
1421 def disconnect(self, profile):
a39d2db03c80 frontends: add listeners 'profilePlugged', 'disconnect' and 'gotMenus' (the last one to be removed when the menus are refactored to quick_app)
souliane <souliane@mailoo.org>
parents: 1347
diff changeset
1422 log.info("disconnecting")
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1423 self.call_listeners("disconnect", profile=profile)
1348
a39d2db03c80 frontends: add listeners 'profilePlugged', 'disconnect' and 'gotMenus' (the last one to be removed when the menus are refactored to quick_app)
souliane <souliane@mailoo.org>
parents: 1347
diff changeset
1424 self.bridge.disconnect(profile)
a39d2db03c80 frontends: add listeners 'profilePlugged', 'disconnect' and 'gotMenus' (the last one to be removed when the menus are refactored to quick_app)
souliane <souliane@mailoo.org>
parents: 1347
diff changeset
1425
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3490
diff changeset
1426 def on_exit(self):
183
9ee4a1d0d7fb Added auto(dis)connect params + misc
Goffi <goffi@goffi.org>
parents: 182
diff changeset
1427 """Must be called when the frontend is terminating"""
1332
0f92b6a150ff quick_frontend, primitivus: use a listener to update the contact list when receiving a presence
souliane <souliane@mailoo.org>
parents: 1331
diff changeset
1428 to_unplug = []
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 3017
diff changeset
1429 for profile, profile_manager in self.profiles.items():
2102
071423b3a413 quick frontend (quick app): fixed use of profile_manager.connected
Goffi <goffi@goffi.org>
parents: 2097
diff changeset
1430 if profile_manager.connected and profile_manager.autodisconnect:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2618
diff changeset
1431 # The user wants autodisconnection
2091
f413bfc24458 bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
1432 self.disconnect(profile)
1332
0f92b6a150ff quick_frontend, primitivus: use a listener to update the contact list when receiving a presence
souliane <souliane@mailoo.org>
parents: 1331
diff changeset
1433 to_unplug.append(profile)
0f92b6a150ff quick_frontend, primitivus: use a listener to update the contact list when receiving a presence
souliane <souliane@mailoo.org>
parents: 1331
diff changeset
1434 for profile in to_unplug:
0f92b6a150ff quick_frontend, primitivus: use a listener to update the contact list when receiving a presence
souliane <souliane@mailoo.org>
parents: 1331
diff changeset
1435 self.unplug_profile(profile)