Landscape orientation, redesigned web UI, rotation on/off + minutes, weather by city name
- Panel is mounted sideways: render landscape (600x400), rotate to the panel's native portrait orientation right before writing to hardware. - Web UI: card-based layout, dark mode, active nav highlighting, save confirmation toasts, error banners. - Rotation: separate enabled/disabled toggle (off pins to the first screen in the list) and the interval is now in minutes instead of raw seconds. Migrates existing config.json from the old interval_seconds field. - Weather: type a city name instead of hunting down coordinates, resolved via Open-Meteo's free geocoding API. Manual lat/long still available as a fallback.
This commit is contained in:
1 parent
7c197e20a5
commit
61348be674
11 files changed
+393
-104
No files matched your search
@@ -2,32 +2,36 @@
|
||||
{% block content %}
|
||||
<h1>Navidrome</h1>
|
||||
<form method="post">
|
||||
<div class="field">
|
||||
<label for="url">Server URL</label>
|
||||
<input type="text" id="url" name="url" value="{{ settings.url or '' }}" placeholder="https://music.example.com">
|
||||
</div>
|
||||
<div class="field">
|
||||
<label for="username">Username</label>
|
||||
<input type="text" id="username" name="username" value="{{ settings.username or '' }}">
|
||||
</div>
|
||||
<div class="field">
|
||||
<label for="password">Password</label>
|
||||
<input type="password" id="password" name="password" value="{{ settings.password or '' }}">
|
||||
</div>
|
||||
<div class="field">
|
||||
<label for="filter_user">Only show this listener (optional)</label>
|
||||
<input type="text" id="filter_user" name="filter_user" value="{{ settings.filter_user or '' }}">
|
||||
<div class="card">
|
||||
<div class="section-label">Connection</div>
|
||||
<div class="field">
|
||||
<label for="url">Server URL</label>
|
||||
<input type="text" id="url" name="url" value="{{ settings.url or '' }}" placeholder="https://music.example.com">
|
||||
</div>
|
||||
<div class="field">
|
||||
<label for="username">Username</label>
|
||||
<input type="text" id="username" name="username" value="{{ settings.username or '' }}">
|
||||
</div>
|
||||
<div class="field">
|
||||
<label for="password">Password</label>
|
||||
<input type="password" id="password" name="password" value="{{ settings.password or '' }}">
|
||||
</div>
|
||||
<div class="field">
|
||||
<label for="filter_user">Only show this listener (optional)</label>
|
||||
<input type="text" id="filter_user" name="filter_user" value="{{ settings.filter_user or '' }}">
|
||||
<p class="hint">Leave empty to show whoever is playing.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="field">
|
||||
<label>Display options</label>
|
||||
<div class="card">
|
||||
<div class="section-label">Display options</div>
|
||||
<label class="checkbox"><input type="checkbox" name="show_progress" {{ "checked" if settings.show_progress }}> Progress bar and times</label>
|
||||
<label class="checkbox"><input type="checkbox" name="show_genre" {{ "checked" if settings.show_genre }}> Genre</label>
|
||||
<label class="checkbox"><input type="checkbox" name="show_source" {{ "checked" if settings.show_source }}> Player and listener name</label>
|
||||
</div>
|
||||
|
||||
<div class="field">
|
||||
<label>Cover art</label>
|
||||
<div class="card">
|
||||
<div class="section-label">Cover art</div>
|
||||
<label class="checkbox"><input type="checkbox" name="boost_cover" {{ "checked" if settings.boost_cover }}> Boost contrast for e-ink</label>
|
||||
<label class="checkbox"><input type="checkbox" name="grayscale_cover" {{ "checked" if settings.grayscale_cover }}> Force grayscale</label>
|
||||
</div>
|
||||
|
||||
Reference in new issue
Block a user