Tovább a tartalomhoz

Architektúra

Haladó

Mielőtt nagyobb dolgot változtatsz, nézd meg, hol van a kód, és milyen szabályok érvényesek.

A HolyArrs egyetlen Go program, a webes app beépítve. Ez szolgálja ki a webes appot és egy JSON API-t a 6262 porton, az adatait pedig 2 SQLite fájlban tartja a konfigurációs mappában. Hívást indít a Letöltők, a Források (Jackettel vagy Prowlarrral), a médiaszerverek, az értesítési csatornák és a HolyArrs metaadat-szerver felé.

Kövess végig egy kérést. Valaki filmet kér az Explore (felfedezés) oldalon.

  1. A requests rögzíti a kérést.
  2. Jóváhagyás után a movies Release-eket kér a sources-tól.
  3. A mediafiles választási szabályai pontozzák őket.
  4. A downloads a legjobbat elküldi a Letöltőnek.
  5. Amikor a letöltés kész, a mediafiles importálja a fájlt.
  6. A mediaservers és az alerts értesítést kap.
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

A go.mod a repo gyökerében van, mert a go:embed nem érhet el szülőmappát.

Ezt akarod módosítani Itt nézd
Hogyan választ a program Release-t internal/mediafiles
Egy letöltő app internal/downloads, a szerződéses tesztek: internal/downloads/conformance_test.go
Értesítési csatorna internal/alerts
Bejelentkezés, felhasználók, API-kulcsok internal/accounts
Az első indítás varázslója internal/setup, app/frontend/src/routes/welcome
Kész fájl importálása (kicsomagolás, tagek, párosítás) internal/importer
Médiatár-mappák, átvétel és átnevezés internal/library
Hogyan választja ki és rendezi a sorokat és polcokat internal/suggest
Az app mely részei vannak bekapcsolva internal/core/parts
Egy oldal webcíme app/frontend/src/routes/
Migráció internal/core/database/migrations/
A Docker image deploy/Dockerfile

Az app/backend/tools/structurecheck ellenőrzései megbuktatják a buildet, ha valamelyik szabály sérül. Futtasd őket a Tesztelés oldalon szereplő paranccsal.

  • Rétegsorrend. Egy modul csak alacsonyabb rétegbeli modult importál, és csak a gyökércsomagját. Az azonos rétegbeli modulok sosem importálják egymást.
  • Felfelé hívás. Ha egy alsóbb modulnak valami kell egy felsőbbtől, a felsőbb sima adatot ad le neki, vagy az alsóbb definiál egy kis interfészt, amit a wiring.go tölt ki.
  • Az SQL otthon marad. Csak a modul saját store*.go fájljaiban lehet SQL, és csak a saját táblái fölött. Másik modul soraihoz hívd annak a service-ét.
  • A közös táblák a core-hoz tartoznak. A settings, schedules, secrets, jobs és events táblákat a core segédfüggvényein át érd el.
  • Egyetlen kijárat. Minden külső hívás a core/outbound-on megy át.
  • A későbbre halasztott funkciók kapcsolót regisztrálnak a core/startup-nál. Amíg ki van kapcsolva, a route nincs ott, és az oldal elrejti a funkciót.
  • Nincs mindenes csomag. Nem lehet util, common, shared vagy helpers.

A rétegsorrend a Modulok oldalon van.

Egy modul belseje

Minden backend modul ugyanazokat a fájlneveket használja.

Fájl Tartalma
routes.go API route-ok, mindegyik a hozzá szükséges jogosultsággal
service.go és a témafájlok A logika, amit más modulok hívnak
store.go, store_<topic>.go A modul saját tábláinak teljes SQL-je
types.go A modul rekordjai

A webes oldalon a lib/<module>/ tartalmaz egy index.ts-t (ezt használhatják más modulok), a Svelte részeket és tesztjeiket, valamint api.ts-t és state.svelte.ts-t, de csak akkor, ha a modulnak saját hívásai vagy állapota van.

Core csomagok

A core csak infrastruktúra. Nincs benne termékszabály, és egyetlen modult sem importál.

Csomag Tartalma
core/database Mindkét SQLite fájl megnyitása és migrálása, lekérdezési segédek, a beállítások és események segédei, közös sormezők, az előzmények nyesése
core/files Fájl- és mappasegédek, szabad lemezhely
core/releasename Minőség, csoport és epizódszámok egy release nevéből
core/outbound Az egyetlen út külső szerverek hívásához, címellenőrzéssel
core/secrets A kulcstár és a kulcsforgatás
core/logs Az app logja és az összeomlási jegyzetek
core/jobs A feladatsor, az ütemezések és az összeomlás után újraindító ciklusok
core/webserver Router-infrastruktúra, URL base, tömörítés, élő push
core/startup Futtató felhasználó, kevés memóriás mód, a későbbre halasztott funkciók kapcsolói, memóriakorlát, részek
core/parts A rész-kapcsolók, amelyeket minden modul megkérdez, mielőtt kiszolgál vagy fut
core/model Közös típusok, például szereplők és tárgyak

Ha a core-nak modul-adatokhoz kell nyúlnia, a modul a wiring.go-ban regisztrál egy hook-ot a core-nál. A kulcsforgatás így működik.

Adatok
Fájl Tartalma
holyarrs.db A Médiatár, a kérések, a beállítások és minden más fontos
holyarrs-events.db Az Előzmények és más eseménysorok. Nő, és a fő fájl érintése nélkül nyesik

A migrációk számozott SQL fájlok a core/database/migrations/main és a core/database/migrations/events mappában. Induláskor futnak le.

A HolyArrs ingyenes. Ha időt spórolt neked, adj neki egy csillagot a GitHubon, támogasd vagy hívj meg egy kávéra.