All checks were successful
Deploy / deploy (push) Successful in 27s
- system.html crashed with a 500 whenever SABnzbd history loaded: the trend() macro compared the formatted "avg_speed" string (e.g. "900 KB/s") against a number. Added a real numeric avg_speed_kbps field and pointed the macro at that instead. - Replaced "held"/"not held" wording with "in library"/"not in library" on Home and Discover. - Moved CLAUDE.md's Deployment/reverse-proxy and account-management sections into two on-demand skills (deploy-arr-summary, manage-accounts) so they only load when actually relevant, with a one-line pointer left in their place. - Updated PRODUCT.md's restructure note now that meridian-marquee has merged to main. - Dropped two stale/broken entries from settings.local.json's permission allowlist (a rule from a different machine/path, and one with a corrupted token). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NBw1QodG8ZMYHrGeQfqyDS
144 lines
6.4 KiB
HTML
144 lines
6.4 KiB
HTML
{% extends "_shell.html" %}
|
|
{% from "_macros.html" import service_error, bar, tile %}
|
|
{% block title %}P100 Media Centre{% endblock %}
|
|
|
|
{% block content %}
|
|
{#- The masthead. Double height, the service's own colour, and the one
|
|
place on the page bloom is allowed. -#}
|
|
<h1 class="tt-dh bloom tt-masthead">MEDIA CENTRE</h1>
|
|
|
|
{#- ── The index IS the status page ──────────────────────────────
|
|
Every destination row carries its own live figure in its own
|
|
colour, so choosing where to go and reading how things are are
|
|
the same act. This is the whole thesis in one block. -#}
|
|
<div class="tt-rows">
|
|
<a class="tt-row" href="{{ request.script_root }}/watch">
|
|
<span class="tt-row-num">101</span>
|
|
<span class="tt-row-name">Watch</span>
|
|
<span class="tt-row-body"><span class="tt-row-sub">Who is streaming right now</span></span>
|
|
{% if tautulli.status == 'ok' %}
|
|
<span class="tt-row-val {{ 'ok' if tautulli.active_streams else 'off' }}" id="tt-streams-row">
|
|
<span id="tt-streams">{{ tautulli.active_streams }}</span> STREAMING</span>
|
|
{% else %}
|
|
<span class="tt-row-val alert">OFF AIR</span>
|
|
{% endif %}
|
|
</a>
|
|
|
|
<a class="tt-row" href="{{ request.script_root }}/library">
|
|
<span class="tt-row-num">102</span>
|
|
<span class="tt-row-name">Library</span>
|
|
<span class="tt-row-body"><span class="tt-row-sub">Everything in library</span></span>
|
|
{% if sonarr.status == 'ok' or radarr.status == 'ok' %}
|
|
<span class="tt-row-val">{{ sonarr.total_series | default(0) }} SHOWS {{ radarr.total_movies | default(0) }} FILMS</span>
|
|
{% else %}
|
|
<span class="tt-row-val alert">OFF AIR</span>
|
|
{% endif %}
|
|
</a>
|
|
|
|
<a class="tt-row" href="{{ request.script_root }}/discover">
|
|
<span class="tt-row-num">103</span>
|
|
<span class="tt-row-name">Discover</span>
|
|
<span class="tt-row-body"><span class="tt-row-sub">Popular, and not yet in library</span></span>
|
|
<span class="tt-row-val">{{ (rt_movies | length) + (rt_tv | length) }} SUGGESTED</span>
|
|
</a>
|
|
|
|
<a class="tt-row" href="{{ request.script_root }}/requests">
|
|
<span class="tt-row-num">104</span>
|
|
<span class="tt-row-name">Requests</span>
|
|
<span class="tt-row-body"><span class="tt-row-sub">Waiting on a decision</span></span>
|
|
{% if ombi.status == 'ok' %}
|
|
<span class="tt-row-val {{ 'pending' if ombi.total_pending else 'off' }}">{{ ombi.total_pending | default(0) }} PENDING</span>
|
|
{% else %}
|
|
<span class="tt-row-val alert">OFF AIR</span>
|
|
{% endif %}
|
|
</a>
|
|
|
|
<a class="tt-row" href="{{ request.script_root }}/system">
|
|
<span class="tt-row-num">105</span>
|
|
<span class="tt-row-name">System</span>
|
|
<span class="tt-row-body"><span class="tt-row-sub">Array, disks and indexers</span></span>
|
|
{% if unraid.status == 'ok' %}
|
|
{%- set pct = unraid.array_used_pct | default(0) | float -%}
|
|
<span class="tt-row-val {{ 'alert' if pct >= 90 else ('warn' if pct >= 75 else 'ok') }}">{{ pct | round | int }}% FULL</span>
|
|
{% else %}
|
|
<span class="tt-row-val alert">OFF AIR</span>
|
|
{% endif %}
|
|
</a>
|
|
|
|
<a class="tt-row" href="{{ request.script_root }}/activity">
|
|
<span class="tt-row-num">106</span>
|
|
<span class="tt-row-name">Activity</span>
|
|
<span class="tt-row-body"><span class="tt-row-sub">What the stack has been doing</span></span>
|
|
{% if sabnzbd.status == 'ok' %}
|
|
<span class="tt-row-val {{ '' if sabnzbd.queue_count else 'off' }}"><span id="sab-queue">{{ sabnzbd.queue_count }}</span> IN QUEUE</span>
|
|
{% else %}
|
|
<span class="tt-row-val alert">OFF AIR</span>
|
|
{% endif %}
|
|
</a>
|
|
|
|
<a class="tt-row" href="{{ request.script_root }}/settings">
|
|
<span class="tt-row-num">900</span>
|
|
<span class="tt-row-name">Settings</span>
|
|
<span class="tt-row-body"><span class="tt-row-sub">Keys, timezone and password</span></span>
|
|
</a>
|
|
</div>
|
|
|
|
<div class="tt-sep" aria-hidden="true"></div>
|
|
|
|
{#- ── Now showing ───────────────────────────────────────────────
|
|
The lower two-thirds. The furthest-along stream is set at double
|
|
height in the live colour, with its progress as whole mosaic
|
|
cells on the service's one ruler. -#}
|
|
<div class="tt-field">
|
|
<span>Now Showing</span>
|
|
{% if tautulli.status == 'ok' %}
|
|
<span class="tt-field-meta">{{ tautulli.active_streams }} active</span>
|
|
{% endif %}
|
|
</div>
|
|
|
|
{% if tautulli.status != 'ok' %}
|
|
{{ service_error('Tautulli', tautulli.error) }}
|
|
{% elif hero %}
|
|
<div class="tt-now">
|
|
<div class="tt-dh bloom tt-now-title">{{ hero.title }}</div>
|
|
<div class="tt-now-meta">
|
|
{{ hero.user or hero.username }}
|
|
{%- if hero.player %} · {{ hero.player }}{% endif %}
|
|
{%- if hero.quality %} · {{ hero.quality }}{% endif %}
|
|
{%- if hero.state %} · {{ hero.state | upper }}{% endif %}
|
|
</div>
|
|
<div class="tt-now-line">
|
|
{{ bar(hero.progress | default(0), 'ok') }}
|
|
<span class="tt-now-pct">{{ hero.progress | default(0) | round | int }}%</span>
|
|
{% if hero.remaining %}<span class="tt-row-sub">{{ hero.remaining }} LEFT</span>{% endif %}
|
|
</div>
|
|
</div>
|
|
|
|
{% if other_sessions %}
|
|
<div class="tt-rows tt-rows-after">
|
|
{% for s in other_sessions %}
|
|
<div class="tt-row">
|
|
<span class="tt-row-body">
|
|
<span class="tt-row-title">{{ s.title }}</span>
|
|
<span class="tt-row-sub">{{ s.user or s.username }}{% if s.player %} · {{ s.player }}{% endif %}</span>
|
|
</span>
|
|
{{ bar(s.progress | default(0), 'ok') }}
|
|
<span class="tt-row-val">{{ s.progress | default(0) | round | int }}%</span>
|
|
</div>
|
|
{% endfor %}
|
|
</div>
|
|
{% endif %}
|
|
{% else %}
|
|
<p class="tt-empty">Nothing streaming. The service is quiet.</p>
|
|
{% endif %}
|
|
|
|
{#- ── Just added ──────────────────────────────────────────────── -#}
|
|
{% if recently_added %}
|
|
<div class="tt-field"><span>Just Added</span></div>
|
|
<div class="tt-tiles tt-tiles-row">
|
|
{% for it in recently_added %}
|
|
{{ tile(it.title, it.sub, it.poster, it.ago) }}
|
|
{% endfor %}
|
|
</div>
|
|
{% endif %}
|
|
{% endblock %}
|