Eine Mediathek fehlte ganz — „Heimvideos" lagen bei den Fotos

Jellyfin nennt „Heimvideos & Fotos" `collectionType: homevideos`. Die
Zuordnung legte das zusammen mit `photos` auf `.photo` — und damit fiel
die ganze Mediathek unter `MediaLibrary.isSupported` heraus: keine Reihe
auf der Startseite, kein Eintrag in der Mediathekenleiste, nicht einmal
eine Zeile in der Auswahl für den Aufmacher. Aus Sicht der App gab es sie
nicht.

Dass Fotos im Namen stehen, macht den Inhalt nicht zu Fotos. `photos`
bleibt bei den Fotos, `homevideos` ist jetzt `.other` — wie alles, was
der Server nicht einsortiert.

Die Zuordnung steht dafür nicht mehr mitten in `libraries()`, sondern als
eigene Funktion mit Tests. Sie entscheidet mehr, als sie aussieht: was
hier als `.photo` oder `.music` landet, ist in der App unsichtbar, und
das sieht aus wie ein Server, der nichts liefert — nicht wie eine
Zuordnung, die zu scharf ist.

Drei Tests halten es fest, darunter der Fall ohne Angabe: eine gemischte
Mediathek meldet gar keine Art und muss trotzdem bleiben.

iOS und tvOS bauen, 472 Tests grün.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-10-01 10:25:16 +02:00
co-authored by Claude Opus 5
parent 0a59b8e82b
commit 1fa8011094
2 changed files with 68 additions and 8 deletions
@@ -182,3 +182,42 @@ struct TranslationTests {
return item.asMediaItem(imageBase: JellyfinImagePaths())
}
}
@Suite("Die Art einer Mediathek")
struct LibraryKindTests {
@Test(
"Die bekannten Arten",
arguments: [
("movies", MediaLibrary.Kind.movie),
("tvshows", .show),
("music", .music),
("photos", .photo),
("livetv", .liveTV),
]
)
func mapsKnownTypes(type: String, expected: MediaLibrary.Kind) {
#expect(MediaLibrary.Kind(jellyfinCollectionType: type) == expected)
}
/// **Der Fall, der eine ganze Mediathek verschwinden liess.** Jellyfin
/// nennt „Heimvideos & Fotos" `homevideos`; weil Fotos im Namen stehen,
/// lag es bei den Fotos — und fiel damit unter `isSupported` heraus. Die
/// Mediathek war in der App nicht vorhanden, nicht einmal in der Auswahl
/// für den Aufmacher.
@Test("Heimvideos sind Videos, keine Fotos")
func homeVideosAreWatchable() {
let art = MediaLibrary.Kind(jellyfinCollectionType: "homevideos")
#expect(art == .other)
#expect(MediaLibrary(id: "1", title: "Videos", kind: art).isSupported)
}
/// Eine gemischte Mediathek meldet gar keine Art. Sie deshalb
/// wegzulassen hiesse, den häufigsten selbstgebauten Fall zu übersehen.
@Test("Ohne Angabe bleibt sie trotzdem da")
func unknownStays() {
let art = MediaLibrary.Kind(jellyfinCollectionType: nil)
#expect(art == .other)
#expect(MediaLibrary(id: "1", title: "Gemischtes", kind: art).isSupported)
}
}