Mercurial > libervia-web
annotate libervia.py @ 239:b911f2b43fd4
browser_side: added input history in the unibox:
This functionality uses a file from the sat project:
use the -I parameter of pyjsbuild to add sat library
to your PYJSPATH. To ease also possible to use your
sat source directory instead of the library, you just
need to trick pyjsbuild with a symbolic link:
SAT=~/workspace/sat
if [[ ! -e $SAT/sat ]]; then ln -sf $SAT/src $SAT/sat; fi
This will allow you to import like that in libervia.py:
from sat.tools.frontend.misc import InputHistory
And then you can build with:
$PYJS/bin/pyjsbuild libervia --no-compile-inplace -m -I $SAT
author | souliane <souliane@mailoo.org> |
---|---|
date | Mon, 14 Oct 2013 20:54:13 +0200 |
parents | b304cdf13a3b |
children | a25aa882e09a |
rev | line source |
---|---|
0 | 1 #!/usr/bin/python |
2 # -*- coding: utf-8 -*- | |
3 | |
4 """ | |
5 Libervia: a Salut à Toi frontend | |
165 | 6 Copyright (C) 2011, 2012, 2013 Jérôme Poisson <goffi@goffi.org> |
0 | 7 |
8 This program is free software: you can redistribute it and/or modify | |
9 it under the terms of the GNU Affero General Public License as published by | |
10 the Free Software Foundation, either version 3 of the License, or | |
11 (at your option) any later version. | |
12 | |
13 This program is distributed in the hope that it will be useful, | |
14 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
16 GNU Affero General Public License for more details. | |
17 | |
18 You should have received a copy of the GNU Affero General Public License | |
19 along with this program. If not, see <http://www.gnu.org/licenses/>. | |
20 """ | |
21 | |
226
744426c2b699
browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents:
223
diff
changeset
|
22 import pyjd # this is dummy in pyjs |
0 | 23 from pyjamas.ui.RootPanel import RootPanel |
21
77c2e48efa29
browser side: a warning message now show who will receive the message entered in UniBox, with a color depending on how many people will be able to see it
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
24 from pyjamas.ui.HTML import HTML |
43
a7ff1e6f1229
browser_side: prevent default for escape key (cancel HTTPRequest in FF)
Goffi <goffi@goffi.org>
parents:
41
diff
changeset
|
25 from pyjamas.ui.KeyboardListener import KEY_ESCAPE |
108
fad0e51cf565
on failure, Libervia now wait 5 s before trying again to call the serveur + only room name is now shown in tabs
Goffi <goffi@goffi.org>
parents:
107
diff
changeset
|
26 from pyjamas.Timer import Timer |
43
a7ff1e6f1229
browser_side: prevent default for escape key (cancel HTTPRequest in FF)
Goffi <goffi@goffi.org>
parents:
41
diff
changeset
|
27 from pyjamas import Window, DOM |
0 | 28 from pyjamas.JSONService import JSONProxy |
66
9d8e79ac4c9c
Login/Register box: integration of Adrien Vigneron's design
Goffi <goffi@goffi.org>
parents:
64
diff
changeset
|
29 from browser_side.register import RegisterBox |
17
c725b702e927
register.py and contact.py moved to new directory browser_side
Goffi <goffi@goffi.org>
parents:
16
diff
changeset
|
30 from browser_side.contact import ContactPanel |
195 | 31 from browser_side.base_widget import WidgetsPanel |
32 from browser_side.panels import MicroblogItem | |
54
f25c4077f6b9
addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents:
50
diff
changeset
|
33 from browser_side import panels, dialog |
19 | 34 from browser_side.jid import JID |
54
f25c4077f6b9
addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents:
50
diff
changeset
|
35 from browser_side.tools import html_sanitize |
239
b911f2b43fd4
browser_side: added input history in the unibox:
souliane <souliane@mailoo.org>
parents:
235
diff
changeset
|
36 from sat.tools.frontend.misc import InputHistory |
0 | 37 |
230
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
38 |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
39 MAX_MBLOG_CACHE = 500 # Max microblog entries kept in memories |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
40 |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
41 # Set to true to not create a new LiberviaWidget when a similar one |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
42 # already exist (i.e. a chat panel with the same target). Instead |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
43 # the existing widget will be eventually removed from its parent |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
44 # and added to new WidgetsPanel, or replaced to the expected |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
45 # position if the previous and the new parent are the same. |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
46 REUSE_EXISTING_LIBERVIA_WIDGETS = True |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
47 |
58
4fa3d57f72f8
browser side: microblog entries caching
Goffi <goffi@goffi.org>
parents:
57
diff
changeset
|
48 |
0 | 49 class LiberviaJsonProxy(JSONProxy): |
50 def __init__(self, *args, **kwargs): | |
51 JSONProxy.__init__(self, *args, **kwargs) | |
226
744426c2b699
browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents:
223
diff
changeset
|
52 self.handler = self |
744426c2b699
browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents:
223
diff
changeset
|
53 self.cb = {} |
744426c2b699
browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents:
223
diff
changeset
|
54 self.eb = {} |
0 | 55 |
56 def call(self, method, cb, *args): | |
226
744426c2b699
browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents:
223
diff
changeset
|
57 _id = self.callMethod(method, args) |
11
331c093e4eb3
magicBox is now able to send global microblog
Goffi <goffi@goffi.org>
parents:
9
diff
changeset
|
58 if cb: |
203
5fdea93b2541
browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents:
202
diff
changeset
|
59 if isinstance(cb, tuple): |
5fdea93b2541
browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents:
202
diff
changeset
|
60 if len(cb) != 2: |
5fdea93b2541
browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents:
202
diff
changeset
|
61 print ("ERROR: tuple syntax for bridge.call is (callback, errback), aborting") |
5fdea93b2541
browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents:
202
diff
changeset
|
62 return |
5fdea93b2541
browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents:
202
diff
changeset
|
63 self.cb[_id] = cb[0] |
5fdea93b2541
browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents:
202
diff
changeset
|
64 self.eb[_id] = cb[1] |
5fdea93b2541
browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents:
202
diff
changeset
|
65 else: |
5fdea93b2541
browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents:
202
diff
changeset
|
66 self.cb[_id] = cb |
0 | 67 |
68 def onRemoteResponse(self, response, request_info): | |
203
5fdea93b2541
browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents:
202
diff
changeset
|
69 if request_info.id in self.cb: |
132
30d8e328559b
server & browser side: microblogging refactoring first draft
Goffi <goffi@goffi.org>
parents:
131
diff
changeset
|
70 _cb = self.cb[request_info.id] |
203
5fdea93b2541
browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents:
202
diff
changeset
|
71 # if isinstance(_cb, tuple): |
5fdea93b2541
browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents:
202
diff
changeset
|
72 # #we have arguments attached to the callback |
5fdea93b2541
browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents:
202
diff
changeset
|
73 # #we send them after the answer |
5fdea93b2541
browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents:
202
diff
changeset
|
74 # callback, args = _cb |
5fdea93b2541
browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents:
202
diff
changeset
|
75 # callback(response, *args) |
5fdea93b2541
browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents:
202
diff
changeset
|
76 # else: |
5fdea93b2541
browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents:
202
diff
changeset
|
77 # #No additional argument, we call directly the callback |
5fdea93b2541
browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents:
202
diff
changeset
|
78 _cb(response) |
33 | 79 del self.cb[request_info.id] |
203
5fdea93b2541
browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents:
202
diff
changeset
|
80 if request_info.id in self.eb: |
5fdea93b2541
browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents:
202
diff
changeset
|
81 del self.eb[request_info.id] |
226
744426c2b699
browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents:
223
diff
changeset
|
82 |
0 | 83 def onRemoteError(self, code, errobj, request_info): |
62 | 84 """def dump(obj): |
85 print "\n\nDUMPING %s\n\n" % obj | |
86 for i in dir(obj): | |
87 print "%s: %s" % (i, getattr(obj,i))""" | |
203
5fdea93b2541
browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents:
202
diff
changeset
|
88 if request_info.id in self.eb: |
5fdea93b2541
browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents:
202
diff
changeset
|
89 _eb = self.eb[request_info.id] |
5fdea93b2541
browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents:
202
diff
changeset
|
90 _eb((code, errobj)) |
5fdea93b2541
browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents:
202
diff
changeset
|
91 del self.cb[request_info.id] |
5fdea93b2541
browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents:
202
diff
changeset
|
92 del self.eb[request_info.id] |
0 | 93 else: |
203
5fdea93b2541
browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents:
202
diff
changeset
|
94 if code != 0: |
5fdea93b2541
browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents:
202
diff
changeset
|
95 print ("Internal server error") |
5fdea93b2541
browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents:
202
diff
changeset
|
96 """for o in code, error, request_info: |
5fdea93b2541
browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents:
202
diff
changeset
|
97 dump(o)""" |
0 | 98 else: |
226
744426c2b699
browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents:
223
diff
changeset
|
99 if isinstance(errobj['message'], dict): |
239
b911f2b43fd4
browser_side: added input history in the unibox:
souliane <souliane@mailoo.org>
parents:
235
diff
changeset
|
100 print("Error %s: %s" % (errobj['message']['faultCode'], errobj['message']['faultString'])) |
203
5fdea93b2541
browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents:
202
diff
changeset
|
101 else: |
239
b911f2b43fd4
browser_side: added input history in the unibox:
souliane <souliane@mailoo.org>
parents:
235
diff
changeset
|
102 print("Error: %s" % errobj['message']) |
b911f2b43fd4
browser_side: added input history in the unibox:
souliane <souliane@mailoo.org>
parents:
235
diff
changeset
|
103 |
0 | 104 |
105 class RegisterCall(LiberviaJsonProxy): | |
106 def __init__(self): | |
107 LiberviaJsonProxy.__init__(self, "/register_api", | |
226
744426c2b699
browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents:
223
diff
changeset
|
108 ["isRegistered", "isConnected", "connect"]) |
0 | 109 |
239
b911f2b43fd4
browser_side: added input history in the unibox:
souliane <souliane@mailoo.org>
parents:
235
diff
changeset
|
110 |
2
669c531a857e
signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
1
diff
changeset
|
111 class BridgeCall(LiberviaJsonProxy): |
0 | 112 def __init__(self): |
113 LiberviaJsonProxy.__init__(self, "/json_api", | |
215
e830a0c60d32
server side: added the security_limit to setParam
souliane <souliane@mailoo.org>
parents:
213
diff
changeset
|
114 ["getContacts", "addContact", "sendMessage", "sendMblog", "sendMblogComment", |
e830a0c60d32
server side: added the security_limit to setParam
souliane <souliane@mailoo.org>
parents:
213
diff
changeset
|
115 "getLastMblogs", "getMassiveLastMblogs", "getMblogComments", "getProfileJid", |
e830a0c60d32
server side: added the security_limit to setParam
souliane <souliane@mailoo.org>
parents:
213
diff
changeset
|
116 "getHistory", "getPresenceStatus", "joinMUC", "mucLeave", "getRoomsJoined", |
e830a0c60d32
server side: added the security_limit to setParam
souliane <souliane@mailoo.org>
parents:
213
diff
changeset
|
117 "launchTarotGame", "getTarotCardsPaths", "tarotGameReady", |
e830a0c60d32
server side: added the security_limit to setParam
souliane <souliane@mailoo.org>
parents:
213
diff
changeset
|
118 "tarotGameContratChoosed", "tarotGamePlayCards", "launchRadioCollective", |
e830a0c60d32
server side: added the security_limit to setParam
souliane <souliane@mailoo.org>
parents:
213
diff
changeset
|
119 "getWaitingSub", "subscription", "delContact", "updateContact", "getCard", |
229
e632f77c4219
bridge: asyncGetParamA takes a security_limit argument
souliane <souliane@mailoo.org>
parents:
227
diff
changeset
|
120 "getEntityData", "getParamsUI", "asyncGetParamA", "setParam", "launchAction", |
e632f77c4219
bridge: asyncGetParamA takes a security_limit argument
souliane <souliane@mailoo.org>
parents:
227
diff
changeset
|
121 "disconnect", "chatStateComposing" |
148
8635bc9db9bf
added parameter management to test XMLUI, but it's currently deactivated for security reasons (need some configuration options) + separated mainTabPanel CSS from LiberviaTabPanel
Goffi <goffi@goffi.org>
parents:
146
diff
changeset
|
122 ]) |
0 | 123 |
2
669c531a857e
signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
1
diff
changeset
|
124 class BridgeSignals(LiberviaJsonProxy): |
157
b17ec3a6a112
browser side: in case of error, retry delay is doubled at each try
Goffi <goffi@goffi.org>
parents:
148
diff
changeset
|
125 RETRY_BASE_DELAY = 1000 |
b17ec3a6a112
browser side: in case of error, retry delay is doubled at each try
Goffi <goffi@goffi.org>
parents:
148
diff
changeset
|
126 |
99 | 127 def __init__(self, host): |
128 self.host = host | |
226
744426c2b699
browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents:
223
diff
changeset
|
129 self.retry_delay = self.RETRY_BASE_DELAY |
2
669c531a857e
signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
1
diff
changeset
|
130 LiberviaJsonProxy.__init__(self, "/json_signal_api", |
669c531a857e
signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
1
diff
changeset
|
131 ["getSignals"]) |
210
3092f6b1710c
browser side: make the OK button title for group selector configureable + few "cosmetic" changes (PEP 8...)
souliane <souliane@mailoo.org>
parents:
205
diff
changeset
|
132 |
157
b17ec3a6a112
browser side: in case of error, retry delay is doubled at each try
Goffi <goffi@goffi.org>
parents:
148
diff
changeset
|
133 def onRemoteResponse(self, response, request_info): |
226
744426c2b699
browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents:
223
diff
changeset
|
134 self.retry_delay = self.RETRY_BASE_DELAY |
157
b17ec3a6a112
browser side: in case of error, retry delay is doubled at each try
Goffi <goffi@goffi.org>
parents:
148
diff
changeset
|
135 LiberviaJsonProxy.onRemoteResponse(self, response, request_info) |
210
3092f6b1710c
browser side: make the OK button title for group selector configureable + few "cosmetic" changes (PEP 8...)
souliane <souliane@mailoo.org>
parents:
205
diff
changeset
|
136 |
3092f6b1710c
browser side: make the OK button title for group selector configureable + few "cosmetic" changes (PEP 8...)
souliane <souliane@mailoo.org>
parents:
205
diff
changeset
|
137 |
99 | 138 def onRemoteError(self, code, errobj, request_info): |
158
58442ed28f2b
browser side: basic disconnection management: hard reload is done on empty signal response
Goffi <goffi@goffi.org>
parents:
157
diff
changeset
|
139 if errobj['message'] == 'Empty Response': |
58442ed28f2b
browser side: basic disconnection management: hard reload is done on empty signal response
Goffi <goffi@goffi.org>
parents:
157
diff
changeset
|
140 Window.getLocation().reload() # XXX: reset page in case of session ended. |
58442ed28f2b
browser side: basic disconnection management: hard reload is done on empty signal response
Goffi <goffi@goffi.org>
parents:
157
diff
changeset
|
141 # FIXME: Should be done more properly without hard reload |
58442ed28f2b
browser side: basic disconnection management: hard reload is done on empty signal response
Goffi <goffi@goffi.org>
parents:
157
diff
changeset
|
142 LiberviaJsonProxy.onRemoteError(self, code, errobj, request_info) |
99 | 143 #we now try to reconnect |
107
c3fb3292f582
browser side: CSS: changed tabs margin + fixed dragover background for chat panels
Goffi <goffi@goffi.org>
parents:
99
diff
changeset
|
144 if isinstance(errobj['message'],dict) and errobj['message']['faultCode']==0: |
c3fb3292f582
browser side: CSS: changed tabs margin + fixed dragover background for chat panels
Goffi <goffi@goffi.org>
parents:
99
diff
changeset
|
145 Window.alert('You are not allowed to connect to server') |
108
fad0e51cf565
on failure, Libervia now wait 5 s before trying again to call the serveur + only room name is now shown in tabs
Goffi <goffi@goffi.org>
parents:
107
diff
changeset
|
146 else: |
fad0e51cf565
on failure, Libervia now wait 5 s before trying again to call the serveur + only room name is now shown in tabs
Goffi <goffi@goffi.org>
parents:
107
diff
changeset
|
147 def _timerCb(): |
fad0e51cf565
on failure, Libervia now wait 5 s before trying again to call the serveur + only room name is now shown in tabs
Goffi <goffi@goffi.org>
parents:
107
diff
changeset
|
148 self.host.bridge_signals.call('getSignals', self.host._getSignalsCB) |
157
b17ec3a6a112
browser side: in case of error, retry delay is doubled at each try
Goffi <goffi@goffi.org>
parents:
148
diff
changeset
|
149 Timer(notify=_timerCb).schedule(self.retry_delay) |
b17ec3a6a112
browser side: in case of error, retry delay is doubled at each try
Goffi <goffi@goffi.org>
parents:
148
diff
changeset
|
150 self.retry_delay *= 2 |
2
669c531a857e
signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
1
diff
changeset
|
151 |
239
b911f2b43fd4
browser_side: added input history in the unibox:
souliane <souliane@mailoo.org>
parents:
235
diff
changeset
|
152 |
b911f2b43fd4
browser_side: added input history in the unibox:
souliane <souliane@mailoo.org>
parents:
235
diff
changeset
|
153 class SatWebFrontend(InputHistory): |
0 | 154 def onModuleLoad(self): |
134
ee7b4aecdc67
browser: present microblogs panels are filled once logged
Goffi <goffi@goffi.org>
parents:
132
diff
changeset
|
155 print "============ onModuleLoad ==============" |
195 | 156 panels.ChatPanel.registerClass() |
157 panels.MicroblogPanel.registerClass() | |
19 | 158 self.whoami = None |
193
f2ae8e170c49
browser side: selected widget caching in UniBox, to avoid to ask the getter at each key pressed, which make the box very slow.
Goffi <goffi@goffi.org>
parents:
192
diff
changeset
|
159 self._selected_listeners = set() |
11
331c093e4eb3
magicBox is now able to send global microblog
Goffi <goffi@goffi.org>
parents:
9
diff
changeset
|
160 self.bridge = BridgeCall() |
99 | 161 self.bridge_signals = BridgeSignals(self) |
33 | 162 self.uni_box = None |
43
a7ff1e6f1229
browser_side: prevent default for escape key (cancel HTTPRequest in FF)
Goffi <goffi@goffi.org>
parents:
41
diff
changeset
|
163 self.status_panel = panels.StatusPanel(self) |
28 | 164 self.contact_panel = ContactPanel(self) |
43
a7ff1e6f1229
browser_side: prevent default for escape key (cancel HTTPRequest in FF)
Goffi <goffi@goffi.org>
parents:
41
diff
changeset
|
165 self.panel = panels.MainPanel(self) |
23 | 166 self.discuss_panel = self.panel.discuss_panel |
84 | 167 self.tab_panel = self.panel.tab_panel |
193
f2ae8e170c49
browser side: selected widget caching in UniBox, to avoid to ask the getter at each key pressed, which make the box very slow.
Goffi <goffi@goffi.org>
parents:
192
diff
changeset
|
168 self.tab_panel.addTabListener(self) |
84 | 169 self.libervia_widgets = set() #keep track of all actives LiberviaWidgets |
33 | 170 self.room_list = set() #set of rooms |
139 | 171 self.mblog_cache = [] #used to keep our own blog entries in memory, to show them in new mblog panel |
119 | 172 self.avatars_cache = {} #keep track of jid's avatar hash (key=jid, value=file) |
148
8635bc9db9bf
added parameter management to test XMLUI, but it's currently deactivated for security reasons (need some configuration options) + separated mainTabPanel CSS from LiberviaTabPanel
Goffi <goffi@goffi.org>
parents:
146
diff
changeset
|
173 self.current_action_ids = set() |
85
a8f027738c16
browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents:
84
diff
changeset
|
174 #self.discuss_panel.addWidget(panels.EmptyPanel(self)) |
134
ee7b4aecdc67
browser: present microblogs panels are filled once logged
Goffi <goffi@goffi.org>
parents:
132
diff
changeset
|
175 self.discuss_panel.addWidget(panels.MicroblogPanel(self, [])) |
85
a8f027738c16
browser side: widgets cells can now be added by putting a widget on a border
Goffi <goffi@goffi.org>
parents:
84
diff
changeset
|
176 #self.discuss_panel.addWidget(panels.EmptyPanel(self)) |
66
9d8e79ac4c9c
Login/Register box: integration of Adrien Vigneron's design
Goffi <goffi@goffi.org>
parents:
64
diff
changeset
|
177 self._register_box = None |
0 | 178 RootPanel().add(self.panel) |
43
a7ff1e6f1229
browser_side: prevent default for escape key (cancel HTTPRequest in FF)
Goffi <goffi@goffi.org>
parents:
41
diff
changeset
|
179 DOM.addEventPreview(self) |
33 | 180 self.resize() |
0 | 181 self._register = RegisterCall() |
226
744426c2b699
browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents:
223
diff
changeset
|
182 self._register.call('isRegistered', self._isRegisteredCB) |
205
ee744ffed7fc
browser side: events data are cached until initialisation is finished (we get all microblogs)
Goffi <goffi@goffi.org>
parents:
204
diff
changeset
|
183 self.initialised = False |
226
744426c2b699
browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents:
223
diff
changeset
|
184 self.init_cache = [] # used to cache events until initialisation is done |
193
f2ae8e170c49
browser side: selected widget caching in UniBox, to avoid to ask the getter at each key pressed, which make the box very slow.
Goffi <goffi@goffi.org>
parents:
192
diff
changeset
|
185 |
f2ae8e170c49
browser side: selected widget caching in UniBox, to avoid to ask the getter at each key pressed, which make the box very slow.
Goffi <goffi@goffi.org>
parents:
192
diff
changeset
|
186 def addSelectedListener(self, callback): |
f2ae8e170c49
browser side: selected widget caching in UniBox, to avoid to ask the getter at each key pressed, which make the box very slow.
Goffi <goffi@goffi.org>
parents:
192
diff
changeset
|
187 self._selected_listeners.add(callback) |
192
cf5c83e7d515
browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents:
179
diff
changeset
|
188 |
cf5c83e7d515
browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents:
179
diff
changeset
|
189 def getSelected(self): |
cf5c83e7d515
browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents:
179
diff
changeset
|
190 wid = self.tab_panel.getCurrentPanel() |
cf5c83e7d515
browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents:
179
diff
changeset
|
191 if not isinstance(wid, WidgetsPanel): |
cf5c83e7d515
browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents:
179
diff
changeset
|
192 print "ERROR: Tab widget is not a WidgetsPanel, can't get selected widget" |
cf5c83e7d515
browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents:
179
diff
changeset
|
193 return None |
cf5c83e7d515
browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents:
179
diff
changeset
|
194 return wid.selected |
cf5c83e7d515
browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents:
179
diff
changeset
|
195 |
cf5c83e7d515
browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents:
179
diff
changeset
|
196 def setSelected(self, widget): |
cf5c83e7d515
browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents:
179
diff
changeset
|
197 """Define the selected widget""" |
cf5c83e7d515
browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents:
179
diff
changeset
|
198 widgets_panel = self.tab_panel.getCurrentPanel() |
cf5c83e7d515
browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents:
179
diff
changeset
|
199 if not isinstance(widgets_panel, WidgetsPanel): |
cf5c83e7d515
browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents:
179
diff
changeset
|
200 return |
cf5c83e7d515
browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents:
179
diff
changeset
|
201 |
cf5c83e7d515
browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents:
179
diff
changeset
|
202 selected = widgets_panel.selected |
cf5c83e7d515
browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents:
179
diff
changeset
|
203 |
193
f2ae8e170c49
browser side: selected widget caching in UniBox, to avoid to ask the getter at each key pressed, which make the box very slow.
Goffi <goffi@goffi.org>
parents:
192
diff
changeset
|
204 if selected == widget: |
f2ae8e170c49
browser side: selected widget caching in UniBox, to avoid to ask the getter at each key pressed, which make the box very slow.
Goffi <goffi@goffi.org>
parents:
192
diff
changeset
|
205 return |
210
3092f6b1710c
browser side: make the OK button title for group selector configureable + few "cosmetic" changes (PEP 8...)
souliane <souliane@mailoo.org>
parents:
205
diff
changeset
|
206 |
192
cf5c83e7d515
browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents:
179
diff
changeset
|
207 if selected: |
cf5c83e7d515
browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents:
179
diff
changeset
|
208 selected.removeStyleName('selected_widget') |
226
744426c2b699
browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents:
223
diff
changeset
|
209 |
192
cf5c83e7d515
browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents:
179
diff
changeset
|
210 widgets_panel.selected = widget |
226
744426c2b699
browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents:
223
diff
changeset
|
211 |
192
cf5c83e7d515
browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents:
179
diff
changeset
|
212 if widget: |
cf5c83e7d515
browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents:
179
diff
changeset
|
213 widgets_panel.selected.addStyleName('selected_widget') |
cf5c83e7d515
browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents:
179
diff
changeset
|
214 |
193
f2ae8e170c49
browser side: selected widget caching in UniBox, to avoid to ask the getter at each key pressed, which make the box very slow.
Goffi <goffi@goffi.org>
parents:
192
diff
changeset
|
215 for callback in self._selected_listeners: |
f2ae8e170c49
browser side: selected widget caching in UniBox, to avoid to ask the getter at each key pressed, which make the box very slow.
Goffi <goffi@goffi.org>
parents:
192
diff
changeset
|
216 callback(widget) |
0 | 217 |
33 | 218 def resize(self): |
219 """Resize elements""" | |
220 Window.onResize() | |
221 | |
193
f2ae8e170c49
browser side: selected widget caching in UniBox, to avoid to ask the getter at each key pressed, which make the box very slow.
Goffi <goffi@goffi.org>
parents:
192
diff
changeset
|
222 def onBeforeTabSelected(self, sender, tab_index): |
f2ae8e170c49
browser side: selected widget caching in UniBox, to avoid to ask the getter at each key pressed, which make the box very slow.
Goffi <goffi@goffi.org>
parents:
192
diff
changeset
|
223 return True |
f2ae8e170c49
browser side: selected widget caching in UniBox, to avoid to ask the getter at each key pressed, which make the box very slow.
Goffi <goffi@goffi.org>
parents:
192
diff
changeset
|
224 |
f2ae8e170c49
browser side: selected widget caching in UniBox, to avoid to ask the getter at each key pressed, which make the box very slow.
Goffi <goffi@goffi.org>
parents:
192
diff
changeset
|
225 def onTabSelected(self, sender, tab_index): |
f2ae8e170c49
browser side: selected widget caching in UniBox, to avoid to ask the getter at each key pressed, which make the box very slow.
Goffi <goffi@goffi.org>
parents:
192
diff
changeset
|
226 selected = self.getSelected() |
f2ae8e170c49
browser side: selected widget caching in UniBox, to avoid to ask the getter at each key pressed, which make the box very slow.
Goffi <goffi@goffi.org>
parents:
192
diff
changeset
|
227 for callback in self._selected_listeners: |
f2ae8e170c49
browser side: selected widget caching in UniBox, to avoid to ask the getter at each key pressed, which make the box very slow.
Goffi <goffi@goffi.org>
parents:
192
diff
changeset
|
228 callback(selected) |
f2ae8e170c49
browser side: selected widget caching in UniBox, to avoid to ask the getter at each key pressed, which make the box very slow.
Goffi <goffi@goffi.org>
parents:
192
diff
changeset
|
229 |
43
a7ff1e6f1229
browser_side: prevent default for escape key (cancel HTTPRequest in FF)
Goffi <goffi@goffi.org>
parents:
41
diff
changeset
|
230 def onEventPreview(self, event): |
a7ff1e6f1229
browser_side: prevent default for escape key (cancel HTTPRequest in FF)
Goffi <goffi@goffi.org>
parents:
41
diff
changeset
|
231 if event.type in ["keydown", "keypress", "keyup"] and event.keyCode == KEY_ESCAPE: |
a7ff1e6f1229
browser_side: prevent default for escape key (cancel HTTPRequest in FF)
Goffi <goffi@goffi.org>
parents:
41
diff
changeset
|
232 #needed to prevent request cancellation in Firefox |
a7ff1e6f1229
browser_side: prevent default for escape key (cancel HTTPRequest in FF)
Goffi <goffi@goffi.org>
parents:
41
diff
changeset
|
233 event.preventDefault() |
a7ff1e6f1229
browser_side: prevent default for escape key (cancel HTTPRequest in FF)
Goffi <goffi@goffi.org>
parents:
41
diff
changeset
|
234 return True |
a7ff1e6f1229
browser_side: prevent default for escape key (cancel HTTPRequest in FF)
Goffi <goffi@goffi.org>
parents:
41
diff
changeset
|
235 |
119 | 236 def getAvatar(self, jid_str): |
237 """Return avatar of a jid if in cache, else ask for it""" | |
137 | 238 def dataReceived(result): |
202
2bc6cf004e61
browser, server: comments handling:
Goffi <goffi@goffi.org>
parents:
200
diff
changeset
|
239 if 'avatar' in result: |
137 | 240 self._entityDataUpdatedCb(jid_str, 'avatar', result['avatar']) |
204
890776a6fdb7
browser + server: vcard is requested when no avatar data is found in cache
Goffi <goffi@goffi.org>
parents:
203
diff
changeset
|
241 else: |
890776a6fdb7
browser + server: vcard is requested when no avatar data is found in cache
Goffi <goffi@goffi.org>
parents:
203
diff
changeset
|
242 self.bridge.call("getCard", None, jid_str) |
890776a6fdb7
browser + server: vcard is requested when no avatar data is found in cache
Goffi <goffi@goffi.org>
parents:
203
diff
changeset
|
243 def avatarError(error_data): |
890776a6fdb7
browser + server: vcard is requested when no avatar data is found in cache
Goffi <goffi@goffi.org>
parents:
203
diff
changeset
|
244 # The jid is maybe not in our roster, we ask for the VCard |
890776a6fdb7
browser + server: vcard is requested when no avatar data is found in cache
Goffi <goffi@goffi.org>
parents:
203
diff
changeset
|
245 self.bridge.call("getCard", None, jid_str) |
226
744426c2b699
browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents:
223
diff
changeset
|
246 |
119 | 247 if jid_str not in self.avatars_cache: |
204
890776a6fdb7
browser + server: vcard is requested when no avatar data is found in cache
Goffi <goffi@goffi.org>
parents:
203
diff
changeset
|
248 self.bridge.call('getEntityData', (dataReceived, avatarError), jid_str, ['avatar']) |
119 | 249 self.avatars_cache[jid_str] = "/media/misc/empty_avatar" |
250 return self.avatars_cache[jid_str] | |
251 | |
84 | 252 def registerWidget(self, wid): |
230
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
253 print "Registering", wid.getDebugName() |
84 | 254 self.libervia_widgets.add(wid) |
255 | |
256 def unregisterWidget(self, wid): | |
257 try: | |
258 self.libervia_widgets.remove(wid) | |
259 except KeyError: | |
230
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
260 print ('WARNING: trying to remove a non registered Widget:', wid.getDebugName()) |
210
3092f6b1710c
browser side: make the OK button title for group selector configureable + few "cosmetic" changes (PEP 8...)
souliane <souliane@mailoo.org>
parents:
205
diff
changeset
|
261 |
33 | 262 def setUniBox(self, unibox): |
263 """register the unibox widget""" | |
264 self.uni_box = unibox | |
265 self.uni_box.addKey("@@: ") | |
266 | |
116
aff34642616b
browser side: widgets are now added in a widgetsPanel when a tab is created
Goffi <goffi@goffi.org>
parents:
110
diff
changeset
|
267 def addTab(self, wid, label): |
aff34642616b
browser side: widgets are now added in a widgetsPanel when a tab is created
Goffi <goffi@goffi.org>
parents:
110
diff
changeset
|
268 """Create a new tab and add a widget in |
aff34642616b
browser side: widgets are now added in a widgetsPanel when a tab is created
Goffi <goffi@goffi.org>
parents:
110
diff
changeset
|
269 @param wid: LiberviaWidget to add |
33 | 270 @param label: label of the tab""" |
116
aff34642616b
browser side: widgets are now added in a widgetsPanel when a tab is created
Goffi <goffi@goffi.org>
parents:
110
diff
changeset
|
271 _widgets_panel = WidgetsPanel(self) |
aff34642616b
browser side: widgets are now added in a widgetsPanel when a tab is created
Goffi <goffi@goffi.org>
parents:
110
diff
changeset
|
272 _widgets_panel.addWidget(wid) |
aff34642616b
browser side: widgets are now added in a widgetsPanel when a tab is created
Goffi <goffi@goffi.org>
parents:
110
diff
changeset
|
273 self.tab_panel.add(_widgets_panel, label) |
194
6198be95a39c
browser side: new tab is automatically selected, if a tab is removed, the last one is automatically selected
Goffi <goffi@goffi.org>
parents:
193
diff
changeset
|
274 self.tab_panel.selectTab(self.tab_panel.getWidgetCount() - 1) |
33 | 275 |
200
0f5c2f799913
browser side: clicking on the contacts list (contact item, group or the "contacts" main title) open a discussion or microblog
Goffi <goffi@goffi.org>
parents:
195
diff
changeset
|
276 def addWidget(self, wid): |
0f5c2f799913
browser side: clicking on the contacts list (contact item, group or the "contacts" main title) open a discussion or microblog
Goffi <goffi@goffi.org>
parents:
195
diff
changeset
|
277 """ Add a widget at the bottom of the current tab |
0f5c2f799913
browser side: clicking on the contacts list (contact item, group or the "contacts" main title) open a discussion or microblog
Goffi <goffi@goffi.org>
parents:
195
diff
changeset
|
278 @param wid: LiberviaWidget to add """ |
0f5c2f799913
browser side: clicking on the contacts list (contact item, group or the "contacts" main title) open a discussion or microblog
Goffi <goffi@goffi.org>
parents:
195
diff
changeset
|
279 panel = self.tab_panel.getCurrentPanel() |
0f5c2f799913
browser side: clicking on the contacts list (contact item, group or the "contacts" main title) open a discussion or microblog
Goffi <goffi@goffi.org>
parents:
195
diff
changeset
|
280 panel.addWidget(wid) |
0f5c2f799913
browser side: clicking on the contacts list (contact item, group or the "contacts" main title) open a discussion or microblog
Goffi <goffi@goffi.org>
parents:
195
diff
changeset
|
281 |
1 | 282 def _isRegisteredCB(self, registered): |
0 | 283 if not registered: |
66
9d8e79ac4c9c
Login/Register box: integration of Adrien Vigneron's design
Goffi <goffi@goffi.org>
parents:
64
diff
changeset
|
284 self._register_box = RegisterBox(self.logged) |
9d8e79ac4c9c
Login/Register box: integration of Adrien Vigneron's design
Goffi <goffi@goffi.org>
parents:
64
diff
changeset
|
285 self._register_box.centerBox() |
9d8e79ac4c9c
Login/Register box: integration of Adrien Vigneron's design
Goffi <goffi@goffi.org>
parents:
64
diff
changeset
|
286 self._register_box.show() |
0 | 287 else: |
1 | 288 self._register.call('isConnected', self._isConnectedCB) |
0 | 289 |
1 | 290 def _isConnectedCB(self, connected): |
0 | 291 if not connected: |
226
744426c2b699
browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents:
223
diff
changeset
|
292 self._register.call('connect', lambda x:self.logged()) |
0 | 293 else: |
294 self.logged() | |
295 | |
296 def logged(self): | |
66
9d8e79ac4c9c
Login/Register box: integration of Adrien Vigneron's design
Goffi <goffi@goffi.org>
parents:
64
diff
changeset
|
297 if self._register_box: |
9d8e79ac4c9c
Login/Register box: integration of Adrien Vigneron's design
Goffi <goffi@goffi.org>
parents:
64
diff
changeset
|
298 self._register_box.hide() |
226
744426c2b699
browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents:
223
diff
changeset
|
299 del self._register_box # don't work if self._register_box is None |
210
3092f6b1710c
browser side: make the OK button title for group selector configureable + few "cosmetic" changes (PEP 8...)
souliane <souliane@mailoo.org>
parents:
205
diff
changeset
|
300 |
1 | 301 #it's time to fill the page |
11
331c093e4eb3
magicBox is now able to send global microblog
Goffi <goffi@goffi.org>
parents:
9
diff
changeset
|
302 self.bridge.call('getContacts', self._getContactsCB) |
218
4e6467efd6bf
browser_side: small improvements for parameters panel
souliane <souliane@mailoo.org>
parents:
215
diff
changeset
|
303 self.bridge.call('getParamsUI', self._getParamsUICB) |
11
331c093e4eb3
magicBox is now able to send global microblog
Goffi <goffi@goffi.org>
parents:
9
diff
changeset
|
304 self.bridge_signals.call('getSignals', self._getSignalsCB) |
19 | 305 #We want to know our own jid |
306 self.bridge.call('getProfileJid', self._getProfileJidCB) | |
2
669c531a857e
signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
1
diff
changeset
|
307 |
1 | 308 def _getContactsCB(self, contacts_data): |
309 for contact in contacts_data: | |
310 jid, attributes, groups = contact | |
55
d5266c41ca24
Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents:
54
diff
changeset
|
311 self._newContactCb(jid, attributes, groups) |
0 | 312 |
2
669c531a857e
signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents:
1
diff
changeset
|
313 def _getSignalsCB(self, signal_data): |
99 | 314 self.bridge_signals.call('getSignals', self._getSignalsCB) |
226
744426c2b699
browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents:
223
diff
changeset
|
315 print('Got signal ==> name: %s, params: %s' % (signal_data[0], signal_data[1])) |
744426c2b699
browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents:
223
diff
changeset
|
316 name, args = signal_data |
4
7325e787c22b
personalEvent management signal first draft, microblogs are now put in a central grid
Goffi <goffi@goffi.org>
parents:
2
diff
changeset
|
317 if name == 'personalEvent': |
7325e787c22b
personalEvent management signal first draft, microblogs are now put in a central grid
Goffi <goffi@goffi.org>
parents:
2
diff
changeset
|
318 self._personalEventCb(*args) |
19 | 319 elif name == 'newMessage': |
320 self._newMessageCb(*args) | |
20 | 321 elif name == 'presenceUpdate': |
322 self._presenceUpdateCb(*args) | |
28 | 323 elif name == 'roomJoined': |
324 self._roomJoinedCb(*args) | |
33 | 325 elif name == 'roomUserJoined': |
326 self._roomUserJoinedCb(*args) | |
327 elif name == 'roomUserLeft': | |
328 self._roomUserLeftCb(*args) | |
36 | 329 elif name == 'tarotGameStarted': |
330 self._tarotGameStartedCb(*args) | |
37
b306aa090438
Tarot game: game launching (first hand showed), and contract selection
Goffi <goffi@goffi.org>
parents:
36
diff
changeset
|
331 elif name == 'tarotGameNew' or \ |
38
7bea2ae0c4fb
Tarot game: center_panel layout + chien can now be showed + fixed click event inheritance + card selection first draft
Goffi <goffi@goffi.org>
parents:
37
diff
changeset
|
332 name == 'tarotGameChooseContrat' or \ |
39
305e81c7a32c
Tarot game: a game can now be finished
Goffi <goffi@goffi.org>
parents:
38
diff
changeset
|
333 name == 'tarotGameShowCards' or \ |
305e81c7a32c
Tarot game: a game can now be finished
Goffi <goffi@goffi.org>
parents:
38
diff
changeset
|
334 name == 'tarotGameInvalidCards' or \ |
305e81c7a32c
Tarot game: a game can now be finished
Goffi <goffi@goffi.org>
parents:
38
diff
changeset
|
335 name == 'tarotGameCardsPlayed' or \ |
41
7782a786b2f0
Tarot game: score is now shown (need to use XMLUI later)
Goffi <goffi@goffi.org>
parents:
39
diff
changeset
|
336 name == 'tarotGameYourTurn' or \ |
7782a786b2f0
Tarot game: score is now shown (need to use XMLUI later)
Goffi <goffi@goffi.org>
parents:
39
diff
changeset
|
337 name == 'tarotGameScore': |
37
b306aa090438
Tarot game: game launching (first hand showed), and contract selection
Goffi <goffi@goffi.org>
parents:
36
diff
changeset
|
338 self._tarotGameGenericCb(name, args[0], args[1:]) |
127 | 339 elif name == 'radiocolStarted': |
340 self._radioColStartedCb(*args) | |
128 | 341 elif name == 'radiocolPreload': |
342 self._radioColGenericCb(name, args[0], args[1:]) | |
130 | 343 elif name == 'radiocolPlay': |
344 self._radioColGenericCb(name, args[0], args[1:]) | |
345 elif name == 'radiocolNoUpload': | |
346 self._radioColGenericCb(name, args[0], args[1:]) | |
347 elif name == 'radiocolUploadOk': | |
348 self._radioColGenericCb(name, args[0], args[1:]) | |
349 elif name == 'radiocolSongRejected': | |
350 self._radioColGenericCb(name, args[0], args[1:]) | |
54
f25c4077f6b9
addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents:
50
diff
changeset
|
351 elif name == 'subscribe': |
f25c4077f6b9
addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents:
50
diff
changeset
|
352 self._subscribeCb(*args) |
55
d5266c41ca24
Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents:
54
diff
changeset
|
353 elif name == 'contactDeleted': |
d5266c41ca24
Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents:
54
diff
changeset
|
354 self._contactDeletedCb(*args) |
d5266c41ca24
Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents:
54
diff
changeset
|
355 elif name == 'newContact': |
d5266c41ca24
Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents:
54
diff
changeset
|
356 self._newContactCb(*args) |
137 | 357 elif name == 'entityDataUpdated': |
358 self._entityDataUpdatedCb(*args) | |
213
8bbac49765d6
browser side: display the day change in chat window
souliane <souliane@mailoo.org>
parents:
210
diff
changeset
|
359 elif name == 'chatStateReceived': |
8bbac49765d6
browser side: display the day change in chat window
souliane <souliane@mailoo.org>
parents:
210
diff
changeset
|
360 self._chatStateReceivedCb(*args) |
19 | 361 |
218
4e6467efd6bf
browser_side: small improvements for parameters panel
souliane <souliane@mailoo.org>
parents:
215
diff
changeset
|
362 def _getParamsUICB(self, xmlui): |
4e6467efd6bf
browser_side: small improvements for parameters panel
souliane <souliane@mailoo.org>
parents:
215
diff
changeset
|
363 """Hide the parameters item if there's nothing to display""" |
4e6467efd6bf
browser_side: small improvements for parameters panel
souliane <souliane@mailoo.org>
parents:
215
diff
changeset
|
364 if not xmlui: |
4e6467efd6bf
browser_side: small improvements for parameters panel
souliane <souliane@mailoo.org>
parents:
215
diff
changeset
|
365 self.panel.menu.removeItemParams() |
4e6467efd6bf
browser_side: small improvements for parameters panel
souliane <souliane@mailoo.org>
parents:
215
diff
changeset
|
366 |
139 | 367 def _ownBlogsFills(self, mblogs): |
368 #put our own microblogs in cache, then fill all panels with them | |
369 for publisher in mblogs: | |
370 for mblog in mblogs[publisher]: | |
371 if not mblog.has_key('content'): | |
372 print ("WARNING: No content found in microblog [%s]", mblog) | |
373 continue | |
374 if mblog.has_key('groups'): | |
375 _groups = set(mblog['groups'].split() if mblog['groups'] else []) | |
376 else: | |
226
744426c2b699
browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents:
223
diff
changeset
|
377 _groups = None |
139 | 378 mblog_entry = MicroblogItem(mblog) |
379 self.mblog_cache.append((_groups, mblog_entry)) | |
215
e830a0c60d32
server side: added the security_limit to setParam
souliane <souliane@mailoo.org>
parents:
213
diff
changeset
|
380 |
139 | 381 if len(self.mblog_cache) > MAX_MBLOG_CACHE: |
226
744426c2b699
browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents:
223
diff
changeset
|
382 del self.mblog_cache[0:len(self.mblog_cache - MAX_MBLOG_CACHE)] |
139 | 383 for lib_wid in self.libervia_widgets: |
384 if isinstance(lib_wid, panels.MicroblogPanel): | |
385 self.FillMicroblogPanel(lib_wid) | |
205
ee744ffed7fc
browser side: events data are cached until initialisation is finished (we get all microblogs)
Goffi <goffi@goffi.org>
parents:
204
diff
changeset
|
386 self.initialised = True # initialisation phase is finished here |
ee744ffed7fc
browser side: events data are cached until initialisation is finished (we get all microblogs)
Goffi <goffi@goffi.org>
parents:
204
diff
changeset
|
387 for event_data in self.init_cache: # so we have to send all the cached events |
ee744ffed7fc
browser side: events data are cached until initialisation is finished (we get all microblogs)
Goffi <goffi@goffi.org>
parents:
204
diff
changeset
|
388 self._personalEventCb(*event_data) |
ee744ffed7fc
browser side: events data are cached until initialisation is finished (we get all microblogs)
Goffi <goffi@goffi.org>
parents:
204
diff
changeset
|
389 del self.init_cache |
139 | 390 |
19 | 391 def _getProfileJidCB(self, jid): |
392 self.whoami = JID(jid) | |
20 | 393 #we can now ask our status |
54
f25c4077f6b9
addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents:
50
diff
changeset
|
394 self.bridge.call('getPresenceStatus', self._getPresenceStatusCb) |
f25c4077f6b9
addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents:
50
diff
changeset
|
395 #the rooms where we are |
122
397a88b340f3
browser: fixed call to getRoomsJoined
Goffi <goffi@goffi.org>
parents:
119
diff
changeset
|
396 self.bridge.call('getRoomsJoined', self._getRoomsJoinedCb) |
54
f25c4077f6b9
addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents:
50
diff
changeset
|
397 #and if there is any subscription request waiting for us |
f25c4077f6b9
addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents:
50
diff
changeset
|
398 self.bridge.call('getWaitingSub', self._getWaitingSubCb) |
138
008fa8d36602
browser side: our own microblogs are now requested once logged
Goffi <goffi@goffi.org>
parents:
137
diff
changeset
|
399 #we fill the panels already here |
008fa8d36602
browser side: our own microblogs are now requested once logged
Goffi <goffi@goffi.org>
parents:
137
diff
changeset
|
400 for lib_wid in self.libervia_widgets: |
008fa8d36602
browser side: our own microblogs are now requested once logged
Goffi <goffi@goffi.org>
parents:
137
diff
changeset
|
401 if isinstance(lib_wid, panels.MicroblogPanel): |
008fa8d36602
browser side: our own microblogs are now requested once logged
Goffi <goffi@goffi.org>
parents:
137
diff
changeset
|
402 if lib_wid.accept_all(): |
008fa8d36602
browser side: our own microblogs are now requested once logged
Goffi <goffi@goffi.org>
parents:
137
diff
changeset
|
403 self.bridge.call('getMassiveLastMblogs', lib_wid.massiveInsert, 'ALL', [], 10) |
008fa8d36602
browser side: our own microblogs are now requested once logged
Goffi <goffi@goffi.org>
parents:
137
diff
changeset
|
404 else: |
008fa8d36602
browser side: our own microblogs are now requested once logged
Goffi <goffi@goffi.org>
parents:
137
diff
changeset
|
405 self.bridge.call('getMassiveLastMblogs', lib_wid.massiveInsert, 'GROUP', lib_wid.accepted_groups, 10) |
229
e632f77c4219
bridge: asyncGetParamA takes a security_limit argument
souliane <souliane@mailoo.org>
parents:
227
diff
changeset
|
406 |
139 | 407 #we ask for our own microblogs: |
408 self.bridge.call('getMassiveLastMblogs', self._ownBlogsFills, 'JID', [self.whoami.bare], 10) | |
20 | 409 |
4
7325e787c22b
personalEvent management signal first draft, microblogs are now put in a central grid
Goffi <goffi@goffi.org>
parents:
2
diff
changeset
|
410 ## Signals callbacks ## |
7325e787c22b
personalEvent management signal first draft, microblogs are now put in a central grid
Goffi <goffi@goffi.org>
parents:
2
diff
changeset
|
411 |
58
4fa3d57f72f8
browser side: microblog entries caching
Goffi <goffi@goffi.org>
parents:
57
diff
changeset
|
412 def _personalEventCb(self, sender, event_type, data): |
205
ee744ffed7fc
browser side: events data are cached until initialisation is finished (we get all microblogs)
Goffi <goffi@goffi.org>
parents:
204
diff
changeset
|
413 if not self.initialised: |
ee744ffed7fc
browser side: events data are cached until initialisation is finished (we get all microblogs)
Goffi <goffi@goffi.org>
parents:
204
diff
changeset
|
414 self.init_cache.append((sender, event_type, data)) |
ee744ffed7fc
browser side: events data are cached until initialisation is finished (we get all microblogs)
Goffi <goffi@goffi.org>
parents:
204
diff
changeset
|
415 return |
4
7325e787c22b
personalEvent management signal first draft, microblogs are now put in a central grid
Goffi <goffi@goffi.org>
parents:
2
diff
changeset
|
416 if event_type == "MICROBLOG": |
202
2bc6cf004e61
browser, server: comments handling:
Goffi <goffi@goffi.org>
parents:
200
diff
changeset
|
417 if not 'content' in data: |
4
7325e787c22b
personalEvent management signal first draft, microblogs are now put in a central grid
Goffi <goffi@goffi.org>
parents:
2
diff
changeset
|
418 print ("WARNING: No content found in microblog data") |
7325e787c22b
personalEvent management signal first draft, microblogs are now put in a central grid
Goffi <goffi@goffi.org>
parents:
2
diff
changeset
|
419 return |
202
2bc6cf004e61
browser, server: comments handling:
Goffi <goffi@goffi.org>
parents:
200
diff
changeset
|
420 if 'groups' in data: |
16
099c05a0dcab
browser side: microblog panel improvments
Goffi <goffi@goffi.org>
parents:
14
diff
changeset
|
421 _groups = set(data['groups'].split() if data['groups'] else []) |
099c05a0dcab
browser side: microblog panel improvments
Goffi <goffi@goffi.org>
parents:
14
diff
changeset
|
422 else: |
226
744426c2b699
browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents:
223
diff
changeset
|
423 _groups = None |
132
30d8e328559b
server & browser side: microblogging refactoring first draft
Goffi <goffi@goffi.org>
parents:
131
diff
changeset
|
424 mblog_entry = MicroblogItem(data) |
226
744426c2b699
browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents:
223
diff
changeset
|
425 |
84 | 426 for lib_wid in self.libervia_widgets: |
427 if isinstance(lib_wid, panels.MicroblogPanel): | |
226
744426c2b699
browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents:
223
diff
changeset
|
428 self.addBlogEntry(lib_wid, sender, _groups, mblog_entry) |
58
4fa3d57f72f8
browser side: microblog entries caching
Goffi <goffi@goffi.org>
parents:
57
diff
changeset
|
429 |
139 | 430 if sender == self.whoami.bare: |
431 self.mblog_cache.append((_groups, mblog_entry)) | |
432 if len(self.mblog_cache) > MAX_MBLOG_CACHE: | |
226
744426c2b699
browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents:
223
diff
changeset
|
433 del self.mblog_cache[0:len(self.mblog_cache - MAX_MBLOG_CACHE)] |
58
4fa3d57f72f8
browser side: microblog entries caching
Goffi <goffi@goffi.org>
parents:
57
diff
changeset
|
434 |
4fa3d57f72f8
browser side: microblog entries caching
Goffi <goffi@goffi.org>
parents:
57
diff
changeset
|
435 def addBlogEntry(self, mblog_panel, sender, _groups, mblog_entry): |
4fa3d57f72f8
browser side: microblog entries caching
Goffi <goffi@goffi.org>
parents:
57
diff
changeset
|
436 """Check if an entry can go in MicroblogPanel and add to it |
4fa3d57f72f8
browser side: microblog entries caching
Goffi <goffi@goffi.org>
parents:
57
diff
changeset
|
437 @param mblog_panel: MicroblogPanel instance |
4fa3d57f72f8
browser side: microblog entries caching
Goffi <goffi@goffi.org>
parents:
57
diff
changeset
|
438 @param sender: jid of the entry sender |
4fa3d57f72f8
browser side: microblog entries caching
Goffi <goffi@goffi.org>
parents:
57
diff
changeset
|
439 @param _groups: groups which can receive this entry |
132
30d8e328559b
server & browser side: microblogging refactoring first draft
Goffi <goffi@goffi.org>
parents:
131
diff
changeset
|
440 @param mblog_entry: MicroblogItem instance""" |
202
2bc6cf004e61
browser, server: comments handling:
Goffi <goffi@goffi.org>
parents:
200
diff
changeset
|
441 if mblog_entry.type == "comment" or mblog_panel.isJidAccepted(sender) or (_groups == None and self.whoami and sender == self.whoami.bare) \ |
64
104e71ce2293
browser side: fixed microblog filtering
Goffi <goffi@goffi.org>
parents:
62
diff
changeset
|
442 or (_groups and _groups.intersection(mblog_panel.accepted_groups)): |
58
4fa3d57f72f8
browser side: microblog entries caching
Goffi <goffi@goffi.org>
parents:
57
diff
changeset
|
443 mblog_panel.addEntry(mblog_entry) |
4fa3d57f72f8
browser side: microblog entries caching
Goffi <goffi@goffi.org>
parents:
57
diff
changeset
|
444 |
139 | 445 def FillMicroblogPanel(self, mblog_panel): |
58
4fa3d57f72f8
browser side: microblog entries caching
Goffi <goffi@goffi.org>
parents:
57
diff
changeset
|
446 """Fill a microblog panel with entries in cache |
4fa3d57f72f8
browser side: microblog entries caching
Goffi <goffi@goffi.org>
parents:
57
diff
changeset
|
447 @param mblog_panel: MicroblogPanel instance |
4fa3d57f72f8
browser side: microblog entries caching
Goffi <goffi@goffi.org>
parents:
57
diff
changeset
|
448 """ |
139 | 449 #XXX: only our own entries are cached |
58
4fa3d57f72f8
browser side: microblog entries caching
Goffi <goffi@goffi.org>
parents:
57
diff
changeset
|
450 for cache_entry in self.mblog_cache: |
226
744426c2b699
browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents:
223
diff
changeset
|
451 _groups, mblog_entry = cache_entry |
139 | 452 self.addBlogEntry(mblog_panel, self.whoami.bare, *cache_entry) |
0 | 453 |
163
b887186e8fc8
browser side: get entity's microblogs for newly added contacts
Goffi <goffi@goffi.org>
parents:
158
diff
changeset
|
454 def getEntityMBlog(self, entity): |
b887186e8fc8
browser side: get entity's microblogs for newly added contacts
Goffi <goffi@goffi.org>
parents:
158
diff
changeset
|
455 print "geting mblog for entity [%s]" % (entity,) |
b887186e8fc8
browser side: get entity's microblogs for newly added contacts
Goffi <goffi@goffi.org>
parents:
158
diff
changeset
|
456 for lib_wid in self.libervia_widgets: |
b887186e8fc8
browser side: get entity's microblogs for newly added contacts
Goffi <goffi@goffi.org>
parents:
158
diff
changeset
|
457 if isinstance(lib_wid, panels.MicroblogPanel): |
b887186e8fc8
browser side: get entity's microblogs for newly added contacts
Goffi <goffi@goffi.org>
parents:
158
diff
changeset
|
458 if lib_wid.isJidAccepted(entity): |
b887186e8fc8
browser side: get entity's microblogs for newly added contacts
Goffi <goffi@goffi.org>
parents:
158
diff
changeset
|
459 self.bridge.call('getMassiveLastMblogs', lib_wid.massiveInsert, 'JID', [entity], 10) |
b887186e8fc8
browser side: get entity's microblogs for newly added contacts
Goffi <goffi@goffi.org>
parents:
158
diff
changeset
|
460 |
230
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
461 def getLiberviaWidget(self, class_, entity, ignoreOtherTabs=True): |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
462 """Get the corresponding panel if it exists. |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
463 @param class_: class of the panel (ChatPanel, MicroblogPanel...) |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
464 @param entity: polymorphic parameter, see class_.matchEntity. |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
465 @param ignoreOtherTabs: if True, the widgets that are not |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
466 contained by the currently selected tab will be ignored |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
467 @return: the existing widget that has been found or None.""" |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
468 selected_tab = self.tab_panel.getCurrentPanel() |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
469 for lib_wid in self.libervia_widgets: |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
470 parent = lib_wid.getWidgetsPanel(verbose=False) |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
471 if parent is None or (ignoreOtherTabs and parent != selected_tab): |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
472 # do not return a widget that is not in the currently selected tab |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
473 continue |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
474 if isinstance(lib_wid, class_): |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
475 try: |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
476 if lib_wid.matchEntity(entity): |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
477 print "existing widget found: %s" % lib_wid.getDebugName() |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
478 return lib_wid |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
479 except AttributeError as e: |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
480 e.stack_list() |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
481 return None |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
482 return None |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
483 |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
484 def getOrCreateLiberviaWidget(self, class_, entity, add=True, refresh=True, add=True): |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
485 """Get the matching LiberviaWidget if it exists, or create a new one. |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
486 @param class_: class of the panel (ChatPanel, MicroblogPanel...) |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
487 @param entity: polymorphic parameter, see class_.matchEntity. |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
488 @param refresh: if True, refresh the display of a widget that is found |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
489 (ignored if no widget is found and a new one is created) |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
490 @param add: if True, add a widget that is created to the selected tab |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
491 (ignored if a widget is found and no new one is created) |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
492 @return: the newly created wigdet if REUSE_EXISTING_LIBERVIA_WIDGETS |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
493 is set to False or if the widget has not been found, the existing |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
494 widget that has been found otherwise.""" |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
495 lib_wid = None |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
496 if REUSE_EXISTING_LIBERVIA_WIDGETS: |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
497 lib_wid = self.getLiberviaWidget(class_, entity) |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
498 if lib_wid is None: |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
499 lib_wid = class_.createPanel(self, entity) |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
500 elif refresh: |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
501 # remove the widget from its previous panel |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
502 panel = lib_wid.getWidgetsPanel(verbose=False) |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
503 if panel is not None: |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
504 panel.removeWidget(lib_wid) |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
505 if add or refresh: |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
506 self.addWidget(lib_wid) |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
507 if refresh: |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
508 # must be done after the widget is added, |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
509 # for example to scroll to the bottom |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
510 self.setSelected(lib_wid) |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
511 lib_wid.refresh() |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
512 return lib_wid |
163
b887186e8fc8
browser side: get entity's microblogs for newly added contacts
Goffi <goffi@goffi.org>
parents:
158
diff
changeset
|
513 |
235
b304cdf13a3b
browser and server side: XHTML handling, first draft:
Goffi <goffi@goffi.org>
parents:
230
diff
changeset
|
514 def _newMessageCb(self, from_jid, msg, msg_type, to_jid, extra): |
19 | 515 _from = JID(from_jid) |
516 _to = JID(to_jid) | |
230
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
517 other = _to if _from.bare == self.whoami.bare else _from |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
518 lib_wid = self.getLiberviaWidget(panels.ChatPanel, other, ignoreOtherTabs=False) |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
519 if lib_wid is not None: |
235
b304cdf13a3b
browser and server side: XHTML handling, first draft:
Goffi <goffi@goffi.org>
parents:
230
diff
changeset
|
520 lib_wid.printMessage(_from, msg, extra) |
230
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
521 else: |
266e9678eec0
browser_side: added the flag REUSE_EXISTING_LIBERVIA_WIDGETS
souliane <souliane@mailoo.org>
parents:
229
diff
changeset
|
522 # The message has not been showed, we must indicate it |
62 | 523 self.contact_panel.setContactMessageWaiting(other.bare, True) |
226
744426c2b699
browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents:
223
diff
changeset
|
524 |
20 | 525 def _presenceUpdateCb(self, entity, show, priority, statuses): |
526 _entity = JID(entity) | |
28 | 527 #XXX: QnD way to get our status |
20 | 528 if self.whoami and self.whoami.bare == _entity.bare and statuses: |
28 | 529 self.status_panel.changeStatus(statuses.values()[0]) |
33 | 530 if (not self.whoami or self.whoami.bare != _entity.bare): |
28 | 531 self.contact_panel.setConnected(_entity.bare, _entity.resource, show, priority, statuses) |
532 | |
125
f9d63624699f
radio collective integration, first draft
Goffi <goffi@goffi.org>
parents:
122
diff
changeset
|
533 def _roomJoinedCb(self, room_jid, room_nicks, user_nick): |
f9d63624699f
radio collective integration, first draft
Goffi <goffi@goffi.org>
parents:
122
diff
changeset
|
534 _target = JID(room_jid) |
33 | 535 self.room_list.add(_target) |
179
8475a29d7214
closing a group chat widget now leave the muc room (bug 11)
Goffi <goffi@goffi.org>
parents:
171
diff
changeset
|
536 chat_panel = panels.ChatPanel(self, _target, type_='group') |
33 | 537 chat_panel.setUserNick(user_nick) |
126
adecb2566b53
browser: fixed tabs not opening on room joining
Goffi <goffi@goffi.org>
parents:
125
diff
changeset
|
538 if _target.node.startswith('sat_tarot_'): #XXX: it's not really beautiful, but it works :) |
33 | 539 self.addTab(chat_panel, "Tarot") |
127 | 540 elif _target.node.startswith('sat_radiocol_'): |
541 self.addTab(chat_panel, "Radio collective") | |
28 | 542 else: |
108
fad0e51cf565
on failure, Libervia now wait 5 s before trying again to call the serveur + only room name is now shown in tabs
Goffi <goffi@goffi.org>
parents:
107
diff
changeset
|
543 self.addTab(chat_panel, _target.node) |
33 | 544 chat_panel.setPresents(room_nicks) |
545 chat_panel.historyPrint() | |
546 | |
146
d15fbb208ba0
browser side: fixed MUC signals management
Goffi <goffi@goffi.org>
parents:
141
diff
changeset
|
547 def _roomUserJoinedCb(self, room_jid_s, user_nick, user_data): |
84 | 548 for lib_wid in self.libervia_widgets: |
226
744426c2b699
browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents:
223
diff
changeset
|
549 if isinstance(lib_wid, panels.ChatPanel) and lib_wid.type == 'group' and lib_wid.target.bare == room_jid_s: |
84 | 550 lib_wid.userJoined(user_nick, user_data) |
33 | 551 |
146
d15fbb208ba0
browser side: fixed MUC signals management
Goffi <goffi@goffi.org>
parents:
141
diff
changeset
|
552 def _roomUserLeftCb(self, room_jid_s, user_nick, user_data): |
84 | 553 for lib_wid in self.libervia_widgets: |
226
744426c2b699
browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents:
223
diff
changeset
|
554 if isinstance(lib_wid, panels.ChatPanel) and lib_wid.type == 'group' and lib_wid.target.bare == room_jid_s: |
84 | 555 lib_wid.userLeft(user_nick, user_data) |
226
744426c2b699
browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents:
223
diff
changeset
|
556 |
146
d15fbb208ba0
browser side: fixed MUC signals management
Goffi <goffi@goffi.org>
parents:
141
diff
changeset
|
557 def _tarotGameStartedCb(self, room_jid_s, referee, players): |
36 | 558 print ("Tarot Game Started \o/") |
84 | 559 for lib_wid in self.libervia_widgets: |
226
744426c2b699
browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents:
223
diff
changeset
|
560 if isinstance(lib_wid, panels.ChatPanel) and lib_wid.type == 'group' and lib_wid.target.bare == room_jid_s: |
84 | 561 lib_wid.startGame("Tarot", referee, players) |
36 | 562 |
146
d15fbb208ba0
browser side: fixed MUC signals management
Goffi <goffi@goffi.org>
parents:
141
diff
changeset
|
563 def _tarotGameGenericCb(self, event_name, room_jid_s, args): |
84 | 564 for lib_wid in self.libervia_widgets: |
226
744426c2b699
browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents:
223
diff
changeset
|
565 if isinstance(lib_wid, panels.ChatPanel) and lib_wid.type == 'group' and lib_wid.target.bare == room_jid_s: |
744426c2b699
browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents:
223
diff
changeset
|
566 getattr(lib_wid.getGame("Tarot"), event_name)(*args) |
37
b306aa090438
Tarot game: game launching (first hand showed), and contract selection
Goffi <goffi@goffi.org>
parents:
36
diff
changeset
|
567 |
146
d15fbb208ba0
browser side: fixed MUC signals management
Goffi <goffi@goffi.org>
parents:
141
diff
changeset
|
568 def _radioColStartedCb(self, room_jid_s, referee): |
127 | 569 for lib_wid in self.libervia_widgets: |
226
744426c2b699
browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents:
223
diff
changeset
|
570 if isinstance(lib_wid, panels.ChatPanel) and lib_wid.type == 'group' and lib_wid.target.bare == room_jid_s: |
127 | 571 lib_wid.startGame("RadioCol", referee) |
210
3092f6b1710c
browser side: make the OK button title for group selector configureable + few "cosmetic" changes (PEP 8...)
souliane <souliane@mailoo.org>
parents:
205
diff
changeset
|
572 |
146
d15fbb208ba0
browser side: fixed MUC signals management
Goffi <goffi@goffi.org>
parents:
141
diff
changeset
|
573 def _radioColGenericCb(self, event_name, room_jid_s, args): |
128 | 574 for lib_wid in self.libervia_widgets: |
226
744426c2b699
browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents:
223
diff
changeset
|
575 if isinstance(lib_wid, panels.ChatPanel) and lib_wid.type == 'group' and lib_wid.target.bare == room_jid_s: |
744426c2b699
browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents:
223
diff
changeset
|
576 getattr(lib_wid.getGame("RadioCol"), event_name)(*args) |
128 | 577 |
210
3092f6b1710c
browser side: make the OK button title for group selector configureable + few "cosmetic" changes (PEP 8...)
souliane <souliane@mailoo.org>
parents:
205
diff
changeset
|
578 |
54
f25c4077f6b9
addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents:
50
diff
changeset
|
579 def _getPresenceStatusCb(self, presence_data): |
28 | 580 for entity in presence_data: |
581 for resource in presence_data[entity]: | |
582 args = presence_data[entity][resource] | |
583 self._presenceUpdateCb("%s/%s" % (entity, resource), *args) | |
20 | 584 |
122
397a88b340f3
browser: fixed call to getRoomsJoined
Goffi <goffi@goffi.org>
parents:
119
diff
changeset
|
585 def _getRoomsJoinedCb(self, room_data): |
33 | 586 for room in room_data: |
587 self._roomJoinedCb(*room) | |
588 | |
54
f25c4077f6b9
addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents:
50
diff
changeset
|
589 def _getWaitingSubCb(self, waiting_sub): |
f25c4077f6b9
addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents:
50
diff
changeset
|
590 for sub in waiting_sub: |
f25c4077f6b9
addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents:
50
diff
changeset
|
591 self._subscribeCb(waiting_sub[sub], sub) |
f25c4077f6b9
addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents:
50
diff
changeset
|
592 |
f25c4077f6b9
addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents:
50
diff
changeset
|
593 def _subscribeCb(self, sub_type, entity): |
f25c4077f6b9
addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents:
50
diff
changeset
|
594 if sub_type == 'subscribed': |
55
d5266c41ca24
Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents:
54
diff
changeset
|
595 dialog.InfoDialog('Subscription confirmation', 'The contact <b>%s</b> has added you to his/her contact list' % html_sanitize(entity)).show() |
163
b887186e8fc8
browser side: get entity's microblogs for newly added contacts
Goffi <goffi@goffi.org>
parents:
158
diff
changeset
|
596 self.getEntityMBlog(entity) |
54
f25c4077f6b9
addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents:
50
diff
changeset
|
597 |
f25c4077f6b9
addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents:
50
diff
changeset
|
598 elif sub_type == 'unsubscribed': |
55
d5266c41ca24
Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents:
54
diff
changeset
|
599 dialog.InfoDialog('Subscription refusal', 'The contact <b>%s</b> has refused to add you in his/her contact list' % html_sanitize(entity)).show() |
163
b887186e8fc8
browser side: get entity's microblogs for newly added contacts
Goffi <goffi@goffi.org>
parents:
158
diff
changeset
|
600 #TODO: remove microblogs from panels |
54
f25c4077f6b9
addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents:
50
diff
changeset
|
601 |
f25c4077f6b9
addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents:
50
diff
changeset
|
602 elif sub_type == 'subscribe': |
f25c4077f6b9
addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents:
50
diff
changeset
|
603 #The user want to subscribe to our presence |
f25c4077f6b9
addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents:
50
diff
changeset
|
604 _dialog = None |
f25c4077f6b9
addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents:
50
diff
changeset
|
605 msg = HTML('The contact <b>%s</b> want to add you in his/her contact list, do you accept ?' % html_sanitize(entity)) |
226
744426c2b699
browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents:
223
diff
changeset
|
606 |
62 | 607 def ok_cb(ignore): |
54
f25c4077f6b9
addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents:
50
diff
changeset
|
608 self.bridge.call('subscription', None, "subscribed", entity, '', _dialog.getSelectedGroups()) |
62 | 609 def cancel_cb(ignore): |
54
f25c4077f6b9
addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents:
50
diff
changeset
|
610 self.bridge.call('subscription', None, "unsubscribed", entity, '', '') |
226
744426c2b699
browser_side, misc: better PEP8 compliance
souliane <souliane@mailoo.org>
parents:
223
diff
changeset
|
611 |
227
67e24c342e7f
browser_side: bug fix for changeset 3092f6b1710c
souliane <souliane@mailoo.org>
parents:
226
diff
changeset
|
612 _dialog = dialog.GroupSelector([msg], self.contact_panel.getGroups(), [], "Add", ok_cb, cancel_cb) |
54
f25c4077f6b9
addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents:
50
diff
changeset
|
613 _dialog.setHTML('<b>Add contact request</b>') |
f25c4077f6b9
addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents:
50
diff
changeset
|
614 _dialog.show() |
f25c4077f6b9
addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents:
50
diff
changeset
|
615 |
55
d5266c41ca24
Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents:
54
diff
changeset
|
616 def _contactDeletedCb(self, entity): |
d5266c41ca24
Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents:
54
diff
changeset
|
617 self.contact_panel.removeContact(entity) |
d5266c41ca24
Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents:
54
diff
changeset
|
618 |
d5266c41ca24
Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents:
54
diff
changeset
|
619 def _newContactCb(self, contact, attributes, groups): |
d5266c41ca24
Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents:
54
diff
changeset
|
620 self.contact_panel.updateContact(contact, attributes, groups) |
54
f25c4077f6b9
addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents:
50
diff
changeset
|
621 |
137 | 622 def _entityDataUpdatedCb(self, entity_jid_s, key, value): |
623 if key == "avatar": | |
624 avatar = '/avatars/%s' % value | |
119 | 625 |
137 | 626 self.avatars_cache[entity_jid_s] = avatar |
119 | 627 |
628 for lib_wid in self.libervia_widgets: | |
629 if isinstance(lib_wid, panels.MicroblogPanel): | |
137 | 630 if lib_wid.isJidAccepted(entity_jid_s) or (self.whoami and entity_jid_s == self.whoami.bare): |
631 lib_wid.updateValue('avatar', entity_jid_s, avatar) | |
119 | 632 |
213
8bbac49765d6
browser side: display the day change in chat window
souliane <souliane@mailoo.org>
parents:
210
diff
changeset
|
633 def _chatStateReceivedCb(self, from_jid_s, state, profile): |
8bbac49765d6
browser side: display the day change in chat window
souliane <souliane@mailoo.org>
parents:
210
diff
changeset
|
634 """Callback when a new chat state is received. |
8bbac49765d6
browser side: display the day change in chat window
souliane <souliane@mailoo.org>
parents:
210
diff
changeset
|
635 @param from_jid_s: JID from the contact who sent his state |
8bbac49765d6
browser side: display the day change in chat window
souliane <souliane@mailoo.org>
parents:
210
diff
changeset
|
636 @param state: new state |
8bbac49765d6
browser side: display the day change in chat window
souliane <souliane@mailoo.org>
parents:
210
diff
changeset
|
637 @profile: current profile |
8bbac49765d6
browser side: display the day change in chat window
souliane <souliane@mailoo.org>
parents:
210
diff
changeset
|
638 """ |
8bbac49765d6
browser side: display the day change in chat window
souliane <souliane@mailoo.org>
parents:
210
diff
changeset
|
639 _from = JID(from_jid_s).bare if from_jid_s != "@ALL@" else from_jid_s |
8bbac49765d6
browser side: display the day change in chat window
souliane <souliane@mailoo.org>
parents:
210
diff
changeset
|
640 for lib_wid in self.libervia_widgets: |
8bbac49765d6
browser side: display the day change in chat window
souliane <souliane@mailoo.org>
parents:
210
diff
changeset
|
641 if isinstance(lib_wid, panels.ChatPanel): |
8bbac49765d6
browser side: display the day change in chat window
souliane <souliane@mailoo.org>
parents:
210
diff
changeset
|
642 win_from = lib_wid.target.bare |
8bbac49765d6
browser side: display the day change in chat window
souliane <souliane@mailoo.org>
parents:
210
diff
changeset
|
643 good_win = win_from == _from or _from == "@ALL@" |
8bbac49765d6
browser side: display the day change in chat window
souliane <souliane@mailoo.org>
parents:
210
diff
changeset
|
644 if (good_win and lib_wid.type == 'one2one'): |
8bbac49765d6
browser side: display the day change in chat window
souliane <souliane@mailoo.org>
parents:
210
diff
changeset
|
645 if state: |
8bbac49765d6
browser side: display the day change in chat window
souliane <souliane@mailoo.org>
parents:
210
diff
changeset
|
646 lib_wid.setTitle(win_from + " (" + state + ")") |
8bbac49765d6
browser side: display the day change in chat window
souliane <souliane@mailoo.org>
parents:
210
diff
changeset
|
647 else: |
8bbac49765d6
browser side: display the day change in chat window
souliane <souliane@mailoo.org>
parents:
210
diff
changeset
|
648 lib_wid.setTitle(win_from) |
223
624a87377412
browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
218
diff
changeset
|
649 # start to send "composing" state from now |
624a87377412
browser_side, plugin XEP-0085: limit the number of bridge methods calls for "chatStateComposing".
souliane <souliane@mailoo.org>
parents:
218
diff
changeset
|
650 lib_wid.state_machine.started = True |
213
8bbac49765d6
browser side: display the day change in chat window
souliane <souliane@mailoo.org>
parents:
210
diff
changeset
|
651 elif (lib_wid.type == 'group'): |
8bbac49765d6
browser side: display the day change in chat window
souliane <souliane@mailoo.org>
parents:
210
diff
changeset
|
652 # TODO: chat state notification for groupchat |
8bbac49765d6
browser side: display the day change in chat window
souliane <souliane@mailoo.org>
parents:
210
diff
changeset
|
653 pass |
119 | 654 |
239
b911f2b43fd4
browser_side: added input history in the unibox:
souliane <souliane@mailoo.org>
parents:
235
diff
changeset
|
655 |
0 | 656 if __name__ == '__main__': |
1 | 657 pyjd.setup("http://localhost:8080/libervia.html") |
0 | 658 app = SatWebFrontend() |
659 app.onModuleLoad() | |
660 pyjd.run() |