Vorspann und Abspann — erkannt, abgelegt, überspringbar
Beides mit derselben Rechnung, nur in einem anderen Fenster: vorn die ersten fünfzehn Minuten, hinten die letzten zehn. Was `Tonabgleich` findet, hängt allein daran, welchen Ausschnitt man ihm gibt — eine zweite Erkennung für den Abspann wäre dieselbe Suche ein zweites Mal. Je Staffel verglichen, nicht je Serie: Serien wechseln ihren Vorspann zwischen Staffeln, und über alle hinweg fände man nichts oder das Falsche. Gefundenes über fünf Minuten wird verworfen — zwei Folgen, die dieselbe Datei tragen, teilen vierzig, und darüber stünde sonst ein Überspringen-Knopf. Der Lauf geht auf Zuruf, nicht bei jedem Scan: er liest von jeder Folge ein Stück Ton und dauert Minuten. Der Knopf dafür steht auf der Serienseite, bei den Verwalterknöpfen. Die Marken gehen im Folgenvertrag mit — als „intro" und „credits", die Wörter, die die Apps von Jellyfin her ohnehin kennen. In der App zeichnet sie der vorhandene Überspringen-Knopf, der bisher nie etwas zu tun hatte; im Web ist er neu, rechtsbündig über der Zeitleiste. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
acba683c94
commit
8cf2118723
@@ -2,6 +2,7 @@ using System.Net.Http.Headers;
|
||||
using System.Net.Http.Json;
|
||||
using Flaro.Api.Endpoints;
|
||||
using Microsoft.AspNetCore.Hosting;
|
||||
using Flaro.Data;
|
||||
using Microsoft.AspNetCore.Mvc.Testing;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
@@ -25,6 +26,20 @@ public sealed class FlaroServer : IDisposable
|
||||
|
||||
public HttpClient Client { get; }
|
||||
|
||||
/// <summary>Ein Blick in die Datenbank — für das, was kein Endpunkt anlegt.</summary>
|
||||
///
|
||||
/// <remarks>
|
||||
/// <b>Sparsam benutzen.</b> Ein Test, der am Server vorbei schreibt,
|
||||
/// prüft nicht mehr, ob der Server es könnte. Für Marken ist es nötig:
|
||||
/// sie entstehen aus einem Tonabgleich, und der braucht Mediendateien
|
||||
/// mit echtem Ton, die es hier nicht gibt.
|
||||
/// </remarks>
|
||||
public async Task InDerDatenbank(Func<FlaroContext, Task> tun)
|
||||
{
|
||||
using var raum = _fabrik.Services.CreateScope();
|
||||
await tun(raum.ServiceProvider.GetRequiredService<FlaroContext>());
|
||||
}
|
||||
|
||||
/// <param name="inhaltswurzel">
|
||||
/// Ein anderes Stammverzeichnis für den Server — nur nötig, wenn ein Test
|
||||
/// eine ausgelieferte Oberfläche braucht, denn die sucht der Server unter
|
||||
|
||||
Reference in New Issue
Block a user