Architektúra
Haladó
Mielőtt nagyobb dolgot változtatsz, nézd meg, hol van a kód, és milyen szabályok érvényesek.
Röviden
Hivatkozás ide: RövidenA 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.
- A
requestsrögzíti a kérést. - Jóváhagyás után a
moviesRelease-eket kér asources-tól. - A
mediafilesválasztási szabályai pontozzák őket. - A
downloadsa legjobbat elküldi a Letöltőnek. - Amikor a letöltés kész, a
mediafilesimportálja a fájlt. - A
mediaserversés azalertsértesítést kap.
Kódtérkép
Hivatkozás ide: Kódtérképapp/backend/cmd/holyarrs/ main.go starts the program; wiring.go builds the modules and joins themapp/backend/internal/<module>/ one flat folder per moduleapp/backend/internal/core/ plumbing every module may useapp/backend/tools/ dev-only programsapp/frontend/ the SvelteKit web app; embed.go bundles its buildapp/frontend/src/routes/<page>/ thin pages that combine module partsapp/frontend/src/lib/<module>/ each module's web codeapp/frontend/src/lib/ui/ parts used by 2 or more modules, and nothing elseapp/frontend/src/lib/core/ server client, app state, helpersapp/tests/ end-to-end tests (Playwright)deploy/ the Dockerfile and release scriptsdocs/ guides and these pagesA go.mod a repo gyökerében van, mert a go:embed nem érhet el szülőmappát.
Hol találod
Hivatkozás ide: Hol találod| 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 |
A szabályok
Hivatkozás ide: A szabályokAz 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.gotölt ki. - Az SQL otthon marad. Csak a modul saját
store*.gofá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éseventstá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,sharedvagyhelpers.
A rétegsorrend a Modulok oldalon van.
Haladóknak
Hivatkozás ide: HaladóknakEgy 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.
Kapcsolódó oldalak
Hivatkozás ide: Kapcsolódó oldalakA HolyArrs ingyenes. Ha időt spórolt neked, adj neki egy csillagot a GitHubon, támogasd vagy hívj meg egy kávéra.