"""Flask app: status/preview page + one settings form per screen + rotation settings.""" from flask import Flask, redirect, render_template, request, url_for def create_app(config, screens: dict, scheduler) -> Flask: app = Flask(__name__) @app.route("/") def index(): status = scheduler.get_status() return render_template( "index.html", status=status, screens=screens, rotation=config.get_rotation(), navidrome_priority=config.get_navidrome_priority(), ) @app.route("/actions/refresh", methods=["POST"]) def refresh_now(): scheduler.request_manual_refresh() return redirect(url_for("index")) @app.route("/actions/switch/", methods=["POST"]) def switch_now(screen_id): if screen_id in screens: scheduler.request_switch(screen_id) return redirect(url_for("index")) @app.route("/settings/navidrome", methods=["GET", "POST"]) def settings_navidrome(): if request.method == "POST": config.update_screen_settings("navidrome", { "url": request.form.get("url", "").strip(), "username": request.form.get("username", "").strip(), "password": request.form.get("password", ""), "filter_user": request.form.get("filter_user", "").strip(), "show_progress": "show_progress" in request.form, "show_genre": "show_genre" in request.form, "show_source": "show_source" in request.form, "boost_cover": "boost_cover" in request.form, "grayscale_cover": "grayscale_cover" in request.form, }) return redirect(url_for("settings_navidrome")) return render_template("settings_navidrome.html", settings=config.get_screen_settings("navidrome")) @app.route("/settings/weather", methods=["GET", "POST"]) def settings_weather(): if request.method == "POST": lat = request.form.get("latitude", "").strip() lon = request.form.get("longitude", "").strip() config.update_screen_settings("weather", { "latitude": float(lat) if lat else None, "longitude": float(lon) if lon else None, }) return redirect(url_for("settings_weather")) return render_template("settings_weather.html", settings=config.get_screen_settings("weather")) @app.route("/settings/rotation", methods=["GET", "POST"]) def settings_rotation(): if request.method == "POST": raw = request.form.get("screens", "") selected = [s.strip() for s in raw.split(",") if s.strip() in screens] interval = int(request.form.get("interval_seconds", 300) or 300) config.set_rotation(selected, interval) config.set_navidrome_priority("navidrome_priority" in request.form) return redirect(url_for("settings_rotation")) return render_template( "settings_rotation.html", screens=screens, rotation=config.get_rotation(), navidrome_priority=config.get_navidrome_priority(), ) return app