docker.videokonverter/video-konverter/app/templates/tv/movie_detail.html
data 99730f2f8f feat: VideoKonverter v3.1 - TV-App, Auth, Tizen, Log-API
TV-App (/tv/):
- Login mit bcrypt-Passwort-Hashing und DB-Sessions (30 Tage)
- Home (Weiterschauen, Serien, Filme), Serien-Detail mit Staffeln
- Film-Uebersicht und Detail, Fullscreen Video-Player
- Suche mit Live-Ergebnissen, Watch-Progress (alle 10s gespeichert)
- D-Pad/Fernbedienung-Navigation (FocusManager, Samsung Tizen Keys)
- PWA: manifest.json, Service Worker, Icons fuer Handy/Tablet
- Pro-User Berechtigungen (Serien, Filme, Admin, erlaubte Pfade)

Admin-Erweiterungen:
- QR-Code fuer TV-App URL
- User-Verwaltung (CRUD) mit Rechte-Konfiguration
- Log-API: GET /api/log?lines=100&level=INFO

Tizen-App (tizen-app/):
- Wrapper-App fuer Samsung Smart TVs (.wgt Paket)
- Einmalige Server-IP Eingabe, danach automatische Verbindung
- Installationsanleitung (INSTALL.md)

Bug-Fixes:
- executeImport: Job-ID vor resetImport() gesichert
- cursor(aiomysql.DictCursor) statt cursor(dict)
- DB-Spalten width/height statt video_width/video_height

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 09:26:19 +01:00

49 lines
1.8 KiB
HTML

{% extends "tv/base.html" %}
{% block title %}{{ movie.title or movie.folder_name }} - VideoKonverter TV{% endblock %}
{% block content %}
<section class="tv-section">
<div class="tv-detail-header">
{% if movie.poster_url %}
<img src="{{ movie.poster_url }}" alt="" class="tv-detail-poster">
{% endif %}
<div class="tv-detail-info">
<h1 class="tv-page-title">{{ movie.title or movie.folder_name }}</h1>
{% if movie.year %}
<p class="tv-detail-year">{{ movie.year }}</p>
{% endif %}
{% if movie.genres %}
<p class="tv-detail-genres">{{ movie.genres }}</p>
{% endif %}
{% if movie.overview %}
<p class="tv-detail-overview">{{ movie.overview }}</p>
{% endif %}
{% if videos %}
<div class="tv-detail-actions">
<a href="/tv/player?v={{ videos[0].id }}" class="tv-play-btn" data-focusable>
&#9654; Abspielen
</a>
</div>
{% endif %}
</div>
</div>
{% if videos|length > 1 %}
<h3 class="tv-section-title">Versionen</h3>
<div class="tv-episode-list">
{% for v in videos %}
<a href="/tv/player?v={{ v.id }}" class="tv-episode" data-focusable>
<span class="tv-episode-title">{{ v.file_name }}</span>
<span class="tv-episode-meta">
{% if v.duration_sec %}{{ (v.duration_sec / 60)|round|int }} Min{% endif %}
{% if v.width %} &middot; {{ v.width }}x{{ v.height }}{% endif %}
&middot; {{ v.container|upper }}
</span>
<span class="tv-episode-play">&#9654;</span>
</a>
{% endfor %}
</div>
{% endif %}
</section>
{% endblock %}