annotate sat_frontends/quick_frontend/quick_app.py @ 2829:649cb3fd7711

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