diff options
Diffstat (limited to 'ogcp/views.py')
-rw-r--r-- | ogcp/views.py | 36 |
1 files changed, 33 insertions, 3 deletions
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) |