इसे छोड़कर कंटेंट पर जाएं

आर्किटेक्चर

एक्सपर्ट

कोई बड़ा बदलाव करने से पहले जानें कि कोड कहाँ रहता है और कौन से नियम लागू होते हैं।

HolyArrs एक Go प्रोग्राम है, जिसमें वेब ऐप साथ में बना हुआ है। यह पोर्ट 6262 पर वेब ऐप और एक JSON API देता है, और अपना डेटा कॉन्फ़िग फ़ोल्डर की 2 SQLite फ़ाइलों में रखता है। यह डाउनलोडर, सोर्स (Jackett या Prowlarr के ज़रिए), मीडिया सर्वर, अलर्ट चैनल और HolyArrs के मेटाडेटा सर्वर से बात करता है।

एक रिक्वेस्ट के साथ चलकर देखें। कोई एक्सप्लोर पर एक फ़िल्म माँगता है।

  1. requests माँग दर्ज करता है।
  2. मंज़ूरी के बाद movies, sources से रिलीज़ माँगता है।
  3. mediafiles के चुनाव के नियम उन्हें अंक देते हैं।
  4. downloads सबसे अच्छी रिलीज़ डाउनलोडर को भेजता है।
  5. डाउनलोड पूरा होने पर mediafiles फ़ाइल इंपोर्ट करता है।
  6. mediaservers और alerts को बताया जाता है।
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 रेपो की जड़ में है, क्योंकि go:embed ऊपर वाले फ़ोल्डर तक नहीं पहुँच सकता।

कौन सी चीज़ कहाँ मिलेगी

कौन सी चीज़ कहाँ मिलेगी का लिंक
आप क्या बदलना चाहते हैं यहाँ देखें
रिलीज़ कैसे चुनी जाती है internal/mediafiles
कोई डाउनलोडर क्लाइंट internal/downloads, कॉन्ट्रैक्ट टेस्ट internal/downloads/conformance_test.go में
कोई अलर्ट चैनल internal/alerts
साइन-इन, यूज़र, API कुंजी internal/accounts
पहली बार का विज़ार्ड internal/setup, app/frontend/src/routes/welcome
पूरी हुई फ़ाइल का इंपोर्ट (अनपैक, टैग, मिलान) internal/importer
लाइब्रेरी फ़ोल्डर, अपनाना और नाम बदलना internal/library
लाइनें और शेल्फ़ कैसे चुनी और क्रम में लगाई जाती हैं internal/suggest
ऐप के कौन से हिस्से चालू हैं internal/core/parts
किसी पेज का एड्रेस app/frontend/src/routes/
कोई माइग्रेशन internal/core/database/migrations/
Docker इमेज deploy/Dockerfile

app/backend/tools/structurecheck की जाँचें कोई नियम टूटते ही बिल्ड फ़ेल कर देती हैं। इन्हें टेस्टिंग में दी गई लाइन से चलाएं।

  • लेयर का क्रम। एक मॉड्यूल सिर्फ़ निचली लेयर के मॉड्यूल इंपोर्ट करता है, और उनका भी सिर्फ़ रूट पैकेज। एक ही लेयर के मॉड्यूल एक-दूसरे को कभी इंपोर्ट नहीं करते।
  • ऊपर की ओर कॉल। जब निचले मॉड्यूल को ऊपर वाले से कुछ चाहिए, तो ऊपर वाला सादा डेटा नीचे भेजता है, या निचला मॉड्यूल एक छोटा इंटरफ़ेस बनाता है जिसे wiring.go भरता है।
  • SQL अपने घर में रहता है। SQL सिर्फ़ मॉड्यूल की अपनी store*.go फ़ाइलों में रहता है, और सिर्फ़ उसकी अपनी टेबल पर चलता है। किसी और मॉड्यूल की लाइनें पढ़नी हों, तो उसकी सर्विस को कॉल करें।
  • साझा टेबल core की हैं। settings, schedules, secrets, jobs और events तक core के हेल्पर से पहुँचें।
  • बाहर जाने का एक ही रास्ता। बाहर की हर कॉल core/outbound से होकर जाती है।
  • रोके हुए फ़ीचर core/startup में एक स्विच रजिस्टर करते हैं। जब तक वह बंद है, रूट मौजूद नहीं होता और पेज फ़ीचर को छिपा देता है।
  • कबाड़ वाले पैकेज नहीं। util, common, shared या helpers नहीं।

