Eiti prie turinio

Architektūra

Pažengusiam

Sužinok, kur gyvena kodas ir kokios taisyklės galioja, prieš keisdamas ką nors didesnio.

HolyArrs yra viena Go programa su įdėta žiniatinklio programa. Ji aptarnauja žiniatinklio programą ir JSON API per portą 6262, o duomenis laiko 2 SQLite failuose konfigūracijos aplanke. Ji kreipiasi į atsisiuntimo programas, šaltinius (per Jackett arba Prowlarr), medijos serverius, pranešimų kanalus ir HolyArrs metaduomenų serverį.

Sek vieną prašymą. Kažkas paprašo filmo skiltyje Explore (atrasti).

  1. requests užfiksuoja prašymą.
  2. Po patvirtinimo movies paprašo sources release.
  3. mediafiles parinkimo taisyklės juos įvertina.
  4. downloads geriausią išsiunčia atsisiuntimo programai.
  5. Kai atsisiuntimas baigiasi, mediafiles importuoja failą.
  6. mediaservers ir alerts gauna žinią.
app/backend/cmd/holyarrs/ main.go starts the program; wiring.go builds the modules and joins them
app/backend/internal/<module>/ one flat folder per module
app/backend/internal/core/ plumbing every module may use
app/backend/tools/ dev-only programs
app/frontend/ the SvelteKit web app; embed.go bundles its build
app/frontend/src/routes/<page>/ thin pages that combine module parts
app/frontend/src/lib/<module>/ each module's web code
app/frontend/src/lib/ui/ parts used by 2 or more modules, and nothing else
app/frontend/src/lib/core/ server client, app state, helpers
app/tests/ end-to-end tests (Playwright)
deploy/ the Dockerfile and release scripts
docs/ guides and these pages

go.mod yra repo šaknyje, nes go:embed negali pasiekti aukštesnio aplanko.

Nori pakeisti Žiūrėk į
Kaip parenkamas release internal/mediafiles
Atsisiuntimo programos klientą internal/downloads, sutarties testai internal/downloads/conformance_test.go
Pranešimų kanalą internal/alerts
Prisijungimą, naudotojus, API raktus internal/accounts
Pirmo paleidimo vedlį internal/setup, app/frontend/src/routes/welcome
Baigto failo importą (išpakavimas, tagai, atitikimas) internal/importer
Bibliotekos aplankus, perėmimą ir pervadinimą internal/library
Kaip parenkamos ir išdėstomos eilutės bei lentynos internal/suggest
Kurios programos dalys įjungtos internal/core/parts
Puslapio adresą app/frontend/src/routes/
Migraciją internal/core/database/migrations/
Docker image deploy/Dockerfile

Patikros app/backend/tools/structurecheck nutraukia build, kai viena taisyklė pažeidžiama. Paleisk jas komanda iš testavimo puslapio.

  • Sluoksnių tvarka. Modulis importuoja tik žemesnio sluoksnio modulius ir tik jų šakninį paketą. To paties sluoksnio moduliai niekada neimportuoja vienas kito.
  • Kreipimasis aukštyn. Kai žemesniam moduliui kažko reikia iš aukštesnio, aukštesnis perduoda paprastus duomenis žemyn arba žemesnis apibrėžia mažą sąsają, kurią užpildo wiring.go.
  • SQL lieka namie. SQL laiko tik paties modulio store*.go failai ir tik virš to modulio lentelių. Kad perskaitytum kito modulio eilutes, kreipkis į jo servisą.
  • Bendros lentelės priklauso core. Prie settings, schedules, secrets, jobs ir events prieik per core pagalbines funkcijas.
  • Vienas kelias į išorę. Kiekvienas išorinis kreipinys eina per core/outbound.
  • Atidėtos funkcijos užregistruoja jungiklį per core/startup. Kol jis išjungtas, maršruto nėra, o puslapis funkciją paslepia.
  • Jokių šiukšlių paketų. Jokių util, common, shared ar helpers.

Sluoksnių tvarka aprašyta modulių puslapyje.

Modulio viduje

Kiekvienas serverio pusės modulis naudoja tuos pačius failų pavadinimus.

Failas Laiko
routes.go API maršrutus, kiekvieną su jam reikalinga teise
service.go ir temų failai Logiką, kurią kviečia kiti moduliai
store.go, store_<topic>.go Visą SQL modulio lentelėms
types.go Modulio įrašus

Žiniatinklio pusėje lib/<module>/ laiko index.ts (ką gali naudoti kiti moduliai), savo Svelte dalis ir jų testus, o api.ts ir state.svelte.ts tik tada, kai modulis turi savų kreipinių ar būsenos.

Core paketai

Core yra bendras pagrindas, ant kurio stovi moduliai. Jame nėra produkto taisyklių ir jis neimportuoja jokio modulio.

Paketas Laiko
core/database Abiejų SQLite failų atidarymą ir migravimą, užklausų pagalbines funkcijas, nustatymų ir įvykių pagalbines funkcijas, bendrus eilučių laukus, istorijos apkarpymą
core/files Failų ir aplankų pagalbines funkcijas, laisvą vietą diske
core/releasename Kokybę, grupę ir serijų numerius iš release pavadinimo
core/outbound Vienintelį kelią kreiptis į išorinius serverius, su adresų patikra
core/secrets Raktų saugyklą ir raktų keitimą
core/logs Programos log ir strigčių užrašus
core/jobs Užduočių eilę, tvarkaraščius ir ciklus, kurie po strigties paleidžiami iš naujo
core/webserver Maršrutizatoriaus pagrindą, URL base, glaudinimą, gyvą siuntimą
core/startup Naudotoją, kuriuo veikia programa, mažos atminties režimą, atidėtų funkcijų jungiklius, atminties limitą, dalis
core/parts Dalių jungiklius, kurių kiekvienas modulis paklausia prieš aptarnaudamas ar vykdydamas
core/model Bendrus tipus, pavyzdžiui, veikėjus ir subjektus

Kai core turi liesti modulio duomenis, modulis užregistruoja kabliuką core faile wiring.go. Raktų keitimas veikia būtent taip.

Duomenys
Failas Laiko
holyarrs.db Biblioteką, prašymus, nustatymus ir viską, kas svarbu
holyarrs-events.db Istoriją ir kitas įvykių eilutes. Jis auga ir apkarpomas neliečiant pagrindinio failo

Migracijos yra sunumeruoti SQL failai core/database/migrations/main ir core/database/migrations/events. Jos vykdomos paleidžiant programą.

HolyArrs yra nemokama. Jei sutaupė tau laiko, pažymėk jį žvaigždute GitHub, paremk jį arba nupirk man kavos.