feat: using retry system to connect to aria2

This commit is contained in:
Chubby Granny Chaser 2024-05-29 21:50:35 +01:00
parent 85516c1744
commit ffb3d79954
No known key found for this signature in database
34 changed files with 243 additions and 317 deletions

View File

@ -4,7 +4,6 @@
"description": "Hydra",
"main": "./out/main/index.js",
"author": "Los Broxas",
"homepage": "https://hydralauncher.site",
"repository": {
"type": "git",
"url": "https://github.com/hydralauncher/hydra.git"

View File

@ -34,7 +34,6 @@
"bottom_panel": {
"no_downloads_in_progress": "لا يوجد تنزيلات جارية",
"downloading_metadata": "جارٍ تنزيل بيانات وصف {{title}}",
"checking_files": "جارٍ التحقق من ملفات {{title}}… ({{percentage}} مكتملة)",
"downloading": "جارٍ تنزيل {{title}}… ({{percentage}} مكتملة) - الانتهاء {{eta}} - {{speed}}"
},
"catalogue": {
@ -56,14 +55,12 @@
"space_left_on_disk": "{{space}} متبقية على القرص",
"eta": "الوقت المتبقي {{eta}}",
"downloading_metadata": "جاري تنزيل البيانات الوصفية...",
"checking_files": "جاري التحقق من الملفات...",
"filter": "تصفية حزم إعادة التجميع",
"requirements": "متطلبات النظام",
"minimum": "الحد الأدنى",
"recommended": "موصى به",
"no_minimum_requirements": "{{title}} لا تتوفر معلومات عن الحد الأدنى للمتطلبات",
"no_recommended_requirements": "{{title}} لا تتوفر معلومات عن المتطلبات الموصى بها",
"paused_progress": "{{progress}} (متوقف)",
"release_date": "تم الإصدار في {{date}}",
"publisher": "نشر بواسطة {{publisher}}",
"copy_link_to_clipboard": "نسخ الرابط",
@ -120,22 +117,18 @@
"verifying": "جار التحقق…",
"completed_at": "اكتمل في {{date}}",
"completed": "اكتمل",
"cancelled": "ملغي",
"download_again": "تحميل مرة أخرى",
"cancel": "إلغاء",
"filter": "تصفية الألعاب التي تم تنزيلها",
"remove": "إزالة",
"downloading_metadata": "جار تنزيل البيانات الوصفية…",
"checking_files": "جار التحقق من الملفات…",
"starting_download": "يبدأ التنزيل…",
"deleting": "جار حذف المثبت…",
"delete": "إزالة المثبت",
"remove_from_list": "إزالة",
"delete_modal_title": "هل أنت متأكد؟",
"delete_modal_description": "سيؤدي هذا إلى إزالة جميع ملفات التثبيت من جهاز الكمبيوتر الخاص بك",
"install": "تثبيت",
"real_debrid": "Real-Debrid",
"torrent": "تورنت"
"install": "تثبيت"
},
"settings": {
"downloads_path": "مسار التنزيلات",
@ -151,8 +144,7 @@
"general": "عام",
"behavior": "السلوك",
"enable_real_debrid": "تفعيل Real-Debrid ",
"real_debrid": "Real-Debrid",
"real_debrid_api_token_hint": "يمكنك الحصول على مفتاح API الخاص بك هنا.",
"real_debrid_api_token_hint": "يمكنك الحصول على مفتاح API الخاص بك هنا",
"save_changes": "حفظ التغييرات"
},
"notifications": {

View File

@ -34,7 +34,6 @@
"bottom_panel": {
"no_downloads_in_progress": "Няма актыўных сцягванняў",
"downloading_metadata": "Сцягванне мэтаданых {{title}}…",
"checking_files": "Праверка файлаў {{title}}… ({{percentage}} скончана)",
"downloading": "Сцягванне {{title}}… ({{percentage}} скончана) - Канчатак {{eta}} - {{speed}}"
},
"catalogue": {
@ -56,14 +55,12 @@
"space_left_on_disk": "{{space}} засталося на дыску",
"eta": "Канчатак {{eta}}",
"downloading_metadata": "Сцягванне мэтаданых…",
"checking_files": "Праверка файлаў…",
"filter": "Фільтар рэпакаў",
"requirements": "Сістэмныя патрэбаванни",
"minimum": "Мінімальныя",
"recommended": "Рэкамендуемыя",
"no_minimum_requirements": "{{title}} ня ўтрымлівае інфармацыі пра мінімальныя патрабаванні",
"no_recommended_requirements": "{{title}} ня ўтрымлівае інфармацыі пра рэкамендуемыя патрабаванні",
"paused_progress": "{{progress}} (Спынена)",
"release_date": "Выпушчана {{date}}",
"publisher": "Выдана {{publisher}}",
"copy_link_to_clipboard": "Скапіяваць спасылку",
@ -86,7 +83,6 @@
"playing_now": "Зараз гуляе",
"change": "Змяніць",
"repacks_modal_description": "Абярыце рэпак, які хочаце сцягнуць",
"downloads_path": "Шлях сцягвання",
"select_folder_hint": "Каб змяніць папку па змоўчанні, адкрыйце",
"download_now": "Сцягнуць зараз",
"installation_instructions": "Інструкцыя ўсталёўкі",
@ -114,13 +110,11 @@
"verifying": "Праверка…",
"completed_at": "Скончана а {{date}}",
"completed": "Скончана",
"cancelled": "Скасавана",
"download_again": "Сцягнуць зноў",
"cancel": "Скасаваць",
"filter": "Фільтар сцягнутых гульняў",
"remove": "Выдаліць",
"downloading_metadata": "Сцягванне мэтаданых…",
"checking_files": "Праверка файлаў…",
"starting_download": "Пачатак сцягвання…",
"deleting": "Выдаленне ўсталёўшчыка…",
"delete": "Выдаліць усталёўшчык",

View File

@ -34,7 +34,6 @@
"bottom_panel": {
"no_downloads_in_progress": "Ingen downloads igang",
"downloading_metadata": "Downloader {{title}} metadata…",
"checking_files": "Tjekker {{title}} filer… ({{percentage}} færdig)",
"downloading": "Downloader {{title}}… ({{percentage}} færdig) - Konklusion {{eta}} - {{speed}}"
},
"catalogue": {
@ -56,14 +55,12 @@
"space_left_on_disk": "{{space}} tilbage på harddisken",
"eta": "Konklusion {{eta}}",
"downloading_metadata": "Downloader metadata…",
"checking_files": "Tjekker filer…",
"filter": "Filtrer repacks",
"requirements": "System behov",
"minimum": "Mindste",
"recommended": "Anbefalet",
"no_minimum_requirements": "{{title}} angiver ikke mindste behov informationer",
"no_recommended_requirements": "{{title}} angiver ikke anbefalet behov informationer",
"paused_progress": "{{progress}} (Pauset)",
"release_date": "Offentliggjort den {{date}}",
"publisher": "Udgivet af {{publisher}}",
"copy_link_to_clipboard": "Kopier link",
@ -86,7 +83,6 @@
"playing_now": "Spiller nu",
"change": "Ændré",
"repacks_modal_description": "Vælg den repack du vil downloade",
"downloads_path": "Downloads sti",
"select_folder_hint": "For at ændre standard mappen, gå til <0>Instillingerne</0>",
"download_now": "Download nu",
"installation_instructions": "Installations Instrukser",
@ -114,22 +110,18 @@
"verifying": "Verificerer…",
"completed_at": "Færdiggjort på {{date}}",
"completed": "Færdigt",
"cancelled": "Annulleret",
"download_again": "Download igen",
"cancel": "Annullér",
"filter": "Filtrer downloadet spil",
"remove": "Fjern",
"downloading_metadata": "Downloader metadata…",
"checking_files": "Tjekker filer…",
"starting_download": "Starter download…",
"deleting": "Sletter installatør…",
"delete": "Fjern installatør",
"remove_from_list": "Fjern",
"delete_modal_title": "Er du sikker?",
"delete_modal_description": "Dette vil fjerne alle installations filerne fra din computer",
"install": "Installér",
"real_debrid": "Real-Debrid",
"torrent": "Torrent"
"install": "Installér"
},
"settings": {
"downloads_path": "Downloads sti",
@ -139,14 +131,12 @@
"enable_repack_list_notifications": "Når en ny repack bliver tilføjet",
"telemetry": "Telemetri",
"telemetry_description": "Slå anonymt brugs statistik til",
"real_debrid_api_token_description": "Real-Debrid API token",
"quit_app_instead_hiding": "Afslut Hydra instedet for at minimere til processlinjen",
"launch_with_system": "Åben Hydra ved start af systemet",
"general": "Generelt",
"behavior": "Opførsel",
"enable_real_debrid": "Slå Real-Debrid til",
"real_debrid": "Real-Debrid",
"real_debrid_api_token_hint": "Du kan få din API nøgle <0>her</0>.",
"real_debrid_api_token_hint": "Du kan få din API nøgle <0>her</0>",
"save_changes": "Gem ændringer"
},
"notifications": {

View File

@ -121,7 +121,7 @@
"verifying": "Verifying…",
"completed_at": "Completed in {{date}}",
"completed": "Completed",
"removed": "Removed",
"removed": "Cancelled",
"download_again": "Download again",
"cancel": "Cancel",
"filter": "Filter downloaded games",
@ -133,9 +133,7 @@
"remove_from_list": "Remove",
"delete_modal_title": "Are you sure?",
"delete_modal_description": "This will remove all the installation files from your computer",
"install": "Install",
"real_debrid": "Real-Debrid",
"torrent": "Torrent"
"install": "Install"
},
"settings": {
"downloads_path": "Downloads path",
@ -150,11 +148,13 @@
"launch_with_system": "Launch Hydra on system start-up",
"general": "General",
"behavior": "Behavior",
"real_debrid_api_token": "API Token",
"enable_real_debrid": "Enable Real-Debrid",
"real_debrid": "Real-Debrid",
"real_debrid_description": "Real-Debrid is an unrestricted downloader that allows you to download files instantly and at the best of your Internet speed.",
"real_debrid_api_token_hint": "You can get your API token <0>here</0>.",
"real_debrid_free_account": "The account \"{{username}}\" is a free account. Please subscribe to Real-Debrid.",
"real_debrid_invalid_token": "Invalid API token",
"real_debrid_api_token_hint": "You can get your API token <0>here</0>",
"real_debrid_free_account_error": "The account \"{{username}}\" is a free account. Please subscribe to Real-Debrid",
"real_debrid_linked_message": "Account \"{{username}}\" linked",
"save_changes": "Save changes"
},
"notifications": {

View File

@ -35,7 +35,6 @@
"bottom_panel": {
"no_downloads_in_progress": "Sin descargas en progreso",
"downloading_metadata": "Descargando metadatos de {{title}}…",
"checking_files": "Analizando archivos de {{title}} - ({{percentage}} completado)",
"downloading": "Descargando {{title}}… ({{percentage}} completado) - Finalizando {{eta}} - {{speed}}"
},
"catalogue": {
@ -57,14 +56,12 @@
"space_left_on_disk": "{{space}} restantes en el disco",
"eta": "Tiempo restante: {{eta}}",
"downloading_metadata": "Descargando metadatos…",
"checking_files": "Analizando archivos…",
"filter": "Buscar repacks",
"requirements": "Requisitos del Sistema",
"minimum": "Mínimos",
"recommended": "Recomendados",
"no_minimum_requirements": "Sin requisitos mínimos para {{title}}",
"no_recommended_requirements": "{{title}} no tiene requisitos recomendados",
"paused_progress": "{{progress}} (Pausado)",
"release_date": "Fecha de lanzamiento: {{date}}",
"publisher": "Publicado por: {{publisher}}",
"copy_link_to_clipboard": "Copiar enlace",
@ -121,22 +118,18 @@
"verifying": "Verificando…",
"completed_at": "Completado el {{date}}",
"completed": "Completado",
"cancelled": "Cancelado",
"download_again": "Descargar de nuevo",
"cancel": "Cancelar",
"filter": "Buscar juegos descargados",
"remove": "Eliminar",
"downloading_metadata": "Descargando metadatos…",
"checking_files": "Verificando archivos…",
"starting_download": "Iniciando descarga…",
"deleting": "Eliminando instalador…",
"delete": "Eliminar instalador",
"remove_from_list": "Eliminar",
"delete_modal_title": "¿Estás seguro?",
"delete_modal_description": "Esto eliminará todos los archivos de instalación de tu computadora.",
"install": "Instalar",
"real_debrid": "Real-Debrid",
"torrent": "Torrent"
"install": "Instalar"
},
"settings": {
"downloads_path": "Ruta de descarga",
@ -152,8 +145,7 @@
"general": "General",
"behavior": "Otros",
"enable_real_debrid": "Activar Real-Debrid",
"real_debrid": "Real-Debrid",
"real_debrid_api_token_hint": "Puedes obtener tu clave de API <0>aquí</0>.",
"real_debrid_api_token_hint": "Puedes obtener tu clave de API <0>aquí</0>",
"save_changes": "Guardar cambios"
},
"notifications": {

View File

@ -34,7 +34,6 @@
"bottom_panel": {
"no_downloads_in_progress": "دانلودی در حال انجام نیست",
"downloading_metadata": "درحال دانلود متادیتاهای {{title}}…",
"checking_files": "در حال چک کردن فایل‌های {{title}}…. ({{percentage}} تکمیل شده)",
"downloading": "در حال دانلود {{title}}… ({{percentage}} تکمیل شده) - اتمام {{eta}} - {{speed}}"
},
"catalogue": {
@ -56,14 +55,12 @@
"space_left_on_disk": "{{space}} فضا در دیسک باقی‌مانده",
"eta": "اتمام {{eta}}",
"downloading_metadata": "در حال دانلود متادیتاها…",
"checking_files": "در حال چک کردن فایل‌ها",
"filter": "فیلترکردن ریپک‌ها",
"requirements": "سیستم مورد نیاز",
"minimum": "حداقل",
"recommended": "پیشنهادی",
"no_minimum_requirements": "{{title}} اطلاعات حداقل سیستم مورد نیاز را فراهم نکرده",
"no_recommended_requirements": "{{title}} اطلاعات پیشنهادی سیستم مورد نیاز را فراهم نکرده",
"paused_progress": "{{progress}} (متوقف شده)",
"release_date": "منتشر شده در {{date}}",
"publisher": "منتشر شده توسط {{publisher}}",
"copy_link_to_clipboard": "کپی لینک",
@ -86,7 +83,6 @@
"playing_now": "در حال بازی",
"change": "تغییر",
"repacks_modal_description": "ریپک مورد نظر برای دانلود را انتخاب کنید",
"downloads_path": "آدرس دانلودها",
"select_folder_hint": "برای تغییر پوشه‌ی پیش‌فرض به <0>Settings</0> بروید",
"download_now": "الان دانلود کن",
"installation_instructions": "دستورات نصب",
@ -114,22 +110,18 @@
"verifying": "در حال اعتبارسنجی…",
"completed_at": "پایان یافته در {{date}}",
"completed": "پایان یافته",
"cancelled": "لغو شده",
"download_again": "دانلود مجدد",
"cancel": "لغو",
"filter": "فیلتر بازی‌های دانلود شده",
"remove": "حذف",
"downloading_metadata": "در حال دانلود متادیتاها…",
"checking_files": "در حال چک کردن فایل‌ها…",
"starting_download": "در حال آغار دانلود…",
"deleting": "در حال پاک کردن اینستالر…",
"delete": "پاک کردن",
"remove_from_list": "حذف",
"delete_modal_title": "مطمئنی؟",
"delete_modal_description": "این کار تمام فایل‌های اینستالر را از کامپیوتر شما حذف می‌کند",
"install": "نصف",
"real_debrid": "Real-Debrid",
"torrent": "تورنت"
"install": "نصف"
},
"settings": {
"downloads_path": "مسیر دانلودها",
@ -139,13 +131,11 @@
"enable_repack_list_notifications": "زمانی که یک ریپک جدید اضافه شد",
"telemetry": "تلمتری",
"telemetry_description": "فعال کردن آمارگیری استفاده ناشناس",
"real_debrid_api_token_description": "توکن Real-Debrid",
"quit_app_instead_hiding": "به جای کوچک کردن، از هایدرا خارج شو",
"launch_with_system": "زمانی که سیستم روشن می‌شود، هایدرا را باز کن",
"general": "کلی",
"behavior": "رفتار",
"enable_real_debrid": "فعال‌سازی Real-Debrid",
"real_debrid": "Real-Debrid",
"real_debrid_api_token_hint": "کلید API خود را از <ب0>اینجا</0> بگیرید.",
"save_changes": "ذخیره تغییرات"
},

View File

@ -30,7 +30,6 @@
"bottom_panel": {
"no_downloads_in_progress": "Aucun téléchargement en cours",
"downloading_metadata": "Téléchargement des métadonnées de {{title}}…",
"checking_files": "Vérification des fichiers de {{title}}… ({{percentage}} terminé)",
"downloading": "Téléchargement de {{title}}… ({{percentage}} terminé) - Fin dans {{eta}} - {{speed}}"
},
"game_details": {
@ -47,14 +46,12 @@
"space_left_on_disk": "{{space}} restant sur le disque",
"eta": "Fin dans {{eta}}",
"downloading_metadata": "Téléchargement des métadonnées en cours…",
"checking_files": "Vérification des fichiers…",
"filter": "Filtrer les repacks",
"requirements": "Configuration requise",
"minimum": "Minimum",
"recommended": "Recommandée",
"no_minimum_requirements": "{{title}} ne fournit pas d'informations sur les configurations minimales",
"no_recommended_requirements": "{{title}} ne fournit pas d'informations sur les configurations recommandées",
"paused_progress": "{{progress}} (En pause)",
"release_date": "Sorti le {{date}}",
"publisher": "Édité par {{publisher}}",
"copy_link_to_clipboard": "Copier le lien",
@ -93,13 +90,11 @@
"verifying": "Vérification en cours…",
"completed_at": "Terminé en {{date}}",
"completed": "Terminé",
"cancelled": "Annulé",
"download_again": "Télécharger à nouveau",
"cancel": "Annuler",
"filter": "Filtrer les jeux téléchargés",
"remove": "Supprimer",
"downloading_metadata": "Téléchargement des métadonnées en cours…",
"checking_files": "Vérification des fichiers…",
"starting_download": "Démarrage du téléchargement…",
"remove_from_list": "Retirer",
"delete": "Supprimer le programme d'installation",

View File

@ -30,7 +30,6 @@
"bottom_panel": {
"no_downloads_in_progress": "Nincsenek folyamatban lévő letöltések",
"downloading_metadata": "{{title}} metaadatainak letöltése…",
"checking_files": "{{title}} fájlok ellenőrzése… ({{percentage}} kész)",
"downloading": "{{title}} letöltése… ({{percentage}} kész) - Befejezés {{eta}} - {{speed}}"
},
"catalogue": {
@ -52,14 +51,12 @@
"space_left_on_disk": "{{space}} szabad hely a lemezen",
"eta": "Befejezés {{eta}}",
"downloading_metadata": "Metaadatok letöltése…",
"checking_files": "Fájlok ellenőrzése…",
"filter": "Repackek szűrése",
"requirements": "Rendszerkövetelmények",
"minimum": "Minimális",
"recommended": "Ajánlott",
"no_minimum_requirements": "{{title}} nem tartalmaz információt a minimális követelményekről",
"no_recommended_requirements": "{{title}} nem tartalmaz információt az ajánlott követelményekről",
"paused_progress": "{{progress}} (Szünetel)",
"release_date": "Megjelenés: {{date}}",
"publisher": "Kiadta: {{publisher}}",
"copy_link_to_clipboard": "Link másolása",
@ -82,7 +79,6 @@
"playing_now": "Jelenleg játszva",
"change": "Változtatás",
"repacks_modal_description": "Choose the repack you want to download",
"downloads_path": "Letöltések helye",
"select_folder_hint": "Ahhoz, hogy megváltoztasd a helyet, hozzákell férned a",
"download_now": "Töltsd le most"
},
@ -102,13 +98,11 @@
"verifying": "Ellenőrzés…",
"completed_at": "Befejezve {{date}}-kor",
"completed": "Befejezve",
"cancelled": "Megszakítva",
"download_again": "Újra letöltés",
"cancel": "Mégse",
"filter": "Letöltött játékok szűrése",
"remove": "Eltávolítás",
"downloading_metadata": "Metaadatok letöltése…",
"checking_files": "Fájlok ellenőrzése…",
"starting_download": "Letöltés indítása…",
"deleting": "Telepítő törlése…",
"delete": "Telepítő eltávolítása",

View File

@ -34,7 +34,6 @@
"bottom_panel": {
"no_downloads_in_progress": "Tidak ada unduhan berjalan",
"downloading_metadata": "Mengunduh metadata {{title}}...",
"checking_files": "Memeriksa file {{title}}… ({{percentage}} selesai)",
"downloading": "Mengunduh {{title}}… ({{percentage}} selesai) - Perkiraan {{eta}} - {{speed}}"
},
"catalogue": {
@ -56,14 +55,12 @@
"space_left_on_disk": "{{space}} tersisa pada disk",
"eta": "Perkiraan {{eta}}",
"downloading_metadata": "Mengunduh metadata…",
"checking_files": "Memeriksa file…",
"filter": "Saring repacks",
"requirements": "Keperluan sistem",
"minimum": "Minimum",
"recommended": "Rekomendasi",
"no_minimum_requirements": "{{title}} Tidak ada informasi kebutuhan sistem",
"no_recommended_requirements": "{{title}} Tidak ada informasi rekomendasi kebutuhan sistem",
"paused_progress": "{{progress}} (Terhenti)",
"release_date": "Dirilis pada {{date}}",
"publisher": "Dipublikasikan oleh {{publisher}}",
"copy_link_to_clipboard": "Salin tautan",
@ -86,7 +83,6 @@
"playing_now": "Memainkan sekarang",
"change": "Ubah",
"repacks_modal_description": "Pilih repack yang kamu ingin unduh",
"downloads_path": "Lokasi Unduhan",
"select_folder_hint": "Untuk merubah folder bawaan, akses melalui",
"download_now": "Unduh sekarang",
"installation_instructions": "Instruksi Instalasi",
@ -114,13 +110,11 @@
"verifying": "Memeriksa…",
"completed_at": "Selesai pada {{date}}",
"completed": "Selesai",
"cancelled": "Dibatalkan",
"download_again": "Unduh lagi",
"cancel": "Batalkan",
"filter": "Saring game yang diunduh",
"remove": "Hapus",
"downloading_metadata": "Mengunduh metadata…",
"checking_files": "Memeriksa file…",
"starting_download": "Memulai unduhan…",
"deleting": "Menghapus file instalasi…",
"delete": "Hapus file instalasi",

View File

@ -34,7 +34,6 @@
"bottom_panel": {
"no_downloads_in_progress": "Nessun download in corso",
"downloading_metadata": "Scaricamento metadati di {{title}}…",
"checking_files": "Verifica file di {{title}}… ({{percentage}} completato)",
"downloading": "Download di {{title}}… ({{percentage}} completato) - Conclusione {{eta}} - {{speed}}"
},
"catalogue": {
@ -56,14 +55,12 @@
"space_left_on_disk": "{{space}} rimasto sul disco",
"eta": "Conclusione {{eta}}",
"downloading_metadata": "Scaricamento metadati…",
"checking_files": "Verifica file…",
"filter": "Filtra repack",
"requirements": "Requisiti di sistema",
"minimum": "Minimi",
"recommended": "Consigliati",
"no_minimum_requirements": "{{title}} non fornisce informazioni sui requisiti minimi",
"no_recommended_requirements": "{{title}} non fornisce informazioni sui requisiti consigliati",
"paused_progress": "{{progress}} (In pausa)",
"release_date": "Rilasciato il {{date}}",
"publisher": "Pubblicato da {{publisher}}",
"copy_link_to_clipboard": "Copia link",
@ -120,22 +117,18 @@
"verifying": "Verifica…",
"completed_at": "Completato in {{date}}",
"completed": "Completato",
"cancelled": "Annullato",
"download_again": "Scarica di nuovo",
"cancel": "Annulla",
"filter": "Filtra giochi scaricati",
"remove": "Rimuovi",
"downloading_metadata": "Scaricamento metadati…",
"checking_files": "Verifica file…",
"starting_download": "Avvio download…",
"deleting": "Eliminazione dell'installer…",
"delete": "Rimuovi installer",
"remove_from_list": "Rimuovi",
"delete_modal_title": "Sei sicuro?",
"delete_modal_description": "Questo rimuoverà tutti i file di installazione dal tuo computer",
"install": "Installa",
"real_debrid": "Real Debrid",
"torrent": "Torrent"
"install": "Installa"
},
"settings": {
"downloads_path": "Percorso dei download",
@ -151,8 +144,7 @@
"general": "Generale",
"behavior": "Comportamento",
"enable_real_debrid": "Abilita Real Debrid",
"real_debrid": "Real Debrid",
"real_debrid_api_token_hint": "Puoi trovare la tua chiave API <0>here</0>.",
"real_debrid_api_token_hint": "Puoi trovare la tua chiave API <0>here</0>",
"save_changes": "Salva modifiche"
},
"notifications": {

View File

@ -34,7 +34,6 @@
"bottom_panel": {
"no_downloads_in_progress": "진행중인 다운로드 없음",
"downloading_metadata": "{{title}}의 메타데이터를 다운로드 중…",
"checking_files": "{{title}}의 파일들을 검사 중… ({{percentage}} 완료)",
"downloading": "{{title}}의 파일들을 다운로드 중… ({{percentage}} 완료) - 완료까지 {{eta}} - {{speed}}"
},
"catalogue": {
@ -56,14 +55,12 @@
"space_left_on_disk": "여유 저장 용량 {{space}} 남음",
"eta": "완료까지 {{eta}}",
"downloading_metadata": "메타데이터 다운로드 중…",
"checking_files": "파일 검사 중…",
"filter": "리팩들을 다음과 같이 정렬하기",
"requirements": "시스템 사양",
"minimum": "최저 사양",
"recommended": "권장 사양",
"no_minimum_requirements": "{{title}}의 최저 사양을 제공받지 못 함",
"no_recommended_requirements": "{{title}}의 권장 사양을 제공받지 못 함",
"paused_progress": "{{progress}} (일시 정지)",
"release_date": "{{date}}에 발매됨",
"publisher": "{{publisher}} 배급",
"copy_link_to_clipboard": "링크 복사하기",
@ -86,7 +83,6 @@
"playing_now": "현재 플레이 중",
"change": "바꾸기",
"repacks_modal_description": "다운로드 할 리팩을 선택해 주세요",
"downloads_path": "다운로드 경로",
"select_folder_hint": "기본 폴더를 바꾸려면 <0>설정</0>으로 가세요",
"download_now": "지금 다운로드",
"installation_instructions": "설치 방법",
@ -114,22 +110,18 @@
"verifying": "검증중…",
"completed_at": "{{date}}에 완료됨",
"completed": "완료됨",
"cancelled": "취소됨",
"download_again": "다시 다운로드 하기",
"cancel": "취소",
"filter": "다운로드 된 게임들을 정렬하기",
"remove": "제거하기",
"downloading_metadata": "메타데이터 다운로드 중…",
"checking_files": "파일 검사 중…",
"starting_download": "다운로드 개시 중…",
"deleting": "인스톨러 삭제 중…",
"delete": "인스톨러 삭제하기",
"remove_from_list": "제거하기",
"delete_modal_title": "정말로 하시겠습니까?",
"delete_modal_description": "이 기기의 모든 설치 파일들이 제거될 것입니다",
"install": "설치",
"real_debrid": "Real-Debrid",
"torrent": "Torrent"
"install": "설치"
},
"settings": {
"downloads_path": "다운로드 경로",
@ -139,13 +131,11 @@
"enable_repack_list_notifications": "새 리팩이 추가되었을 때",
"telemetry": "자동 데이터 수집",
"telemetry_description": "익명 사용 통계를 활성화",
"real_debrid_api_token_description": "Real-Debrid API 토큰",
"quit_app_instead_hiding": "작업 표시줄 트레이로 최소화하는 대신 Hydra를 종료",
"launch_with_system": "컴퓨터가 시작되었을 때 Hydra 실행",
"general": "일반",
"behavior": "행동",
"enable_real_debrid": "Real-Debrid 활성화",
"real_debrid": "Real-Debrid",
"real_debrid_api_token_hint": "API 키를 <0>이곳</0>에서 얻으세요.",
"save_changes": "변경 사항 저장"
},

View File

@ -34,7 +34,6 @@
"bottom_panel": {
"no_downloads_in_progress": "Geen Downloads bezig",
"downloading_metadata": "Downloading {{title}} metadata…",
"checking_files": "Checking {{title}} files… ({{percentage}} complete)",
"downloading": "Downloading {{title}}… ({{percentage}} complete) - Conclusion {{eta}} - {{speed}}"
},
"catalogue": {
@ -56,14 +55,12 @@
"space_left_on_disk": "{{space}} Over op schijf",
"eta": "Conclusie {{eta}}",
"downloading_metadata": "Downloading metadata…",
"checking_files": "Files nakijken…",
"filter": "Filter repacks",
"requirements": "Systeem vereisten",
"minimum": "Minimaal",
"recommended": "Aanbevolen",
"no_minimum_requirements": "{{title}} biedt geen informatie over de minimale vereisten",
"no_recommended_requirements": "{{title}} biedt geen informatie over aanbevolen vereisten",
"paused_progress": "{{progress}} (Paused)",
"release_date": "Uitgebracht op {{date}}",
"publisher": "Gepubliceerd door {{publisher}}",
"copy_link_to_clipboard": "Kopieer link",
@ -86,7 +83,6 @@
"playing_now": "Speel nu",
"change": "Verander",
"repacks_modal_description": "Kies de herverpakking die u wilt downloaden",
"downloads_path": "Downloads path",
"select_folder_hint": "Om de standaardmap te wijzigen, gaat u naar <0>instellingen</0>",
"download_now": "Download nu",
"installation_instructions": "Installatie instructies",
@ -114,22 +110,18 @@
"verifying": "Verifiëren…",
"completed_at": "Voltooid binnen {{date}}",
"completed": "Voltooid",
"cancelled": "Geannuleerd",
"download_again": "Opnieuw downloaden",
"cancel": "Annuleren",
"filter": "Filter gedownloade games",
"remove": "Verwijderen",
"downloading_metadata": "Metagegevens downloaden",
"checking_files": "Bestanden controleren",
"starting_download": "download starten",
"deleting": "Installatieprogramma verwijderen…",
"delete": "Installatieprogramma verwijderen",
"remove_from_list": "Verwijderen",
"delete_modal_title": "Weet je het zeker?",
"delete_modal_description": "Hiermee worden alle installatiebestanden van uw computer verwijderd",
"install": "Installeren",
"real_debrid": "Real-Debrid",
"torrent": "Torrent"
"install": "Installeren"
},
"settings": {
"downloads_path": "Downloadpad",
@ -145,7 +137,6 @@
"general": "Algemeen",
"behavior": "Gedrag",
"enable_real_debrid": "Enable Real-Debrid",
"real_debrid": "Real-Debrid",
"real_debrid_api_token_hint": "U kunt uw API-sleutel <0>hier</0> verkrijgen.",
"save_changes": "Wijzigingen opslaan"
},

View File

@ -34,7 +34,6 @@
"bottom_panel": {
"no_downloads_in_progress": "Brak pobierań w toku",
"downloading_metadata": "Pobieranie {{title}} metadata…",
"checking_files": "Sprawdzanie {{title}} plików… (ukończone w {{percentage}})",
"downloading": "Pobieranie {{title}}… (ukończone w {{percentage}}) - Podsumowanie {{eta}} - {{speed}}"
},
"catalogue": {
@ -56,14 +55,12 @@
"space_left_on_disk": "{{space}} wolnego na dysku",
"eta": "Podsumowanie {{eta}}",
"downloading_metadata": "Pobieranie metadata…",
"checking_files": "Sprawdzanie plików…",
"filter": "Filtruj repacki",
"requirements": "Wymagania systemowe",
"minimum": "Minimalne",
"recommended": "Zalecane",
"no_minimum_requirements": "{{title}} nie zawiera informacji o minimalnych wymaganiach",
"no_recommended_requirements": "{{title}} nie zawiera informacji o zalecanych wymaganiach",
"paused_progress": "{{progress}} (Zatrzymano)",
"release_date": "Wydano w {{date}}",
"publisher": "Opublikowany przez {{publisher}}",
"copy_link_to_clipboard": "Kopiuj łącze",
@ -120,22 +117,18 @@
"verifying": "Weryfikowanie…",
"completed_at": "Zakończono w {{date}}",
"completed": "Zakończono",
"cancelled": "Anulowano",
"download_again": "Pobierz ponownie",
"cancel": "Anuluj",
"filter": "Filtruj pobrane gry",
"remove": "Usuń",
"downloading_metadata": "Pobieranie metadata…",
"checking_files": "Sprawdzanie plików…",
"starting_download": "Rozpoczęto pobieranie…",
"deleting": "Usuwanie instalatora…",
"delete": "Usuń instalator",
"remove_from_list": "Usuń",
"delete_modal_title": "Czy na pewno?",
"delete_modal_description": "Spowoduje to usunięcie wszystkich plików instalacyjnych z komputera",
"install": "Instaluj",
"real_debrid": "Real-Debrid",
"torrent": "Torrent"
"install": "Instaluj"
},
"settings": {
"downloads_path": "Ścieżka pobierania",
@ -151,8 +144,7 @@
"general": "Ogólne",
"behavior": "Zachowania",
"enable_real_debrid": "Włącz Real-Debrid",
"real_debrid": "Real-Debrid",
"real_debrid_api_token_hint": "Możesz uzyskać swój klucz API <0>tutaj</0>.",
"real_debrid_api_token_hint": "Możesz uzyskać swój klucz API <0>tutaj</0>",
"save_changes": "Zapisz zmiany"
},
"notifications": {

View File

@ -35,8 +35,8 @@
"bottom_panel": {
"no_downloads_in_progress": "Sem downloads em andamento",
"downloading_metadata": "Baixando metadados de {{title}}…",
"checking_files": "Verificando arquivos de {{title}}… ({{percentage}} completo)",
"downloading": "Baixando {{title}}… ({{percentage}} completo) - Conclusão {{eta}} - {{speed}}"
"downloading": "Baixando {{title}}… ({{percentage}} concluído) - Conclusão {{eta}} - {{speed}}",
"calculating_eta": "Baixando {{title}}… ({{percentage}} concluído) - Calculando tempo restante…"
},
"game_details": {
"open_download_options": "Ver opções de download",
@ -51,15 +51,15 @@
"remove_from_list": "Remover",
"space_left_on_disk": "{{space}} livres em disco",
"eta": "Conclusão {{eta}}",
"calculating_eta": "Calculando tempo restante…",
"downloading_metadata": "Baixando metadados…",
"checking_files": "Verificando arquivos…",
"filter": "Filtrar repacks",
"requirements": "Requisitos do sistema",
"minimum": "Mínimos",
"recommended": "Recomendados",
"no_minimum_requirements": "{{title}} não possui informações de requisitos mínimos",
"no_recommended_requirements": "{{title}} não possui informações de requisitos recomendados",
"paused_progress": "{{progress}} (Pausado)",
"paused": "Pausado",
"release_date": "Lançado em {{date}}",
"publisher": "Publicado por {{publisher}}",
"copy_link_to_clipboard": "Copiar link",
@ -84,7 +84,7 @@
"change": "Mudar",
"repacks_modal_description": "Escolha o repack do jogo que deseja baixar",
"select_folder_hint": "Para trocar a pasta padrão, acesse a <0>Tela de Configurações</0>",
"download_now": "Baixe agora",
"download_now": "Iniciar download",
"installation_instructions": "Instruções de Instalação",
"installation_instructions_description": "Passos adicionais são necessários para instalar esse jogo",
"online_fix_instruction": "Jogos OnlineFix precisam de uma senha para serem extraídos. Quando solicitado, utilize a seguinte senha:",
@ -117,22 +117,19 @@
"verifying": "Verificando…",
"completed_at": "Concluído em {{date}}",
"completed": "Concluído",
"removed": "Removido",
"removed": "Cancelado",
"download_again": "Baixar novamente",
"cancel": "Cancelar",
"filter": "Filtrar jogos baixados",
"remove": "Remover",
"downloading_metadata": "Baixando metadados…",
"checking_files": "Verificando arquivos…",
"starting_download": "Iniciando download…",
"remove_from_list": "Remover",
"delete": "Remover instalador",
"delete_modal_description": "Isso removerá todos os arquivos de instalação do seu computador",
"delete_modal_title": "Tem certeza?",
"deleting": "Excluindo instalador…",
"install": "Instalar",
"torrent": "Torrent",
"real_debrid": "Real-Debrid"
"install": "Instalar"
},
"settings": {
"downloads_path": "Diretório dos downloads",
@ -147,9 +144,13 @@
"launch_with_system": "Iniciar aplicativo na inicialização do sistema",
"general": "Geral",
"behavior": "Comportamento",
"real_debrid_api_token": "Token de API",
"enable_real_debrid": "Habilitar Real-Debrid",
"real_debrid": "Real-Debrid",
"real_debrid_api_token_hint": "Você pode obter sua chave de API <0>aqui</0>.",
"real_debrid_api_token_hint": "Você pode obter seu token de API <0>aqui</0>",
"real_debrid_description": "O Real-Debrid é um downloader sem restrições que permite baixar arquivos instantaneamente e com a melhor velocidade da sua Internet.",
"real_debrid_invalid_token": "Token de API inválido",
"real_debrid_free_account_error": "A conta \"{{username}}\" é uma conta gratuita. Por favor, assine a Real-Debrid",
"real_debrid_linked_message": "Conta \"{{username}}\" vinculada",
"save_changes": "Salvar mudanças"
},
"notifications": {
@ -177,11 +178,5 @@
},
"modal": {
"close": "Botão de fechar"
},
"splash": {
"downloading_version": "Baixando versão {{version}}",
"searching_updates": "Buscando atualizações",
"update_found": "Versão {{version}} encontrada",
"restarting_and_applying": "Reiniciando e aplicando atualização"
}
}

View File

@ -34,7 +34,6 @@
"bottom_panel": {
"no_downloads_in_progress": "Нет активных загрузок",
"downloading_metadata": "Загрузка метаданных {{title}}…",
"checking_files": "Проверка файлов {{title}}… ({{percentage}} завершено)",
"downloading": "Загрузка {{title}}… ({{percentage}} завершено) - Окончание {{eta}} - {{speed}}"
},
"catalogue": {
@ -56,14 +55,12 @@
"space_left_on_disk": "{{space}} свободно на диске",
"eta": "Окончание {{eta}}",
"downloading_metadata": "Загрузка метаданных…",
"checking_files": "Проверка файлов…",
"filter": "Фильтр репаков",
"requirements": "Системные требования",
"minimum": "Минимальные",
"recommended": "Рекомендуемые",
"no_minimum_requirements": "Для {{title}} не указаны минимальные требования",
"no_recommended_requirements": "Для {{title}} не указаны рекомендуемые требования",
"paused_progress": "{{progress}} (Приостановлено)",
"release_date": "Выпущено {{date}}",
"publisher": "Издатель {{publisher}}",
"copy_link_to_clipboard": "Копировать ссылку",
@ -120,22 +117,18 @@
"verifying": "Проверка…",
"completed_at": "Завершено в {{date}}",
"completed": "Завершено",
"cancelled": "Отменено",
"download_again": "Загрузить снова",
"cancel": "Отменить",
"filter": "Фильтр загруженных игр",
"remove": "Удалить",
"downloading_metadata": "Загрузка метаданных…",
"checking_files": "Проверка файлов…",
"starting_download": "Начало загрузки…",
"deleting": "Удаление установщика…",
"delete": "Удалить установщик",
"remove_from_list": "Удалить",
"delete_modal_title": "Вы уверены?",
"delete_modal_description": "Это удалит все установщики с вашего компьютера",
"install": "Установить",
"real_debrid": "Real-Debrid",
"torrent": "Torrent"
"install": "Установить"
},
"settings": {
"downloads_path": "Путь загрузок",
@ -151,8 +144,7 @@
"general": "Основные",
"behavior": "Поведение",
"enable_real_debrid": "Включить Real-Debrid",
"real_debrid": "Real-Debrid",
"real_debrid_api_token_hint": "API ключ можно получить <0>здесь</0>.",
"real_debrid_api_token_hint": "API ключ можно получить <0>здесь</0>",
"save_changes": "Сохранить изменения"
},
"notifications": {

View File

@ -34,7 +34,6 @@
"bottom_panel": {
"no_downloads_in_progress": "İndirilen bir şey yok",
"downloading_metadata": "{{title}} metadatası indiriliyor…",
"checking_files": "{{title}} dosyaları kontrol ediliyor… ({{percentage}} tamamlandı)",
"downloading": "{{title}} indiriliyor… ({{percentage}} tamamlandı) - Bitiş {{eta}} - {{speed}}"
},
"catalogue": {
@ -56,14 +55,12 @@
"space_left_on_disk": "Diskte {{space}} yer kaldı",
"eta": "Bitiş {{eta}}",
"downloading_metadata": "Metadata indiriliyor…",
"checking_files": "Dosyalar kontrol ediliyor…",
"filter": "Repackleri filtrele",
"requirements": "Sistem gereksinimleri",
"minimum": "Minimum",
"recommended": "Önerilen",
"no_minimum_requirements": "{{title}} minimum sistem gereksinim bilgilerini karşılamıyor",
"no_recommended_requirements": "{{title}} önerilen sistem gereksinim bilgilerini karşılamıyor",
"paused_progress": "{{progress}} (Duraklatıldı)",
"release_date": "{{date}} tarihinde çıktı",
"publisher": "{{publisher}} tarihinde yayınlandı",
"copy_link_to_clipboard": "Link'i kopyala",
@ -86,7 +83,6 @@
"playing_now": "Şimdi oynanıyor",
"change": "Değiştir",
"repacks_modal_description": "İndirmek istediğiiniz repacki seçin",
"downloads_path": "İndirme yolu",
"select_folder_hint": "Varsayılan klasörü değiştirmek için ulaşmanız gereken ayar",
"download_now": "Şimdi",
"installation_instructions": "Kurulum",
@ -114,13 +110,11 @@
"verifying": "Doğrulanıyor…",
"completed_at": "{{date}} tarihinde tamamlanacak",
"completed": "Tamamlandı",
"cancelled": "İptal edildi",
"download_again": "Tekrar indir",
"cancel": "İptal et",
"filter": "Yüklü oyunları filtrele",
"remove": "Kaldır",
"downloading_metadata": "Metadata indiriliyor…",
"checking_files": "Dosyalar kontrol ediliyor…",
"starting_download": "İndirme başlatılıyor…",
"deleting": "Installer siliniyor…",
"delete": "Installer'ı sil",

View File

@ -34,7 +34,6 @@
"bottom_panel": {
"no_downloads_in_progress": "Немає активних завантажень",
"downloading_metadata": "Завантаження метаданих {{title}}…",
"checking_files": "Перевірка файлів {{title}}… ({{percentage}} завершено)",
"downloading": "Завантаження {{title}}… ({{percentage}} завершено) - Закінчення {{eta}} - {{speed}}"
},
"catalogue": {
@ -56,14 +55,12 @@
"space_left_on_disk": "{{space}} вільно на диску",
"eta": "Закінчення {{eta}}",
"downloading_metadata": "Завантаження метаданих…",
"checking_files": "Перевірка файлів…",
"filter": "Фільтр репаків",
"requirements": "Системні вимоги",
"minimum": "Мінімальні",
"recommended": "Рекомендовані",
"no_minimum_requirements": "Для {{title}} не вказані мінімальні вимоги",
"no_recommended_requirements": "Для {{title}} не вказані рекомендовані вимоги",
"paused_progress": "{{progress}} (Призупинено)",
"release_date": "Випущено {{date}}",
"publisher": "Видавець {{publisher}}",
"copy_link_to_clipboard": "Скопіювати посилання",
@ -86,7 +83,6 @@
"playing_now": "Поточна гра",
"change": "Змінити",
"repacks_modal_description": "Виберіть репак, який хочете завантажити",
"downloads_path": "Шлях завантажень",
"select_folder_hint": "Щоб змінити теку за замовчуванням, відкрийте",
"download_now": "Завантажити зараз",
"installation_instructions": "Інструкція зі встановлення",
@ -114,13 +110,11 @@
"verifying": "Перевірка…",
"completed_at": "Завершено в {{date}}",
"completed": "Завершено",
"cancelled": "Скасовано",
"download_again": "Завантажити знову",
"cancel": "Скасувати",
"filter": "Фільтр завантажених ігор",
"remove": "Видалити",
"downloading_metadata": "Завантаження метаданих…",
"checking_files": "Перевірка файлів…",
"starting_download": "Початок завантаження…",
"deleting": "Видалення інсталятора…",
"delete": "Видалити інсталятор",

View File

@ -34,7 +34,6 @@
"bottom_panel": {
"no_downloads_in_progress": "没有正在进行的下载",
"downloading_metadata": "正在下载{{title}}的元数据…",
"checking_files": "正在检查{{title}}的文件… ({{percentage}}完成)",
"downloading": "正在下载{{title}}… ({{percentage}}完成) - 剩余时间{{eta}} - 速度{{speed}}"
},
"catalogue": {
@ -56,14 +55,12 @@
"space_left_on_disk": "磁盘剩余空间{{space}}",
"eta": "预计完成时间{{eta}}",
"downloading_metadata": "正在下载元数据…",
"checking_files": "正在检查文件…",
"filter": "筛选重打包",
"requirements": "配置要求",
"minimum": "最低要求",
"recommended": "推荐要求",
"no_minimum_requirements": "{{title}}没有提供最低要求信息",
"no_recommended_requirements": "{{title}}没有提供推荐要求信息",
"paused_progress": "{{progress}} (已暂停)",
"release_date": "发布于{{date}}",
"publisher": "发行商{{publisher}}",
"copy_link_to_clipboard": "复制链接",
@ -86,9 +83,7 @@
"playing_now": "正在游戏中",
"change": "更改",
"repacks_modal_description": "选择您想要下载的重打包",
"downloads_path": "下载路径",
"select_folder_hint": "要更改默认文件夹,请访问",
"settings": "设置",
"download_now": "立即下载",
"installation_instructions": "安装说明",
"installation_instructions_description": "安装这个游戏需要额外的步骤",
@ -118,22 +113,18 @@
"verifying": "正在验证…",
"completed_at": "完成于{{date}}",
"completed": "已完成",
"cancelled": "已取消",
"download_again": "再次下载",
"cancel": "取消",
"filter": "筛选已下载游戏",
"remove": "移除",
"downloading_metadata": "正在下载元数据…",
"checking_files": "正在检查文件…",
"starting_download": "开始下载…",
"deleting": "正在删除安装程序…",
"delete": "移除安装程序",
"remove_from_list": "移除",
"delete_modal_title": "您确定吗?",
"delete_modal_description": "这将从您的电脑上移除所有的安装文件",
"install": "安装",
"real_debrid": "Real-Debrid",
"torrent": "种子"
"install": "安装"
},
"settings": {
"downloads_path": "下载路径",
@ -143,13 +134,11 @@
"enable_repack_list_notifications": "添加新重打包时",
"telemetry": "遥测",
"telemetry_description": "启用匿名使用统计",
"real_debrid_api_token_description": "Real-Debrid API密钥",
"behavior": "行为",
"general": "常规",
"quit_app_instead_hiding": "关闭应用程序而不是最小化到托盘",
"launch_with_system": "随系统启动时运行应用程序",
"enable_real_debrid": "启用 Real-Debrid",
"real_debrid": "Real-Debrid",
"real_debrid_api_token_hint": "您可以从<0>这里</0>获取API密钥.",
"save_changes": "保存更改"
},

View File

@ -85,5 +85,8 @@ export const steamUrlBuilder = {
`https://cdn.cloudflare.steamstatic.com/steam/apps/${objectID}/logo.png`,
};
export const sleep = (ms: number) =>
new Promise((resolve) => setTimeout(resolve, ms));
export * from "./formatters";
export * from "./ps";

View File

@ -1,27 +0,0 @@
import path from "node:path";
import { spawn } from "node:child_process";
import type { ChildProcessWithoutNullStreams } from "node:child_process";
import { app } from "electron";
export const startAria2 = (): Promise<ChildProcessWithoutNullStreams> => {
return new Promise((resolve) => {
const binaryPath = app.isPackaged
? path.join(process.resourcesPath, "aria2", "aria2c")
: path.join(__dirname, "..", "..", "aria2", "aria2c");
const cp = spawn(binaryPath, [
"--enable-rpc",
"--rpc-listen-all",
"--file-allocation=none",
"--allow-overwrite=true",
]);
cp.stdout.on("data", async (data) => {
const msg = Buffer.from(data).toString("utf-8");
if (msg.includes("IPv6 RPC: listening on TCP")) {
resolve(cp);
}
});
});
};

View File

@ -0,0 +1,20 @@
import path from "node:path";
import { spawn } from "node:child_process";
import { app } from "electron";
export const startAria2 = () => {
const binaryPath = app.isPackaged
? path.join(process.resourcesPath, "aria2", "aria2c")
: path.join(__dirname, "..", "..", "aria2", "aria2c");
return spawn(
binaryPath,
[
"--enable-rpc",
"--rpc-listen-all",
"--file-allocation=none",
"--allow-overwrite=true",
],
{ stdio: "inherit" }
);
};

View File

@ -10,7 +10,9 @@ import { Downloader } from "@shared";
import { DownloadProgress } from "@types";
import { QueryDeepPartialEntity } from "typeorm/query-builder/QueryPartialEntity";
import { Game } from "@main/entity";
import { startAria2 } from "./aria2";
import { startAria2 } from "./aria2c";
import { sleep } from "@main/helpers";
import { logger } from "./logger";
export class DownloadManager {
private static downloads = new Map<number, string>();
@ -23,9 +25,22 @@ export class DownloadManager {
private static aria2 = new Aria2({});
private static async connect() {
await startAria2();
await this.aria2.open();
this.connected = true;
startAria2();
let retries = 0;
while (retries < 4 && !this.connected) {
try {
await this.aria2.open();
logger.log("Connected to aria2");
this.connected = true;
} catch (err) {
await sleep(100);
logger.log("Failed to connect to aria2, retrying...");
retries++;
}
}
}
private static getETA(

View File

@ -1,8 +1,7 @@
import { sleep } from "@main/helpers";
import { DownloadManager } from "./download-manager";
import { watchProcesses } from "./process-watcher";
const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));
export const startMainLoop = async () => {
// eslint-disable-next-line no-constant-condition
while (true) {

View File

@ -156,10 +156,10 @@ export const newVersionButton = style({
alignItems: "center",
justifyContent: "center",
gap: `${SPACING_UNIT}px`,
color: vars.color.bodyText,
color: vars.color.body,
borderBottom: "1px solid transparent",
":hover": {
borderBottom: `1px solid ${vars.color.bodyText}`,
borderBottom: `1px solid ${vars.color.body}`,
cursor: "pointer",
},
});

View File

@ -1 +1,8 @@
import { Downloader } from "@shared";
export const VERSION_CODENAME = "Exodus";
export const DOWNLOADER_NAME = {
[Downloader.RealDebrid]: "Real-Debrid",
[Downloader.Torrent]: "Torrent",
};

View File

@ -1,4 +1,5 @@
export * from "./use-download";
export * from "./use-library";
export * from "./use-date";
export * from "./use-toast";
export * from "./redux";

View File

@ -0,0 +1,33 @@
import { useCallback } from "react";
import { useAppDispatch } from "./redux";
import { showToast } from "@renderer/features";
export function useToast() {
const dispatch = useAppDispatch();
const showSuccessToast = useCallback(
(message: string) => {
dispatch(
showToast({
message,
type: "success",
})
);
},
[dispatch]
);
const showErrorToast = useCallback(
(message: string) => {
dispatch(
showToast({
message,
type: "error",
})
);
},
[dispatch]
);
return { showSuccessToast, showErrorToast };
}

View File

@ -40,6 +40,7 @@ i18n
})
.then(() => {
window.electron.updateUserPreferences({ language: i18n.language });
i18n.changeLanguage("pt-BR");
});
ReactDOM.createRoot(document.getElementById("root")!).render(

View File

@ -15,6 +15,7 @@ import { BinaryNotFoundModal } from "../shared-modals/binary-not-found-modal";
import * as styles from "./downloads.css";
import { DeleteModal } from "./delete-modal";
import { Downloader, formatBytes } from "@shared";
import { DOWNLOADER_NAME } from "@renderer/constants";
export function Downloads() {
const { library, updateLibrary } = useLibrary();
@ -55,7 +56,7 @@ export function Downloads() {
});
const getFinalDownloadSize = (game: Game) => {
const isGameDownloading = lastPacket?.game.id === game?.id;
const isGameDownloading = lastPacket?.game.id === game.id;
if (!game) return "N/A";
if (game.fileSize) return formatBytes(game.fileSize);
@ -66,16 +67,11 @@ export function Downloads() {
return game.repack?.fileSize ?? "N/A";
};
const downloaderName = {
[Downloader.RealDebrid]: t("real_debrid"),
[Downloader.Torrent]: t("torrent"),
};
const getGameInfo = (game: Game) => {
const isGameDownloading = lastPacket?.game.id === game?.id;
const isGameDownloading = lastPacket?.game.id === game.id;
const finalDownloadSize = getFinalDownloadSize(game);
if (isGameDeleting(game?.id)) {
if (isGameDeleting(game.id)) {
return <p>{t("deleting")}</p>;
}
@ -98,16 +94,16 @@ export function Downloads() {
);
}
if (game?.progress === 1) {
if (game.progress === 1) {
return (
<>
<p>{game?.repack?.title}</p>
<p>{game.repack?.title}</p>
<p>{t("completed")}</p>
</>
);
}
if (game?.status === "paused") {
if (game.status === "paused") {
return (
<>
<p>{formatDownloadProgress(game.progress)}</p>
@ -116,7 +112,19 @@ export function Downloads() {
);
}
return <p>{t(game?.status)}</p>;
if (game.status === "active") {
return (
<>
<p>{formatDownloadProgress(game.progress)}</p>
<p>
{formatBytes(game.bytesDownloaded)} / {finalDownloadSize}
</p>
</>
);
}
return <p>{t(game.status)}</p>;
};
const openDeleteModal = (gameId: number) => {
@ -125,37 +133,11 @@ export function Downloads() {
};
const getGameActions = (game: Game) => {
const isGameDownloading = lastPacket?.game.id === game?.id;
const isGameDownloading = lastPacket?.game.id === game.id;
const deleting = isGameDeleting(game.id);
if (isGameDownloading) {
return (
<>
<Button onClick={() => pauseDownload(game.id)} theme="outline">
{t("pause")}
</Button>
<Button onClick={() => cancelDownload(game.id)} theme="outline">
{t("cancel")}
</Button>
</>
);
}
if (game?.status === "paused") {
return (
<>
<Button onClick={() => resumeDownload(game.id)} theme="outline">
{t("resume")}
</Button>
<Button onClick={() => cancelDownload(game.id)} theme="outline">
{t("cancel")}
</Button>
</>
);
}
if (game?.progress === 1) {
if (game.progress === 1) {
return (
<>
<Button
@ -173,6 +155,32 @@ export function Downloads() {
);
}
if (isGameDownloading || game.status === "active") {
return (
<>
<Button onClick={() => pauseDownload(game.id)} theme="outline">
{t("pause")}
</Button>
<Button onClick={() => cancelDownload(game.id)} theme="outline">
{t("cancel")}
</Button>
</>
);
}
if (game.status === "paused") {
return (
<>
<Button onClick={() => resumeDownload(game.id)} theme="outline">
{t("resume")}
</Button>
<Button onClick={() => cancelDownload(game.id)} theme="outline">
{t("cancel")}
</Button>
</>
);
}
return (
<>
<Button
@ -243,7 +251,7 @@ export function Downloads() {
<div className={styles.downloadCoverContent}>
<small className={styles.downloaderName}>
{downloaderName[game?.downloader]}
{DOWNLOADER_NAME[game.downloader]}
</small>
</div>
</div>

View File

@ -25,4 +25,10 @@ export const downloaders = style({
export const downloaderOption = style({
flex: "1",
position: "relative",
});
export const downloaderIcon = style({
position: "absolute",
left: `${SPACING_UNIT * 2}px`,
});

View File

@ -7,8 +7,9 @@ import { Button, Link, Modal, TextField } from "@renderer/components";
import { CheckCircleFillIcon, DownloadIcon } from "@primer/octicons-react";
import { Downloader, formatBytes } from "@shared";
import type { GameRepack, UserPreferences } from "@types";
import type { GameRepack } from "@types";
import { SPACING_UNIT } from "@renderer/theme.css";
import { DOWNLOADER_NAME } from "@renderer/constants";
export interface SelectFolderModalProps {
visible: boolean;
@ -21,6 +22,8 @@ export interface SelectFolderModalProps {
repack: GameRepack | null;
}
const downloaders = [Downloader.Torrent, Downloader.RealDebrid];
export function SelectFolderModal({
visible,
onClose,
@ -32,14 +35,14 @@ export function SelectFolderModal({
const [diskFreeSpace, setDiskFreeSpace] = useState<DiskSpace | null>(null);
const [selectedPath, setSelectedPath] = useState("");
const [downloadStarting, setDownloadStarting] = useState(false);
const [userPreferences, setUserPreferences] =
useState<UserPreferences | null>(null);
const [selectedDownloader, setSelectedDownloader] = useState(
Downloader.Torrent
);
useEffect(() => {
visible && getDiskFreeSpace(selectedPath);
if (visible) {
getDiskFreeSpace(selectedPath);
}
}, [visible, selectedPath]);
useEffect(() => {
@ -48,7 +51,6 @@ export function SelectFolderModal({
window.electron.getUserPreferences(),
]).then(([path, userPreferences]) => {
setSelectedPath(userPreferences?.downloadsPath || path);
setUserPreferences(userPreferences);
if (userPreferences?.realDebridApiToken) {
setSelectedDownloader(Downloader.RealDebrid);
@ -106,35 +108,21 @@ export function SelectFolderModal({
</span>
<div className={styles.downloaders}>
<Button
className={styles.downloaderOption}
theme={
selectedDownloader === Downloader.Torrent
? "primary"
: "outline"
}
onClick={() => setSelectedDownloader(Downloader.Torrent)}
>
{selectedDownloader === Downloader.Torrent && (
<CheckCircleFillIcon />
)}
Torrent
</Button>
<Button
className={styles.downloaderOption}
theme={
selectedDownloader === Downloader.RealDebrid
? "primary"
: "outline"
}
onClick={() => setSelectedDownloader(Downloader.RealDebrid)}
disabled={!userPreferences?.realDebridApiToken}
>
{selectedDownloader === Downloader.RealDebrid && (
<CheckCircleFillIcon />
)}
Real-Debrid
</Button>
{downloaders.map((downloader) => (
<Button
key={downloader}
className={styles.downloaderOption}
theme={
selectedDownloader === downloader ? "primary" : "outline"
}
onClick={() => setSelectedDownloader(downloader)}
>
{selectedDownloader === downloader && (
<CheckCircleFillIcon className={styles.downloaderIcon} />
)}
{DOWNLOADER_NAME[downloader]}
</Button>
))}
</div>
</div>

View File

@ -5,8 +5,7 @@ import { Button, CheckboxField, Link, TextField } from "@renderer/components";
import * as styles from "./settings-real-debrid.css";
import type { UserPreferences } from "@types";
import { SPACING_UNIT } from "@renderer/theme.css";
import { showToast } from "@renderer/features";
import { useAppDispatch } from "@renderer/hooks";
import { useToast } from "@renderer/hooks";
const REAL_DEBRID_API_TOKEN_URL = "https://real-debrid.com/apitoken";
@ -19,12 +18,13 @@ export function SettingsRealDebrid({
userPreferences,
updateUserPreferences,
}: SettingsRealDebridProps) {
const [isLoading, setIsLoading] = useState(false);
const [form, setForm] = useState({
useRealDebrid: false,
realDebridApiToken: null as string | null,
});
const dispatch = useAppDispatch();
const { showSuccessToast, showErrorToast } = useToast();
const { t } = useTranslation("settings");
@ -40,38 +40,40 @@ export function SettingsRealDebrid({
const handleFormSubmit: React.FormEventHandler<HTMLFormElement> = async (
event
) => {
setIsLoading(true);
event.preventDefault();
if (form.useRealDebrid) {
const user = await window.electron.authenticateRealDebrid(
form.realDebridApiToken!
);
if (user.type === "premium") {
dispatch(
showToast({
message: t("real_debrid_free_account", { username: user.username }),
type: "error",
})
try {
if (form.useRealDebrid) {
const user = await window.electron.authenticateRealDebrid(
form.realDebridApiToken!
);
return;
if (user.type === "free") {
showErrorToast(
t("real_debrid_free_account_error", { username: user.username })
);
return;
} else {
showSuccessToast(
t("real_debrid_linked_message", { username: user.username })
);
}
}
updateUserPreferences({
realDebridApiToken: form.useRealDebrid ? form.realDebridApiToken : null,
});
} catch (err) {
showErrorToast(t("real_debrid_invalid_token"));
} finally {
setIsLoading(false);
}
// dispatch(
// showToast({
// message: t("real_debrid_free_account", { username: "doctorp" }),
// type: "error",
// })
// );
updateUserPreferences({
realDebridApiToken: form.useRealDebrid ? form.realDebridApiToken : null,
});
};
const isButtonDisabled = form.useRealDebrid && !form.realDebridApiToken;
const isButtonDisabled =
(form.useRealDebrid && !form.realDebridApiToken) || isLoading;
return (
<form className={styles.form} onSubmit={handleFormSubmit}>
@ -90,7 +92,7 @@ export function SettingsRealDebrid({
{form.useRealDebrid && (
<TextField
label="API Private Token"
label={t("real_debrid_api_token")}
value={form.realDebridApiToken ?? ""}
type="password"
onChange={(event) =>

View File

@ -8,15 +8,16 @@ import { SettingsRealDebrid } from "./settings-real-debrid";
import { SettingsGeneral } from "./settings-general";
import { SettingsBehavior } from "./settings-behavior";
const categories = ["general", "behavior", "real_debrid"];
export function Settings() {
const [currentCategory, setCurrentCategory] = useState(categories.at(0)!);
const [userPreferences, setUserPreferences] =
useState<UserPreferences | null>(null);
const { t } = useTranslation("settings");
const categories = [t("general"), t("behavior"), "Real-Debrid"];
const [currentCategoryIndex, setCurrentCategoryIndex] = useState(0);
useEffect(() => {
window.electron.getUserPreferences().then((userPreferences) => {
setUserPreferences(userPreferences);
@ -33,7 +34,7 @@ export function Settings() {
};
const renderCategory = () => {
if (currentCategory === "general") {
if (currentCategoryIndex === 0) {
return (
<SettingsGeneral
userPreferences={userPreferences}
@ -42,9 +43,9 @@ export function Settings() {
);
}
if (currentCategory === "real_debrid") {
if (currentCategoryIndex === 1) {
return (
<SettingsRealDebrid
<SettingsBehavior
userPreferences={userPreferences}
updateUserPreferences={handleUpdateUserPreferences}
/>
@ -52,7 +53,7 @@ export function Settings() {
}
return (
<SettingsBehavior
<SettingsRealDebrid
userPreferences={userPreferences}
updateUserPreferences={handleUpdateUserPreferences}
/>
@ -63,18 +64,18 @@ export function Settings() {
<section className={styles.container}>
<div className={styles.content}>
<section className={styles.settingsCategories}>
{categories.map((category) => (
{categories.map((category, index) => (
<Button
key={category}
theme={currentCategory === category ? "primary" : "outline"}
onClick={() => setCurrentCategory(category)}
theme={currentCategoryIndex === index ? "primary" : "outline"}
onClick={() => setCurrentCategoryIndex(index)}
>
{t(category)}
{category}
</Button>
))}
</section>
<h2>{t(currentCategory)}</h2>
<h2>{categories[currentCategoryIndex]}</h2>
{renderCategory()}
</div>
</section>