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>
40 lines
1.5 KiB
HTML
40 lines
1.5 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="de">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
|
|
<meta name="theme-color" content="#0f0f0f">
|
|
<link rel="stylesheet" href="/static/tv/css/tv.css">
|
|
<title>Login - VideoKonverter TV</title>
|
|
</head>
|
|
<body class="login-body">
|
|
<div class="login-container">
|
|
<div class="login-card">
|
|
<h1 class="login-title">VideoKonverter</h1>
|
|
<p class="login-subtitle">TV-Streaming</p>
|
|
|
|
{% if error %}
|
|
<div class="login-error">{{ error }}</div>
|
|
{% endif %}
|
|
|
|
<form method="POST" action="/tv/login" class="login-form">
|
|
<div class="login-field">
|
|
<label for="username">Benutzername</label>
|
|
<input type="text" id="username" name="username"
|
|
autocomplete="username" autofocus
|
|
data-focusable required>
|
|
</div>
|
|
<div class="login-field">
|
|
<label for="password">Passwort</label>
|
|
<input type="password" id="password" name="password"
|
|
autocomplete="current-password"
|
|
data-focusable required>
|
|
</div>
|
|
<button type="submit" class="login-btn" data-focusable>
|
|
Anmelden
|
|
</button>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html>
|