summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ogcp/templates/actions/oglive.html25
-rw-r--r--ogcp/views.py36
2 files changed, 58 insertions, 3 deletions
diff --git a/ogcp/templates/actions/oglive.html b/ogcp/templates/actions/oglive.html
index 6b8e8b3..81b70dd 100644
--- a/ogcp/templates/actions/oglive.html
+++ b/ogcp/templates/actions/oglive.html
@@ -17,6 +17,31 @@
{{ macros.cmd_selected_clients(selected_clients) }}
+{% if oglives_set|length > 1 %}
+ <p>Selected clients have different ogLive</p>
+
+ <table class="table table-hover">
+ <thead class="thead-light">
+ <tr>
+ <th>ogLive</th>
+ <th>Clients</th>
+ </tr>
+ </thead>
+ <tbody class="text-left">
+ {% for oglive, clients in oglives_set.items() %}
+ <tr>
+ <th>{{oglive}}</th>
+ <td>
+ {% for client in clients %}
+ {{client}}
+ {% endfor %}
+ </td>
+ </tr>
+ {% endfor %}
+ </tbody>
+ </table>
+{% endif %}
+
{{ wtf.quick_form(form,
action=url_for('action_oglive'),
method='post',
diff --git a/ogcp/views.py b/ogcp/views.py
index 24df2e3..f6f1fb7 100644
--- a/ogcp/views.py
+++ b/ogcp/views.py
@@ -1577,6 +1577,22 @@ def action_mode():
selected_clients=selected_clients,
clients=clients, modes_set=modes_set)
+def get_clients_oglive(ips, server):
+ oglives = {}
+ for ip in ips:
+ r = server.get('/client/info', payload={"client": [ip]})
+ if not r:
+ raise ServerError
+ if r.status_code != requests.codes.ok:
+ raise ServerErrorCode
+ resp = r.json()
+ oglive = resp['livedir']
+ client_name = resp['name']
+ if oglive not in oglives:
+ oglives[oglive] = [client_name]
+ else:
+ oglives[oglive].append(client_name)
+ return oglives
@app.route('/action/oglive', methods=['GET', 'POST'])
@login_required
@@ -1602,21 +1618,35 @@ def action_oglive():
return redirect(url_for('commands'))
server = get_server_from_clients(list(ips))
+
+ try:
+ oglives_set = get_clients_oglive(ips, server)
+ except ServerError:
+ return ogserver_down('commands')
+ except ServerErrorCode:
+ return ogserver_error('commands')
+
r = server.get('/oglive/list')
if not r:
return ogserver_down('commands')
if r.status_code != requests.codes.ok:
return ogserver_error('commands')
+ most_used_oglive = max(oglives_set, key=lambda l: len(oglives_set[l]))
available_oglives = [(oglive.get('directory'), oglive.get('directory'))
- for oglive in r.json()['oglive']]
- available_oglives.insert(0, ('default', 'default'))
+ for oglive in r.json()['oglive']
+ if oglive.get('directory') == most_used_oglive]
+ if not available_oglives:
+ available_oglives.append(('default', 'default'))
+ available_oglives.extend([(oglive.get('directory'), oglive.get('directory'))
+ for oglive in r.json()['oglive']
+ if oglive.get('directory') != most_used_oglive])
form.oglive.choices = list(available_oglives)
form.ok.render_kw = {'formaction': url_for('action_oglive')}
scopes, clients = get_scopes(set(ips))
selected_clients = list(get_selected_clients(scopes['scope']).items())
- return render_template('actions/oglive.html', form=form, scopes=scopes,
+ return render_template('actions/oglive.html', oglives_set=oglives_set, form=form, scopes=scopes,
selected_clients=selected_clients)