mirror of https://git.48k.eu/ogcp
views: Preselect most used oglive
When setting up oglive, preselect oglive that is most used by selected clients. If only one client is selected, preselect that of the client. In the unusual scenario where a client is set with an oglive that is not in the ogserver's list of available oglives, preselect default.master
parent
a45f664905
commit
db63b6bc60
|
@ -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',
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue