"Show X now" now persists indefinitely (survives restarts too, it's in config.json) instead of auto-expiring back to rotation after 5 minutes. Implemented by reusing the existing rotation.enabled flag rather than a separate scheduler-side timer: pinning a screen sets rotation.enabled=False and records which screen in a new pinned_screen config field. Re-enabling rotation -- either the "Resume automatic" button or just checking "Enabled" again on the Rotation settings page -- clears the pin and resumes normal cycling either way. Navidrome priority is unchanged: still checked first, still preempts a pin the instant something's playing, same as it already preempted rotation. Verified end-to-end: pin persists across many scheduler ticks (previously would have reverted after 5 min), both resume paths (button and settings checkbox) clear it correctly.
51 lines
1.9 KiB
HTML
51 lines
1.9 KiB
HTML
{% extends "base.html" %}
|
|
{% block content %}
|
|
<h1>Status</h1>
|
|
|
|
<div class="card">
|
|
<div class="section-label">Preview</div>
|
|
<div class="preview-wrap">
|
|
<img class="preview" src="{{ url_for('static', filename='preview.png') }}?t={{ status.last_render_at }}" alt="preview">
|
|
</div>
|
|
</div>
|
|
|
|
<div class="card">
|
|
<div class="section-label">Overview</div>
|
|
<dl class="status-grid">
|
|
<dt>Current screen</dt><dd>{{ status.current_screen or "-" }}</dd>
|
|
<dt>Last render</dt><dd>{{ status.last_render_at or "-" }}</dd>
|
|
<dt>Last panel write</dt><dd>{{ status.last_display_write_at or "-" }}</dd>
|
|
<dt>Navidrome priority</dt>
|
|
<dd><span class="badge {{ 'on' if navidrome_priority else 'off' }}">{{ "on" if navidrome_priority else "off" }}</span></dd>
|
|
<dt>Rotation</dt>
|
|
<dd>
|
|
<span class="badge {{ 'on' if rotation.enabled else 'off' }}">{{ "on" if rotation.enabled else "off" }}</span>
|
|
{{ rotation.screens | join(" → ") }} (every {{ rotation.interval_minutes }} min)
|
|
</dd>
|
|
{% if status.pinned_screen %}
|
|
<dt>Manual pin</dt>
|
|
<dd><span class="badge on">{{ screens[status.pinned_screen].display_name }}</span> -- fixed until resumed</dd>
|
|
{% endif %}
|
|
</dl>
|
|
</div>
|
|
|
|
<div class="card">
|
|
<div class="section-label">Actions</div>
|
|
<div class="actions">
|
|
<form class="inline" method="post" action="{{ url_for('refresh_now') }}">
|
|
<button type="submit">Refresh now</button>
|
|
</form>
|
|
{% for screen_id, screen in screens.items() %}
|
|
<form class="inline" method="post" action="{{ url_for('switch_now', screen_id=screen_id) }}">
|
|
<button class="secondary" type="submit">Show {{ screen.display_name }}</button>
|
|
</form>
|
|
{% endfor %}
|
|
{% if status.pinned_screen %}
|
|
<form class="inline" method="post" action="{{ url_for('resume_rotation') }}">
|
|
<button class="secondary" type="submit">Resume automatic</button>
|
|
</form>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
{% endblock %}
|