annotate libervia.py @ 204:890776a6fdb7

browser + server: vcard is requested when no avatar data is found in cache
author Goffi <goffi@goffi.org>
date Thu, 20 Jun 2013 12:16:46 +0200
parents 5fdea93b2541
children ee744ffed7fc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
1 #!/usr/bin/python
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
2 # -*- coding: utf-8 -*-
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
3
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
4 """
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
5 Libervia: a Salut à Toi frontend
165
9763dec220ed dates update
Goffi <goffi@goffi.org>
parents: 163
diff changeset
6 Copyright (C) 2011, 2012, 2013 Jérôme Poisson <goffi@goffi.org>
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
7
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
8 This program is free software: you can redistribute it and/or modify
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
9 it under the terms of the GNU Affero General Public License as published by
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
10 the Free Software Foundation, either version 3 of the License, or
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
11 (at your option) any later version.
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
12
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
13 This program is distributed in the hope that it will be useful,
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
16 GNU Affero General Public License for more details.
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
17
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
18 You should have received a copy of the GNU Affero General Public License
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
19 along with this program. If not, see <http://www.gnu.org/licenses/>.
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
20 """
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
21
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
22 import pyjd # this is dummy in pyjs
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
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
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
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
dd27072d8ae0 browser side: widgets refactoring:
Goffi <goffi@goffi.org>
parents: 194
diff changeset
31 from browser_side.base_widget import WidgetsPanel
dd27072d8ae0 browser side: widgets refactoring:
Goffi <goffi@goffi.org>
parents: 194
diff changeset
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
e8e3704eb97f Added basic chat panel
Goffi <goffi@goffi.org>
parents: 18
diff changeset
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
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
36
58
4fa3d57f72f8 browser side: microblog entries caching
Goffi <goffi@goffi.org>
parents: 57
diff changeset
37 MAX_MBLOG_CACHE = 500 #Max microblog entries kept in memories
4fa3d57f72f8 browser side: microblog entries caching
Goffi <goffi@goffi.org>
parents: 57
diff changeset
38
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
39 class LiberviaJsonProxy(JSONProxy):
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
40 def __init__(self, *args, **kwargs):
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
41 JSONProxy.__init__(self, *args, **kwargs)
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
42 self.handler=self
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
43 self.cb={}
203
5fdea93b2541 browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents: 202
diff changeset
44 self.eb={}
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
45
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
46 def call(self, method, cb, *args):
203
5fdea93b2541 browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents: 202
diff changeset
47 _id = self.callMethod(method,args)
11
331c093e4eb3 magicBox is now able to send global microblog
Goffi <goffi@goffi.org>
parents: 9
diff changeset
48 if cb:
203
5fdea93b2541 browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents: 202
diff changeset
49 if isinstance(cb, tuple):
5fdea93b2541 browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents: 202
diff changeset
50 if len(cb) != 2:
5fdea93b2541 browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents: 202
diff changeset
51 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
52 return
5fdea93b2541 browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents: 202
diff changeset
53 self.cb[_id] = cb[0]
5fdea93b2541 browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents: 202
diff changeset
54 self.eb[_id] = cb[1]
5fdea93b2541 browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents: 202
diff changeset
55 else:
5fdea93b2541 browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents: 202
diff changeset
56 self.cb[_id] = cb
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
57
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
58 def onRemoteResponse(self, response, request_info):
203
5fdea93b2541 browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents: 202
diff changeset
59 if request_info.id in self.cb:
132
30d8e328559b server & browser side: microblogging refactoring first draft
Goffi <goffi@goffi.org>
parents: 131
diff changeset
60 _cb = self.cb[request_info.id]
203
5fdea93b2541 browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents: 202
diff changeset
61 # if isinstance(_cb, tuple):
5fdea93b2541 browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents: 202
diff changeset
62 # #we have arguments attached to the callback
5fdea93b2541 browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents: 202
diff changeset
63 # #we send them after the answer
5fdea93b2541 browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents: 202
diff changeset
64 # callback, args = _cb
5fdea93b2541 browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents: 202
diff changeset
65 # callback(response, *args)
5fdea93b2541 browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents: 202
diff changeset
66 # else:
5fdea93b2541 browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents: 202
diff changeset
67 # #No additional argument, we call directly the callback
5fdea93b2541 browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents: 202
diff changeset
68 _cb(response)
33
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 28
diff changeset
69 del self.cb[request_info.id]
203
5fdea93b2541 browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents: 202
diff changeset
70 if request_info.id in self.eb:
5fdea93b2541 browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents: 202
diff changeset
71 del self.eb[request_info.id]
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
72
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
73 def onRemoteError(self, code, errobj, request_info):
62
12e889a683ce server side: misc stuff:
Goffi <goffi@goffi.org>
parents: 58
diff changeset
74 """def dump(obj):
12e889a683ce server side: misc stuff:
Goffi <goffi@goffi.org>
parents: 58
diff changeset
75 print "\n\nDUMPING %s\n\n" % obj
12e889a683ce server side: misc stuff:
Goffi <goffi@goffi.org>
parents: 58
diff changeset
76 for i in dir(obj):
12e889a683ce server side: misc stuff:
Goffi <goffi@goffi.org>
parents: 58
diff changeset
77 print "%s: %s" % (i, getattr(obj,i))"""
203
5fdea93b2541 browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents: 202
diff changeset
78 if request_info.id in self.eb:
5fdea93b2541 browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents: 202
diff changeset
79 _eb = self.eb[request_info.id]
5fdea93b2541 browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents: 202
diff changeset
80 _eb((code, errobj))
5fdea93b2541 browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents: 202
diff changeset
81 del self.cb[request_info.id]
5fdea93b2541 browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents: 202
diff changeset
82 del self.eb[request_info.id]
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
83 else:
203
5fdea93b2541 browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents: 202
diff changeset
84 if code != 0:
5fdea93b2541 browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents: 202
diff changeset
85 print ("Internal server error")
5fdea93b2541 browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents: 202
diff changeset
86 """for o in code, error, request_info:
5fdea93b2541 browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents: 202
diff changeset
87 dump(o)"""
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
88 else:
203
5fdea93b2541 browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents: 202
diff changeset
89 if isinstance(errobj['message'],dict):
5fdea93b2541 browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents: 202
diff changeset
90 print("Error %s: %s" % (errobj['message']['faultCode'], errobj['message']['faultString']))
5fdea93b2541 browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents: 202
diff changeset
91 else:
5fdea93b2541 browser side: errback management in bridge calls
Goffi <goffi@goffi.org>
parents: 202
diff changeset
92 print("Error: %s" % errobj['message'])
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
93
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
94 class RegisterCall(LiberviaJsonProxy):
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
95 def __init__(self):
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
96 LiberviaJsonProxy.__init__(self, "/register_api",
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
97 ["isRegistered","isConnected","connect"])
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
98
2
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents: 1
diff changeset
99 class BridgeCall(LiberviaJsonProxy):
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
100 def __init__(self):
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
101 LiberviaJsonProxy.__init__(self, "/json_api",
202
2bc6cf004e61 browser, server: comments handling:
Goffi <goffi@goffi.org>
parents: 200
diff changeset
102 ["getContacts", "addContact", "sendMessage", "sendMblog", "sendMblogComment", "getLastMblogs", "getMassiveLastMblogs", "getMblogComments", "getProfileJid", "getHistory", "getPresenceStatus",
204
890776a6fdb7 browser + server: vcard is requested when no avatar data is found in cache
Goffi <goffi@goffi.org>
parents: 203
diff changeset
103 "joinMUC", "mucLeave", "getRoomsJoined", "launchTarotGame", "getTarotCardsPaths", "tarotGameReady", "tarotGameContratChoosed", "tarotGamePlayCards",
890776a6fdb7 browser + server: vcard is requested when no avatar data is found in cache
Goffi <goffi@goffi.org>
parents: 203
diff changeset
104 "launchRadioCollective", "getWaitingSub", "subscription", "delContact", "updateContact", "getCard", "getEntityData", "getParamsUI",
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
105 #"setParam",
158
58442ed28f2b browser side: basic disconnection management: hard reload is done on empty signal response
Goffi <goffi@goffi.org>
parents: 157
diff changeset
106 "launchAction", "disconnect",
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
107 ])
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
108
2
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents: 1
diff changeset
109 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
110 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
111
99
ca4fc2b2471b browser side: signal management
Goffi <goffi@goffi.org>
parents: 85
diff changeset
112 def __init__(self, host):
ca4fc2b2471b browser side: signal management
Goffi <goffi@goffi.org>
parents: 85
diff changeset
113 self.host = host
157
b17ec3a6a112 browser side: in case of error, retry delay is doubled at each try
Goffi <goffi@goffi.org>
parents: 148
diff changeset
114 self.retry_delay = self.RETRY_BASE_DELAY
2
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents: 1
diff changeset
115 LiberviaJsonProxy.__init__(self, "/json_signal_api",
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents: 1
diff changeset
116 ["getSignals"])
99
ca4fc2b2471b browser side: signal management
Goffi <goffi@goffi.org>
parents: 85
diff changeset
117
157
b17ec3a6a112 browser side: in case of error, retry delay is doubled at each try
Goffi <goffi@goffi.org>
parents: 148
diff changeset
118 def onRemoteResponse(self, response, request_info):
b17ec3a6a112 browser side: in case of error, retry delay is doubled at each try
Goffi <goffi@goffi.org>
parents: 148
diff changeset
119 self.retry_delay = self.RETRY_BASE_DELAY
b17ec3a6a112 browser side: in case of error, retry delay is doubled at each try
Goffi <goffi@goffi.org>
parents: 148
diff changeset
120 LiberviaJsonProxy.onRemoteResponse(self, response, request_info)
b17ec3a6a112 browser side: in case of error, retry delay is doubled at each try
Goffi <goffi@goffi.org>
parents: 148
diff changeset
121
b17ec3a6a112 browser side: in case of error, retry delay is doubled at each try
Goffi <goffi@goffi.org>
parents: 148
diff changeset
122
99
ca4fc2b2471b browser side: signal management
Goffi <goffi@goffi.org>
parents: 85
diff changeset
123 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
124 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
125 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
126 # 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
127 LiberviaJsonProxy.onRemoteError(self, code, errobj, request_info)
99
ca4fc2b2471b browser side: signal management
Goffi <goffi@goffi.org>
parents: 85
diff changeset
128 #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
129 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
130 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
131 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
132 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
133 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
134 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
135 self.retry_delay *= 2
2
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents: 1
diff changeset
136
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
137 class SatWebFrontend:
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
138 def onModuleLoad(self):
134
ee7b4aecdc67 browser: present microblogs panels are filled once logged
Goffi <goffi@goffi.org>
parents: 132
diff changeset
139 print "============ onModuleLoad =============="
195
dd27072d8ae0 browser side: widgets refactoring:
Goffi <goffi@goffi.org>
parents: 194
diff changeset
140 panels.ChatPanel.registerClass()
dd27072d8ae0 browser side: widgets refactoring:
Goffi <goffi@goffi.org>
parents: 194
diff changeset
141 panels.MicroblogPanel.registerClass()
19
e8e3704eb97f Added basic chat panel
Goffi <goffi@goffi.org>
parents: 18
diff changeset
142 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
143 self._selected_listeners = set()
11
331c093e4eb3 magicBox is now able to send global microblog
Goffi <goffi@goffi.org>
parents: 9
diff changeset
144 self.bridge = BridgeCall()
99
ca4fc2b2471b browser side: signal management
Goffi <goffi@goffi.org>
parents: 85
diff changeset
145 self.bridge_signals = BridgeSignals(self)
33
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 28
diff changeset
146 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
147 self.status_panel = panels.StatusPanel(self)
28
258dfaa1035f browser side:
Goffi <goffi@goffi.org>
parents: 23
diff changeset
148 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
149 self.panel = panels.MainPanel(self)
23
0ce2a57b34ca added tab panel
Goffi <goffi@goffi.org>
parents: 22
diff changeset
150 self.discuss_panel = self.panel.discuss_panel
84
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
151 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
152 self.tab_panel.addTabListener(self)
84
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
153 self.libervia_widgets = set() #keep track of all actives LiberviaWidgets
33
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 28
diff changeset
154 self.room_list = set() #set of rooms
139
b6658f3ac8a0 browser side: own microblogs print
Goffi <goffi@goffi.org>
parents: 138
diff changeset
155 self.mblog_cache = [] #used to keep our own blog entries in memory, to show them in new mblog panel
119
a8d11fdea090 microblog avatar update
Goffi <goffi@goffi.org>
parents: 116
diff changeset
156 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
157 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
158 #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
159 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
160 #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
161 self._register_box = None
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
162 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
163 DOM.addEventPreview(self)
33
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 28
diff changeset
164 self.resize()
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
165 self._register = RegisterCall()
1
0a7c685faa53 ContactPanel: first draft
Goffi <goffi@goffi.org>
parents: 0
diff changeset
166 self._register.call('isRegistered',self._isRegisteredCB)
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
167
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 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
169 self._selected_listeners.add(callback)
192
cf5c83e7d515 browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents: 179
diff changeset
170
cf5c83e7d515 browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents: 179
diff changeset
171 def getSelected(self):
cf5c83e7d515 browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents: 179
diff changeset
172 wid = self.tab_panel.getCurrentPanel()
cf5c83e7d515 browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents: 179
diff changeset
173 if not isinstance(wid, WidgetsPanel):
cf5c83e7d515 browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents: 179
diff changeset
174 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
175 return None
cf5c83e7d515 browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents: 179
diff changeset
176 return wid.selected
cf5c83e7d515 browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents: 179
diff changeset
177
cf5c83e7d515 browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents: 179
diff changeset
178 def setSelected(self, widget):
cf5c83e7d515 browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents: 179
diff changeset
179 """Define the selected widget"""
cf5c83e7d515 browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents: 179
diff changeset
180 widgets_panel = self.tab_panel.getCurrentPanel()
cf5c83e7d515 browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents: 179
diff changeset
181 if not isinstance(widgets_panel, WidgetsPanel):
cf5c83e7d515 browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents: 179
diff changeset
182 return
cf5c83e7d515 browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents: 179
diff changeset
183
cf5c83e7d515 browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents: 179
diff changeset
184 selected = widgets_panel.selected
cf5c83e7d515 browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents: 179
diff changeset
185
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
186 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
187 return
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
188
192
cf5c83e7d515 browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents: 179
diff changeset
189 if selected:
cf5c83e7d515 browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents: 179
diff changeset
190 selected.removeStyleName('selected_widget')
cf5c83e7d515 browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents: 179
diff changeset
191
cf5c83e7d515 browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents: 179
diff changeset
192 widgets_panel.selected = widget
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
193
192
cf5c83e7d515 browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents: 179
diff changeset
194 if widget:
cf5c83e7d515 browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents: 179
diff changeset
195 widgets_panel.selected.addStyleName('selected_widget')
cf5c83e7d515 browser side: per tab selected widget management
Goffi <goffi@goffi.org>
parents: 179
diff changeset
196
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
197 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
198 callback(widget)
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
199
33
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 28
diff changeset
200 def resize(self):
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 28
diff changeset
201 """Resize elements"""
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 28
diff changeset
202 Window.onResize()
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 28
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 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
205 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
206
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
207 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
208 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
209 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
210 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
211
43
a7ff1e6f1229 browser_side: prevent default for escape key (cancel HTTPRequest in FF)
Goffi <goffi@goffi.org>
parents: 41
diff changeset
212 def onEventPreview(self, event):
a7ff1e6f1229 browser_side: prevent default for escape key (cancel HTTPRequest in FF)
Goffi <goffi@goffi.org>
parents: 41
diff changeset
213 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
214 #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
215 event.preventDefault()
a7ff1e6f1229 browser_side: prevent default for escape key (cancel HTTPRequest in FF)
Goffi <goffi@goffi.org>
parents: 41
diff changeset
216 return True
a7ff1e6f1229 browser_side: prevent default for escape key (cancel HTTPRequest in FF)
Goffi <goffi@goffi.org>
parents: 41
diff changeset
217
119
a8d11fdea090 microblog avatar update
Goffi <goffi@goffi.org>
parents: 116
diff changeset
218 def getAvatar(self, jid_str):
a8d11fdea090 microblog avatar update
Goffi <goffi@goffi.org>
parents: 116
diff changeset
219 """Return avatar of a jid if in cache, else ask for it"""
137
b145da69a218 server + browser side: new api fix
Goffi <goffi@goffi.org>
parents: 135
diff changeset
220 def dataReceived(result):
202
2bc6cf004e61 browser, server: comments handling:
Goffi <goffi@goffi.org>
parents: 200
diff changeset
221 if 'avatar' in result:
137
b145da69a218 server + browser side: new api fix
Goffi <goffi@goffi.org>
parents: 135
diff changeset
222 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
223 else:
890776a6fdb7 browser + server: vcard is requested when no avatar data is found in cache
Goffi <goffi@goffi.org>
parents: 203
diff changeset
224 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
225 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
226 # 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
227 self.bridge.call("getCard", None, jid_str)
119
a8d11fdea090 microblog avatar update
Goffi <goffi@goffi.org>
parents: 116
diff changeset
228
a8d11fdea090 microblog avatar update
Goffi <goffi@goffi.org>
parents: 116
diff changeset
229 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
230 self.bridge.call('getEntityData', (dataReceived, avatarError), jid_str, ['avatar'])
119
a8d11fdea090 microblog avatar update
Goffi <goffi@goffi.org>
parents: 116
diff changeset
231 self.avatars_cache[jid_str] = "/media/misc/empty_avatar"
a8d11fdea090 microblog avatar update
Goffi <goffi@goffi.org>
parents: 116
diff changeset
232 return self.avatars_cache[jid_str]
a8d11fdea090 microblog avatar update
Goffi <goffi@goffi.org>
parents: 116
diff changeset
233
84
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
234 def registerWidget(self, wid):
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
235 print "Registering", wid
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
236 self.libervia_widgets.add(wid)
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
237
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
238 def unregisterWidget(self, wid):
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
239 try:
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
240 self.libervia_widgets.remove(wid)
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
241 except KeyError:
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
242 print ('WARNING: trying to remove a non registered Widget:', wid)
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
243
33
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 28
diff changeset
244 def setUniBox(self, unibox):
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 28
diff changeset
245 """register the unibox widget"""
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 28
diff changeset
246 self.uni_box = unibox
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 28
diff changeset
247 self.uni_box.addKey("@@: ")
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 28
diff changeset
248
116
aff34642616b browser side: widgets are now added in a widgetsPanel when a tab is created
Goffi <goffi@goffi.org>
parents: 110
diff changeset
249 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
250 """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
251 @param wid: LiberviaWidget to add
33
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 28
diff changeset
252 @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
253 _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
254 _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
255 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
256 self.tab_panel.selectTab(self.tab_panel.getWidgetCount() - 1)
33
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 28
diff changeset
257
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
258 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
259 """ 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
260 @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
261 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
262 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
263
1
0a7c685faa53 ContactPanel: first draft
Goffi <goffi@goffi.org>
parents: 0
diff changeset
264 def _isRegisteredCB(self, registered):
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
265 if not registered:
66
9d8e79ac4c9c Login/Register box: integration of Adrien Vigneron's design
Goffi <goffi@goffi.org>
parents: 64
diff changeset
266 self._register_box = RegisterBox(self.logged)
9d8e79ac4c9c Login/Register box: integration of Adrien Vigneron's design
Goffi <goffi@goffi.org>
parents: 64
diff changeset
267 self._register_box.centerBox()
9d8e79ac4c9c Login/Register box: integration of Adrien Vigneron's design
Goffi <goffi@goffi.org>
parents: 64
diff changeset
268 self._register_box.show()
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
269 else:
1
0a7c685faa53 ContactPanel: first draft
Goffi <goffi@goffi.org>
parents: 0
diff changeset
270 self._register.call('isConnected', self._isConnectedCB)
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
271
1
0a7c685faa53 ContactPanel: first draft
Goffi <goffi@goffi.org>
parents: 0
diff changeset
272 def _isConnectedCB(self, connected):
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
273 if not connected:
62
12e889a683ce server side: misc stuff:
Goffi <goffi@goffi.org>
parents: 58
diff changeset
274 self._register.call('connect',lambda x:self.logged())
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
275 else:
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
276 self.logged()
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
277
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
278 def logged(self):
66
9d8e79ac4c9c Login/Register box: integration of Adrien Vigneron's design
Goffi <goffi@goffi.org>
parents: 64
diff changeset
279 if self._register_box:
9d8e79ac4c9c Login/Register box: integration of Adrien Vigneron's design
Goffi <goffi@goffi.org>
parents: 64
diff changeset
280 self._register_box.hide()
9d8e79ac4c9c Login/Register box: integration of Adrien Vigneron's design
Goffi <goffi@goffi.org>
parents: 64
diff changeset
281 del self._register_box # don't work if self._register_box is None
1
0a7c685faa53 ContactPanel: first draft
Goffi <goffi@goffi.org>
parents: 0
diff changeset
282
0a7c685faa53 ContactPanel: first draft
Goffi <goffi@goffi.org>
parents: 0
diff changeset
283 #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
284 self.bridge.call('getContacts', self._getContactsCB)
331c093e4eb3 magicBox is now able to send global microblog
Goffi <goffi@goffi.org>
parents: 9
diff changeset
285 self.bridge_signals.call('getSignals', self._getSignalsCB)
19
e8e3704eb97f Added basic chat panel
Goffi <goffi@goffi.org>
parents: 18
diff changeset
286 #We want to know our own jid
e8e3704eb97f Added basic chat panel
Goffi <goffi@goffi.org>
parents: 18
diff changeset
287 self.bridge.call('getProfileJid', self._getProfileJidCB)
54
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 50
diff changeset
288
2
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents: 1
diff changeset
289
1
0a7c685faa53 ContactPanel: first draft
Goffi <goffi@goffi.org>
parents: 0
diff changeset
290 def _getContactsCB(self, contacts_data):
0a7c685faa53 ContactPanel: first draft
Goffi <goffi@goffi.org>
parents: 0
diff changeset
291 for contact in contacts_data:
0a7c685faa53 ContactPanel: first draft
Goffi <goffi@goffi.org>
parents: 0
diff changeset
292 jid, attributes, groups = contact
55
d5266c41ca24 Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents: 54
diff changeset
293 self._newContactCb(jid, attributes, groups)
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
294
2
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents: 1
diff changeset
295 def _getSignalsCB(self, signal_data):
99
ca4fc2b2471b browser side: signal management
Goffi <goffi@goffi.org>
parents: 85
diff changeset
296 self.bridge_signals.call('getSignals', self._getSignalsCB)
2
669c531a857e signals handling and first draft of microblogging
Goffi <goffi@goffi.org>
parents: 1
diff changeset
297 print('Got signal ==> name: %s, params: %s' % (signal_data[0],signal_data[1]))
4
7325e787c22b personalEvent management signal first draft, microblogs are now put in a central grid
Goffi <goffi@goffi.org>
parents: 2
diff changeset
298 name,args = signal_data
7325e787c22b personalEvent management signal first draft, microblogs are now put in a central grid
Goffi <goffi@goffi.org>
parents: 2
diff changeset
299 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
300 self._personalEventCb(*args)
19
e8e3704eb97f Added basic chat panel
Goffi <goffi@goffi.org>
parents: 18
diff changeset
301 elif name == 'newMessage':
e8e3704eb97f Added basic chat panel
Goffi <goffi@goffi.org>
parents: 18
diff changeset
302 self._newMessageCb(*args)
20
8f4b1a8914c3 - User status is now updated
Goffi <goffi@goffi.org>
parents: 19
diff changeset
303 elif name == 'presenceUpdate':
8f4b1a8914c3 - User status is now updated
Goffi <goffi@goffi.org>
parents: 19
diff changeset
304 self._presenceUpdateCb(*args)
28
258dfaa1035f browser side:
Goffi <goffi@goffi.org>
parents: 23
diff changeset
305 elif name == 'roomJoined':
258dfaa1035f browser side:
Goffi <goffi@goffi.org>
parents: 23
diff changeset
306 self._roomJoinedCb(*args)
33
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 28
diff changeset
307 elif name == 'roomUserJoined':
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 28
diff changeset
308 self._roomUserJoinedCb(*args)
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 28
diff changeset
309 elif name == 'roomUserLeft':
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 28
diff changeset
310 self._roomUserLeftCb(*args)
36
1d406077b49b Tarot Game: first draft
Goffi <goffi@goffi.org>
parents: 35
diff changeset
311 elif name == 'tarotGameStarted':
1d406077b49b Tarot Game: first draft
Goffi <goffi@goffi.org>
parents: 35
diff changeset
312 self._tarotGameStartedCb(*args)
37
b306aa090438 Tarot game: game launching (first hand showed), and contract selection
Goffi <goffi@goffi.org>
parents: 36
diff changeset
313 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
314 name == 'tarotGameChooseContrat' or \
39
305e81c7a32c Tarot game: a game can now be finished
Goffi <goffi@goffi.org>
parents: 38
diff changeset
315 name == 'tarotGameShowCards' or \
305e81c7a32c Tarot game: a game can now be finished
Goffi <goffi@goffi.org>
parents: 38
diff changeset
316 name == 'tarotGameInvalidCards' or \
305e81c7a32c Tarot game: a game can now be finished
Goffi <goffi@goffi.org>
parents: 38
diff changeset
317 name == 'tarotGameCardsPlayed' or \
41
7782a786b2f0 Tarot game: score is now shown (need to use XMLUI later)
Goffi <goffi@goffi.org>
parents: 39
diff changeset
318 name == 'tarotGameYourTurn' or \
7782a786b2f0 Tarot game: score is now shown (need to use XMLUI later)
Goffi <goffi@goffi.org>
parents: 39
diff changeset
319 name == 'tarotGameScore':
37
b306aa090438 Tarot game: game launching (first hand showed), and contract selection
Goffi <goffi@goffi.org>
parents: 36
diff changeset
320 self._tarotGameGenericCb(name, args[0], args[1:])
127
e19a8de8b3de radio collective first draft
Goffi <goffi@goffi.org>
parents: 126
diff changeset
321 elif name == 'radiocolStarted':
e19a8de8b3de radio collective first draft
Goffi <goffi@goffi.org>
parents: 126
diff changeset
322 self._radioColStartedCb(*args)
128
2849ec993d89 basic radio collective
Goffi <goffi@goffi.org>
parents: 127
diff changeset
323 elif name == 'radiocolPreload':
2849ec993d89 basic radio collective
Goffi <goffi@goffi.org>
parents: 127
diff changeset
324 self._radioColGenericCb(name, args[0], args[1:])
130
6576c5a90060 Working Radio Collective \o/
Goffi <goffi@goffi.org>
parents: 128
diff changeset
325 elif name == 'radiocolPlay':
6576c5a90060 Working Radio Collective \o/
Goffi <goffi@goffi.org>
parents: 128
diff changeset
326 self._radioColGenericCb(name, args[0], args[1:])
6576c5a90060 Working Radio Collective \o/
Goffi <goffi@goffi.org>
parents: 128
diff changeset
327 elif name == 'radiocolNoUpload':
6576c5a90060 Working Radio Collective \o/
Goffi <goffi@goffi.org>
parents: 128
diff changeset
328 self._radioColGenericCb(name, args[0], args[1:])
6576c5a90060 Working Radio Collective \o/
Goffi <goffi@goffi.org>
parents: 128
diff changeset
329 elif name == 'radiocolUploadOk':
6576c5a90060 Working Radio Collective \o/
Goffi <goffi@goffi.org>
parents: 128
diff changeset
330 self._radioColGenericCb(name, args[0], args[1:])
6576c5a90060 Working Radio Collective \o/
Goffi <goffi@goffi.org>
parents: 128
diff changeset
331 elif name == 'radiocolSongRejected':
6576c5a90060 Working Radio Collective \o/
Goffi <goffi@goffi.org>
parents: 128
diff changeset
332 self._radioColGenericCb(name, args[0], args[1:])
54
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 50
diff changeset
333 elif name == 'subscribe':
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 50
diff changeset
334 self._subscribeCb(*args)
55
d5266c41ca24 Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents: 54
diff changeset
335 elif name == 'contactDeleted':
d5266c41ca24 Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents: 54
diff changeset
336 self._contactDeletedCb(*args)
d5266c41ca24 Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents: 54
diff changeset
337 elif name == 'newContact':
d5266c41ca24 Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents: 54
diff changeset
338 self._newContactCb(*args)
137
b145da69a218 server + browser side: new api fix
Goffi <goffi@goffi.org>
parents: 135
diff changeset
339 elif name == 'entityDataUpdated':
b145da69a218 server + browser side: new api fix
Goffi <goffi@goffi.org>
parents: 135
diff changeset
340 self._entityDataUpdatedCb(*args)
19
e8e3704eb97f Added basic chat panel
Goffi <goffi@goffi.org>
parents: 18
diff changeset
341
139
b6658f3ac8a0 browser side: own microblogs print
Goffi <goffi@goffi.org>
parents: 138
diff changeset
342 def _ownBlogsFills(self, mblogs):
b6658f3ac8a0 browser side: own microblogs print
Goffi <goffi@goffi.org>
parents: 138
diff changeset
343 #put our own microblogs in cache, then fill all panels with them
b6658f3ac8a0 browser side: own microblogs print
Goffi <goffi@goffi.org>
parents: 138
diff changeset
344 for publisher in mblogs:
b6658f3ac8a0 browser side: own microblogs print
Goffi <goffi@goffi.org>
parents: 138
diff changeset
345 for mblog in mblogs[publisher]:
b6658f3ac8a0 browser side: own microblogs print
Goffi <goffi@goffi.org>
parents: 138
diff changeset
346 if not mblog.has_key('content'):
b6658f3ac8a0 browser side: own microblogs print
Goffi <goffi@goffi.org>
parents: 138
diff changeset
347 print ("WARNING: No content found in microblog [%s]", mblog)
b6658f3ac8a0 browser side: own microblogs print
Goffi <goffi@goffi.org>
parents: 138
diff changeset
348 continue
b6658f3ac8a0 browser side: own microblogs print
Goffi <goffi@goffi.org>
parents: 138
diff changeset
349 if mblog.has_key('groups'):
b6658f3ac8a0 browser side: own microblogs print
Goffi <goffi@goffi.org>
parents: 138
diff changeset
350 _groups = set(mblog['groups'].split() if mblog['groups'] else [])
b6658f3ac8a0 browser side: own microblogs print
Goffi <goffi@goffi.org>
parents: 138
diff changeset
351 else:
b6658f3ac8a0 browser side: own microblogs print
Goffi <goffi@goffi.org>
parents: 138
diff changeset
352 _groups=None
b6658f3ac8a0 browser side: own microblogs print
Goffi <goffi@goffi.org>
parents: 138
diff changeset
353 mblog_entry = MicroblogItem(mblog)
b6658f3ac8a0 browser side: own microblogs print
Goffi <goffi@goffi.org>
parents: 138
diff changeset
354 self.mblog_cache.append((_groups, mblog_entry))
b6658f3ac8a0 browser side: own microblogs print
Goffi <goffi@goffi.org>
parents: 138
diff changeset
355
b6658f3ac8a0 browser side: own microblogs print
Goffi <goffi@goffi.org>
parents: 138
diff changeset
356 if len(self.mblog_cache) > MAX_MBLOG_CACHE:
b6658f3ac8a0 browser side: own microblogs print
Goffi <goffi@goffi.org>
parents: 138
diff changeset
357 del self.mblog_cache[0:len(self.mblog_cache-MAX_MBLOG_CACHE)]
b6658f3ac8a0 browser side: own microblogs print
Goffi <goffi@goffi.org>
parents: 138
diff changeset
358 for lib_wid in self.libervia_widgets:
b6658f3ac8a0 browser side: own microblogs print
Goffi <goffi@goffi.org>
parents: 138
diff changeset
359 if isinstance(lib_wid, panels.MicroblogPanel):
b6658f3ac8a0 browser side: own microblogs print
Goffi <goffi@goffi.org>
parents: 138
diff changeset
360 self.FillMicroblogPanel(lib_wid)
b6658f3ac8a0 browser side: own microblogs print
Goffi <goffi@goffi.org>
parents: 138
diff changeset
361
19
e8e3704eb97f Added basic chat panel
Goffi <goffi@goffi.org>
parents: 18
diff changeset
362 def _getProfileJidCB(self, jid):
e8e3704eb97f Added basic chat panel
Goffi <goffi@goffi.org>
parents: 18
diff changeset
363 self.whoami = JID(jid)
20
8f4b1a8914c3 - User status is now updated
Goffi <goffi@goffi.org>
parents: 19
diff changeset
364 #we can now ask our status
54
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 50
diff changeset
365 self.bridge.call('getPresenceStatus', self._getPresenceStatusCb)
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 50
diff changeset
366 #the rooms where we are
122
397a88b340f3 browser: fixed call to getRoomsJoined
Goffi <goffi@goffi.org>
parents: 119
diff changeset
367 self.bridge.call('getRoomsJoined', self._getRoomsJoinedCb)
54
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 50
diff changeset
368 #and if there is any subscription request waiting for us
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 50
diff changeset
369 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
370 #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
371 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
372 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
373 if lib_wid.accept_all():
008fa8d36602 browser side: our own microblogs are now requested once logged
Goffi <goffi@goffi.org>
parents: 137
diff changeset
374 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
375 else:
008fa8d36602 browser side: our own microblogs are now requested once logged
Goffi <goffi@goffi.org>
parents: 137
diff changeset
376 self.bridge.call('getMassiveLastMblogs', lib_wid.massiveInsert, 'GROUP', lib_wid.accepted_groups, 10)
139
b6658f3ac8a0 browser side: own microblogs print
Goffi <goffi@goffi.org>
parents: 138
diff changeset
377
b6658f3ac8a0 browser side: own microblogs print
Goffi <goffi@goffi.org>
parents: 138
diff changeset
378 #we ask for our own microblogs:
b6658f3ac8a0 browser side: own microblogs print
Goffi <goffi@goffi.org>
parents: 138
diff changeset
379 self.bridge.call('getMassiveLastMblogs', self._ownBlogsFills, 'JID', [self.whoami.bare], 10)
20
8f4b1a8914c3 - User status is now updated
Goffi <goffi@goffi.org>
parents: 19
diff changeset
380
4
7325e787c22b personalEvent management signal first draft, microblogs are now put in a central grid
Goffi <goffi@goffi.org>
parents: 2
diff changeset
381 ## Signals callbacks ##
7325e787c22b personalEvent management signal first draft, microblogs are now put in a central grid
Goffi <goffi@goffi.org>
parents: 2
diff changeset
382
58
4fa3d57f72f8 browser side: microblog entries caching
Goffi <goffi@goffi.org>
parents: 57
diff changeset
383 def _personalEventCb(self, sender, event_type, data):
4
7325e787c22b personalEvent management signal first draft, microblogs are now put in a central grid
Goffi <goffi@goffi.org>
parents: 2
diff changeset
384 if event_type == "MICROBLOG":
202
2bc6cf004e61 browser, server: comments handling:
Goffi <goffi@goffi.org>
parents: 200
diff changeset
385 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
386 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
387 return
202
2bc6cf004e61 browser, server: comments handling:
Goffi <goffi@goffi.org>
parents: 200
diff changeset
388 if 'groups' in data:
16
099c05a0dcab browser side: microblog panel improvments
Goffi <goffi@goffi.org>
parents: 14
diff changeset
389 _groups = set(data['groups'].split() if data['groups'] else [])
099c05a0dcab browser side: microblog panel improvments
Goffi <goffi@goffi.org>
parents: 14
diff changeset
390 else:
099c05a0dcab browser side: microblog panel improvments
Goffi <goffi@goffi.org>
parents: 14
diff changeset
391 _groups=None
132
30d8e328559b server & browser side: microblogging refactoring first draft
Goffi <goffi@goffi.org>
parents: 131
diff changeset
392 mblog_entry = MicroblogItem(data)
58
4fa3d57f72f8 browser side: microblog entries caching
Goffi <goffi@goffi.org>
parents: 57
diff changeset
393
84
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
394 for lib_wid in self.libervia_widgets:
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
395 if isinstance(lib_wid, panels.MicroblogPanel):
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
396 self.addBlogEntry(lib_wid, sender, _groups, mblog_entry)
58
4fa3d57f72f8 browser side: microblog entries caching
Goffi <goffi@goffi.org>
parents: 57
diff changeset
397
139
b6658f3ac8a0 browser side: own microblogs print
Goffi <goffi@goffi.org>
parents: 138
diff changeset
398 if sender == self.whoami.bare:
b6658f3ac8a0 browser side: own microblogs print
Goffi <goffi@goffi.org>
parents: 138
diff changeset
399 self.mblog_cache.append((_groups, mblog_entry))
b6658f3ac8a0 browser side: own microblogs print
Goffi <goffi@goffi.org>
parents: 138
diff changeset
400 if len(self.mblog_cache) > MAX_MBLOG_CACHE:
b6658f3ac8a0 browser side: own microblogs print
Goffi <goffi@goffi.org>
parents: 138
diff changeset
401 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
402
4fa3d57f72f8 browser side: microblog entries caching
Goffi <goffi@goffi.org>
parents: 57
diff changeset
403 def addBlogEntry(self, mblog_panel, sender, _groups, mblog_entry):
4fa3d57f72f8 browser side: microblog entries caching
Goffi <goffi@goffi.org>
parents: 57
diff changeset
404 """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
405 @param mblog_panel: MicroblogPanel instance
4fa3d57f72f8 browser side: microblog entries caching
Goffi <goffi@goffi.org>
parents: 57
diff changeset
406 @param sender: jid of the entry sender
4fa3d57f72f8 browser side: microblog entries caching
Goffi <goffi@goffi.org>
parents: 57
diff changeset
407 @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
408 @param mblog_entry: MicroblogItem instance"""
202
2bc6cf004e61 browser, server: comments handling:
Goffi <goffi@goffi.org>
parents: 200
diff changeset
409 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
410 or (_groups and _groups.intersection(mblog_panel.accepted_groups)):
58
4fa3d57f72f8 browser side: microblog entries caching
Goffi <goffi@goffi.org>
parents: 57
diff changeset
411 mblog_panel.addEntry(mblog_entry)
4fa3d57f72f8 browser side: microblog entries caching
Goffi <goffi@goffi.org>
parents: 57
diff changeset
412
139
b6658f3ac8a0 browser side: own microblogs print
Goffi <goffi@goffi.org>
parents: 138
diff changeset
413 def FillMicroblogPanel(self, mblog_panel):
58
4fa3d57f72f8 browser side: microblog entries caching
Goffi <goffi@goffi.org>
parents: 57
diff changeset
414 """Fill a microblog panel with entries in cache
4fa3d57f72f8 browser side: microblog entries caching
Goffi <goffi@goffi.org>
parents: 57
diff changeset
415 @param mblog_panel: MicroblogPanel instance
4fa3d57f72f8 browser side: microblog entries caching
Goffi <goffi@goffi.org>
parents: 57
diff changeset
416 """
139
b6658f3ac8a0 browser side: own microblogs print
Goffi <goffi@goffi.org>
parents: 138
diff changeset
417 #XXX: only our own entries are cached
58
4fa3d57f72f8 browser side: microblog entries caching
Goffi <goffi@goffi.org>
parents: 57
diff changeset
418 for cache_entry in self.mblog_cache:
139
b6658f3ac8a0 browser side: own microblogs print
Goffi <goffi@goffi.org>
parents: 138
diff changeset
419 _groups, mblog_entry = cache_entry
b6658f3ac8a0 browser side: own microblogs print
Goffi <goffi@goffi.org>
parents: 138
diff changeset
420 self.addBlogEntry(mblog_panel, self.whoami.bare, *cache_entry)
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
421
163
b887186e8fc8 browser side: get entity's microblogs for newly added contacts
Goffi <goffi@goffi.org>
parents: 158
diff changeset
422 def getEntityMBlog(self, entity):
b887186e8fc8 browser side: get entity's microblogs for newly added contacts
Goffi <goffi@goffi.org>
parents: 158
diff changeset
423 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
424 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
425 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
426 if lib_wid.isJidAccepted(entity):
b887186e8fc8 browser side: get entity's microblogs for newly added contacts
Goffi <goffi@goffi.org>
parents: 158
diff changeset
427 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
428
b887186e8fc8 browser side: get entity's microblogs for newly added contacts
Goffi <goffi@goffi.org>
parents: 158
diff changeset
429
19
e8e3704eb97f Added basic chat panel
Goffi <goffi@goffi.org>
parents: 18
diff changeset
430 def _newMessageCb(self, from_jid, msg, msg_type, to_jid):
e8e3704eb97f Added basic chat panel
Goffi <goffi@goffi.org>
parents: 18
diff changeset
431 _from = JID(from_jid)
e8e3704eb97f Added basic chat panel
Goffi <goffi@goffi.org>
parents: 18
diff changeset
432 _to = JID(to_jid)
62
12e889a683ce server side: misc stuff:
Goffi <goffi@goffi.org>
parents: 58
diff changeset
433 showed = False
84
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
434 for lib_wid in self.libervia_widgets:
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
435 if isinstance(lib_wid,panels.ChatPanel) and (lib_wid.target.bare == _from.bare or lib_wid.target.bare == _to.bare):
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
436 lib_wid.printMessage(_from, msg)
62
12e889a683ce server side: misc stuff:
Goffi <goffi@goffi.org>
parents: 58
diff changeset
437 showed = True
12e889a683ce server side: misc stuff:
Goffi <goffi@goffi.org>
parents: 58
diff changeset
438 if not showed:
12e889a683ce server side: misc stuff:
Goffi <goffi@goffi.org>
parents: 58
diff changeset
439 #The message has not been showed, we must indicate it
12e889a683ce server side: misc stuff:
Goffi <goffi@goffi.org>
parents: 58
diff changeset
440 other = _to if _from.bare == self.whoami.bare else _from
12e889a683ce server side: misc stuff:
Goffi <goffi@goffi.org>
parents: 58
diff changeset
441 self.contact_panel.setContactMessageWaiting(other.bare, True)
12e889a683ce server side: misc stuff:
Goffi <goffi@goffi.org>
parents: 58
diff changeset
442
20
8f4b1a8914c3 - User status is now updated
Goffi <goffi@goffi.org>
parents: 19
diff changeset
443 def _presenceUpdateCb(self, entity, show, priority, statuses):
8f4b1a8914c3 - User status is now updated
Goffi <goffi@goffi.org>
parents: 19
diff changeset
444 _entity = JID(entity)
28
258dfaa1035f browser side:
Goffi <goffi@goffi.org>
parents: 23
diff changeset
445 #XXX: QnD way to get our status
20
8f4b1a8914c3 - User status is now updated
Goffi <goffi@goffi.org>
parents: 19
diff changeset
446 if self.whoami and self.whoami.bare == _entity.bare and statuses:
28
258dfaa1035f browser side:
Goffi <goffi@goffi.org>
parents: 23
diff changeset
447 self.status_panel.changeStatus(statuses.values()[0])
33
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 28
diff changeset
448 if (not self.whoami or self.whoami.bare != _entity.bare):
28
258dfaa1035f browser side:
Goffi <goffi@goffi.org>
parents: 23
diff changeset
449 self.contact_panel.setConnected(_entity.bare, _entity.resource, show, priority, statuses)
258dfaa1035f browser side:
Goffi <goffi@goffi.org>
parents: 23
diff changeset
450
125
f9d63624699f radio collective integration, first draft
Goffi <goffi@goffi.org>
parents: 122
diff changeset
451 def _roomJoinedCb(self, room_jid, room_nicks, user_nick):
f9d63624699f radio collective integration, first draft
Goffi <goffi@goffi.org>
parents: 122
diff changeset
452 _target = JID(room_jid)
33
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 28
diff changeset
453 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
454 chat_panel = panels.ChatPanel(self, _target, type_='group')
33
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 28
diff changeset
455 chat_panel.setUserNick(user_nick)
126
adecb2566b53 browser: fixed tabs not opening on room joining
Goffi <goffi@goffi.org>
parents: 125
diff changeset
456 if _target.node.startswith('sat_tarot_'): #XXX: it's not really beautiful, but it works :)
33
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 28
diff changeset
457 self.addTab(chat_panel, "Tarot")
127
e19a8de8b3de radio collective first draft
Goffi <goffi@goffi.org>
parents: 126
diff changeset
458 elif _target.node.startswith('sat_radiocol_'):
e19a8de8b3de radio collective first draft
Goffi <goffi@goffi.org>
parents: 126
diff changeset
459 self.addTab(chat_panel, "Radio collective")
28
258dfaa1035f browser side:
Goffi <goffi@goffi.org>
parents: 23
diff changeset
460 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
461 self.addTab(chat_panel, _target.node)
33
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 28
diff changeset
462 chat_panel.setPresents(room_nicks)
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 28
diff changeset
463 chat_panel.historyPrint()
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 28
diff changeset
464
146
d15fbb208ba0 browser side: fixed MUC signals management
Goffi <goffi@goffi.org>
parents: 141
diff changeset
465 def _roomUserJoinedCb(self, room_jid_s, user_nick, user_data):
84
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
466 for lib_wid in self.libervia_widgets:
146
d15fbb208ba0 browser side: fixed MUC signals management
Goffi <goffi@goffi.org>
parents: 141
diff changeset
467 if isinstance(lib_wid,panels.ChatPanel) and lib_wid.type == 'group' and lib_wid.target.bare == room_jid_s:
84
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
468 lib_wid.userJoined(user_nick, user_data)
33
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 28
diff changeset
469
146
d15fbb208ba0 browser side: fixed MUC signals management
Goffi <goffi@goffi.org>
parents: 141
diff changeset
470 def _roomUserLeftCb(self, room_jid_s, user_nick, user_data):
84
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
471 for lib_wid in self.libervia_widgets:
146
d15fbb208ba0 browser side: fixed MUC signals management
Goffi <goffi@goffi.org>
parents: 141
diff changeset
472 if isinstance(lib_wid,panels.ChatPanel) and lib_wid.type == 'group' and lib_wid.target.bare == room_jid_s:
84
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
473 lib_wid.userLeft(user_nick, user_data)
36
1d406077b49b Tarot Game: first draft
Goffi <goffi@goffi.org>
parents: 35
diff changeset
474
146
d15fbb208ba0 browser side: fixed MUC signals management
Goffi <goffi@goffi.org>
parents: 141
diff changeset
475 def _tarotGameStartedCb(self, room_jid_s, referee, players):
36
1d406077b49b Tarot Game: first draft
Goffi <goffi@goffi.org>
parents: 35
diff changeset
476 print ("Tarot Game Started \o/")
84
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
477 for lib_wid in self.libervia_widgets:
146
d15fbb208ba0 browser side: fixed MUC signals management
Goffi <goffi@goffi.org>
parents: 141
diff changeset
478 if isinstance(lib_wid,panels.ChatPanel) and lib_wid.type == 'group' and lib_wid.target.bare == room_jid_s:
84
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
479 lib_wid.startGame("Tarot", referee, players)
36
1d406077b49b Tarot Game: first draft
Goffi <goffi@goffi.org>
parents: 35
diff changeset
480
146
d15fbb208ba0 browser side: fixed MUC signals management
Goffi <goffi@goffi.org>
parents: 141
diff changeset
481 def _tarotGameGenericCb(self, event_name, room_jid_s, args):
84
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
482 for lib_wid in self.libervia_widgets:
146
d15fbb208ba0 browser side: fixed MUC signals management
Goffi <goffi@goffi.org>
parents: 141
diff changeset
483 if isinstance(lib_wid,panels.ChatPanel) and lib_wid.type == 'group' and lib_wid.target.bare == room_jid_s:
84
8f35e9970e7f browser side: new widget handling:
Goffi <goffi@goffi.org>
parents: 83
diff changeset
484 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
485
146
d15fbb208ba0 browser side: fixed MUC signals management
Goffi <goffi@goffi.org>
parents: 141
diff changeset
486 def _radioColStartedCb(self, room_jid_s, referee):
127
e19a8de8b3de radio collective first draft
Goffi <goffi@goffi.org>
parents: 126
diff changeset
487 for lib_wid in self.libervia_widgets:
146
d15fbb208ba0 browser side: fixed MUC signals management
Goffi <goffi@goffi.org>
parents: 141
diff changeset
488 if isinstance(lib_wid,panels.ChatPanel) and lib_wid.type == 'group' and lib_wid.target.bare == room_jid_s:
127
e19a8de8b3de radio collective first draft
Goffi <goffi@goffi.org>
parents: 126
diff changeset
489 lib_wid.startGame("RadioCol", referee)
e19a8de8b3de radio collective first draft
Goffi <goffi@goffi.org>
parents: 126
diff changeset
490
146
d15fbb208ba0 browser side: fixed MUC signals management
Goffi <goffi@goffi.org>
parents: 141
diff changeset
491 def _radioColGenericCb(self, event_name, room_jid_s, args):
128
2849ec993d89 basic radio collective
Goffi <goffi@goffi.org>
parents: 127
diff changeset
492 for lib_wid in self.libervia_widgets:
146
d15fbb208ba0 browser side: fixed MUC signals management
Goffi <goffi@goffi.org>
parents: 141
diff changeset
493 if isinstance(lib_wid,panels.ChatPanel) and lib_wid.type == 'group' and lib_wid.target.bare == room_jid_s:
128
2849ec993d89 basic radio collective
Goffi <goffi@goffi.org>
parents: 127
diff changeset
494 getattr(lib_wid.getGame("RadioCol"), event_name)(*args)
2849ec993d89 basic radio collective
Goffi <goffi@goffi.org>
parents: 127
diff changeset
495
2849ec993d89 basic radio collective
Goffi <goffi@goffi.org>
parents: 127
diff changeset
496
54
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 50
diff changeset
497 def _getPresenceStatusCb(self, presence_data):
28
258dfaa1035f browser side:
Goffi <goffi@goffi.org>
parents: 23
diff changeset
498 for entity in presence_data:
258dfaa1035f browser side:
Goffi <goffi@goffi.org>
parents: 23
diff changeset
499 for resource in presence_data[entity]:
258dfaa1035f browser side:
Goffi <goffi@goffi.org>
parents: 23
diff changeset
500 args = presence_data[entity][resource]
258dfaa1035f browser side:
Goffi <goffi@goffi.org>
parents: 23
diff changeset
501 self._presenceUpdateCb("%s/%s" % (entity, resource), *args)
20
8f4b1a8914c3 - User status is now updated
Goffi <goffi@goffi.org>
parents: 19
diff changeset
502
122
397a88b340f3 browser: fixed call to getRoomsJoined
Goffi <goffi@goffi.org>
parents: 119
diff changeset
503 def _getRoomsJoinedCb(self, room_data):
33
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 28
diff changeset
504 for room in room_data:
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 28
diff changeset
505 self._roomJoinedCb(*room)
e70521e6d803 browser side, misc stuffs
Goffi <goffi@goffi.org>
parents: 28
diff changeset
506
54
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 50
diff changeset
507 def _getWaitingSubCb(self, waiting_sub):
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 50
diff changeset
508 for sub in waiting_sub:
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 50
diff changeset
509 self._subscribeCb(waiting_sub[sub], sub)
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 50
diff changeset
510
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 50
diff changeset
511 def _subscribeCb(self, sub_type, entity):
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 50
diff changeset
512 if sub_type == 'subscribed':
55
d5266c41ca24 Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents: 54
diff changeset
513 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
514 self.getEntityMBlog(entity)
54
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 50
diff changeset
515
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 50
diff changeset
516 elif sub_type == 'unsubscribed':
55
d5266c41ca24 Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents: 54
diff changeset
517 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
518 #TODO: remove microblogs from panels
54
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 50
diff changeset
519
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 50
diff changeset
520 elif sub_type == 'subscribe':
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 50
diff changeset
521 #The user want to subscribe to our presence
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 50
diff changeset
522 _dialog = None
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 50
diff changeset
523 msg = HTML('The contact <b>%s</b> want to add you in his/her contact list, do you accept ?' % html_sanitize(entity))
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 50
diff changeset
524
62
12e889a683ce server side: misc stuff:
Goffi <goffi@goffi.org>
parents: 58
diff changeset
525 def ok_cb(ignore):
54
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 50
diff changeset
526 self.bridge.call('subscription', None, "subscribed", entity, '', _dialog.getSelectedGroups())
62
12e889a683ce server side: misc stuff:
Goffi <goffi@goffi.org>
parents: 58
diff changeset
527 def cancel_cb(ignore):
54
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 50
diff changeset
528 self.bridge.call('subscription', None, "unsubscribed", entity, '', '')
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 50
diff changeset
529
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 50
diff changeset
530 _dialog = dialog.GroupSelector([msg], self.contact_panel.getGroups(), [], ok_cb, cancel_cb)
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 50
diff changeset
531 _dialog.setHTML('<b>Add contact request</b>')
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 50
diff changeset
532 _dialog.show()
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 50
diff changeset
533
55
d5266c41ca24 Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents: 54
diff changeset
534 def _contactDeletedCb(self, entity):
d5266c41ca24 Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents: 54
diff changeset
535 self.contact_panel.removeContact(entity)
d5266c41ca24 Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents: 54
diff changeset
536
d5266c41ca24 Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents: 54
diff changeset
537 def _newContactCb(self, contact, attributes, groups):
d5266c41ca24 Roster list update, contact deletion + some refactoring
Goffi <goffi@goffi.org>
parents: 54
diff changeset
538 self.contact_panel.updateContact(contact, attributes, groups)
54
f25c4077f6b9 addind contact + subscription management + misc
Goffi <goffi@goffi.org>
parents: 50
diff changeset
539
137
b145da69a218 server + browser side: new api fix
Goffi <goffi@goffi.org>
parents: 135
diff changeset
540 def _entityDataUpdatedCb(self, entity_jid_s, key, value):
b145da69a218 server + browser side: new api fix
Goffi <goffi@goffi.org>
parents: 135
diff changeset
541 if key == "avatar":
b145da69a218 server + browser side: new api fix
Goffi <goffi@goffi.org>
parents: 135
diff changeset
542 avatar = '/avatars/%s' % value
119
a8d11fdea090 microblog avatar update
Goffi <goffi@goffi.org>
parents: 116
diff changeset
543
137
b145da69a218 server + browser side: new api fix
Goffi <goffi@goffi.org>
parents: 135
diff changeset
544 self.avatars_cache[entity_jid_s] = avatar
119
a8d11fdea090 microblog avatar update
Goffi <goffi@goffi.org>
parents: 116
diff changeset
545
a8d11fdea090 microblog avatar update
Goffi <goffi@goffi.org>
parents: 116
diff changeset
546 for lib_wid in self.libervia_widgets:
a8d11fdea090 microblog avatar update
Goffi <goffi@goffi.org>
parents: 116
diff changeset
547 if isinstance(lib_wid, panels.MicroblogPanel):
137
b145da69a218 server + browser side: new api fix
Goffi <goffi@goffi.org>
parents: 135
diff changeset
548 if lib_wid.isJidAccepted(entity_jid_s) or (self.whoami and entity_jid_s == self.whoami.bare):
b145da69a218 server + browser side: new api fix
Goffi <goffi@goffi.org>
parents: 135
diff changeset
549 lib_wid.updateValue('avatar', entity_jid_s, avatar)
119
a8d11fdea090 microblog avatar update
Goffi <goffi@goffi.org>
parents: 116
diff changeset
550
a8d11fdea090 microblog avatar update
Goffi <goffi@goffi.org>
parents: 116
diff changeset
551
a8d11fdea090 microblog avatar update
Goffi <goffi@goffi.org>
parents: 116
diff changeset
552
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
553 if __name__ == '__main__':
1
0a7c685faa53 ContactPanel: first draft
Goffi <goffi@goffi.org>
parents: 0
diff changeset
554 pyjd.setup("http://localhost:8080/libervia.html")
0
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
555 app = SatWebFrontend()
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
556 app.onModuleLoad()
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
557 pyjd.run()
140cec48224a Initial commit
Goffi <goffi@goffi.org>
parents:
diff changeset
558