mirror of
https://github.com/PhoenixTwoFive/karaoqueue.git
synced 2025-07-04 09:11:42 +02:00
Einstellungsseite hinzugefügt
This commit is contained in:
@ -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()
|
||||||
|
@ -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">
|
||||||
|
18
backend/app/templates/settings.html
Normal file
18
backend/app/templates/settings.html
Normal 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 %}
|
Reference in New Issue
Block a user