Initial commit: Paperwall, a standalone e-ink dashboard
Navidrome now-playing, clock, and weather for a Waveshare epd4in0e panel, with a local web UI and install/uninstall scripts for the Pi.
This commit is contained in:
commit
66464291e1
33 files changed
+2215
No files matched your search
+76
@@ -0,0 +1,76 @@
|
||||
"""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/<screen_id>", 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
|
||||
Reference in new issue
Block a user