Ga naar hoofdinhoud

Libraries en media-indeling

Een library is een benoemde verzameling van één type (MOVIE, SHOW, MUSIC, BOOK, COMIC of PODCAST). Een directory is een pad op schijf dat aan een library hangt; een library kan meerdere directories beslaan, zelfs over nodes heen. De scanner bepaalt wat een bestand is aan de hand van zijn pad, dus de indeling op schijf doet ertoe.

Libraries en directories configureren

Geïndexeerde properties, uit disk/src/main/resources/disk.properties (als env vars: APP_ISTER_DISK_LIBRARIES_0_NAME enzovoort):

app.ister.disk.libraries[0].name=shows
app.ister.disk.libraries[0].type=SHOW
app.ister.disk.libraries[1].name=books
app.ister.disk.libraries[1].type=BOOK

app.ister.disk.directories[0].name=disk1
app.ister.disk.directories[0].path=/disk1
app.ister.disk.directories[0].library=shows
app.ister.disk.directories[1].name=disk2
app.ister.disk.directories[1].path=/disk2
app.ister.disk.directories[1].library=shows

Directorynamen moeten uniek zijn over het hele cluster — ze benoemen de werkqueues per directory (Multi-node). Schrijf paden zonder slash aan het eind en houd ze stabiel: het pad wordt letterlijk in de database opgeslagen en als stringprefix vergeleken, dus /disk1 later veranderen in /disk1/ telt als een padwijziging. Rijen worden bij elke start uit deze configuratie aangemaakt of bijgewerkt.

Verwachte indeling per type

Dit is de korte versie; hoofdstuk 7 is de volledige naamreferentie (exacte patronen, geaccepteerde extensies, speciale bestanden en veelgemaakte fouten).

SeriesShow Name (year)/Season NN/sNNeNN.mkv:

The Wire (2002)/Season 01/s01e01.mkv

Films — één bestand (of een map) per film, naam eindigend op het jaar:

Heat (1995)/Heat (1995).mkv

MuziekArtist/Album/track:

Miles Davis/Kind of Blue/01 So What.flac

Boeken — één logisch boek per auteur, in twee uitwisselbare vormen die samenkomen in hetzelfde boek: een epub direct onder de auteur, en/of een luisterboekmap met genummerde hoofdstukken:

Terry Pratchett/Guards! Guards!.epub
Terry Pratchett/Guards! Guards!/001_Chapter 1.mp3

Voorlees-epubs (EPUB 3 media-overlay) worden automatisch herkend aan de inhoud van de epub, nooit aan de bestandsnaam.

Comics — serie-eerst: {Series Name (optional year)}/Volume 27.cbz. Ook .pdf en .epub; losse patronen als attackontitan_vol27.pdf, series_issue8.pdf en name#3.cbz worden getolereerd.

Herkende videocontainers: mkv, mp4; ondertitels: .srt naast de video (beeldondertitels in mkv worden geëxtraheerd en met OCR omgezet); lokale artwork: jpg/png; .nfo-bestanden worden gelezen voor metadata-hints.

Podcasts

Een PODCAST-library heeft helemaal geen directory nodig — hij is feed-gebaseerd:

  • Abonneer vanuit de client (of via de GraphQL-mutation subscribePodcast(feedUrl)); het zoeken in de client gebruikt de gratis iTunes Search API.
  • Feeds verversen elk uur; de nieuwste afleveringen (standaard 3, auto-download-count) worden automatisch naar de cachemap gedownload, oudere op verzoek wanneer een gebruiker ze afspeelt.
  • Downloads verlopen na 30 dagen (podcast-retention-days), tenzij iemand middenin een aflevering zit.

Scannen en analyseren

Twee GraphQL-mutations (ook beschikbaar in de beheerschermen van de client):

  • scanLibrary — loopt door de directories, registreert nieuwe/gewijzigde bestanden en start het ophalen van metadata voor alles wat nieuw is. Draai dit na het toevoegen van media; er is geen filesystem-watcher.
  • analyzeLibrary — verwerkt opnieuw wat al bekend is: probet mediabestanden op streams, regenereert afgeleide data en vult metadata aan die eerdere scans hebben gemist (bijvoorbeeld nadat je een TMDB-key of een taal toevoegt). Het ontdekt geen nieuwe bestanden.

Beide zijn asynchroon — ze zetten events in de queue en keren meteen terug; de voortgang is zichtbaar in het activiteitenscherm van de client. De details van de pipeline staan in de architectuurdocumentatie.

Verder lezen

  • Multi-node — directories verspreid over meerdere servers
  • Onderhoud — wat er in de loop van de tijd met caches gebeurt