Einstellungsseite hinzugefügt

This commit is contained in:
2021-10-06 01:59:30 +02:00
parent 78a39b8d17
commit 569daf0a04
3 changed files with 72 additions and 16 deletions

View File

@ -2,7 +2,8 @@ from flask import Flask, render_template, Response, abort, request, redirect
import helpers import helpers
import database import database
import data_adapters import data_adapters
import os, errno import os
import errno
import json import json
from flask_basicauth import BasicAuth from flask_basicauth import BasicAuth
app = Flask(__name__, static_url_path='/static') app = Flask(__name__, static_url_path='/static')
@ -10,6 +11,7 @@ app = Flask(__name__, static_url_path='/static')
basic_auth = BasicAuth(app) basic_auth = BasicAuth(app)
accept_entries = False accept_entries = False
@app.route("/") @app.route("/")
def home(): def home():
if basic_auth.authenticate(): if basic_auth.authenticate():
@ -17,6 +19,7 @@ def home():
else: else:
return render_template('main.html', list=database.get_list(), auth=basic_auth.authenticate()) return render_template('main.html', list=database.get_list(), auth=basic_auth.authenticate())
@app.route('/api/enqueue', methods=['POST']) @app.route('/api/enqueue', methods=['POST'])
def enqueue(): def enqueue():
if not request.json: if not request.json:
@ -47,45 +50,73 @@ def enqueue():
database.add_entry(name, song_id, client_id) database.add_entry(name, song_id, client_id)
return Response('{"status":"OK"}', mimetype='text/json') return Response('{"status":"OK"}', mimetype='text/json')
else: else:
return Response('{"status":"Too many queued entries from this client"}', mimetype='text/json',status=423) return Response('{"status":"Du hast bereits ' + str(database.check_entry_quota(client_id)) + ' Songs eingetragen, dies ist das Maximum an Einträgen die du in der Warteliste haben kannst."}', mimetype='text/json', status=423)
else: else:
return Response('{"status":"Queue full"}', mimetype='text/json',status=423) return Response('{"status":"Die Warteschlange enthält momentan ' + str(database.check_queue_length()) + ' Einträge und ist lang genug, bitte versuche es noch einmal wenn ein paar Songs gesungen wurden."}', mimetype='text/json', status=423)
else: else:
return Response('{"status":"Currently not accepting entries"}', mimetype='text/json',status=423) return Response('{"status":"Currently not accepting entries"}', mimetype='text/json', status=423)
@app.route("/list") @app.route("/list")
def songlist(): def songlist():
return render_template('songlist.html', list=database.get_song_list(), auth=basic_auth.authenticate()) return render_template('songlist.html', list=database.get_song_list(), auth=basic_auth.authenticate())
@app.route("/settings")
@basic_auth.required
def settings():
return render_template('settings.html', app=app, auth=basic_auth.authenticate())
@app.route("/settings", methods=['POST'])
@basic_auth.required
def settings_post():
entryquota = request.form.get("entryquota")
maxqueue = request.form.get("maxqueue")
if entryquota.isnumeric() and int(entryquota) > 0:
app.config['ENTRY_QUOTA'] = entryquota
else:
abort(400)
if maxqueue.isnumeric and int(maxqueue) > 0:
app.config['MAX_QUEUE'] = maxqueue
else:
abort(400)
return render_template('settings.html', app=app, auth=basic_auth.authenticate())
@app.route("/api/queue") @app.route("/api/queue")
def queue_json(): def queue_json():
list = data_adapters.dict_from_rows(database.get_list()) list = data_adapters.dict_from_rows(database.get_list())
return Response(json.dumps(list, ensure_ascii=False).encode('utf-8'), mimetype='text/json') return Response(json.dumps(list, ensure_ascii=False).encode('utf-8'), mimetype='text/json')
@app.route("/plays") @app.route("/plays")
@basic_auth.required @basic_auth.required
def played_list(): def played_list():
return render_template('played_list.html', list=database.get_played_list(), auth=basic_auth.authenticate()) return render_template('played_list.html', list=database.get_played_list(), auth=basic_auth.authenticate())
@app.route("/api/songs") @app.route("/api/songs")
def songs(): def songs():
list = database.get_song_list() list = database.get_song_list()
return Response(json.dumps(list, ensure_ascii=False).encode('utf-8'), mimetype='text/json') return Response(json.dumps(list, ensure_ascii=False).encode('utf-8'), mimetype='text/json')
@app.route("/api/songs/update") @app.route("/api/songs/update")
@basic_auth.required @basic_auth.required
def update_songs(): def update_songs():
database.delete_all_entries() database.delete_all_entries()
status = database.import_songs(helpers.get_songs(helpers.get_catalog_url())) status = database.import_songs(
helpers.get_songs(helpers.get_catalog_url()))
print(status) print(status)
return Response('{"status": "%s" }' % status, mimetype='text/json') return Response('{"status": "%s" }' % status, mimetype='text/json')
@app.route("/api/songs/compl") @app.route("/api/songs/compl")
def get_song_completions(input_string=""): def get_song_completions(input_string=""):
input_string = request.args.get('search',input_string) input_string = request.args.get('search', input_string)
if input_string!="": if input_string != "":
print(input_string) print(input_string)
list = database.get_song_completions(input_string=input_string) list = database.get_song_completions(input_string=input_string)
return Response(json.dumps(list, ensure_ascii=False).encode('utf-8'), mimetype='text/json') return Response(json.dumps(list, ensure_ascii=False).encode('utf-8'), mimetype='text/json')
@ -125,12 +156,13 @@ def mark_sung(entry_id):
else: else:
return Response('{"status": "FAIL"}', mimetype='text/json') return Response('{"status": "FAIL"}', mimetype='text/json')
@app.route("/api/entries/accept/<value>") @app.route("/api/entries/accept/<value>")
@basic_auth.required @basic_auth.required
def set_accept_entries(value): def set_accept_entries(value):
global accept_entries global accept_entries
if (value=='0' or value=='1'): if (value == '0' or value == '1'):
accept_entries=bool(int(value)) accept_entries = bool(int(value))
return Response('{"status": "OK"}', mimetype='text/json') return Response('{"status": "OK"}', mimetype='text/json')
else: else:
return Response('{"status": "FAIL"}', mimetype='text/json', status=400) return Response('{"status": "FAIL"}', mimetype='text/json', status=400)
@ -150,6 +182,7 @@ def clear_played_songs():
else: else:
return Response('{"status": "FAIL"}', mimetype='text/json') return Response('{"status": "FAIL"}', mimetype='text/json')
@app.route("/api/entries/delete_all") @app.route("/api/entries/delete_all")
@basic_auth.required @basic_auth.required
def delete_all_entries(): def delete_all_entries():
@ -158,11 +191,13 @@ def delete_all_entries():
else: else:
return Response('{"status": "FAIL"}', mimetype='text/json') return Response('{"status": "FAIL"}', mimetype='text/json')
@app.route("/login") @app.route("/login")
@basic_auth.required @basic_auth.required
def admin(): def admin():
return redirect("/", code=303) return redirect("/", code=303)
@app.before_first_request @app.before_first_request
def activate_job(): def activate_job():
helpers.create_data_directory() helpers.create_data_directory()

