All checks were successful
Deploy / deploy (push) Successful in 23s
- Fastext colour keys now lead every page but the index, since they're the only nav those pages carry; the index keeps them as its closing row since its own body is already the full nav. - Settings page was missing page="settings" in its render_template call, so its header silently fell back to "P100 Index". - Library's search form posted a q param the route never read; it now filters the cached Sonarr/Radarr lists and shows matching tiles. - Discover gained a search bar that queries Ombi (already in front of TMDB/TVDB) and lets you add a result straight to Radarr/Sonarr, showing "Held" instead of a button for anything already in library. - Fixed the Add button's success check, which read d.ok against a response that actually sets d.success — it reported FAILED even when the add worked.
82 lines
3.1 KiB
HTML
82 lines
3.1 KiB
HTML
{% extends "_shell.html" %}
|
|
{% from "_macros.html" import service_error, tile %}
|
|
{% block title %}P102 Library{% endblock %}
|
|
|
|
{% block content %}
|
|
<h1 class="tt-dh bloom tt-masthead">LIBRARY</h1>
|
|
|
|
{#- Search sits at the top because arriving here with a title in mind is
|
|
the common case. It posts to the same lookup the old page used. -#}
|
|
<form class="tt-search" action="{{ request.script_root }}/library" method="get" role="search">
|
|
<label class="visually-hidden" for="q">Search the library</label>
|
|
<input class="tt-input" type="search" id="q" name="q" value="{{ request.args.get('q', '') }}"
|
|
placeholder="TITLE" autocomplete="off" spellcheck="false">
|
|
<button class="tt-btn" type="submit">Search</button>
|
|
</form>
|
|
|
|
{% if search_results is not none %}
|
|
<div class="tt-field">
|
|
<span>Results</span>
|
|
<span class="tt-field-meta">{{ search_results | length }} match{{ 'es' if search_results | length != 1 else '' }}</span>
|
|
</div>
|
|
{% if search_results %}
|
|
<div class="tt-tiles">
|
|
{% for it in search_results %}
|
|
{{ tile(it.title, it.kind, it.poster, it.year) }}
|
|
{% endfor %}
|
|
</div>
|
|
{% else %}
|
|
<p class="tt-empty">No matches for “{{ q }}”.</p>
|
|
{% endif %}
|
|
{% endif %}
|
|
|
|
<div class="tt-field">
|
|
<span>Holdings</span>
|
|
<span class="tt-field-meta">
|
|
{%- if sonarr.status == 'ok' %}{{ sonarr.total_series }} shows{% endif -%}
|
|
{%- if sonarr.status == 'ok' and radarr.status == 'ok' %} · {% endif -%}
|
|
{%- if radarr.status == 'ok' %}{{ radarr.total_movies }} films{% endif -%}
|
|
</span>
|
|
</div>
|
|
|
|
<div class="tt-figs">
|
|
{% if sonarr.status == 'ok' %}
|
|
<div class="tt-fig">
|
|
<div class="tt-dh tt-fig-v">{{ sonarr.total_series }}</div>
|
|
<div class="tt-fig-l">Shows</div>
|
|
</div>
|
|
<div class="tt-fig">
|
|
<div class="tt-dh tt-fig-v {{ 'alert' if sonarr.missing_episodes else 'ok' }}">{{ sonarr.missing_episodes }}</div>
|
|
<div class="tt-fig-l">Missing eps</div>
|
|
</div>
|
|
{% endif %}
|
|
{% if radarr.status == 'ok' %}
|
|
<div class="tt-fig">
|
|
<div class="tt-dh tt-fig-v">{{ radarr.total_movies }}</div>
|
|
<div class="tt-fig-l">Films</div>
|
|
</div>
|
|
<div class="tt-fig">
|
|
<div class="tt-dh tt-fig-v {{ 'alert' if radarr.missing_movies else 'ok' }}">{{ radarr.missing_movies }}</div>
|
|
<div class="tt-fig-l">Missing films</div>
|
|
</div>
|
|
{% endif %}
|
|
</div>
|
|
|
|
{% if sonarr.status != 'ok' %}
|
|
<div class="tt-field crit"><span>Sonarr</span><span class="tt-field-meta">off air</span></div>
|
|
{{ service_error('Sonarr', sonarr.error) }}
|
|
{% endif %}
|
|
{% if radarr.status != 'ok' %}
|
|
<div class="tt-field crit"><span>Radarr</span><span class="tt-field-meta">off air</span></div>
|
|
{{ service_error('Radarr', radarr.error) }}
|
|
{% endif %}
|
|
|
|
{% if not q and recently_added %}
|
|
<div class="tt-field"><span>Newest In</span></div>
|
|
<div class="tt-tiles">
|
|
{% for it in recently_added %}
|
|
{{ tile(it.title, it.sub, it.poster, it.ago) }}
|
|
{% endfor %}
|
|
</div>
|
|
{% endif %}
|
|
{% endblock %}
|