Mercurial > libervia-backend
annotate sat_frontends/quick_frontend/quick_app.py @ 3138:d8a89a77d765
core (xmpp): raise InternalError when a new profile Client is created while there is already one in host
author | Goffi <goffi@goffi.org> |
---|---|
date | Wed, 29 Jan 2020 11:00:14 +0100 |
parents | 559a625a236b |
children | 6032245c927e |
rev | line source |
---|---|
3137 | 1 #!/usr/bin/env python3 |
2 | |
0 | 3 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
587
diff
changeset
|
4 # helper class for making a SAT frontend |
3136 | 5 # Copyright (C) 2009-2020 Jérôme Poisson (goffi@goffi.org) |
0 | 6 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
587
diff
changeset
|
7 # This program is free software: you can redistribute it and/or modify |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
587
diff
changeset
|
8 # it under the terms of the GNU Affero General Public License as published by |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
587
diff
changeset
|
9 # the Free Software Foundation, either version 3 of the License, or |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
587
diff
changeset
|
10 # (at your option) any later version. |
0 | 11 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
587
diff
changeset
|
12 # This program is distributed in the hope that it will be useful, |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
587
diff
changeset
|
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
587
diff
changeset
|
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
587
diff
changeset
|
15 # GNU Affero General Public License for more details. |
0 | 16 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
587
diff
changeset
|
17 # You should have received a copy of the GNU Affero General Public License |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
587
diff
changeset
|
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
0 | 19 |
1009
d1084f7e56a5
quick_frontend: use of new logging system
Goffi <goffi@goffi.org>
parents:
955
diff
changeset
|
20 from sat.core.log import getLogger |
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
|
21 from sat.core.i18n import _ |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
22 from sat.core import exceptions |
1374
0befb14ecf62
renamed tools.misc to tools.trigger
Goffi <goffi@goffi.org>
parents:
1365
diff
changeset
|
23 from sat.tools import trigger |
2034
3f745370a39a
quick frontend (app): fixed regression in groups handling
Goffi <goffi@goffi.org>
parents:
2031
diff
changeset
|
24 from sat.tools.common import data_format |
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
|
25 |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
26 from sat_frontends.tools import jid |
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
|
27 from sat_frontends.quick_frontend import quick_widgets |
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
|
28 from sat_frontends.quick_frontend import quick_menus |
1461
9fce331ba0fd
quick_frontend (constants, quick_app, quick_contact_list): blogging refactoring (not finished):
Goffi <goffi@goffi.org>
parents:
1442
diff
changeset
|
29 from sat_frontends.quick_frontend import quick_blog |
1360
8ea8fa13c351
frontends (quick_frontend, primitivus): fixes room games:
souliane <souliane@mailoo.org>
parents:
1352
diff
changeset
|
30 from sat_frontends.quick_frontend import quick_chat, quick_games |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
31 from sat_frontends.quick_frontend import quick_contact_list |
1019 | 32 from sat_frontends.quick_frontend.constants import Const as C |
510
886754295efe
quick frontend, primitivus, wix: MUC private messages management
Goffi <goffi@goffi.org>
parents:
507
diff
changeset
|
33 |
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
|
34 import sys |
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
|
35 from collections import OrderedDict |
1972
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
36 import time |
906
1cbae66fa725
quick_app: better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
811
diff
changeset
|
37 |
3113
b067736d5099
quick frontend (app): removed workaround for pyjamas
Goffi <goffi@goffi.org>
parents:
3102
diff
changeset
|
38 |
b067736d5099
quick frontend (app): removed workaround for pyjamas
Goffi <goffi@goffi.org>
parents:
3102
diff
changeset
|
39 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
|
40 |
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
|
41 |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
42 class ProfileManager(object): |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
43 """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
|
44 |
2050
046449cc2bff
core, bridge, frontends: removed deprecated bridge method askConfirmation, confirmationAnswer, actionResult, actionResultExt and getWaitingConf
Goffi <goffi@goffi.org>
parents:
2049
diff
changeset
|
45 # 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
|
46 # 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
|
47 host = None |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
48 bridge = None |
2123
c42aab22c2c0
plugin XEP-0054, quick frontend(app): various improvments:
Goffi <goffi@goffi.org>
parents:
2103
diff
changeset
|
49 # cache_keys_to_get = ['avatar'] |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
50 |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
51 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
|
52 self.profile = profile |
2091
f413bfc24458
bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents:
2089
diff
changeset
|
53 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
|
54 self.whoami = None |
1972
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
55 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
|
56 |
2091
f413bfc24458
bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents:
2089
diff
changeset
|
57 @property |
f413bfc24458
bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents:
2089
diff
changeset
|
58 def autodisconnect(self): |
f413bfc24458
bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents:
2089
diff
changeset
|
59 try: |
f413bfc24458
bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents:
2089
diff
changeset
|
60 autodisconnect = self._autodisconnect |
f413bfc24458
bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents:
2089
diff
changeset
|
61 except AttributeError: |
f413bfc24458
bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents:
2089
diff
changeset
|
62 autodisconnect = False |
f413bfc24458
bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents:
2089
diff
changeset
|
63 return autodisconnect |
f413bfc24458
bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents:
2089
diff
changeset
|
64 |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
65 def plug(self): |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
66 """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
|
67 # first of all we create the contact lists |
eb69ec549d05
quick frontend (app): create the contact list immediatly on plug
Goffi <goffi@goffi.org>
parents:
2669
diff
changeset
|
68 self.host.contact_lists.addProfile(self.profile) |
eb69ec549d05
quick frontend (app): create the contact list immediatly on plug
Goffi <goffi@goffi.org>
parents:
2669
diff
changeset
|
69 |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
70 # we get the essential params |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
71 self.bridge.asyncGetParamA( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
72 "JabberID", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
73 "Connection", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
74 profile_key=self.profile, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
75 callback=self._plug_profile_jid, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
76 errback=self._getParamError, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
77 ) |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
78 |
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
|
79 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
|
80 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
|
81 log.info(f"Our current jid is: {self.whoami}") |
2091
f413bfc24458
bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents:
2089
diff
changeset
|
82 self.bridge.isConnected(self.profile, callback=self._plug_profile_isconnected) |
f413bfc24458
bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents:
2089
diff
changeset
|
83 |
2167
4b78b4c7f805
core, frontends: various fixes for Libervia:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
84 def _autodisconnectEb(self, failure_): |
4b78b4c7f805
core, frontends: various fixes for Libervia:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
85 # 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
|
86 log.warning( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
87 _("Error while trying to get autodisconnect param, ignoring: {}").format( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
88 failure_ |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
89 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
90 ) |
2167
4b78b4c7f805
core, frontends: various fixes for Libervia:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
91 self._plug_profile_autodisconnect("false") |
4b78b4c7f805
core, frontends: various fixes for Libervia:
Goffi <goffi@goffi.org>
parents:
2142
diff
changeset
|
92 |
2091
f413bfc24458
bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents:
2089
diff
changeset
|
93 def _plug_profile_isconnected(self, connected): |
f413bfc24458
bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents:
2089
diff
changeset
|
94 self.connected = connected |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
95 self.bridge.asyncGetParamA( |
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, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
100 errback=self._autodisconnectEb, |
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 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
106 self.bridge.asyncGetParamA( |
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, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
111 errback=self._getParamError, |
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 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
127 self.host.bridge.getFeatures( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
128 profile_key=self.profile, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
129 callback=self._plug_profile_getFeaturesCb, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
130 errback=self._plug_profile_getFeaturesEb, |
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 |
ad2ad28b8923
quick_frontend: getFeatures is called on profile plug, and saved in host.features
Goffi <goffi@goffi.org>
parents:
1636
diff
changeset
|
133 def _plug_profile_getFeaturesEb(self, failure): |
3028 | 134 log.error("Couldn't get features: {}".format(failure)) |
1655
ad2ad28b8923
quick_frontend: getFeatures is called on profile plug, and saved in host.features
Goffi <goffi@goffi.org>
parents:
1636
diff
changeset
|
135 self._plug_profile_getFeaturesCb({}) |
ad2ad28b8923
quick_frontend: getFeatures is called on profile plug, and saved in host.features
Goffi <goffi@goffi.org>
parents:
1636
diff
changeset
|
136 |
ad2ad28b8923
quick_frontend: getFeatures is called on profile plug, and saved in host.features
Goffi <goffi@goffi.org>
parents:
1636
diff
changeset
|
137 def _plug_profile_getFeaturesCb(self, features): |
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 |
2123
c42aab22c2c0
plugin XEP-0054, quick frontend(app): various improvments:
Goffi <goffi@goffi.org>
parents:
2103
diff
changeset
|
139 # FIXME: we don't use cached value at the moment, but keep the code for later use |
2664
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2626
diff
changeset
|
140 # it was previously used for avatars, but as we don't get full path here, |
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2626
diff
changeset
|
141 # it's better to request later |
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2626
diff
changeset
|
142 # self.host.bridge.getEntitiesData([], ProfileManager.cache_keys_to_get, |
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2626
diff
changeset
|
143 # profile=self.profile, |
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2626
diff
changeset
|
144 # callback=self._plug_profile_gotCachedValues, |
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2626
diff
changeset
|
145 # errback=self._plug_profile_failedCachedValues) |
2123
c42aab22c2c0
plugin XEP-0054, quick frontend(app): various improvments:
Goffi <goffi@goffi.org>
parents:
2103
diff
changeset
|
146 self._plug_profile_gotCachedValues({}) |
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 |
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
|
148 def _plug_profile_failedCachedValues(self, failure): |
3028 | 149 log.error("Couldn't get cached values: {}".format(failure)) |
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
|
150 self._plug_profile_gotCachedValues({}) |
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
|
151 |
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
|
152 def _plug_profile_gotCachedValues(self, cached_values): |
2685
eb69ec549d05
quick frontend (app): create the contact list immediatly on plug
Goffi <goffi@goffi.org>
parents:
2669
diff
changeset
|
153 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
|
154 # add the contact list and its listener |
3028 | 155 for entity_s, data in cached_values.items(): |
156 for key, value in data.items(): | |
2059
9dd76a5b63ba
quick app(app): call entityDataUpdateHandler on profile plug instead of setCache directly
Goffi <goffi@goffi.org>
parents:
2056
diff
changeset
|
157 self.host.entityDataUpdatedHandler(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
|
158 |
2091
f413bfc24458
bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents:
2089
diff
changeset
|
159 if not self.connected: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
160 self.host.setPresenceStatus(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
|
161 else: |
1429
798e5e38516b
quick_frontend (quick_app): properly fixed roster loss:
Goffi <goffi@goffi.org>
parents:
1418
diff
changeset
|
162 |
798e5e38516b
quick_frontend (quick_app): properly fixed roster loss:
Goffi <goffi@goffi.org>
parents:
1418
diff
changeset
|
163 contact_list.fill() |
1417
176de79c8c39
core, plugin XEP-0045, frontends: change frontend method "setStatusOnline" for "setPresenceStatus":
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
164 self.host.setPresenceStatus(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
|
165 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
166 # The waiting subscription requests |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
167 self.bridge.getWaitingSub( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
168 self.profile, callback=self._plug_profile_gotWaitingSub |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
169 ) |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
170 |
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
171 def _plug_profile_gotWaitingSub(self, waiting_sub): |
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
172 for sub in waiting_sub: |
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
173 self.host.subscribeHandler(waiting_sub[sub], sub, self.profile) |
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
174 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
175 self.bridge.mucGetRoomsJoined( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
176 self.profile, callback=self._plug_profile_gotRoomsJoined |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
177 ) |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
178 |
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
179 def _plug_profile_gotRoomsJoined(self, rooms_args): |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
180 # 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
|
181 for room_args in rooms_args: |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
182 self.host.mucRoomJoinedHandler(*room_args, profile=self.profile) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
183 # Presence must be requested after rooms are filled |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
184 self.host.bridge.getPresenceStatuses( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
185 self.profile, callback=self._plug_profile_gotPresences |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
186 ) |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
187 |
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
188 def _plug_profile_gotPresences(self, presences): |
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
189 def gotEntityData(data, contact): |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
190 for key in ("avatar", "nick"): |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
191 if key in data: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
192 self.host.entityDataUpdatedHandler( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
193 contact, key, data[key], self.profile |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
194 ) |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
195 |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
196 for contact in presences: |
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
197 for res in presences[contact]: |
3028 | 198 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
|
199 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
|
200 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
|
201 statuses = presences[contact][res][2] |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
202 self.host.presenceUpdateHandler( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
203 jabber_id, show, priority, statuses, self.profile |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
204 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
205 self.host.bridge.getEntityData( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
206 contact, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
207 ["avatar", "nick"], |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
208 self.profile, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
209 callback=lambda data, contact=contact: gotEntityData(data, contact), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
210 errback=lambda failure, contact=contact: log.debug( |
3028 | 211 "No cache data for {}".format(contact) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
212 ), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
213 ) |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
214 |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
215 # 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
|
216 # and we launch frontend specific method |
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
217 self.host.profilePlugged(self.profile) |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
218 |
2091
f413bfc24458
bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents:
2089
diff
changeset
|
219 def _getParamError(self, failure): |
f413bfc24458
bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents:
2089
diff
changeset
|
220 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
|
221 |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
222 |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
223 class ProfilesManager(object): |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
224 """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
|
225 |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
226 def __init__(self): |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
227 self._profiles = {} |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
228 |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
229 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
|
230 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
|
231 |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
232 def __iter__(self): |
3028 | 233 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
|
234 |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
235 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
|
236 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
|
237 |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
238 def __len__(self): |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
239 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
|
240 |
3028 | 241 def items(self): |
242 return self._profiles.items() | |
2091
f413bfc24458
bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents:
2089
diff
changeset
|
243 |
3028 | 244 def values(self): |
245 return self._profiles.values() | |
2590
bd9d92bc0d6c
quick frontends (app): retrieve namespaces on startup
Goffi <goffi@goffi.org>
parents:
2586
diff
changeset
|
246 |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
247 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
|
248 if profile in self._profiles: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
249 raise exceptions.ConflictError( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
250 "A profile of the name [{}] is already plugged".format(profile) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
251 ) |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
252 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
|
253 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
|
254 |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
255 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
|
256 if profile not in self._profiles: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
257 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
|
258 |
0f92b6a150ff
quick_frontend, primitivus: use a listener to update the contact list when receiving a presence
souliane <souliane@mailoo.org>
parents:
1331
diff
changeset
|
259 # 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
|
260 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
|
261 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
|
262 |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
263 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
|
264 |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
265 def chooseOneProfile(self): |
3028 | 266 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
|
267 |
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
|
268 |
524
0bb595eff25b
primitivus: Primitivus is now modal (vi-like behaviour):
Goffi <goffi@goffi.org>
parents:
513
diff
changeset
|
269 class QuickApp(object): |
0 | 270 """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
|
271 |
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
|
272 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
|
273 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
|
274 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
|
275 #: 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
|
276 #: 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
|
277 #: 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
|
278 AUTO_RESYNC = True |
0 | 279 |
2091
f413bfc24458
bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents:
2089
diff
changeset
|
280 def __init__(self, bridge_factory, xmlui, check_options=None, connect_bridge=True): |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
281 """Create a frontend application |
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
282 |
2091
f413bfc24458
bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents:
2089
diff
changeset
|
283 @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
|
284 @param xmlui: xmlui module |
2664
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2626
diff
changeset
|
285 @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
|
286 arguments) |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
287 """ |
1468
731fbed0b9cf
quick_frontend, primitivus: handling of actionNew signal
Goffi <goffi@goffi.org>
parents:
1461
diff
changeset
|
288 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
|
289 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
|
290 ProfileManager.host = self |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
291 self.profiles = ProfilesManager() |
3065
f8e3789912d0
quick frontend (contact list): added "contactsFilled" event
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
292 # 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
|
293 self._plugs_in_progress = set() |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
294 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
|
295 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
|
296 # 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
|
297 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
|
298 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
|
299 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
|
300 self.options = check_options() |
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
301 else: |
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
302 self.options = None |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
585
diff
changeset
|
303 |
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
|
304 # widget currently selected (must be filled 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
|
305 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
|
306 |
2862
b2e898384c25
quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents:
2861
diff
changeset
|
307 # listeners are callable watching events |
2664
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2626
diff
changeset
|
308 self._listeners = {} # key: listener type ("avatar", "selected", etc), |
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2626
diff
changeset
|
309 # 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
|
310 |
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
|
311 # triggers |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
312 self.trigger = ( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
313 trigger.TriggerManager() |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
314 ) # 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
|
315 |
0 | 316 ## bridge ## |
2091
f413bfc24458
bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents:
2089
diff
changeset
|
317 self.bridge = bridge_factory() |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
318 ProfileManager.bridge = self.bridge |
2091
f413bfc24458
bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents:
2089
diff
changeset
|
319 if connect_bridge: |
f413bfc24458
bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents:
2089
diff
changeset
|
320 self.connectBridge() |
f413bfc24458
bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents:
2089
diff
changeset
|
321 |
2862
b2e898384c25
quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents:
2861
diff
changeset
|
322 # frontend notifications |
2091
f413bfc24458
bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents:
2089
diff
changeset
|
323 self._notif_id = 0 |
f413bfc24458
bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents:
2089
diff
changeset
|
324 self._notifications = OrderedDict() |
2862
b2e898384c25
quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents:
2861
diff
changeset
|
325 # watched progresses and associated callbacks |
b2e898384c25
quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents:
2861
diff
changeset
|
326 self._progress_ids = {} |
b2e898384c25
quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents:
2861
diff
changeset
|
327 # available features |
b2e898384c25
quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents:
2861
diff
changeset
|
328 # 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
|
329 self.features = None |
2862
b2e898384c25
quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents:
2861
diff
changeset
|
330 #: map of short name to namespaces |
b2e898384c25
quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents:
2861
diff
changeset
|
331 self.ns_map = {} |
b2e898384c25
quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents:
2861
diff
changeset
|
332 #: available encryptions |
2664
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2626
diff
changeset
|
333 self.encryption_plugins = [] |
2862
b2e898384c25
quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents:
2861
diff
changeset
|
334 # state of synchronisation with backend |
b2e898384c25
quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents:
2861
diff
changeset
|
335 self._sync = True |
2091
f413bfc24458
bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents:
2089
diff
changeset
|
336 |
f413bfc24458
bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents:
2089
diff
changeset
|
337 def connectBridge(self): |
f413bfc24458
bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents:
2089
diff
changeset
|
338 self.bridge.bridgeConnect(callback=self._bridgeCb, errback=self._bridgeEb) |
f413bfc24458
bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents:
2089
diff
changeset
|
339 |
2590
bd9d92bc0d6c
quick frontends (app): retrieve namespaces on startup
Goffi <goffi@goffi.org>
parents:
2586
diff
changeset
|
340 def _namespacesGetCb(self, ns_map): |
bd9d92bc0d6c
quick frontends (app): retrieve namespaces on startup
Goffi <goffi@goffi.org>
parents:
2586
diff
changeset
|
341 self.ns_map = ns_map |
bd9d92bc0d6c
quick frontends (app): retrieve namespaces on startup
Goffi <goffi@goffi.org>
parents:
2586
diff
changeset
|
342 |
bd9d92bc0d6c
quick frontends (app): retrieve namespaces on startup
Goffi <goffi@goffi.org>
parents:
2586
diff
changeset
|
343 def _namespacesGetEb(self, failure_): |
3028 | 344 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
|
345 |
3102
7574f795bd1e
core, bridge: encryptionPluginsGet now returns a serialised list + added "directed" in metadata
Goffi <goffi@goffi.org>
parents:
3101
diff
changeset
|
346 def _encryptionPluginsGetCb(self, plugins_ser): |
7574f795bd1e
core, bridge: encryptionPluginsGet now returns a serialised list + added "directed" in metadata
Goffi <goffi@goffi.org>
parents:
3101
diff
changeset
|
347 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
|
348 |
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2626
diff
changeset
|
349 def _encryptionPluginsGetEb(self, failure_): |
3028 | 350 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
|
351 |
2097
4bc408b549cd
quick_frontend(QuickApp): added onBridgeConnected method
Goffi <goffi@goffi.org>
parents:
2091
diff
changeset
|
352 def onBridgeConnected(self): |
3118
02492db1ce39
quick frontend (app): call `getReady` once connected to bridge:
Goffi <goffi@goffi.org>
parents:
3113
diff
changeset
|
353 self.bridge.getReady(self.onBackendReady) |
2097
4bc408b549cd
quick_frontend(QuickApp): added onBridgeConnected method
Goffi <goffi@goffi.org>
parents:
2091
diff
changeset
|
354 |
2091
f413bfc24458
bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents:
2089
diff
changeset
|
355 def _bridgeCb(self): |
1103
a096b8579a3c
frontends: signals are managed in a more generic way
Goffi <goffi@goffi.org>
parents:
1093
diff
changeset
|
356 self.registerSignal("connected") |
a096b8579a3c
frontends: signals are managed in a more generic way
Goffi <goffi@goffi.org>
parents:
1093
diff
changeset
|
357 self.registerSignal("disconnected") |
1468
731fbed0b9cf
quick_frontend, primitivus: handling of actionNew signal
Goffi <goffi@goffi.org>
parents:
1461
diff
changeset
|
358 self.registerSignal("actionNew") |
1103
a096b8579a3c
frontends: signals are managed in a more generic way
Goffi <goffi@goffi.org>
parents:
1093
diff
changeset
|
359 self.registerSignal("newContact") |
1955
633b5c21aefd
backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents:
1939
diff
changeset
|
360 self.registerSignal("messageNew") |
2664
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2626
diff
changeset
|
361 if self.ENCRYPTION_HANDLERS: |
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2626
diff
changeset
|
362 self.registerSignal("messageEncryptionStarted") |
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2626
diff
changeset
|
363 self.registerSignal("messageEncryptionStopped") |
1103
a096b8579a3c
frontends: signals are managed in a more generic way
Goffi <goffi@goffi.org>
parents:
1093
diff
changeset
|
364 self.registerSignal("presenceUpdate") |
a096b8579a3c
frontends: signals are managed in a more generic way
Goffi <goffi@goffi.org>
parents:
1093
diff
changeset
|
365 self.registerSignal("subscribe") |
a096b8579a3c
frontends: signals are managed in a more generic way
Goffi <goffi@goffi.org>
parents:
1093
diff
changeset
|
366 self.registerSignal("paramUpdate") |
a096b8579a3c
frontends: signals are managed in a more generic way
Goffi <goffi@goffi.org>
parents:
1093
diff
changeset
|
367 self.registerSignal("contactDeleted") |
a096b8579a3c
frontends: signals are managed in a more generic way
Goffi <goffi@goffi.org>
parents:
1093
diff
changeset
|
368 self.registerSignal("entityDataUpdated") |
1636 | 369 self.registerSignal("progressStarted") |
370 self.registerSignal("progressFinished") | |
371 self.registerSignal("progressError") | |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
372 self.registerSignal("mucRoomJoined", iface="plugin") |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
373 self.registerSignal("mucRoomLeft", iface="plugin") |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
374 self.registerSignal("mucRoomUserChangedNick", iface="plugin") |
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
375 self.registerSignal("mucRoomNewSubject", iface="plugin") |
1103
a096b8579a3c
frontends: signals are managed in a more generic way
Goffi <goffi@goffi.org>
parents:
1093
diff
changeset
|
376 self.registerSignal("chatStateReceived", iface="plugin") |
2024
01aff34e8873
quick frontends, primitivus: messageState signal handling
Goffi <goffi@goffi.org>
parents:
2016
diff
changeset
|
377 self.registerSignal("messageState", iface="plugin") |
1461
9fce331ba0fd
quick_frontend (constants, quick_app, quick_contact_list): blogging refactoring (not finished):
Goffi <goffi@goffi.org>
parents:
1442
diff
changeset
|
378 self.registerSignal("psEvent", iface="plugin") |
2854 | 379 # useful for debugging |
380 self.registerSignal("_debug", iface="core") | |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
585
diff
changeset
|
381 |
1360
8ea8fa13c351
frontends (quick_frontend, primitivus): fixes room games:
souliane <souliane@mailoo.org>
parents:
1352
diff
changeset
|
382 # FIXME: do it dynamically |
8ea8fa13c351
frontends (quick_frontend, primitivus): fixes room games:
souliane <souliane@mailoo.org>
parents:
1352
diff
changeset
|
383 quick_games.Tarot.registerSignals(self) |
8ea8fa13c351
frontends (quick_frontend, primitivus): fixes room games:
souliane <souliane@mailoo.org>
parents:
1352
diff
changeset
|
384 quick_games.Quiz.registerSignals(self) |
8ea8fa13c351
frontends (quick_frontend, primitivus): fixes room games:
souliane <souliane@mailoo.org>
parents:
1352
diff
changeset
|
385 quick_games.Radiocol.registerSignals(self) |
2097
4bc408b549cd
quick_frontend(QuickApp): added onBridgeConnected method
Goffi <goffi@goffi.org>
parents:
2091
diff
changeset
|
386 self.onBridgeConnected() |
1360
8ea8fa13c351
frontends (quick_frontend, primitivus): fixes room games:
souliane <souliane@mailoo.org>
parents:
1352
diff
changeset
|
387 |
2091
f413bfc24458
bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents:
2089
diff
changeset
|
388 def _bridgeEb(self, failure): |
f413bfc24458
bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents:
2089
diff
changeset
|
389 if isinstance(failure, exceptions.BridgeExceptionNoService): |
3028 | 390 print((_("Can't connect to SàT backend, are you sure it's launched ?"))) |
2091
f413bfc24458
bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents:
2089
diff
changeset
|
391 sys.exit(1) |
f413bfc24458
bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents:
2089
diff
changeset
|
392 elif isinstance(failure, exceptions.BridgeInitError): |
3028 | 393 print((_("Can't init bridge"))) |
2091
f413bfc24458
bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents:
2089
diff
changeset
|
394 sys.exit(1) |
f413bfc24458
bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents:
2089
diff
changeset
|
395 else: |
3028 | 396 print((_("Error while initialising bridge: {}".format(failure)))) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
585
diff
changeset
|
397 |
3118
02492db1ce39
quick frontend (app): call `getReady` once connected to bridge:
Goffi <goffi@goffi.org>
parents:
3113
diff
changeset
|
398 def onBackendReady(self): |
02492db1ce39
quick frontend (app): call `getReady` once connected to bridge:
Goffi <goffi@goffi.org>
parents:
3113
diff
changeset
|
399 log.info("backend is ready") |
02492db1ce39
quick frontend (app): call `getReady` once connected to bridge:
Goffi <goffi@goffi.org>
parents:
3113
diff
changeset
|
400 self.bridge.namespacesGet( |
02492db1ce39
quick frontend (app): call `getReady` once connected to bridge:
Goffi <goffi@goffi.org>
parents:
3113
diff
changeset
|
401 callback=self._namespacesGetCb, errback=self._namespacesGetEb) |
02492db1ce39
quick frontend (app): call `getReady` once connected to bridge:
Goffi <goffi@goffi.org>
parents:
3113
diff
changeset
|
402 # 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
|
403 # new chat widget |
02492db1ce39
quick frontend (app): call `getReady` once connected to bridge:
Goffi <goffi@goffi.org>
parents:
3113
diff
changeset
|
404 self.bridge.encryptionPluginsGet( |
02492db1ce39
quick frontend (app): call `getReady` once connected to bridge:
Goffi <goffi@goffi.org>
parents:
3113
diff
changeset
|
405 callback=self._encryptionPluginsGetCb, |
02492db1ce39
quick frontend (app): call `getReady` once connected to bridge:
Goffi <goffi@goffi.org>
parents:
3113
diff
changeset
|
406 errback=self._encryptionPluginsGetEb) |
02492db1ce39
quick frontend (app): call `getReady` once connected to bridge:
Goffi <goffi@goffi.org>
parents:
3113
diff
changeset
|
407 |
02492db1ce39
quick frontend (app): call `getReady` once connected to bridge:
Goffi <goffi@goffi.org>
parents:
3113
diff
changeset
|
408 |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
409 @property |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
410 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
|
411 """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
|
412 try: |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
413 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
|
414 except (TypeError, AttributeError): |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
415 return self.profiles.chooseOneProfile() |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
416 |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
417 @property |
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
418 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
|
419 """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
|
420 |
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
|
421 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
|
422 @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
|
423 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
|
424 """ |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
425 raise NotImplementedError |
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
426 |
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
|
427 @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
|
428 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
|
429 """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
|
430 |
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 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
|
432 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
|
433 @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
|
434 """ |
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
|
435 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
|
436 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
|
437 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
|
438 |
2845
42380a4f6433
quick frontend (app): new synchronisation mechanism:
Goffi <goffi@goffi.org>
parents:
2829
diff
changeset
|
439 # backend state management |
42380a4f6433
quick frontend (app): new synchronisation mechanism:
Goffi <goffi@goffi.org>
parents:
2829
diff
changeset
|
440 |
42380a4f6433
quick frontend (app): new synchronisation mechanism:
Goffi <goffi@goffi.org>
parents:
2829
diff
changeset
|
441 @property |
42380a4f6433
quick frontend (app): new synchronisation mechanism:
Goffi <goffi@goffi.org>
parents:
2829
diff
changeset
|
442 def sync(self): |
2862
b2e898384c25
quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents:
2861
diff
changeset
|
443 """Synchronization flag |
2845
42380a4f6433
quick frontend (app): new synchronisation mechanism:
Goffi <goffi@goffi.org>
parents:
2829
diff
changeset
|
444 |
42380a4f6433
quick frontend (app): new synchronisation mechanism:
Goffi <goffi@goffi.org>
parents:
2829
diff
changeset
|
445 True if this frontend is synchronised with backend |
42380a4f6433
quick frontend (app): new synchronisation mechanism:
Goffi <goffi@goffi.org>
parents:
2829
diff
changeset
|
446 """ |
42380a4f6433
quick frontend (app): new synchronisation mechanism:
Goffi <goffi@goffi.org>
parents:
2829
diff
changeset
|
447 return self._sync |
42380a4f6433
quick frontend (app): new synchronisation mechanism:
Goffi <goffi@goffi.org>
parents:
2829
diff
changeset
|
448 |
42380a4f6433
quick frontend (app): new synchronisation mechanism:
Goffi <goffi@goffi.org>
parents:
2829
diff
changeset
|
449 @sync.setter |
42380a4f6433
quick frontend (app): new synchronisation mechanism:
Goffi <goffi@goffi.org>
parents:
2829
diff
changeset
|
450 def sync(self, state): |
42380a4f6433
quick frontend (app): new synchronisation mechanism:
Goffi <goffi@goffi.org>
parents:
2829
diff
changeset
|
451 """Called when backend is desynchronised or resynchronising |
42380a4f6433
quick frontend (app): new synchronisation mechanism:
Goffi <goffi@goffi.org>
parents:
2829
diff
changeset
|
452 |
42380a4f6433
quick frontend (app): new synchronisation mechanism:
Goffi <goffi@goffi.org>
parents:
2829
diff
changeset
|
453 @param state(bool): True: if the backend is resynchronising |
42380a4f6433
quick frontend (app): new synchronisation mechanism:
Goffi <goffi@goffi.org>
parents:
2829
diff
changeset
|
454 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
|
455 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
|
456 """ |
42380a4f6433
quick frontend (app): new synchronisation mechanism:
Goffi <goffi@goffi.org>
parents:
2829
diff
changeset
|
457 if state: |
3028 | 458 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
|
459 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
|
460 # we are resynchronising all widgets |
3028 | 461 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
|
462 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
|
463 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
|
464 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
|
465 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
|
466 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
|
467 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
|
468 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
|
469 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
|
470 |
2845
42380a4f6433
quick frontend (app): new synchronisation mechanism:
Goffi <goffi@goffi.org>
parents:
2829
diff
changeset
|
471 self._sync = state |
42380a4f6433
quick frontend (app): new synchronisation mechanism:
Goffi <goffi@goffi.org>
parents:
2829
diff
changeset
|
472 else: |
3028 | 473 log.debug("we have lost synchronisation with server") |
2845
42380a4f6433
quick frontend (app): new synchronisation mechanism:
Goffi <goffi@goffi.org>
parents:
2829
diff
changeset
|
474 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
|
475 # 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
|
476 # 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
|
477 for w in self.widgets: |
42380a4f6433
quick frontend (app): new synchronisation mechanism:
Goffi <goffi@goffi.org>
parents:
2829
diff
changeset
|
478 try: |
42380a4f6433
quick frontend (app): new synchronisation mechanism:
Goffi <goffi@goffi.org>
parents:
2829
diff
changeset
|
479 w.sync = False |
42380a4f6433
quick frontend (app): new synchronisation mechanism:
Goffi <goffi@goffi.org>
parents:
2829
diff
changeset
|
480 except AttributeError: |
42380a4f6433
quick frontend (app): new synchronisation mechanism:
Goffi <goffi@goffi.org>
parents:
2829
diff
changeset
|
481 pass |
42380a4f6433
quick frontend (app): new synchronisation mechanism:
Goffi <goffi@goffi.org>
parents:
2829
diff
changeset
|
482 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
483 def registerSignal( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
484 self, function_name, handler=None, iface="core", with_profile=True |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
485 ): |
1103
a096b8579a3c
frontends: signals are managed in a more generic way
Goffi <goffi@goffi.org>
parents:
1093
diff
changeset
|
486 """Register a handler for a signal |
a096b8579a3c
frontends: signals are managed in a more generic way
Goffi <goffi@goffi.org>
parents:
1093
diff
changeset
|
487 |
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
|
488 @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
|
489 @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
|
490 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
|
491 @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
|
492 @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
|
493 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
|
494 """ |
3028 | 495 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
|
496 if handler is None: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
497 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
|
498 if not with_profile: |
2086 | 499 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
|
500 return |
6053fb8a6466
quick_frontend: fixes an issue with the profile in the signal handler
souliane <souliane@mailoo.org>
parents:
1103
diff
changeset
|
501 |
1103
a096b8579a3c
frontends: signals are managed in a more generic way
Goffi <goffi@goffi.org>
parents:
1093
diff
changeset
|
502 def signalReceived(*args, **kwargs): |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
503 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
|
504 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
|
505 if not args: |
6053fb8a6466
quick_frontend: fixes an issue with the profile in the signal handler
souliane <souliane@mailoo.org>
parents:
1103
diff
changeset
|
506 raise exceptions.ProfileNotSetError |
6053fb8a6466
quick_frontend: fixes an issue with the profile in the signal handler
souliane <souliane@mailoo.org>
parents:
1103
diff
changeset
|
507 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
|
508 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
|
509 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
|
510 if profile in self.profiles: |
2664
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2626
diff
changeset
|
511 # 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
|
512 # 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
|
513 self.signals_cache.setdefault(profile, []).append( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
514 (function_name, handler, args, kwargs) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
515 ) |
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
|
516 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
|
517 handler(*args, **kwargs) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
518 |
2086 | 519 self.bridge.register_signal(function_name, signalReceived, iface) |
1103
a096b8579a3c
frontends: signals are managed in a more generic way
Goffi <goffi@goffi.org>
parents:
1093
diff
changeset
|
520 |
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
|
521 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
|
522 """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
|
523 |
2664
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2626
diff
changeset
|
524 /!\ 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
|
525 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
|
526 @param type_: type of event, can be: |
3065
f8e3789912d0
quick frontend (contact list): added "contactsFilled" event
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
527 - 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
|
528 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
|
529 - avatar: called when avatar data is updated |
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
|
530 args: (entity, avatar file, profile) |
1342
e31a07a5614d
quick_frontends, primitivus (contact list): added nick observer + implemented onNickUpdate
Goffi <goffi@goffi.org>
parents:
1339
diff
changeset
|
531 - nick: called when nick data is updated |
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
|
532 args: (entity, new_nick, 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
|
533 - 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
|
534 args: (entity, show, priority, statuses, profile) |
1972
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
535 - notification: called when a new notification is emited |
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
536 args: (entity, notification_data, profile) |
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
537 - notification_clear: called when notifications are cleared |
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
538 args: (entity, type_, profile) |
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
|
539 - 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
|
540 args: (type_, path, path_i18n, item) were values are: |
fa77e40eb17b
quick_frontends: added "menu" listeners, which is called when a menu is added or removed.
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
541 type_: same as in [sat.core.sat_main.SAT.importMenu] |
fa77e40eb17b
quick_frontends: added "menu" listeners, which is called when a menu is added or removed.
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
542 path: same as in [sat.core.sat_main.SAT.importMenu] |
fa77e40eb17b
quick_frontends: added "menu" listeners, which is called when a menu is added or removed.
Goffi <goffi@goffi.org>
parents:
1361
diff
changeset
|
543 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
|
544 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
|
545 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
|
546 - gotMenus: called only once when menu are available (no arg) |
2103
b44558286bbb
quick frontend (quick app): added progressFinished and progressError listeners
Goffi <goffi@goffi.org>
parents:
2102
diff
changeset
|
547 - progressFinished: called when a progressing action has just finished |
b44558286bbb
quick frontend (quick app): added progressFinished and progressError listeners
Goffi <goffi@goffi.org>
parents:
2102
diff
changeset
|
548 args: (progress_id, metadata, profile) |
b44558286bbb
quick frontend (quick app): added progressFinished and progressError listeners
Goffi <goffi@goffi.org>
parents:
2102
diff
changeset
|
549 - progressError: called when a progressing action failed |
b44558286bbb
quick frontend (quick app): added progressFinished and progressError listeners
Goffi <goffi@goffi.org>
parents:
2102
diff
changeset
|
550 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
|
551 @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
|
552 @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
|
553 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
|
554 """ |
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
|
555 assert type_ in C.LISTENERS |
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
|
556 self._listeners.setdefault(type_, OrderedDict())[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
|
557 |
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
|
558 def removeListener(self, type_, callback): |
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
|
559 """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
|
560 |
1323
a599b6a70dc0
frontends (quick_frontend): fixes a typo (listerner --> listener)
souliane <souliane@mailoo.org>
parents:
1319
diff
changeset
|
561 @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
|
562 @param callback: callback to remove |
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
|
563 """ |
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
|
564 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
|
565 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
|
566 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
|
567 except KeyError: |
ab8be8f1c92d
quick frontend(app): catch exception when trying to remove a missing listener, and log it
Goffi <goffi@goffi.org>
parents:
3065
diff
changeset
|
568 log.error( |
ab8be8f1c92d
quick frontend(app): catch exception when trying to remove a missing listener, and log it
Goffi <goffi@goffi.org>
parents:
3065
diff
changeset
|
569 f"Trying to remove an inexisting listener (type = {type_}): {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
|
570 |
1338
139263ee85c5
quick frontends: fixed use of profile for listeners
Goffi <goffi@goffi.org>
parents:
1337
diff
changeset
|
571 def callListeners(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
|
572 """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
|
573 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
|
574 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
|
575 |
1323
a599b6a70dc0
frontends (quick_frontend): fixes a typo (listerner --> listener)
souliane <souliane@mailoo.org>
parents:
1319
diff
changeset
|
576 @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
|
577 @param *args: arguments sent to callback |
1338
139263ee85c5
quick frontends: fixed use of profile for listeners
Goffi <goffi@goffi.org>
parents:
1337
diff
changeset
|
578 @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
|
579 """ |
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 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
|
581 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
|
582 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
|
583 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
|
584 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
|
585 else: |
1338
139263ee85c5
quick frontends: fixed use of profile for listeners
Goffi <goffi@goffi.org>
parents:
1337
diff
changeset
|
586 profile = kwargs.get("profile") |
3028 | 587 for listener, profiles_filter in 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
|
588 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
|
589 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
|
590 |
125
8d611eb9ae48
primitivus: contact list enhancement
Goffi <goffi@goffi.org>
parents:
124
diff
changeset
|
591 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
|
592 """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
|
593 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
|
594 |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
595 def postInit(self, profile_manager): |
2664
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2626
diff
changeset
|
596 """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
|
597 |
2664
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2626
diff
changeset
|
598 (auto plug profile) |
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2626
diff
changeset
|
599 @param profile_manager: instance of a subclass of |
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2626
diff
changeset
|
600 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
|
601 """ |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
602 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
|
603 profile_manager.autoconnect([self.options.profile]) |
119
ded2431cea5a
Primitivus: chat window / text sending.
Goffi <goffi@goffi.org>
parents:
117
diff
changeset
|
604 |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
605 def profilePlugged(self, profile): |
2664
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2626
diff
changeset
|
606 """Method called when the profile is fully plugged |
91 | 607 |
2664
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2626
diff
changeset
|
608 This will launch frontend specific workflow |
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2626
diff
changeset
|
609 |
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2626
diff
changeset
|
610 /!\ 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
|
611 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
|
612 |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
613 @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
|
614 """ |
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
|
615 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
|
616 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
|
617 |
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
|
618 # 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
|
619 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
|
620 for function_name, handler, args, kwargs in cached_signals: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
621 log.debug( |
3028 | 622 "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
|
623 % (function_name, args, kwargs) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
624 ) |
1393
50d5d6325f62
quick_frontend, primitivus: various fixes (MUC and cached signals):
souliane <souliane@mailoo.org>
parents:
1391
diff
changeset
|
625 handler(*args, **kwargs) |
91 | 626 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
627 self.callListeners("profilePlugged", 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
|
628 if not self._plugs_in_progress: |
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
|
629 self.contact_lists.lockUpdate(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
|
630 |
2142
be96beb7ca14
core, bridge, frontends: renamed asyncConnect to connect, and added options parameters (not used yet)
Goffi <goffi@goffi.org>
parents:
2135
diff
changeset
|
631 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
|
632 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
|
633 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
|
634 if not errback: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
635 |
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
|
636 def errback(failure): |
3028 | 637 log.error(_("Can't connect profile [%s]") % failure) |
2089
0931b5a6213c
core, quick_frontends: android compatibility hacks:
Goffi <goffi@goffi.org>
parents:
2086
diff
changeset
|
638 try: |
0931b5a6213c
core, quick_frontends: android compatibility hacks:
Goffi <goffi@goffi.org>
parents:
2086
diff
changeset
|
639 module = failure.module |
0931b5a6213c
core, quick_frontends: android compatibility hacks:
Goffi <goffi@goffi.org>
parents:
2086
diff
changeset
|
640 except AttributeError: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
641 module = "" |
2089
0931b5a6213c
core, quick_frontends: android compatibility hacks:
Goffi <goffi@goffi.org>
parents:
2086
diff
changeset
|
642 try: |
0931b5a6213c
core, quick_frontends: android compatibility hacks:
Goffi <goffi@goffi.org>
parents:
2086
diff
changeset
|
643 message = failure.message |
0931b5a6213c
core, quick_frontends: android compatibility hacks:
Goffi <goffi@goffi.org>
parents:
2086
diff
changeset
|
644 except AttributeError: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
645 message = "error" |
2089
0931b5a6213c
core, quick_frontends: android compatibility hacks:
Goffi <goffi@goffi.org>
parents:
2086
diff
changeset
|
646 try: |
0931b5a6213c
core, quick_frontends: android compatibility hacks:
Goffi <goffi@goffi.org>
parents:
2086
diff
changeset
|
647 fullname = failure.fullname |
0931b5a6213c
core, quick_frontends: android compatibility hacks:
Goffi <goffi@goffi.org>
parents:
2086
diff
changeset
|
648 except AttributeError: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
649 fullname = "error" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
650 if ( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
651 module.startswith("twisted.words.protocols.jabber") |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
652 and failure.condition == "not-authorized" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
653 ): |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
654 self.launchAction(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
|
655 else: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
656 self.showDialog(message, fullname, "error") |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
657 |
2142
be96beb7ca14
core, bridge, frontends: renamed asyncConnect to connect, and added options parameters (not used yet)
Goffi <goffi@goffi.org>
parents:
2135
diff
changeset
|
658 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
|
659 |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
660 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
|
661 """Tell application which profiles must be used |
0 | 662 |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
663 @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
|
664 """ |
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
|
665 self.contact_lists.lockUpdate() |
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
|
666 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
|
667 self.plugging_profiles() |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
668 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
|
669 self.profiles.plug(profile) |
51
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
28
diff
changeset
|
670 |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
671 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
|
672 """Method to subclass to manage frontend specific things to do |
0 | 673 |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
674 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
|
675 """ |
1290
faa1129559b8
core, frontends: refactoring to base Libervia on QuickFrontend (big mixed commit):
Goffi <goffi@goffi.org>
parents:
1265
diff
changeset
|
676 pass |
542
3eeb6c865e4d
frontends: incoming files transfer management:
Goffi <goffi@goffi.org>
parents:
538
diff
changeset
|
677 |
66
8147b4f40809
SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents:
64
diff
changeset
|
678 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
|
679 """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
|
680 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
|
681 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
|
682 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
|
683 |
8147b4f40809
SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents:
64
diff
changeset
|
684 def clear_profile(self): |
8147b4f40809
SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents:
64
diff
changeset
|
685 self.profiles.clear() |
8147b4f40809
SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents:
64
diff
changeset
|
686 |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
687 def newWidget(self, widget): |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
688 raise NotImplementedError |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
689 |
2128 | 690 # bridge signals hanlers |
691 | |
2894
c7c52c0dc13a
core, quick_frontend(app): fixed connected signal handling
Goffi <goffi@goffi.org>
parents:
2862
diff
changeset
|
692 def connectedHandler(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
|
693 """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
|
694 |
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
|
695 @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
|
696 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
|
697 """ |
1009
d1084f7e56a5
quick_frontend: use of new logging system
Goffi <goffi@goffi.org>
parents:
955
diff
changeset
|
698 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
|
699 self.profiles[profile].whoami = jid.JID(jid_s) |
1417
176de79c8c39
core, plugin XEP-0045, frontends: change frontend method "setStatusOnline" for "setPresenceStatus":
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
700 self.setPresenceStatus(profile=profile) |
2899
5b0f897689b7
quick frontend (app): (un)set sync state on (dis)connect:
Goffi <goffi@goffi.org>
parents:
2898
diff
changeset
|
701 # 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
|
702 # 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
|
703 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
|
704 # 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
|
705 # 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
|
706 # 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
|
707 # 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
|
708 # on a per-profile basis |
5b0f897689b7
quick frontend (app): (un)set sync state on (dis)connect:
Goffi <goffi@goffi.org>
parents:
2898
diff
changeset
|
709 self.sync = True |
52 | 710 |
1103
a096b8579a3c
frontends: signals are managed in a more generic way
Goffi <goffi@goffi.org>
parents:
1093
diff
changeset
|
711 def disconnectedHandler(self, profile): |
52 | 712 """called when the connection is closed""" |
1009
d1084f7e56a5
quick_frontend: use of new logging system
Goffi <goffi@goffi.org>
parents:
955
diff
changeset
|
713 log.debug(_("Disconnected")) |
1938
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
714 self.contact_lists[profile].disconnect() |
2899
5b0f897689b7
quick frontend (app): (un)set sync state on (dis)connect:
Goffi <goffi@goffi.org>
parents:
2898
diff
changeset
|
715 # FIXME: see note on connectedHandler |
5b0f897689b7
quick frontend (app): (un)set sync state on (dis)connect:
Goffi <goffi@goffi.org>
parents:
2898
diff
changeset
|
716 self.sync = False |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
717 self.setPresenceStatus(C.PRESENCE_UNAVAILABLE, "", profile=profile) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
585
diff
changeset
|
718 |
1599
e2ed8009e66e
backend, bridge, frontends: actionNew has now a security_limit argument + added some docstring to explain data argument
Goffi <goffi@goffi.org>
parents:
1580
diff
changeset
|
719 def actionNewHandler(self, action_data, id_, security_limit, profile): |
2042
2e948c228643
quick frontend (quick_app): fixed user_action from action coming from backend
Goffi <goffi@goffi.org>
parents:
2040
diff
changeset
|
720 self.actionManager(action_data, user_action=False, profile=profile) |
1468
731fbed0b9cf
quick_frontend, primitivus: handling of actionNew signal
Goffi <goffi@goffi.org>
parents:
1461
diff
changeset
|
721 |
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
|
722 def newContactHandler(self, jid_s, attributes, groups, profile): |
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
|
723 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
|
724 groups = list(groups) |
011eff37e21d
quick frontend, primitivus: quickContactList refactored to handle several profiles at once
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
725 self.contact_lists[profile].setContact(entity, groups, attributes, in_roster=True) |
510
886754295efe
quick frontend, primitivus, wix: MUC private messages management
Goffi <goffi@goffi.org>
parents:
507
diff
changeset
|
726 |
2664
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2626
diff
changeset
|
727 def messageNewHandler(self, uid, timestamp, from_jid_s, to_jid_s, msg, subject, type_, |
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2626
diff
changeset
|
728 extra, profile): |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
729 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
|
730 to_jid = jid.JID(to_jid_s) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
731 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
|
732 "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
|
733 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
|
734 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
|
735 |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
736 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
|
737 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
|
738 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
|
739 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
|
740 |
441b536e28ed
quick frontend (chat): use right type in getOrCreateWidget on new message
Goffi <goffi@goffi.org>
parents:
2790
diff
changeset
|
741 try: |
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
|
742 is_room = contact_list.isRoom(target) |
2792
441b536e28ed
quick frontend (chat): use right type in getOrCreateWidget on new message
Goffi <goffi@goffi.org>
parents:
2790
diff
changeset
|
743 except exceptions.NotFound: |
441b536e28ed
quick frontend (chat): use right type in getOrCreateWidget on new message
Goffi <goffi@goffi.org>
parents:
2790
diff
changeset
|
744 is_room = False |
441b536e28ed
quick frontend (chat): use right type in getOrCreateWidget on new message
Goffi <goffi@goffi.org>
parents:
2790
diff
changeset
|
745 |
441b536e28ed
quick frontend (chat): use right type in getOrCreateWidget on new message
Goffi <goffi@goffi.org>
parents:
2790
diff
changeset
|
746 if target.resource and not is_room: |
2664
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2626
diff
changeset
|
747 # 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
|
748 # 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
|
749 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
|
750 # we want to be sure to have at least one QuickChat instance |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
751 self.widgets.getOrCreateWidget( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
752 quick_chat.QuickChat, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
753 target, |
2792
441b536e28ed
quick frontend (chat): use right type in getOrCreateWidget on new message
Goffi <goffi@goffi.org>
parents:
2790
diff
changeset
|
754 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
|
755 on_new_widget = None, |
441b536e28ed
quick frontend (chat): use right type in getOrCreateWidget on new message
Goffi <goffi@goffi.org>
parents:
2790
diff
changeset
|
756 profile = profile, |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
757 ) |
510
886754295efe
quick frontend, primitivus, wix: MUC private messages management
Goffi <goffi@goffi.org>
parents:
507
diff
changeset
|
758 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
759 if ( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
760 not from_jid in contact_list |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
761 and from_jid.bare != self.profiles[profile].whoami.bare |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
762 ): |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
763 # 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
|
764 # presence information and which are not in roster |
2ecc07a8f91b
primitivus, quick_frontends: moved newMessage signal handler to quick_frontend
Goffi <goffi@goffi.org>
parents:
1319
diff
changeset
|
765 contact_list.setContact(from_jid) |
2ecc07a8f91b
primitivus, quick_frontends: moved newMessage signal handler to quick_frontend
Goffi <goffi@goffi.org>
parents:
1319
diff
changeset
|
766 |
2040
f607349a01a4
quick frontend (chat): fixed messageNew signal dispatching when several widgets are handling the target
Goffi <goffi@goffi.org>
parents:
2036
diff
changeset
|
767 # we dispatch the message in the widgets |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
768 for widget in self.widgets.getWidgets( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
769 quick_chat.QuickChat, target=target, profiles=(profile,) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
770 ): |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
771 widget.messageNew( |
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
|
772 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
|
773 ) |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
774 |
2664
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2626
diff
changeset
|
775 def messageEncryptionStartedHandler(self, destinee_jid_s, plugin_data, profile): |
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2626
diff
changeset
|
776 destinee_jid = jid.JID(destinee_jid_s) |
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2626
diff
changeset
|
777 plugin_data = data_format.deserialise(plugin_data) |
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2626
diff
changeset
|
778 for widget in self.widgets.getWidgets(quick_chat.QuickChat, |
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2626
diff
changeset
|
779 target=destinee_jid.bare, |
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2626
diff
changeset
|
780 profiles=(profile,)): |
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2626
diff
changeset
|
781 widget.messageEncryptionStarted(plugin_data) |
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2626
diff
changeset
|
782 |
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2626
diff
changeset
|
783 def messageEncryptionStoppedHandler(self, destinee_jid_s, plugin_data, profile): |
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2626
diff
changeset
|
784 destinee_jid = jid.JID(destinee_jid_s) |
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2626
diff
changeset
|
785 for widget in self.widgets.getWidgets(quick_chat.QuickChat, |
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2626
diff
changeset
|
786 target=destinee_jid.bare, |
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2626
diff
changeset
|
787 profiles=(profile,)): |
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2626
diff
changeset
|
788 widget.messageEncryptionStopped(plugin_data) |
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2626
diff
changeset
|
789 |
2024
01aff34e8873
quick frontends, primitivus: messageState signal handling
Goffi <goffi@goffi.org>
parents:
2016
diff
changeset
|
790 def messageStateHandler(self, uid, status, profile): |
01aff34e8873
quick frontends, primitivus: messageState signal handling
Goffi <goffi@goffi.org>
parents:
2016
diff
changeset
|
791 for widget in self.widgets.getWidgets(quick_chat.QuickChat, profiles=(profile,)): |
01aff34e8873
quick frontends, primitivus: messageState signal handling
Goffi <goffi@goffi.org>
parents:
2016
diff
changeset
|
792 widget.onMessageState(uid, status, profile) |
01aff34e8873
quick frontends, primitivus: messageState signal handling
Goffi <goffi@goffi.org>
parents:
2016
diff
changeset
|
793 |
2829
649cb3fd7711
quick frontend(app): avoid sending empty messages
Goffi <goffi@goffi.org>
parents:
2807
diff
changeset
|
794 def messageSend(self, to_jid, message, subject=None, mess_type="auto", extra=None, callback=None, errback=None, profile_key=C.PROF_KEY_NONE): |
3028 | 795 if not subject and not extra and (not message or message == {'': ''}): |
796 log.debug("Not sending empty message") | |
2829
649cb3fd7711
quick frontend(app): avoid sending empty messages
Goffi <goffi@goffi.org>
parents:
2807
diff
changeset
|
797 return |
649cb3fd7711
quick frontend(app): avoid sending empty messages
Goffi <goffi@goffi.org>
parents:
2807
diff
changeset
|
798 |
1955
633b5c21aefd
backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents:
1939
diff
changeset
|
799 if subject is None: |
633b5c21aefd
backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents:
1939
diff
changeset
|
800 subject = {} |
633b5c21aefd
backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents:
1939
diff
changeset
|
801 if extra is None: |
633b5c21aefd
backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents:
1939
diff
changeset
|
802 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
|
803 if callback is None: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
804 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
|
805 lambda __=None: None |
2664
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2626
diff
changeset
|
806 ) # 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
|
807 # 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
|
808 if errback is None: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
809 errback = lambda failure: self.showDialog( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
810 failure.fullname, failure.message, "error" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
811 ) |
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
|
812 |
2829
649cb3fd7711
quick frontend(app): avoid sending empty messages
Goffi <goffi@goffi.org>
parents:
2807
diff
changeset
|
813 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
|
814 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
|
815 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
816 self.bridge.messageSend( |
3028 | 817 str(to_jid), |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
818 message, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
819 subject, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
820 mess_type, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
821 extra, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
822 profile_key, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
823 callback=callback, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
824 errback=errback, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
825 ) |
0 | 826 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
827 def setPresenceStatus(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
|
828 raise NotImplementedError |
0 | 829 |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
830 def presenceUpdateHandler(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
|
831 # 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
|
832 # 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
|
833 # 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
|
834 # _( |
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
|
835 # 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
|
836 # 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
|
837 # ) |
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
|
838 # % { |
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
|
839 # "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
|
840 # 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
|
841 # 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
|
842 # 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
|
843 # "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
|
844 # } |
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
|
845 # ) |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
846 entity = jid.JID(entity_s) |
0 | 847 |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
848 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
|
849 if show == C.PRESENCE_UNAVAILABLE: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
850 self.setPresenceStatus(C.PRESENCE_UNAVAILABLE, "", profile=profile) |
735
682933ca304c
frontends: presence update in quick app:
souliane <souliane@mailoo.org>
parents:
698
diff
changeset
|
851 else: |
1417
176de79c8c39
core, plugin XEP-0045, frontends: change frontend method "setStatusOnline" for "setPresenceStatus":
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
852 # 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
|
853 status = statuses.get(C.PRESENCE_STATUSES_DEFAULT, None) |
176de79c8c39
core, plugin XEP-0045, frontends: change frontend method "setStatusOnline" for "setPresenceStatus":
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
854 self.setPresenceStatus(show, status, profile=profile) |
0 | 855 return |
856 | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
857 self.callListeners("presence", entity, show, priority, statuses, profile=profile) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
585
diff
changeset
|
858 |
3101
ab7e8ade848a
plugin XEP-0045: added room statuses to metadata:
Goffi <goffi@goffi.org>
parents:
3077
diff
changeset
|
859 def mucRoomJoinedHandler( |
ab7e8ade848a
plugin XEP-0045: added room statuses to metadata:
Goffi <goffi@goffi.org>
parents:
3077
diff
changeset
|
860 self, room_jid_s, occupants, user_nick, subject, statuses, profile): |
72 | 861 """Called when a MUC room is joined""" |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
862 log.debug( |
3028 | 863 "Room [{room_jid}] joined by {profile}, users presents:{users}".format( |
864 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
|
865 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
866 ) |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
867 room_jid = jid.JID(room_jid_s) |
3006
ba9aaf7d6cd0
quick frontends (app): setSpecial is now called before getOrCreateWidget in mucRoomJoinedHandler:
Goffi <goffi@goffi.org>
parents:
2976
diff
changeset
|
868 self.contact_lists[profile].setSpecial(room_jid, C.CONTACT_SPECIAL_GROUP) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
869 self.widgets.getOrCreateWidget( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
870 quick_chat.QuickChat, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
871 room_jid, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
872 type_=C.CHAT_GROUP, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
873 nick=user_nick, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
874 occupants=occupants, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
875 subject=subject, |
3101
ab7e8ade848a
plugin XEP-0045: added room statuses to metadata:
Goffi <goffi@goffi.org>
parents:
3077
diff
changeset
|
876 statuses=statuses, |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
877 profile=profile, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
878 ) |
72 | 879 |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
880 def mucRoomLeftHandler(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
|
881 """Called when a MUC room is left""" |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
882 log.debug( |
3028 | 883 "Room [%(room_jid)s] left by %(profile)s" |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
884 % {"room_jid": room_jid_s, "profile": profile} |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
885 ) |
1351
ec43552f5f8b
quick_frontend: replace last occurences of QuickApp.chat_wins with QuickApp.widgets
souliane <souliane@mailoo.org>
parents:
1348
diff
changeset
|
886 room_jid = jid.JID(room_jid_s) |
ec43552f5f8b
quick_frontend: replace last occurences of QuickApp.chat_wins with QuickApp.widgets
souliane <souliane@mailoo.org>
parents:
1348
diff
changeset
|
887 chat_widget = self.widgets.getWidget(quick_chat.QuickChat, room_jid, profile) |
ec43552f5f8b
quick_frontend: replace last occurences of QuickApp.chat_wins with QuickApp.widgets
souliane <souliane@mailoo.org>
parents:
1348
diff
changeset
|
888 if chat_widget: |
ec43552f5f8b
quick_frontend: replace last occurences of QuickApp.chat_wins with QuickApp.widgets
souliane <souliane@mailoo.org>
parents:
1348
diff
changeset
|
889 self.widgets.deleteWidget(chat_widget) |
1397
96dd0ae1a850
quick_frontend (contact_list): rename QuickContactList.remove to QuickContactList.removeContact + remove the contact from _roster attribute (and not only from _cache)
souliane <souliane@mailoo.org>
parents:
1396
diff
changeset
|
890 self.contact_lists[profile].removeContact(room_jid) |
72 | 891 |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
892 def mucRoomUserChangedNickHandler(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
|
893 """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
|
894 room_jid = jid.JID(room_jid_s) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
895 chat_widget = self.widgets.getOrCreateWidget( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
896 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
|
897 ) |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
898 chat_widget.changeUserNick(old_nick, new_nick) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
899 log.debug( |
3028 | 900 "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
|
901 % {"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
|
902 ) |
507
f98bef71a918
frontends, core, plugin XEP-0045: leave implementation + better nick change
Goffi <goffi@goffi.org>
parents:
504
diff
changeset
|
903 |
1970
200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
Goffi <goffi@goffi.org>
parents:
1963
diff
changeset
|
904 def mucRoomNewSubjectHandler(self, room_jid_s, subject, profile): |
76 | 905 """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
|
906 room_jid = jid.JID(room_jid_s) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
907 chat_widget = self.widgets.getOrCreateWidget( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
908 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
|
909 ) |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
910 chat_widget.setSubject(subject) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
911 log.debug( |
3028 | 912 "new subject for room [%(room_jid)s]: %(subject)s" |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
913 % {"room_jid": room_jid, "subject": subject} |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
914 ) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
585
diff
changeset
|
915 |
1103
a096b8579a3c
frontends: signals are managed in a more generic way
Goffi <goffi@goffi.org>
parents:
1093
diff
changeset
|
916 def chatStateReceivedHandler(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
|
917 """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
|
918 |
1378
3dae6964c071
quick_frontends, primitivus: move the chat states logic to quick_frontend
souliane <souliane@mailoo.org>
parents:
1377
diff
changeset
|
919 @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
|
920 @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
|
921 @param profile (unicode): current profile |
907
cd02f5ef30df
primitivus: display chat states (with symbols) for MUC participants
souliane <souliane@mailoo.org>
parents:
906
diff
changeset
|
922 """ |
2007
19b9d3f8a6c7
plugin XEP-0085, quick_frontends, primitivus: chat states are working again
Goffi <goffi@goffi.org>
parents:
1972
diff
changeset
|
923 from_jid = jid.JID(from_jid_s) |
2789
d350f4571d82
quick frontend (app): fixed filtering for chat state notifications
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
924 for widget in self.widgets.getWidgets(quick_chat.QuickChat, target=from_jid.bare, |
d350f4571d82
quick frontend (app): fixed filtering for chat state notifications
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
925 profiles=(profile,)): |
2007
19b9d3f8a6c7
plugin XEP-0085, quick_frontends, primitivus: chat states are working again
Goffi <goffi@goffi.org>
parents:
1972
diff
changeset
|
926 widget.onChatState(from_jid, state, profile) |
907
cd02f5ef30df
primitivus: display chat states (with symbols) for MUC participants
souliane <souliane@mailoo.org>
parents:
906
diff
changeset
|
927 |
2861
e9e33e05d143
quick frontend (app): fixed notifications ids
Goffi <goffi@goffi.org>
parents:
2854
diff
changeset
|
928 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
|
929 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
|
930 """Trigger an event notification |
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
931 |
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
932 @param type_(unicode): notifation kind, |
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
933 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
|
934 @param entity(jid.JID, None): entity involved in the notification |
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
935 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
|
936 @param message(unicode, None): message of the notification |
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
937 @param subject(unicode, None): subject of the notification |
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
938 @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
|
939 @param cb_args(list, None): list of args for callback |
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
940 @param widget(object, None): widget where the notification happened |
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
941 """ |
2135 | 942 assert type_ in C.NOTIFY_ALL |
1972
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
943 notif_dict = self.profiles[profile].notifications |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
944 key = "" if entity is None else entity.bare |
1972
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
945 type_notifs = notif_dict.setdefault(key, {}).setdefault(type_, []) |
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
946 notif_data = { |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
947 "id": self._notif_id, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
948 "time": time.time(), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
949 "entity": entity, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
950 "callback": callback, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
951 "cb_args": cb_args, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
952 "message": message, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
953 "subject": subject, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
954 } |
1972
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
955 if widget is not None: |
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
956 notif_data[widget] = widget |
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
957 type_notifs.append(notif_data) |
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
958 self._notifications[self._notif_id] = notif_data |
2861
e9e33e05d143
quick frontend (app): fixed notifications ids
Goffi <goffi@goffi.org>
parents:
2854
diff
changeset
|
959 self._notif_id += 1 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
960 self.callListeners("notification", entity, notif_data, profile=profile) |
1972
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
961 |
2016
f09562b0704d
quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents:
2009
diff
changeset
|
962 def getNotifs(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
|
963 """return notifications for given entity |
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
964 |
2016
f09562b0704d
quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents:
2009
diff
changeset
|
965 @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
|
966 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
|
967 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
|
968 C.ENTITY_ALL to get all notifications |
1972
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
969 @param type_(unicode, None): notification type to filter |
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
970 None to get all notifications |
2016
f09562b0704d
quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents:
2009
diff
changeset
|
971 @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
|
972 exact entity jid (i.e. not including other resources) |
f09562b0704d
quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents:
2009
diff
changeset
|
973 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
|
974 False to get resources notifications |
f09562b0704d
quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents:
2009
diff
changeset
|
975 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
|
976 @return (iter[dict]): notifications |
1972
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
977 """ |
2016
f09562b0704d
quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents:
2009
diff
changeset
|
978 main_notif_dict = self.profiles[profile].notifications |
f09562b0704d
quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents:
2009
diff
changeset
|
979 |
f09562b0704d
quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents:
2009
diff
changeset
|
980 if entity is C.ENTITY_ALL: |
3028 | 981 selected_notifs = iter(main_notif_dict.values()) |
2016
f09562b0704d
quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents:
2009
diff
changeset
|
982 exact_jid = False |
f09562b0704d
quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents:
2009
diff
changeset
|
983 else: |
f09562b0704d
quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents:
2009
diff
changeset
|
984 if entity is None: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
985 key = "" |
2016
f09562b0704d
quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents:
2009
diff
changeset
|
986 exact_jid = False |
f09562b0704d
quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents:
2009
diff
changeset
|
987 else: |
f09562b0704d
quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents:
2009
diff
changeset
|
988 key = entity.bare |
f09562b0704d
quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents:
2009
diff
changeset
|
989 if exact_jid is None: |
f09562b0704d
quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents:
2009
diff
changeset
|
990 exact_jid = bool(entity.resource) |
f09562b0704d
quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents:
2009
diff
changeset
|
991 selected_notifs = (main_notif_dict.setdefault(key, {}),) |
f09562b0704d
quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents:
2009
diff
changeset
|
992 |
f09562b0704d
quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents:
2009
diff
changeset
|
993 for notifs_from_select in selected_notifs: |
f09562b0704d
quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents:
2009
diff
changeset
|
994 |
f09562b0704d
quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents:
2009
diff
changeset
|
995 if type_ is None: |
3028 | 996 type_notifs = iter(notifs_from_select.values()) |
2016
f09562b0704d
quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents:
2009
diff
changeset
|
997 else: |
f09562b0704d
quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents:
2009
diff
changeset
|
998 type_notifs = (notifs_from_select.get(type_, []),) |
f09562b0704d
quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents:
2009
diff
changeset
|
999 |
f09562b0704d
quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents:
2009
diff
changeset
|
1000 for notifs in type_notifs: |
f09562b0704d
quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents:
2009
diff
changeset
|
1001 for notif in notifs: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1002 if exact_jid and notif["entity"] != entity: |
2016
f09562b0704d
quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents:
2009
diff
changeset
|
1003 continue |
f09562b0704d
quick_frontend, primitivus: better notifications handling
Goffi <goffi@goffi.org>
parents:
2009
diff
changeset
|
1004 yield notif |
1972
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
1005 |
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
1006 def clearNotifs(self, entity, type_=None, profile=C.PROF_KEY_NONE): |
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
1007 """return notifications for given entity |
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
1008 |
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
1009 @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
|
1010 None to clear general notifications (but keep entities ones) |
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
1011 @param type_(unicode, None): notification type to filter |
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
1012 None to clear all notifications |
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
1013 @return (list[dict]): list of notifications |
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
1014 """ |
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
1015 notif_dict = self.profiles[profile].notifications |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1016 key = "" if entity is None else entity.bare |
1972
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
1017 try: |
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
1018 if type_ is None: |
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
1019 del notif_dict[key] |
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
1020 else: |
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
1021 del notif_dict[key][type_] |
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
1022 except KeyError: |
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
1023 return |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1024 self.callListeners("notificationsClear", entity, type_, profile=profile) |
1972
02d21a589be2
quick_frontend, primitivus: notifications refactoring
Goffi <goffi@goffi.org>
parents:
1970
diff
changeset
|
1025 |
1461
9fce331ba0fd
quick_frontend (constants, quick_app, quick_contact_list): blogging refactoring (not finished):
Goffi <goffi@goffi.org>
parents:
1442
diff
changeset
|
1026 def psEventHandler(self, category, service_s, node, event_type, data, profile): |
9fce331ba0fd
quick_frontend (constants, quick_app, quick_contact_list): blogging refactoring (not finished):
Goffi <goffi@goffi.org>
parents:
1442
diff
changeset
|
1027 """Called when a PubSub event is received. |
1352
56c14cb29e0f
quick_frontend: register the 'personalEvent' signal
souliane <souliane@mailoo.org>
parents:
1351
diff
changeset
|
1028 |
1461
9fce331ba0fd
quick_frontend (constants, quick_app, quick_contact_list): blogging refactoring (not finished):
Goffi <goffi@goffi.org>
parents:
1442
diff
changeset
|
1029 @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
|
1030 @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
|
1031 @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
|
1032 @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
|
1033 @param data (serialised_dict): event data |
1352
56c14cb29e0f
quick_frontend: register the 'personalEvent' signal
souliane <souliane@mailoo.org>
parents:
1351
diff
changeset
|
1034 """ |
2807
0b7ce5daee9b
plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents:
2792
diff
changeset
|
1035 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
|
1036 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
|
1037 |
2067
7834743705f0
quich frontend, primivius (chat): better avatar handling:
Goffi <goffi@goffi.org>
parents:
2066
diff
changeset
|
1038 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
|
1039 if event_type == C.PS_PUBLISH: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1040 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
|
1041 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
|
1042 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
|
1043 |
0b7ce5daee9b
plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents:
2792
diff
changeset
|
1044 # 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
|
1045 _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
|
1046 |
9fce331ba0fd
quick_frontend (constants, quick_app, quick_contact_list): blogging refactoring (not finished):
Goffi <goffi@goffi.org>
parents:
1442
diff
changeset
|
1047 for wid in self.widgets.getWidgets(quick_blog.QuickBlog): |
9fce331ba0fd
quick_frontend (constants, quick_app, quick_contact_list): blogging refactoring (not finished):
Goffi <goffi@goffi.org>
parents:
1442
diff
changeset
|
1048 wid.addEntryIfAccepted(service_s, node, data, _groups, profile) |
9fce331ba0fd
quick_frontend (constants, quick_app, quick_contact_list): blogging refactoring (not finished):
Goffi <goffi@goffi.org>
parents:
1442
diff
changeset
|
1049 |
9fce331ba0fd
quick_frontend (constants, quick_app, quick_contact_list): blogging refactoring (not finished):
Goffi <goffi@goffi.org>
parents:
1442
diff
changeset
|
1050 try: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1051 comments_node, comments_service = ( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1052 data["comments_node"], |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1053 data["comments_service"], |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1054 ) |
1461
9fce331ba0fd
quick_frontend (constants, quick_app, quick_contact_list): blogging refactoring (not finished):
Goffi <goffi@goffi.org>
parents:
1442
diff
changeset
|
1055 except KeyError: |
9fce331ba0fd
quick_frontend (constants, quick_app, quick_contact_list): blogging refactoring (not finished):
Goffi <goffi@goffi.org>
parents:
1442
diff
changeset
|
1056 pass |
9fce331ba0fd
quick_frontend (constants, quick_app, quick_contact_list): blogging refactoring (not finished):
Goffi <goffi@goffi.org>
parents:
1442
diff
changeset
|
1057 else: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1058 self.bridge.mbGet( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1059 comments_service, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1060 comments_node, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1061 C.NO_LIMIT, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1062 [], |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1063 {"subscribe": C.BOOL_TRUE}, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1064 profile=profile, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1065 ) |
1461
9fce331ba0fd
quick_frontend (constants, quick_app, quick_contact_list): blogging refactoring (not finished):
Goffi <goffi@goffi.org>
parents:
1442
diff
changeset
|
1066 elif event_type == C.PS_RETRACT: |
9fce331ba0fd
quick_frontend (constants, quick_app, quick_contact_list): blogging refactoring (not finished):
Goffi <goffi@goffi.org>
parents:
1442
diff
changeset
|
1067 for wid in self.widgets.getWidgets(quick_blog.QuickBlog): |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1068 wid.deleteEntryIfPresent(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
|
1069 pass |
9fce331ba0fd
quick_frontend (constants, quick_app, quick_contact_list): blogging refactoring (not finished):
Goffi <goffi@goffi.org>
parents:
1442
diff
changeset
|
1070 else: |
9fce331ba0fd
quick_frontend (constants, quick_app, quick_contact_list): blogging refactoring (not finished):
Goffi <goffi@goffi.org>
parents:
1442
diff
changeset
|
1071 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
|
1072 |
2862
b2e898384c25
quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents:
2861
diff
changeset
|
1073 def registerProgressCbs(self, progress_id, callback, errback): |
b2e898384c25
quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents:
2861
diff
changeset
|
1074 """Register progression callbacks |
b2e898384c25
quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents:
2861
diff
changeset
|
1075 |
b2e898384c25
quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents:
2861
diff
changeset
|
1076 @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
|
1077 @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
|
1078 successfuly finished. |
b2e898384c25
quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents:
2861
diff
changeset
|
1079 None to ignore |
b2e898384c25
quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents:
2861
diff
changeset
|
1080 @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
|
1081 None to ignore |
b2e898384c25
quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents:
2861
diff
changeset
|
1082 """ |
b2e898384c25
quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents:
2861
diff
changeset
|
1083 callbacks = self._progress_ids.setdefault(progress_id, []) |
b2e898384c25
quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents:
2861
diff
changeset
|
1084 callbacks.append((callback, errback)) |
b2e898384c25
quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents:
2861
diff
changeset
|
1085 |
1636 | 1086 def progressStartedHandler(self, pid, metadata, profile): |
3028 | 1087 log.info("Progress {} started".format(pid)) |
1636 | 1088 |
1089 def progressFinishedHandler(self, pid, metadata, profile): | |
3028 | 1090 log.info("Progress {} finished".format(pid)) |
2862
b2e898384c25
quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents:
2861
diff
changeset
|
1091 try: |
b2e898384c25
quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents:
2861
diff
changeset
|
1092 callbacks = self._progress_ids.pop(pid) |
b2e898384c25
quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents:
2861
diff
changeset
|
1093 except KeyError: |
b2e898384c25
quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents:
2861
diff
changeset
|
1094 pass |
b2e898384c25
quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents:
2861
diff
changeset
|
1095 else: |
b2e898384c25
quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents:
2861
diff
changeset
|
1096 for callback, __ in callbacks: |
b2e898384c25
quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents:
2861
diff
changeset
|
1097 if callback is not None: |
b2e898384c25
quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents:
2861
diff
changeset
|
1098 callback(metadata, profile=profile) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1099 self.callListeners("progressFinished", pid, metadata, profile=profile) |
1636 | 1100 |
1101 def progressErrorHandler(self, pid, err_msg, profile): | |
3028 | 1102 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
|
1103 try: |
b2e898384c25
quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents:
2861
diff
changeset
|
1104 callbacks = self._progress_ids.pop(pid) |
b2e898384c25
quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents:
2861
diff
changeset
|
1105 except KeyError: |
b2e898384c25
quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents:
2861
diff
changeset
|
1106 pass |
b2e898384c25
quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents:
2861
diff
changeset
|
1107 else: |
b2e898384c25
quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents:
2861
diff
changeset
|
1108 for __, errback in callbacks: |
b2e898384c25
quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents:
2861
diff
changeset
|
1109 if errback is not None: |
b2e898384c25
quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents:
2861
diff
changeset
|
1110 errback(err_msg, profile=profile) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1111 self.callListeners("progressError", pid, err_msg, profile=profile) |
1636 | 1112 |
182
556c2bd7c344
Primitivus now implement showDialog + new "newAlert" bridge method to show a dialog from core
Goffi <goffi@goffi.org>
parents:
165
diff
changeset
|
1113 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
|
1114 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
|
1115 type_ = "subscribed" if answer else "unsubscribed" |
3028 | 1116 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
|
1117 |
1103
a096b8579a3c
frontends: signals are managed in a more generic way
Goffi <goffi@goffi.org>
parents:
1093
diff
changeset
|
1118 def subscribeHandler(self, type, raw_jid, profile): |
87 | 1119 """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
|
1120 entity = jid.JID(raw_jid) |
906
1cbae66fa725
quick_app: better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
811
diff
changeset
|
1121 if type == "subscribed": |
51
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
28
diff
changeset
|
1122 # 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
|
1123 # TODO: call self.getEntityMBlog to add the new contact blogs |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1124 self.showDialog( |
3028 | 1125 _("The contact {contact} has accepted your subscription").format( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1126 contact=entity.bare |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1127 ), |
3028 | 1128 _("Subscription confirmation"), |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1129 ) |
906
1cbae66fa725
quick_app: better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
811
diff
changeset
|
1130 elif type == "unsubscribed": |
51
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
28
diff
changeset
|
1131 # this is a subscription refusal, we just have to inform user |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1132 self.showDialog( |
3028 | 1133 _("The contact {contact} has refused your subscription").format( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1134 contact=entity.bare |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1135 ), |
3028 | 1136 _("Subscription refusal"), |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1137 "error", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1138 ) |
906
1cbae66fa725
quick_app: better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
811
diff
changeset
|
1139 elif type == "subscribe": |
51
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
28
diff
changeset
|
1140 # 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
|
1141 # TODO: use sat.stdui.ui_contact_list to display the groups selector |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1142 self.showDialog( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1143 _( |
3028 | 1144 "The contact {contact} wants to subscribe to your presence" |
1145 ".\nDo you accept ?" | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1146 ).format(contact=entity.bare), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1147 _("Subscription confirmation"), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1148 "yes/no", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1149 answer_cb=self._subscribe_cb, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1150 answer_data=(entity, profile), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1151 ) |
0 | 1152 |
2854 | 1153 def _debugHandler(self, action, parameters, profile): |
3028 | 1154 if action == "widgets_dump": |
2854 | 1155 from pprint import pformat |
3028 | 1156 log.info("Widgets dump:\n{data}".format(data=pformat(self.widgets._widgets))) |
2854 | 1157 else: |
3028 | 1158 log.warning("Unknown debug action: {action}".format(action=action)) |
2854 | 1159 |
1160 | |
1325
49f967fc87aa
core, quick_frontends: fixes one typo and a variable naming issue
souliane <souliane@mailoo.org>
parents:
1323
diff
changeset
|
1161 def showDialog(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
|
1162 """Show a dialog to user |
fe9888d3fcb6
quick app: added missing docstring in showDialog
Goffi <goffi@goffi.org>
parents:
2590
diff
changeset
|
1163 |
fe9888d3fcb6
quick app: added missing docstring in showDialog
Goffi <goffi@goffi.org>
parents:
2590
diff
changeset
|
1164 Frontends must override this method |
fe9888d3fcb6
quick app: added missing docstring in showDialog
Goffi <goffi@goffi.org>
parents:
2590
diff
changeset
|
1165 @param message(unicode): body of the dialog |
fe9888d3fcb6
quick app: added missing docstring in showDialog
Goffi <goffi@goffi.org>
parents:
2590
diff
changeset
|
1166 @param title(unicode): title of the dialog |
fe9888d3fcb6
quick app: added missing docstring in showDialog
Goffi <goffi@goffi.org>
parents:
2590
diff
changeset
|
1167 @param type(unicode): one of: |
fe9888d3fcb6
quick app: added missing docstring in showDialog
Goffi <goffi@goffi.org>
parents:
2590
diff
changeset
|
1168 - "info": information dialog (callbacks not used) |
fe9888d3fcb6
quick app: added missing docstring in showDialog
Goffi <goffi@goffi.org>
parents:
2590
diff
changeset
|
1169 - "warning": important information to notice (callbacks not used) |
fe9888d3fcb6
quick app: added missing docstring in showDialog
Goffi <goffi@goffi.org>
parents:
2590
diff
changeset
|
1170 - "error": something went wrong (callbacks not used) |
fe9888d3fcb6
quick app: added missing docstring in showDialog
Goffi <goffi@goffi.org>
parents:
2590
diff
changeset
|
1171 - "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
|
1172 @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
|
1173 Arguments depend on dialog type: |
fe9888d3fcb6
quick app: added missing docstring in showDialog
Goffi <goffi@goffi.org>
parents:
2590
diff
changeset
|
1174 - "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
|
1175 @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
|
1176 """ |
fe9888d3fcb6
quick app: added missing docstring in showDialog
Goffi <goffi@goffi.org>
parents:
2590
diff
changeset
|
1177 # FIXME: misnamed method + types are not well chosen. Need to be rethought |
0 | 1178 raise NotImplementedError |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
585
diff
changeset
|
1179 |
0 | 1180 def showAlert(self, message): |
2618
fe9888d3fcb6
quick app: added missing docstring in showDialog
Goffi <goffi@goffi.org>
parents:
2590
diff
changeset
|
1181 # FIXME: doesn't seems used anymore, to remove? |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1182 pass # FIXME |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
585
diff
changeset
|
1183 |
1468
731fbed0b9cf
quick_frontend, primitivus: handling of actionNew signal
Goffi <goffi@goffi.org>
parents:
1461
diff
changeset
|
1184 def dialogFailure(self, failure): |
3028 | 1185 log.warning("Failure: {}".format(failure)) |
1468
731fbed0b9cf
quick_frontend, primitivus: handling of actionNew signal
Goffi <goffi@goffi.org>
parents:
1461
diff
changeset
|
1186 |
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
|
1187 def progressIdHandler(self, progress_id, profile): |
2071d5cec5d6
quick frontend: added progressIdHandler to managed progress id on action result + ignore meta_* action results
Goffi <goffi@goffi.org>
parents:
1599
diff
changeset
|
1188 """Callback used when an action result in a progress id""" |
3028 | 1189 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
|
1190 |
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
|
1191 def isHidden(self): |
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
|
1192 """Tells if the frontend window is hidden. |
1442
6ce18c4e5708
quick_frontend: display over whole alerts counter
souliane <souliane@mailoo.org>
parents:
1436
diff
changeset
|
1193 |
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
|
1194 @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
|
1195 """ |
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
|
1196 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
|
1197 |
1103
a096b8579a3c
frontends: signals are managed in a more generic way
Goffi <goffi@goffi.org>
parents:
1093
diff
changeset
|
1198 def paramUpdateHandler(self, name, value, namespace, profile): |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1199 log.debug( |
3028 | 1200 _("param update: [%(namespace)s] %(name)s = %(value)s") |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1201 % {"namespace": namespace, "name": name, "value": value} |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1202 ) |
906
1cbae66fa725
quick_app: better PEP-8 compliance
souliane <souliane@mailoo.org>
parents:
811
diff
changeset
|
1203 if (namespace, name) == ("Connection", "JabberID"): |
3028 | 1204 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
|
1205 self.profiles[profile].whoami = jid.JID(value) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1206 elif (namespace, name) == ("General", C.SHOW_OFFLINE_CONTACTS): |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
1207 self.contact_lists[profile].showOfflineContacts(C.bool(value)) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1208 elif (namespace, name) == ("General", C.SHOW_EMPTY_GROUPS): |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
1209 self.contact_lists[profile].showEmptyGroups(C.bool(value)) |
0 | 1210 |
1325
49f967fc87aa
core, quick_frontends: fixes one typo and a variable naming issue
souliane <souliane@mailoo.org>
parents:
1323
diff
changeset
|
1211 def contactDeletedHandler(self, jid_s, profile): |
49f967fc87aa
core, quick_frontends: fixes one typo and a variable naming issue
souliane <souliane@mailoo.org>
parents:
1323
diff
changeset
|
1212 target = 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
|
1213 self.contact_lists[profile].removeContact(target) |
51
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
28
diff
changeset
|
1214 |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
1215 def entityDataUpdatedHandler(self, entity_s, key, value, profile): |
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
1216 entity = jid.JID(entity_s) |
1386
1f3513cfb246
quick_frontend, primivitus: remove QuickChat.getUserNick + primivitus ChatText gets the user nick directly from parent Chat instance
souliane <souliane@mailoo.org>
parents:
1382
diff
changeset
|
1217 if key == "nick": # this is the roster nick, not the MUC nick |
1265
e3a9ea76de35
quick_frontend, primitivus: multi-profiles refactoring part 1 (big commit, sorry :p):
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
1218 if entity in self.contact_lists[profile]: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1219 self.contact_lists[profile].setCache(entity, "nick", value) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1220 self.callListeners("nick", entity, value, profile=profile) |
2123
c42aab22c2c0
plugin XEP-0054, quick frontend(app): various improvments:
Goffi <goffi@goffi.org>
parents:
2103
diff
changeset
|
1221 elif key == "avatar" and self.AVATARS_HANDLER: |
c42aab22c2c0
plugin XEP-0054, quick frontend(app): various improvments:
Goffi <goffi@goffi.org>
parents:
2103
diff
changeset
|
1222 if value and entity in self.contact_lists[profile]: |
c42aab22c2c0
plugin XEP-0054, quick frontend(app): various improvments:
Goffi <goffi@goffi.org>
parents:
2103
diff
changeset
|
1223 self.getAvatar(entity, ignore_cache=True, profile=profile) |
51
8c67ea98ab91
frontend improved to take into account new SàT features
Goffi <goffi@goffi.org>
parents:
28
diff
changeset
|
1224 |
2669
bdb8276fd2da
frontends (xmlui): class_map is now an arg of create function:
Goffi <goffi@goffi.org>
parents:
2664
diff
changeset
|
1225 def actionManager(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
|
1226 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
|
1227 """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
|
1228 |
2664
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2626
diff
changeset
|
1229 @param action_data(dict): action dict as sent by launchAction or returned by an |
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2626
diff
changeset
|
1230 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
|
1231 @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
|
1232 @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
|
1233 @param user_action(bool): if True, the action is a result of a user interaction |
2862
b2e898384c25
quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents:
2861
diff
changeset
|
1234 else the action come from backend direclty (i.e. actionNew). |
b2e898384c25
quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents:
2861
diff
changeset
|
1235 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
|
1236 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
|
1237 @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
|
1238 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
|
1239 @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
|
1240 during progression. |
b2e898384c25
quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents:
2861
diff
changeset
|
1241 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
|
1242 """ |
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
|
1243 try: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1244 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
|
1245 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
|
1246 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
|
1247 else: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1248 ui = self.xmlui.create( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1249 self, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1250 xml_data=xmlui, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1251 flags=("FROM_BACKEND",) if not user_action else None, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1252 callback=callback, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1253 profile=profile, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1254 ) |
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
|
1255 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
|
1256 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
|
1257 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
|
1258 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
|
1259 |
2071d5cec5d6
quick frontend: added progressIdHandler to managed progress id on action result + ignore meta_* action results
Goffi <goffi@goffi.org>
parents:
1599
diff
changeset
|
1260 try: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1261 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
|
1262 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
|
1263 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
|
1264 else: |
2862
b2e898384c25
quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents:
2861
diff
changeset
|
1265 if progress_cb or progress_eb: |
b2e898384c25
quick_frontend (app): progress callbacks handling:
Goffi <goffi@goffi.org>
parents:
2861
diff
changeset
|
1266 self.registerProgressCbs(progress_id, progress_cb, progress_eb) |
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
|
1267 self.progressIdHandler(progress_id, profile) |
2071d5cec5d6
quick frontend: added progressIdHandler to managed progress id on action result + ignore meta_* action results
Goffi <goffi@goffi.org>
parents:
1599
diff
changeset
|
1268 |
2071d5cec5d6
quick frontend: added progressIdHandler to managed progress id on action result + ignore meta_* action results
Goffi <goffi@goffi.org>
parents:
1599
diff
changeset
|
1269 # we ignore metadata |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1270 action_data = { |
3028 | 1271 k: v for k, v in action_data.items() if not k.startswith("meta_") |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1272 } |
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
|
1273 |
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
|
1274 if action_data: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1275 raise exceptions.DataError( |
3028 | 1276 "Not all keys in action_data are managed ({keys})".format( |
1277 keys=", ".join(list(action_data.keys())) | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1278 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1279 ) |
2126 | 1280 |
1281 def _actionCb(self, data, callback, callback_id, profile): | |
1282 if callback is None: | |
1283 self.actionManager(data, profile=profile) | |
1284 else: | |
1285 callback(data=data, cb_id=callback_id, profile=profile) | |
1286 | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1287 def launchAction( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1288 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
|
1289 ): |
2126 | 1290 """Launch a dynamic action |
1468
731fbed0b9cf
quick_frontend, primitivus: handling of actionNew signal
Goffi <goffi@goffi.org>
parents:
1461
diff
changeset
|
1291 |
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
|
1292 @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
|
1293 @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
|
1294 @param callback(callable, None): will be called with the resut |
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
|
1295 if None, self.actionManager will be called |
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
|
1296 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
|
1297 - 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
|
1298 - 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
|
1299 - profile: %(doc_profile)s |
1468
731fbed0b9cf
quick_frontend, primitivus: handling of actionNew signal
Goffi <goffi@goffi.org>
parents:
1461
diff
changeset
|
1300 @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
|
1301 |
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
|
1302 """ |
1468
731fbed0b9cf
quick_frontend, primitivus: handling of actionNew signal
Goffi <goffi@goffi.org>
parents:
1461
diff
changeset
|
1303 if data is None: |
731fbed0b9cf
quick_frontend, primitivus: handling of actionNew signal
Goffi <goffi@goffi.org>
parents:
1461
diff
changeset
|
1304 data = dict() |
2126 | 1305 action_cb = lambda data: self._actionCb(data, callback, callback_id, profile) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1306 self.bridge.launchAction( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1307 callback_id, data, profile, callback=action_cb, errback=self.dialogFailure |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1308 ) |
1468
731fbed0b9cf
quick_frontend, primitivus: handling of actionNew signal
Goffi <goffi@goffi.org>
parents:
1461
diff
changeset
|
1309 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1310 def launchMenu( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1311 self, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1312 menu_type, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1313 path, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1314 data=None, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1315 callback=None, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1316 security_limit=C.SECURITY_LIMIT_MAX, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1317 profile=C.PROF_KEY_NONE, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1318 ): |
2126 | 1319 """Launch a menu manually |
1580
641cfd2faefe
Primitivus: better popups handling:
Goffi <goffi@goffi.org>
parents:
1513
diff
changeset
|
1320 |
2126 | 1321 @param menu_type(unicode): type of the menu to launch |
1322 @param path(iterable[unicode]): path to the menu | |
1323 @param data: data needed only for certain actions | |
1324 @param callback(callable, None): will be called with the resut | |
1325 if None, self.actionManager will be called | |
1326 else the callable will be called with the following kw parameters: | |
1327 - data: action_data | |
1328 - cb_id: (menu_type, path) tuple | |
1329 - profile: %(doc_profile)s | |
1330 @param profile: %(doc_profile)s | |
1468
731fbed0b9cf
quick_frontend, primitivus: handling of actionNew signal
Goffi <goffi@goffi.org>
parents:
1461
diff
changeset
|
1331 |
2126 | 1332 """ |
1333 if data is None: | |
1334 data = dict() | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1335 action_cb = lambda data: self._actionCb( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1336 data, callback, (menu_type, path), profile |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1337 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1338 self.bridge.menuLaunch( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1339 menu_type, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1340 path, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1341 data, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1342 security_limit, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1343 profile, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1344 callback=action_cb, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1345 errback=self.dialogFailure, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1346 ) |
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
|
1347 |
2123
c42aab22c2c0
plugin XEP-0054, quick frontend(app): various improvments:
Goffi <goffi@goffi.org>
parents:
2103
diff
changeset
|
1348 def _avatarGetCb(self, avatar_path, entity, contact_list, profile): |
c42aab22c2c0
plugin XEP-0054, quick frontend(app): various improvments:
Goffi <goffi@goffi.org>
parents:
2103
diff
changeset
|
1349 path = avatar_path or self.getDefaultAvatar(entity) |
c42aab22c2c0
plugin XEP-0054, quick frontend(app): various improvments:
Goffi <goffi@goffi.org>
parents:
2103
diff
changeset
|
1350 contact_list.setCache(entity, "avatar", path) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1351 self.callListeners("avatar", entity, path, profile=profile) |
2123
c42aab22c2c0
plugin XEP-0054, quick frontend(app): various improvments:
Goffi <goffi@goffi.org>
parents:
2103
diff
changeset
|
1352 |
3017
e7cbe662838b
quick frontend (app): show an info log if avatar is not found instead of raising exception
Goffi <goffi@goffi.org>
parents:
3006
diff
changeset
|
1353 def _avatarGetEb(self, failure_, entity, contact_list): |
e7cbe662838b
quick frontend (app): show an info log if avatar is not found instead of raising exception
Goffi <goffi@goffi.org>
parents:
3006
diff
changeset
|
1354 # FIXME: bridge needs a proper error handling |
3028 | 1355 if "NotFound" in str(failure_): |
1356 log.info("No avatar found for {entity}".format(entity=entity)) | |
3017
e7cbe662838b
quick frontend (app): show an info log if avatar is not found instead of raising exception
Goffi <goffi@goffi.org>
parents:
3006
diff
changeset
|
1357 else: |
3028 | 1358 log.warning("Can't get avatar: {}".format(failure_)) |
2123
c42aab22c2c0
plugin XEP-0054, quick frontend(app): various improvments:
Goffi <goffi@goffi.org>
parents:
2103
diff
changeset
|
1359 contact_list.setCache(entity, "avatar", self.getDefaultAvatar(entity)) |
c42aab22c2c0
plugin XEP-0054, quick frontend(app): various improvments:
Goffi <goffi@goffi.org>
parents:
2103
diff
changeset
|
1360 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1361 def getAvatar( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1362 self, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1363 entity, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1364 cache_only=True, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1365 hash_only=False, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1366 ignore_cache=False, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1367 profile=C.PROF_KEY_NONE, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1368 ): |
2123
c42aab22c2c0
plugin XEP-0054, quick frontend(app): various improvments:
Goffi <goffi@goffi.org>
parents:
2103
diff
changeset
|
1369 """return avatar path for an entity |
c42aab22c2c0
plugin XEP-0054, quick frontend(app): various improvments:
Goffi <goffi@goffi.org>
parents:
2103
diff
changeset
|
1370 |
c42aab22c2c0
plugin XEP-0054, quick frontend(app): various improvments:
Goffi <goffi@goffi.org>
parents:
2103
diff
changeset
|
1371 @param entity(jid.JID): entity to get avatar from |
c42aab22c2c0
plugin XEP-0054, quick frontend(app): various improvments:
Goffi <goffi@goffi.org>
parents:
2103
diff
changeset
|
1372 @param cache_only(bool): if False avatar will be requested if not in cache |
c42aab22c2c0
plugin XEP-0054, quick frontend(app): various improvments:
Goffi <goffi@goffi.org>
parents:
2103
diff
changeset
|
1373 with current vCard based implementation, it's better to keep True |
c42aab22c2c0
plugin XEP-0054, quick frontend(app): various improvments:
Goffi <goffi@goffi.org>
parents:
2103
diff
changeset
|
1374 except if we request avatars for roster items |
c42aab22c2c0
plugin XEP-0054, quick frontend(app): various improvments:
Goffi <goffi@goffi.org>
parents:
2103
diff
changeset
|
1375 @param hash_only(bool): if True avatar hash is returned, else full path |
2664
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2626
diff
changeset
|
1376 @param ignore_cache(bool): if False, won't check local cache and will request |
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2626
diff
changeset
|
1377 backend in every case |
2123
c42aab22c2c0
plugin XEP-0054, quick frontend(app): various improvments:
Goffi <goffi@goffi.org>
parents:
2103
diff
changeset
|
1378 @return (unicode, None): avatar full path (None if no avatar found) |
c42aab22c2c0
plugin XEP-0054, quick frontend(app): various improvments:
Goffi <goffi@goffi.org>
parents:
2103
diff
changeset
|
1379 """ |
2067
7834743705f0
quich frontend, primivius (chat): better avatar handling:
Goffi <goffi@goffi.org>
parents:
2066
diff
changeset
|
1380 contact_list = self.contact_lists[profile] |
2123
c42aab22c2c0
plugin XEP-0054, quick frontend(app): various improvments:
Goffi <goffi@goffi.org>
parents:
2103
diff
changeset
|
1381 if ignore_cache: |
c42aab22c2c0
plugin XEP-0054, quick frontend(app): various improvments:
Goffi <goffi@goffi.org>
parents:
2103
diff
changeset
|
1382 avatar = None |
c42aab22c2c0
plugin XEP-0054, quick frontend(app): various improvments:
Goffi <goffi@goffi.org>
parents:
2103
diff
changeset
|
1383 else: |
2626
6ef2b4fa90a5
quick_frontend (QuickApp): fixed getCache handling after changes in QuickContactList
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
1384 try: |
6ef2b4fa90a5
quick_frontend (QuickApp): fixed getCache handling after changes in QuickContactList
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
1385 avatar = contact_list.getCache(entity, "avatar", bare_default=None) |
6ef2b4fa90a5
quick_frontend (QuickApp): fixed getCache handling after changes in QuickContactList
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
1386 except exceptions.NotFound: |
6ef2b4fa90a5
quick_frontend (QuickApp): fixed getCache handling after changes in QuickContactList
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
1387 avatar = None |
2067
7834743705f0
quich frontend, primivius (chat): better avatar handling:
Goffi <goffi@goffi.org>
parents:
2066
diff
changeset
|
1388 if avatar is None: |
2123
c42aab22c2c0
plugin XEP-0054, quick frontend(app): various improvments:
Goffi <goffi@goffi.org>
parents:
2103
diff
changeset
|
1389 self.bridge.avatarGet( |
3028 | 1390 str(entity), |
2123
c42aab22c2c0
plugin XEP-0054, quick frontend(app): various improvments:
Goffi <goffi@goffi.org>
parents:
2103
diff
changeset
|
1391 cache_only, |
c42aab22c2c0
plugin XEP-0054, quick frontend(app): various improvments:
Goffi <goffi@goffi.org>
parents:
2103
diff
changeset
|
1392 hash_only, |
c42aab22c2c0
plugin XEP-0054, quick frontend(app): various improvments:
Goffi <goffi@goffi.org>
parents:
2103
diff
changeset
|
1393 profile=profile, |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1394 callback=lambda path: self._avatarGetCb( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1395 path, entity, contact_list, profile |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1396 ), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1397 errback=lambda failure: self._avatarGetEb(failure, entity, contact_list), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1398 ) |
2664
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2626
diff
changeset
|
1399 # we set avatar to empty string to avoid requesting several time the same |
e35a265ec174
quick frontend (app, chat): encryption handling:
Goffi <goffi@goffi.org>
parents:
2626
diff
changeset
|
1400 # avatar while we are waiting for avatarGet result |
2067
7834743705f0
quich frontend, primivius (chat): better avatar handling:
Goffi <goffi@goffi.org>
parents:
2066
diff
changeset
|
1401 contact_list.setCache(entity, "avatar", "") |
7834743705f0
quich frontend, primivius (chat): better avatar handling:
Goffi <goffi@goffi.org>
parents:
2066
diff
changeset
|
1402 return avatar |
7834743705f0
quich frontend, primivius (chat): better avatar handling:
Goffi <goffi@goffi.org>
parents:
2066
diff
changeset
|
1403 |
2056
7bfa97e533ac
quick frontend(QuickApp): added getDefaultAvatar method:
Goffi <goffi@goffi.org>
parents:
2050
diff
changeset
|
1404 def getDefaultAvatar(self, entity=None): |
7bfa97e533ac
quick frontend(QuickApp): added getDefaultAvatar method:
Goffi <goffi@goffi.org>
parents:
2050
diff
changeset
|
1405 """return default avatar to use with given entity |
7bfa97e533ac
quick frontend(QuickApp): added getDefaultAvatar method:
Goffi <goffi@goffi.org>
parents:
2050
diff
changeset
|
1406 |
7bfa97e533ac
quick frontend(QuickApp): added getDefaultAvatar method:
Goffi <goffi@goffi.org>
parents:
2050
diff
changeset
|
1407 must be implemented by frontend |
7bfa97e533ac
quick frontend(QuickApp): added getDefaultAvatar method:
Goffi <goffi@goffi.org>
parents:
2050
diff
changeset
|
1408 @param entity(jid.JID): entity for which a default avatar is needed |
7bfa97e533ac
quick frontend(QuickApp): added getDefaultAvatar method:
Goffi <goffi@goffi.org>
parents:
2050
diff
changeset
|
1409 """ |
7bfa97e533ac
quick frontend(QuickApp): added getDefaultAvatar method:
Goffi <goffi@goffi.org>
parents:
2050
diff
changeset
|
1410 raise NotImplementedError |
7bfa97e533ac
quick frontend(QuickApp): added getDefaultAvatar method:
Goffi <goffi@goffi.org>
parents:
2050
diff
changeset
|
1411 |
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
|
1412 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
|
1413 log.info("disconnecting") |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1414 self.callListeners("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
|
1415 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
|
1416 |
183
9ee4a1d0d7fb
Added auto(dis)connect params + misc
Goffi <goffi@goffi.org>
parents:
182
diff
changeset
|
1417 def onExit(self): |
9ee4a1d0d7fb
Added auto(dis)connect params + misc
Goffi <goffi@goffi.org>
parents:
182
diff
changeset
|
1418 """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
|
1419 to_unplug = [] |
3028 | 1420 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
|
1421 if profile_manager.connected and profile_manager.autodisconnect: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2618
diff
changeset
|
1422 # The user wants autodisconnection |
2091
f413bfc24458
bridge, quick_frontend: preparation for async bridge
Goffi <goffi@goffi.org>
parents:
2089
diff
changeset
|
1423 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
|
1424 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
|
1425 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
|
1426 self.unplug_profile(profile) |