Mercurial > libervia-desktop-kivy
annotate cagou/plugins/plugin_wid_remote.py @ 406:03554ad70846
common (jidSelector): replace implitict_update mechanism by real-time update:
instead of having the possibility to (de)activate implicit update, real time update of
items is now done.
For now only the notifications and opened chat items are updated in real time.
author | Goffi <goffi@goffi.org> |
---|---|
date | Wed, 12 Feb 2020 20:02:58 +0100 |
parents | f7476818f9fb |
children | 3c9ba4a694ef |
rev | line source |
---|---|
379 | 1 #!/usr/bin/env python3 |
2 | |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
3 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
4 # Cagou: desktop/mobile frontend for Salut à Toi XMPP client |
378 | 5 # Copyright (C) 2016-2020 Jérôme Poisson (goffi@goffi.org) |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
6 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
7 # This program is free software: you can redistribute it and/or modify |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
8 # it under the terms of the GNU Affero General Public License as published by |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
9 # the Free Software Foundation, either version 3 of the License, or |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
10 # (at your option) any later version. |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
11 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
12 # This program is distributed in the hope that it will be useful, |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
15 # GNU Affero General Public License for more details. |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
16 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
17 # You should have received a copy of the GNU Affero General Public License |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
19 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
20 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
21 from sat.core import log as logging |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
22 from sat.core.i18n import _ |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
23 from sat_frontends.quick_frontend import quick_widgets |
404
f7476818f9fb
core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents:
379
diff
changeset
|
24 from ..core import cagou_widget |
f7476818f9fb
core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents:
379
diff
changeset
|
25 from ..core.constants import Const as C |
f7476818f9fb
core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents:
379
diff
changeset
|
26 from ..core.behaviors import TouchMenuBehavior, FilterBehavior |
f7476818f9fb
core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents:
379
diff
changeset
|
27 from ..core.common_widgets import (Identities, ItemWidget, DeviceWidget, |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
28 CategorySeparator) |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
29 from sat.tools.common import template_xmlui |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
30 from cagou.core import xmlui |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
31 from sat_frontends.tools import jid |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
32 from kivy import properties |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
33 from kivy.uix.label import Label |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
34 from kivy.uix.boxlayout import BoxLayout |
305
b2727877bad4
remote: fixed workflow and size for XMLUI panel used with Ad-Hoc commands:
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
35 from kivy.uix.floatlayout import FloatLayout |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
36 from cagou import G |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
37 from functools import partial |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
38 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
39 |
322
e2b51663d8b8
core, android: new share widget + added Cagou to "share" menu:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
40 log = logging.getLogger(__name__) |
e2b51663d8b8
core, android: new share widget + added Cagou to "share" menu:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
41 |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
42 PLUGIN_INFO = { |
312 | 43 "name": _("remote control"), |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
44 "main": "RemoteControl", |
312 | 45 "description": _("universal remote control"), |
46 "icon_symbol": "signal", | |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
47 } |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
48 |
312 | 49 NOTE_TITLE = _("Media Player Remote Control") |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
50 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
51 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
52 class RemoteItemWidget(ItemWidget): |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
53 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
54 def __init__(self, device_jid, node, name, main_wid, **kw): |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
55 self.device_jid = device_jid |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
56 self.node = node |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
57 super(RemoteItemWidget, self).__init__(name=name, main_wid=main_wid, **kw) |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
58 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
59 def do_item_action(self, touch): |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
60 self.main_wid.layout.clear_widgets() |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
61 player_wid = MediaPlayerControlWidget(main_wid=self.main_wid, remote_item=self) |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
62 self.main_wid.layout.add_widget(player_wid) |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
63 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
64 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
65 class MediaPlayerControlWidget(BoxLayout): |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
66 main_wid = properties.ObjectProperty() |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
67 remote_item = properties.ObjectProperty() |
312 | 68 status = properties.OptionProperty("play", options=("play", "pause", "stop")) |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
69 title = properties.StringProperty() |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
70 identity = properties.StringProperty() |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
71 command = properties.DictProperty() |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
72 ui_tpl = properties.ObjectProperty() |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
73 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
74 @property |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
75 def profile(self): |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
76 return self.main_wid.profile |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
77 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
78 def updateUI(self, action_data): |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
79 xmlui_raw = action_data['xmlui'] |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
80 ui_tpl = template_xmlui.create(G.host, xmlui_raw) |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
81 self.ui_tpl = ui_tpl |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
82 for prop in ('Title', 'Identity'): |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
83 try: |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
84 setattr(self, prop.lower(), ui_tpl.widgets[prop].value) |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
85 except KeyError: |
312 | 86 log.warning(_("Missing field: {name}").format(name=prop)) |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
87 playback_status = self.ui_tpl.widgets['PlaybackStatus'].value |
312 | 88 if playback_status == "Playing": |
89 self.status = "pause" | |
90 elif playback_status == "Paused": | |
91 self.status = "play" | |
92 elif playback_status == "Stopped": | |
93 self.status = "play" | |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
94 else: |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
95 G.host.addNote( |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
96 title=NOTE_TITLE, |
312 | 97 message=_("Unknown playback status: playback_status") |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
98 .format(playback_status=playback_status), |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
99 level=C.XMLUI_DATA_LVL_WARNING) |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
100 self.commands = {v:k for k,v in ui_tpl.widgets['command'].options} |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
101 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
102 def adHocRunCb(self, xmlui_raw): |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
103 ui_tpl = template_xmlui.create(G.host, xmlui_raw) |
312 | 104 data = {xmlui.XMLUIPanel.escape("media_player"): self.remote_item.node, |
105 "session_id": ui_tpl.session_id} | |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
106 G.host.bridge.launchAction( |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
107 ui_tpl.submit_id, data, self.profile, |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
108 callback=self.updateUI, |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
109 errback=self.main_wid.errback) |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
110 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
111 def on_remote_item(self, __, remote): |
312 | 112 NS_MEDIA_PLAYER = G.host.ns_map["mediaplayer"] |
113 G.host.bridge.adHocRun(str(remote.device_jid), NS_MEDIA_PLAYER, self.profile, | |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
114 callback=self.adHocRunCb, |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
115 errback=self.main_wid.errback) |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
116 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
117 def do_cmd(self, command): |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
118 try: |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
119 cmd_value = self.commands[command] |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
120 except KeyError: |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
121 G.host.addNote( |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
122 title=NOTE_TITLE, |
312 | 123 message=_("{command} command is not managed").format(command=command), |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
124 level=C.XMLUI_DATA_LVL_WARNING) |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
125 else: |
312 | 126 data = {xmlui.XMLUIPanel.escape("command"): cmd_value, |
127 "session_id": self.ui_tpl.session_id} | |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
128 # hidden values are normally transparently managed by XMLUIPanel |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
129 # but here we have to add them by hand |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
130 hidden = {xmlui.XMLUIPanel.escape(k):v |
312 | 131 for k,v in self.ui_tpl.hidden.items()} |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
132 data.update(hidden) |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
133 G.host.bridge.launchAction( |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
134 self.ui_tpl.submit_id, data, self.profile, |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
135 callback=self.updateUI, |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
136 errback=self.main_wid.errback) |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
137 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
138 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
139 class RemoteDeviceWidget(DeviceWidget): |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
140 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
141 def xmluiCb(self, data, cb_id, profile): |
312 | 142 if 'xmlui' in data: |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
143 xml_ui = xmlui.create( |
312 | 144 G.host, data['xmlui'], callback=self.xmluiCb, profile=profile) |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
145 if isinstance(xml_ui, xmlui.XMLUIDialog): |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
146 self.main_wid.showRootWidget() |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
147 xml_ui.show() |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
148 else: |
305
b2727877bad4
remote: fixed workflow and size for XMLUI panel used with Ad-Hoc commands:
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
149 xml_ui.setCloseCb(self.onClose) |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
150 self.main_wid.layout.add_widget(xml_ui) |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
151 else: |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
152 if data: |
312 | 153 log.warning(_("Unhandled data: {data}").format(data=data)) |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
154 self.main_wid.showRootWidget() |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
155 |
305
b2727877bad4
remote: fixed workflow and size for XMLUI panel used with Ad-Hoc commands:
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
156 def onClose(self, __, reason): |
b2727877bad4
remote: fixed workflow and size for XMLUI panel used with Ad-Hoc commands:
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
157 if reason == C.XMLUI_DATA_CANCELLED: |
b2727877bad4
remote: fixed workflow and size for XMLUI panel used with Ad-Hoc commands:
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
158 self.main_wid.showRootWidget() |
b2727877bad4
remote: fixed workflow and size for XMLUI panel used with Ad-Hoc commands:
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
159 else: |
b2727877bad4
remote: fixed workflow and size for XMLUI panel used with Ad-Hoc commands:
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
160 self.main_wid.layout.clear_widgets() |
b2727877bad4
remote: fixed workflow and size for XMLUI panel used with Ad-Hoc commands:
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
161 |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
162 def adHocRunCb(self, data): |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
163 xml_ui = xmlui.create(G.host, data, callback=self.xmluiCb, profile=self.profile) |
305
b2727877bad4
remote: fixed workflow and size for XMLUI panel used with Ad-Hoc commands:
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
164 xml_ui.setCloseCb(self.onClose) |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
165 self.main_wid.layout.add_widget(xml_ui) |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
166 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
167 def do_item_action(self, touch): |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
168 self.main_wid.layout.clear_widgets() |
312 | 169 G.host.bridge.adHocRun(str(self.entity_jid), '', self.profile, |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
170 callback=self.adHocRunCb, errback=self.main_wid.errback) |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
171 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
172 |
305
b2727877bad4
remote: fixed workflow and size for XMLUI panel used with Ad-Hoc commands:
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
173 class DevicesLayout(FloatLayout): |
b2727877bad4
remote: fixed workflow and size for XMLUI panel used with Ad-Hoc commands:
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
174 """Layout used to show devices""" |
b2727877bad4
remote: fixed workflow and size for XMLUI panel used with Ad-Hoc commands:
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
175 layout = properties.ObjectProperty() |
b2727877bad4
remote: fixed workflow and size for XMLUI panel used with Ad-Hoc commands:
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
176 |
b2727877bad4
remote: fixed workflow and size for XMLUI panel used with Ad-Hoc commands:
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
177 |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
178 class RemoteControl(quick_widgets.QuickWidget, cagou_widget.CagouWidget, FilterBehavior, |
404
f7476818f9fb
core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents:
379
diff
changeset
|
179 TouchMenuBehavior): |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
180 SINGLE=False |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
181 layout = properties.ObjectProperty() |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
182 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
183 def __init__(self, host, target, profiles): |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
184 quick_widgets.QuickWidget.__init__(self, host, target, profiles) |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
185 cagou_widget.CagouWidget.__init__(self) |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
186 FilterBehavior.__init__(self) |
404
f7476818f9fb
core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents:
379
diff
changeset
|
187 TouchMenuBehavior.__init__(self) |
305
b2727877bad4
remote: fixed workflow and size for XMLUI panel used with Ad-Hoc commands:
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
188 self.stack_layout = None |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
189 self.showRootWidget() |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
190 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
191 def errback(self, failure_): |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
192 """Generic errback which add a warning note and go back to root widget""" |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
193 G.host.addNote( |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
194 title=NOTE_TITLE, |
312 | 195 message=_("Can't use remote control: {reason}").format(reason=failure_), |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
196 level=C.XMLUI_DATA_LVL_WARNING) |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
197 self.showRootWidget() |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
198 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
199 def key_input(self, window, key, scancode, codepoint, modifier): |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
200 if key == 27: |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
201 self.showRootWidget() |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
202 return True |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
203 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
204 def showRootWidget(self): |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
205 self.layout.clear_widgets() |
305
b2727877bad4
remote: fixed workflow and size for XMLUI panel used with Ad-Hoc commands:
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
206 devices_layout = DevicesLayout() |
b2727877bad4
remote: fixed workflow and size for XMLUI panel used with Ad-Hoc commands:
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
207 self.stack_layout = devices_layout.layout |
b2727877bad4
remote: fixed workflow and size for XMLUI panel used with Ad-Hoc commands:
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
208 self.layout.add_widget(devices_layout) |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
209 found = [] |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
210 self.get_remotes(found) |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
211 self.discover_devices(found) |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
212 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
213 def adHocRemotesGetCb(self, remotes_data, found): |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
214 found.insert(0, remotes_data) |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
215 if len(found) == 2: |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
216 self.show_devices(found) |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
217 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
218 def adHocRemotesGetEb(self, failure_, found): |
312 | 219 G.host.errback(failure_, title=_("discovery error"), |
220 message=_("can't check remote controllers: {msg}")) | |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
221 found.insert(0, []) |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
222 if len(found) == 2: |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
223 self.show_devices(found) |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
224 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
225 def get_remotes(self, found): |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
226 self.host.bridge.adHocRemotesGet( |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
227 self.profile, |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
228 callback=partial(self.adHocRemotesGetCb, found=found), |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
229 errback=partial(self.adHocRemotesGetEb,found=found)) |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
230 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
231 def _discoFindByFeaturesCb(self, data, found): |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
232 found.append(data) |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
233 if len(found) == 2: |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
234 self.show_devices(found) |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
235 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
236 def _discoFindByFeaturesEb(self, failure_, found): |
312 | 237 G.host.errback(failure_, title=_("discovery error"), |
238 message=_("can't check devices: {msg}")) | |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
239 found.append(({}, {}, {})) |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
240 if len(found) == 2: |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
241 self.show_devices(found) |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
242 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
243 def discover_devices(self, found): |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
244 """Looks for devices handling file "File Information Sharing" and display them""" |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
245 try: |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
246 namespace = self.host.ns_map['commands'] |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
247 except KeyError: |
312 | 248 msg = _("can't find ad-hoc commands namespace, is the plugin running?") |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
249 log.warning(msg) |
312 | 250 G.host.addNote(_("missing plugin"), msg, C.XMLUI_DATA_LVL_ERROR) |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
251 return |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
252 self.host.bridge.discoFindByFeatures( |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
253 [namespace], [], False, True, True, True, False, self.profile, |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
254 callback=partial(self._discoFindByFeaturesCb, found=found), |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
255 errback=partial(self._discoFindByFeaturesEb, found=found)) |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
256 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
257 def show_devices(self, found): |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
258 remotes_data, (entities_services, entities_own, entities_roster) = found |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
259 if remotes_data: |
312 | 260 title = _("media players remote controls") |
305
b2727877bad4
remote: fixed workflow and size for XMLUI panel used with Ad-Hoc commands:
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
261 self.stack_layout.add_widget(CategorySeparator(text=title)) |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
262 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
263 for remote_data in remotes_data: |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
264 device_jid, node, name = remote_data |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
265 wid = RemoteItemWidget(device_jid, node, name, self) |
305
b2727877bad4
remote: fixed workflow and size for XMLUI panel used with Ad-Hoc commands:
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
266 self.stack_layout.add_widget(wid) |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
267 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
268 for entities_map, title in ((entities_services, |
312 | 269 _('services')), |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
270 (entities_own, |
312 | 271 _('your devices')), |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
272 (entities_roster, |
312 | 273 _('your contacts devices'))): |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
274 if entities_map: |
305
b2727877bad4
remote: fixed workflow and size for XMLUI panel used with Ad-Hoc commands:
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
275 self.stack_layout.add_widget(CategorySeparator(text=title)) |
312 | 276 for entity_str, entity_ids in entities_map.items(): |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
277 entity_jid = jid.JID(entity_str) |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
278 item = RemoteDeviceWidget( |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
279 self, entity_jid, Identities(entity_ids)) |
305
b2727877bad4
remote: fixed workflow and size for XMLUI panel used with Ad-Hoc commands:
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
280 self.stack_layout.add_widget(item) |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
281 if (not remotes_data and not entities_services and not entities_own |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
282 and not entities_roster): |
305
b2727877bad4
remote: fixed workflow and size for XMLUI panel used with Ad-Hoc commands:
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
283 self.stack_layout.add_widget(Label( |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
284 size_hint=(1, 1), |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
285 halign='center', |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
286 text_size=self.size, |
312 | 287 text=_("No sharing device found"))) |