feat(torrents): harden lifecycle and web-seed management

- Enforce generation-safe seed admission and budget tracking.
- Make web-seed RPC, persistence, rollback, and startup attachment lifecycle-safe.
- Keep Torrent progress, DHT, seed-capacity, and web-seed validation covered.
- Ignore local TORRENT_FEATURES.md roadmap notes.
This commit is contained in:
NimBold
2026-08-03 16:56:01 +03:30
parent 79c0e48c43
commit c4d3a2be51
31 changed files with 3398 additions and 258 deletions
+32
View File
@@ -90,6 +90,7 @@ const fa = {
downloading: 'در حال دانلود',
processing: 'در حال پردازش',
seeding: 'در حال اشتراک‌گذاری',
waitingToSeed: 'در انتظار اشتراک‌گذاری',
paused: 'متوقف‌شده',
completed: 'تکمیل‌شده',
failed: 'ناموفق',
@@ -260,6 +261,30 @@ const fa = {
torrentPeerDiagnosticsUnavailable: 'اطلاعات همتاها هنگام فعال بودن تورنت در دسترس است.',
torrentPeerDiagnosticsFailed: 'خواندن اطلاعات همتاهای تورنت ممکن نیست.',
torrentPeerDiagnosticsHint: 'فقط سرعت و وضعیت اتصال نمایش داده می‌شود؛ IP، پورت، شناسه و بیت‌فیلد همتاها ذخیره نمی‌شود.',
torrentFileProgress: 'پیشرفت فایل‌های تورنت',
torrentFileProgressRefresh: 'تازه‌سازی',
torrentFileProgressLoading: 'در حال دریافت پیشرفت فایل‌ها…',
torrentFileProgressUnavailable: 'پیشرفت فایل هنگام فعال یا متوقف‌بودن تورنت در دسترس است.',
torrentFileProgressFailed: 'خواندن پیشرفت فایل‌های تورنت ممکن نیست.',
torrentFileProgressHint: 'مسیرهای نسبی معتبر و حجم تکمیل‌شده نمایش داده می‌شود؛ مسیرهای داخلی و URIهای daemon نمایش داده نمی‌شوند.',
torrentFileProgressPath: 'فایل',
torrentFileProgressCompleted: 'تکمیل‌شده',
torrentFileProgressSelected: 'انتخاب‌شده',
torrentFileProgressUnselected: 'انتخاب‌نشده',
torrentPieceProgress: 'پیشرفت قطعه‌های تورنت',
torrentPieceProgressRefresh: 'تازه‌سازی',
torrentPieceProgressLoading: 'در حال دریافت پیشرفت قطعه‌ها…',
torrentPieceProgressUnavailable: 'پیشرفت قطعه‌ها هنگام فعال یا متوقف‌بودن تورنت در دسترس است.',
torrentPieceProgressFailed: 'خواندن پیشرفت قطعه‌های تورنت ممکن نیست.',
torrentPieceProgressHint: 'هر خانه خلاصه‌ای از قطعه‌های مجاور است؛ bitfield خام نمایش داده نمی‌شود.',
torrentPieceProgressSummary: '{{completed}} از {{total}} قطعه کامل شده · هرکدام {{size}}',
torrentPieceProgressMap: 'نقشه تکمیل قطعه‌های تورنت',
torrentWebSeeds: 'وب‌سیدهای تورنت',
torrentWebSeedsHint: 'هر خط به‌شکل شماره فایل|نشانی HTTP(S). مسیر فایل‌های چندفایلی را Firelink در بخش native می‌سازد.',
torrentWebSeedsPlaceholder: '۰|https://mirror.example/torrent/',
torrentWebSeedsApply: 'اعمال وب‌سیدها',
torrentWebSeedsLoading: 'در حال اعمال…',
torrentWebSeedsFailed: 'اعتبارسنجی یا اعمال وب‌سیدهای تورنت انجام نشد.',
torrentPeerCount: '{{total}} همتا · {{seeders}} سید',
torrentPeerDownload: 'دریافت',
torrentPeerUpload: 'آپلود',
@@ -800,6 +825,13 @@ const fa = {
torrentLpdDescription: 'همتاهای سازگار در شبکه محلی را پیدا می‌کند و دیده‌شدن ترافیک در شبکه محلی را افزایش می‌دهد.',
torrentPeerDiscoveryRestartNote: 'این گزینه‌ها سراسری و مربوط به Aria2 هستند و پس از راه‌اندازی مجدد Firelink اعمال می‌شوند. Aria2 همچنان کشف همتا را برای تورنت‌های خصوصی خاموش می‌کند.',
torrentNetwork: 'اتصال شبکه بیت‌تورنت',
torrentAdvanced: 'شبکه پیشرفته تورنت',
torrentDhtMessageTimeout: 'مهلت پیام DHT',
torrentDhtMessageTimeoutDescription: 'مدت انتظار پیام‌های DHT و UDP برحسب ثانیه. روی دریافت HTTP فایل .torrent یا درخواست‌های tracker از نوع HTTP اثر ندارد و پس از راه‌اندازی دوباره اعمال می‌شود.',
torrentSeparateSeedSlots: 'ظرفیت جداگانهٔ سید کردن',
torrentSeparateSeedSlotsDescription: 'سید کردن را از سقف دانلود جدا می‌کند و آن را با ظرفیت مدیریت‌شدهٔ Firelink محدود می‌کند.',
torrentMaxConcurrentSeeds: 'حداکثر سید هم‌زمان',
torrentMaxConcurrentSeedsDescription: 'وقتی ظرفیت جداگانه فعال است، حداکثر تعداد تورنت‌هایی که Firelink هم‌زمان سید می‌کند.',
torrentListenPort: 'پورت‌های همتای TCP',
torrentListenPortDescription: 'پورت‌های TCP برای اتصال‌های ورودی همتاهای بیت‌تورنت. برای محدوده پیش‌فرض Aria2 خالی بگذارید.',
torrentDhtListenPort: 'پورت‌های UDP/DHT',