View File

@ -51,6 +51,9 @@
<li class="nav-item"> <li class="nav-item">
<a class="nav-link" href="/plays">Abspielliste</a> <a class="nav-link" href="/plays">Abspielliste</a>
</li> </li>
<li class="nav-item">
<a class="nav-link" href="/settings">Einstellungen</a>
</li>
{% endif %} {% endif %}
</ul> </ul>
<!--<form class="form-inline my-2 my-lg-0"> <!--<form class="form-inline my-2 my-lg-0">

View File

@ -0,0 +1,18 @@
{% extends 'base.html' %}
{% block title %}Einstellungen{% endblock %}
{% block content %}
<form method="post">
<p>
<input type="number" id="entryquota" name="entryquota" min=1 value={{app.config['ENTRY_QUOTA']}}>
<label for="entryquota">Maximale Anzahl an Einträgen pro Nutzer</label>
</p>
<p>
<input type="number" id="maxqueue" name="maxqueue" min=1 value={{app.config['MAX_QUEUE']}}>
<label for="maxqueue">Maximale Anzahl an Einträgen Insgesamt</label>
</p>
<input type="submit" value="Einstellungen anwenden">
<input type="button" onclick="$.get('/writeSettings').done(()=>{alert('Einstellungen gespeichert')}).fail(()=>{alert('Fehler beim Speichern der Einstellungen')})" value="Einstellungen speichern"/>
</form>
{% endblock %}
{% block extrajs %}
{% endblock %}