Mercurial > libervia-desktop-kivy
annotate cagou/plugins/plugin_wid_remote.py @ 492:5114bbb5daa3
plugin remove: update `action_launch` call following changes in bridge API
author | Goffi <goffi@goffi.org> |
---|---|
date | Fri, 02 Jun 2023 17:53:09 +0200 |
parents | 203755bbe0fe |
children |
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 |
461 | 5 # Copyright (C) 2016-2021 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 |
492
5114bbb5daa3
plugin remove: update `action_launch` call following changes in bridge API
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
30 from sat.tools.common import data_format |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
31 from cagou.core import xmlui |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
32 from sat_frontends.tools import jid |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
33 from kivy import properties |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
34 from kivy.uix.label import Label |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
35 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
|
36 from kivy.uix.floatlayout import FloatLayout |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
37 from cagou import G |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
38 from functools import partial |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
39 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
40 |
322
e2b51663d8b8
core, android: new share widget + added Cagou to "share" menu:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
41 log = logging.getLogger(__name__) |
e2b51663d8b8
core, android: new share widget + added Cagou to "share" menu:
Goffi <goffi@goffi.org>
parents:
312
diff
changeset
|
42 |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
43 PLUGIN_INFO = { |
312 | 44 "name": _("remote control"), |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
45 "main": "RemoteControl", |
312 | 46 "description": _("universal remote control"), |
47 "icon_symbol": "signal", | |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
48 } |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
49 |
312 | 50 NOTE_TITLE = _("Media Player Remote Control") |
238
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 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
53 class RemoteItemWidget(ItemWidget): |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
54 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
55 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
|
56 self.device_jid = device_jid |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
57 self.node = node |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
58 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
|
59 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
60 def do_item_action(self, touch): |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
61 self.main_wid.layout.clear_widgets() |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
62 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
|
63 self.main_wid.layout.add_widget(player_wid) |
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 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
66 class MediaPlayerControlWidget(BoxLayout): |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
67 main_wid = properties.ObjectProperty() |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
68 remote_item = properties.ObjectProperty() |
312 | 69 status = properties.OptionProperty("play", options=("play", "pause", "stop")) |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
70 title = properties.StringProperty() |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
71 identity = properties.StringProperty() |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
72 command = properties.DictProperty() |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
73 ui_tpl = properties.ObjectProperty() |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
74 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
75 @property |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
76 def profile(self): |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
77 return self.main_wid.profile |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
78 |
492
5114bbb5daa3
plugin remove: update `action_launch` call following changes in bridge API
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
79 def update_ui(self, action_data_s): |
5114bbb5daa3
plugin remove: update `action_launch` call following changes in bridge API
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
80 action_data = data_format.deserialise(action_data_s) |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
81 xmlui_raw = action_data['xmlui'] |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
82 ui_tpl = template_xmlui.create(G.host, xmlui_raw) |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
83 self.ui_tpl = ui_tpl |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
84 for prop in ('Title', 'Identity'): |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
85 try: |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
86 setattr(self, prop.lower(), ui_tpl.widgets[prop].value) |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
87 except KeyError: |
312 | 88 log.warning(_("Missing field: {name}").format(name=prop)) |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
89 playback_status = self.ui_tpl.widgets['PlaybackStatus'].value |
312 | 90 if playback_status == "Playing": |
91 self.status = "pause" | |
92 elif playback_status == "Paused": | |
93 self.status = "play" | |
94 elif playback_status == "Stopped": | |
95 self.status = "play" | |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
96 else: |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
97 G.host.add_note( |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
98 title=NOTE_TITLE, |
312 | 99 message=_("Unknown playback status: playback_status") |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
100 .format(playback_status=playback_status), |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
101 level=C.XMLUI_DATA_LVL_WARNING) |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
102 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
|
103 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
104 def ad_hoc_run_cb(self, xmlui_raw): |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
105 ui_tpl = template_xmlui.create(G.host, xmlui_raw) |
312 | 106 data = {xmlui.XMLUIPanel.escape("media_player"): self.remote_item.node, |
107 "session_id": ui_tpl.session_id} | |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
108 G.host.bridge.action_launch( |
492
5114bbb5daa3
plugin remove: update `action_launch` call following changes in bridge API
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
109 ui_tpl.submit_id, data_format.serialise(data), |
5114bbb5daa3
plugin remove: update `action_launch` call following changes in bridge API
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
110 self.profile, callback=self.update_ui, |
5114bbb5daa3
plugin remove: update `action_launch` call following changes in bridge API
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
111 errback=self.main_wid.errback |
5114bbb5daa3
plugin remove: update `action_launch` call following changes in bridge API
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
112 ) |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
113 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
114 def on_remote_item(self, __, remote): |
312 | 115 NS_MEDIA_PLAYER = G.host.ns_map["mediaplayer"] |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
116 G.host.bridge.ad_hoc_run(str(remote.device_jid), NS_MEDIA_PLAYER, self.profile, |
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
117 callback=self.ad_hoc_run_cb, |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
118 errback=self.main_wid.errback) |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
119 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
120 def do_cmd(self, command): |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
121 try: |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
122 cmd_value = self.commands[command] |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
123 except KeyError: |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
124 G.host.add_note( |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
125 title=NOTE_TITLE, |
312 | 126 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
|
127 level=C.XMLUI_DATA_LVL_WARNING) |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
128 else: |
312 | 129 data = {xmlui.XMLUIPanel.escape("command"): cmd_value, |
130 "session_id": self.ui_tpl.session_id} | |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
131 # hidden values are normally transparently managed by XMLUIPanel |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
132 # but here we have to add them by hand |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
133 hidden = {xmlui.XMLUIPanel.escape(k):v |
312 | 134 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
|
135 data.update(hidden) |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
136 G.host.bridge.action_launch( |
492
5114bbb5daa3
plugin remove: update `action_launch` call following changes in bridge API
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
137 self.ui_tpl.submit_id, data_format.serialise(data), self.profile, |
5114bbb5daa3
plugin remove: update `action_launch` call following changes in bridge API
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
138 callback=self.update_ui, errback=self.main_wid.errback |
5114bbb5daa3
plugin remove: update `action_launch` call following changes in bridge API
Goffi <goffi@goffi.org>
parents:
491
diff
changeset
|
139 ) |
238
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 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
142 class RemoteDeviceWidget(DeviceWidget): |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
143 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
144 def xmlui_cb(self, data, cb_id, profile): |
312 | 145 if 'xmlui' in data: |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
146 xml_ui = xmlui.create( |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
147 G.host, data['xmlui'], callback=self.xmlui_cb, profile=profile) |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
148 if isinstance(xml_ui, xmlui.XMLUIDialog): |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
149 self.main_wid.show_root_widget() |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
150 xml_ui.show() |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
151 else: |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
152 xml_ui.set_close_cb(self.on_close) |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
153 self.main_wid.layout.add_widget(xml_ui) |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
154 else: |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
155 if data: |
312 | 156 log.warning(_("Unhandled data: {data}").format(data=data)) |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
157 self.main_wid.show_root_widget() |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
158 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
159 def on_close(self, __, reason): |
305
b2727877bad4
remote: fixed workflow and size for XMLUI panel used with Ad-Hoc commands:
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
160 if reason == C.XMLUI_DATA_CANCELLED: |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
161 self.main_wid.show_root_widget() |
305
b2727877bad4
remote: fixed workflow and size for XMLUI panel used with Ad-Hoc commands:
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
162 else: |
b2727877bad4
remote: fixed workflow and size for XMLUI panel used with Ad-Hoc commands:
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
163 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
|
164 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
165 def ad_hoc_run_cb(self, data): |
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
166 xml_ui = xmlui.create(G.host, data, callback=self.xmlui_cb, profile=self.profile) |
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
167 xml_ui.set_close_cb(self.on_close) |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
168 self.main_wid.layout.add_widget(xml_ui) |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
169 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
170 def do_item_action(self, touch): |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
171 self.main_wid.layout.clear_widgets() |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
172 G.host.bridge.ad_hoc_run(str(self.entity_jid), '', self.profile, |
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
173 callback=self.ad_hoc_run_cb, errback=self.main_wid.errback) |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
174 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
175 |
305
b2727877bad4
remote: fixed workflow and size for XMLUI panel used with Ad-Hoc commands:
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
176 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
|
177 """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
|
178 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
|
179 |
b2727877bad4
remote: fixed workflow and size for XMLUI panel used with Ad-Hoc commands:
Goffi <goffi@goffi.org>
parents:
282
diff
changeset
|
180 |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
181 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
|
182 TouchMenuBehavior): |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
183 SINGLE=False |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
184 layout = properties.ObjectProperty() |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
185 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
186 def __init__(self, host, target, profiles): |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
187 quick_widgets.QuickWidget.__init__(self, host, target, profiles) |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
188 cagou_widget.CagouWidget.__init__(self) |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
189 FilterBehavior.__init__(self) |
404
f7476818f9fb
core (common): JidSelector + behaviors various improvments:
Goffi <goffi@goffi.org>
parents:
379
diff
changeset
|
190 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
|
191 self.stack_layout = None |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
192 self.show_root_widget() |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
193 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
194 def errback(self, failure_): |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
195 """Generic errback which add a warning note and go back to root widget""" |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
196 G.host.add_note( |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
197 title=NOTE_TITLE, |
312 | 198 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
|
199 level=C.XMLUI_DATA_LVL_WARNING) |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
200 self.show_root_widget() |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
201 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
202 def key_input(self, window, key, scancode, codepoint, modifier): |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
203 if key == 27: |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
204 self.show_root_widget() |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
205 return True |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
206 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
207 def show_root_widget(self): |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
208 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
|
209 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
|
210 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
|
211 self.layout.add_widget(devices_layout) |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
212 found = [] |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
213 self.get_remotes(found) |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
214 self.discover_devices(found) |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
215 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
216 def ad_hoc_remotes_get_cb(self, remotes_data, found): |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
217 found.insert(0, remotes_data) |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
218 if len(found) == 2: |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
219 self.show_devices(found) |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
220 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
221 def ad_hoc_remotes_get_eb(self, failure_, found): |
312 | 222 G.host.errback(failure_, title=_("discovery error"), |
223 message=_("can't check remote controllers: {msg}")) | |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
224 found.insert(0, []) |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
225 if len(found) == 2: |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
226 self.show_devices(found) |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
227 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
228 def get_remotes(self, found): |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
229 self.host.bridge.ad_hoc_remotes_get( |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
230 self.profile, |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
231 callback=partial(self.ad_hoc_remotes_get_cb, found=found), |
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
232 errback=partial(self.ad_hoc_remotes_get_eb,found=found)) |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
233 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
234 def _disco_find_by_features_cb(self, data, found): |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
235 found.append(data) |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
236 if len(found) == 2: |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
237 self.show_devices(found) |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
238 |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
239 def _disco_find_by_features_eb(self, failure_, found): |
312 | 240 G.host.errback(failure_, title=_("discovery error"), |
241 message=_("can't check devices: {msg}")) | |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
242 found.append(({}, {}, {})) |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
243 if len(found) == 2: |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
244 self.show_devices(found) |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
245 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
246 def discover_devices(self, found): |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
247 """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
|
248 try: |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
249 namespace = self.host.ns_map['commands'] |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
250 except KeyError: |
312 | 251 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
|
252 log.warning(msg) |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
253 G.host.add_note(_("missing plugin"), msg, C.XMLUI_DATA_LVL_ERROR) |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
254 return |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
255 self.host.bridge.disco_find_by_features( |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
256 [namespace], [], False, True, True, True, False, self.profile, |
491
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
257 callback=partial(self._disco_find_by_features_cb, found=found), |
203755bbe0fe
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
258 errback=partial(self._disco_find_by_features_eb, found=found)) |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
259 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
260 def show_devices(self, found): |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
261 remotes_data, (entities_services, entities_own, entities_roster) = found |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
262 if remotes_data: |
312 | 263 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
|
264 self.stack_layout.add_widget(CategorySeparator(text=title)) |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
265 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
266 for remote_data in remotes_data: |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
267 device_jid, node, name = remote_data |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
268 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
|
269 self.stack_layout.add_widget(wid) |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
270 |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
271 for entities_map, title in ((entities_services, |
312 | 272 _('services')), |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
273 (entities_own, |
312 | 274 _('your devices')), |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
275 (entities_roster, |
312 | 276 _('your contacts devices'))): |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
277 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
|
278 self.stack_layout.add_widget(CategorySeparator(text=title)) |
312 | 279 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
|
280 entity_jid = jid.JID(entity_str) |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
281 item = RemoteDeviceWidget( |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
282 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
|
283 self.stack_layout.add_widget(item) |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
284 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
|
285 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
|
286 self.stack_layout.add_widget(Label( |
238
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
287 size_hint=(1, 1), |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
288 halign='center', |
7918a5668304
plugin remote: remote controllers plugin first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
289 text_size=self.size, |
312 | 290 text=_("No sharing device found"))) |