लेयर का क्रम मॉड्यूल में है।

एक्सपर्ट के लिए

एक्सपर्ट के लिए का लिंक
मॉड्यूल के अंदर

हर बैकएंड मॉड्यूल में फ़ाइलों के नाम एक जैसे होते हैं।

फ़ाइल इसमें क्या है
routes.go API रूट, हर एक के साथ उसकी ज़रूरी अनुमति
service.go और विषय वाली फ़ाइलें वह लॉजिक जिसे दूसरे मॉड्यूल कॉल करते हैं
store.go, store_<topic>.go मॉड्यूल की अपनी टेबल का सारा SQL
types.go मॉड्यूल के रिकॉर्ड

वेब की तरफ़ lib/<module>/ में index.ts (जो दूसरे मॉड्यूल इस्तेमाल कर सकते हैं), उसके Svelte हिस्से और उनके टेस्ट रहते हैं, और api.ts और state.svelte.ts सिर्फ़ तब जब उसकी अपनी कॉल या अपना स्टेट हो।

core पैकेज

core सिर्फ़ प्लंबिंग है। इसमें प्रोडक्ट का कोई नियम नहीं है और यह कोई मॉड्यूल इंपोर्ट नहीं करता।

पैकेज इसमें क्या है
core/database दोनों SQLite फ़ाइलें खोलना और माइग्रेट करना, क्वेरी हेल्पर, सेटिंग और इवेंट के हेल्पर, साझा लाइन फ़ील्ड, हिस्ट्री की छँटाई
core/files फ़ाइल और फ़ोल्डर के हेल्पर, डिस्क की ख़ाली जगह
core/releasename रिलीज़ के नाम से क्वालिटी, ग्रुप और एपिसोड नंबर
core/outbound बाहर के सर्वर को कॉल करने का एक ही रास्ता, एड्रेस की जाँच के साथ
core/secrets कुंजी स्टोर और कुंजी बदलना
core/logs ऐप का लॉग और क्रैश के नोट
core/jobs जॉब की कतार, शेड्यूल और वे लूप जो क्रैश के बाद दोबारा शुरू होते हैं
core/webserver राउटर की प्लंबिंग, URL base, कंप्रेशन, लाइव पुश
core/startup किस यूज़र के तौर पर चलना है, लो-मेमोरी मोड, रोके हुए फ़ीचर के स्विच, मेमोरी की सीमा, हिस्से
core/parts हिस्सों के स्विच, जिनसे हर मॉड्यूल कुछ देने या चलाने से पहले पूछता है
core/model साझा टाइप, जैसे actor और subject

जब core को मॉड्यूल का डेटा छूना हो, तो मॉड्यूल wiring.go में core के साथ एक हुक रजिस्टर करता है। कुंजी बदलना इसी तरह काम करता है।

डेटा
फ़ाइल इसमें क्या है
holyarrs.db लाइब्रेरी, रिक्वेस्ट, सेटिंग और बाकी सब कुछ जो मायने रखता है
holyarrs-events.db हिस्ट्री और इवेंट की दूसरी लाइनें। यह बढ़ती है और मुख्य फ़ाइल को छुए बिना छाँटी जाती है

माइग्रेशन core/database/migrations/main और core/database/migrations/events में नंबर वाली SQL फ़ाइलें हैं। ये शुरू होते समय चलती हैं।

HolyArrs मुफ़्त है। अगर इससे आपका समय बचा, तो GitHub पर स्टार दें, स्पॉन्सर करें या मुझे एक कॉफ़ी पिलाएं।