From ffb3d7995435a6a66b215e3d780ef9f8b8a02ebf Mon Sep 17 00:00:00 2001 From: Chubby Granny Chaser Date: Wed, 29 May 2024 21:50:35 +0100 Subject: [PATCH] feat: using retry system to connect to aria2 --- package.json | 1 - src/locales/ar/translation.json | 12 +-- src/locales/be/translation.json | 6 -- src/locales/da/translation.json | 14 +-- src/locales/en/translation.json | 14 +-- src/locales/es/translation.json | 12 +-- src/locales/fa/translation.json | 12 +-- src/locales/fr/translation.json | 5 -- src/locales/hu/translation.json | 6 -- src/locales/id/translation.json | 6 -- src/locales/it/translation.json | 12 +-- src/locales/ko/translation.json | 12 +-- src/locales/nl/translation.json | 11 +-- src/locales/pl/translation.json | 12 +-- src/locales/pt/translation.json | 31 +++---- src/locales/ru/translation.json | 12 +-- src/locales/tr/translation.json | 6 -- src/locales/uk/translation.json | 6 -- src/locales/zh/translation.json | 13 +-- src/main/helpers/index.ts | 3 + src/main/services/aria2.ts | 27 ------ src/main/services/aria2c.ts | 20 +++++ src/main/services/download-manager.ts | 23 ++++- src/main/services/main-loop.ts | 3 +- .../src/components/header/header.css.ts | 4 +- src/renderer/src/constants.ts | 7 ++ src/renderer/src/hooks/index.ts | 1 + src/renderer/src/hooks/use-toast.ts | 33 +++++++ src/renderer/src/main.tsx | 1 + .../src/pages/downloads/downloads.tsx | 90 ++++++++++--------- .../modals/select-folder-modal.css.tsx | 6 ++ .../modals/select-folder-modal.tsx | 56 +++++------- .../pages/settings/settings-real-debrid.tsx | 58 ++++++------ src/renderer/src/pages/settings/settings.tsx | 25 +++--- 34 files changed, 243 insertions(+), 317 deletions(-) delete mode 100644 src/main/services/aria2.ts create mode 100644 src/main/services/aria2c.ts create mode 100644 src/renderer/src/hooks/use-toast.ts diff --git a/package.json b/package.json index 510f6a71..608c91fd 100644 --- a/package.json +++ b/package.json @@ -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" diff --git a/src/locales/ar/translation.json b/src/locales/ar/translation.json index 5e2d05ef..1c59e5f4 100644 --- a/src/locales/ar/translation.json +++ b/src/locales/ar/translation.json @@ -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": { diff --git a/src/locales/be/translation.json b/src/locales/be/translation.json index 0053795a..8f428a20 100644 --- a/src/locales/be/translation.json +++ b/src/locales/be/translation.json @@ -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": "Выдаліць усталёўшчык", diff --git a/src/locales/da/translation.json b/src/locales/da/translation.json index 4a184330..19d91107 100644 --- a/src/locales/da/translation.json +++ b/src/locales/da/translation.json @@ -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", "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.", + "real_debrid_api_token_hint": "Du kan få din API nøgle <0>her", "save_changes": "Gem ændringer" }, "notifications": { diff --git a/src/locales/en/translation.json b/src/locales/en/translation.json index a7ed1378..5cedf35d 100644 --- a/src/locales/en/translation.json +++ b/src/locales/en/translation.json @@ -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.", - "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", + "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": { diff --git a/src/locales/es/translation.json b/src/locales/es/translation.json index e0ff8a1b..de274b8c 100644 --- a/src/locales/es/translation.json +++ b/src/locales/es/translation.json @@ -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í.", + "real_debrid_api_token_hint": "Puedes obtener tu clave de API <0>aquí", "save_changes": "Guardar cambios" }, "notifications": { diff --git a/src/locales/fa/translation.json b/src/locales/fa/translation.json index 4c8e3e7d..2ba7a242 100644 --- a/src/locales/fa/translation.json +++ b/src/locales/fa/translation.json @@ -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 بروید", "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>اینجا بگیرید.", "save_changes": "ذخیره تغییرات" }, diff --git a/src/locales/fr/translation.json b/src/locales/fr/translation.json index 2e17f492..39ec9d38 100644 --- a/src/locales/fr/translation.json +++ b/src/locales/fr/translation.json @@ -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", diff --git a/src/locales/hu/translation.json b/src/locales/hu/translation.json index 8a370fb2..188f1d98 100644 --- a/src/locales/hu/translation.json +++ b/src/locales/hu/translation.json @@ -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", diff --git a/src/locales/id/translation.json b/src/locales/id/translation.json index 60de327a..16070852 100644 --- a/src/locales/id/translation.json +++ b/src/locales/id/translation.json @@ -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", diff --git a/src/locales/it/translation.json b/src/locales/it/translation.json index e7c14f8c..b3436c87 100644 --- a/src/locales/it/translation.json +++ b/src/locales/it/translation.json @@ -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.", + "real_debrid_api_token_hint": "Puoi trovare la tua chiave API <0>here", "save_changes": "Salva modifiche" }, "notifications": { diff --git a/src/locales/ko/translation.json b/src/locales/ko/translation.json index 11f8afc2..3549d56b 100644 --- a/src/locales/ko/translation.json +++ b/src/locales/ko/translation.json @@ -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>설정으로 가세요", "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>이곳에서 얻으세요.", "save_changes": "변경 사항 저장" }, diff --git a/src/locales/nl/translation.json b/src/locales/nl/translation.json index 066f8813..0712ac73 100644 --- a/src/locales/nl/translation.json +++ b/src/locales/nl/translation.json @@ -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", "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 verkrijgen.", "save_changes": "Wijzigingen opslaan" }, diff --git a/src/locales/pl/translation.json b/src/locales/pl/translation.json index 4ecff6d3..3db99dd6 100644 --- a/src/locales/pl/translation.json +++ b/src/locales/pl/translation.json @@ -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.", + "real_debrid_api_token_hint": "Możesz uzyskać swój klucz API <0>tutaj", "save_changes": "Zapisz zmiany" }, "notifications": { diff --git a/src/locales/pt/translation.json b/src/locales/pt/translation.json index a7b62d92..d1427a38 100644 --- a/src/locales/pt/translation.json +++ b/src/locales/pt/translation.json @@ -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", - "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.", + "real_debrid_api_token_hint": "Você pode obter seu token de API <0>aqui", + "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" } } diff --git a/src/locales/ru/translation.json b/src/locales/ru/translation.json index e8ed817e..146349bc 100644 --- a/src/locales/ru/translation.json +++ b/src/locales/ru/translation.json @@ -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>здесь.", + "real_debrid_api_token_hint": "API ключ можно получить <0>здесь", "save_changes": "Сохранить изменения" }, "notifications": { diff --git a/src/locales/tr/translation.json b/src/locales/tr/translation.json index be40e013..136420a0 100644 --- a/src/locales/tr/translation.json +++ b/src/locales/tr/translation.json @@ -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", diff --git a/src/locales/uk/translation.json b/src/locales/uk/translation.json index e0f6af7b..733e1b88 100644 --- a/src/locales/uk/translation.json +++ b/src/locales/uk/translation.json @@ -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": "Видалити інсталятор", diff --git a/src/locales/zh/translation.json b/src/locales/zh/translation.json index 18facd1a..21513d0f 100644 --- a/src/locales/zh/translation.json +++ b/src/locales/zh/translation.json @@ -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>这里获取API密钥.", "save_changes": "保存更改" }, diff --git a/src/main/helpers/index.ts b/src/main/helpers/index.ts index 22a95ddc..367ff0d8 100644 --- a/src/main/helpers/index.ts +++ b/src/main/helpers/index.ts @@ -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"; diff --git a/src/main/services/aria2.ts b/src/main/services/aria2.ts deleted file mode 100644 index df624cd1..00000000 --- a/src/main/services/aria2.ts +++ /dev/null @@ -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 => { - 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); - } - }); - }); -}; diff --git a/src/main/services/aria2c.ts b/src/main/services/aria2c.ts new file mode 100644 index 00000000..eba48524 --- /dev/null +++ b/src/main/services/aria2c.ts @@ -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" } + ); +}; diff --git a/src/main/services/download-manager.ts b/src/main/services/download-manager.ts index e7a2a3b4..c1f39f74 100644 --- a/src/main/services/download-manager.ts +++ b/src/main/services/download-manager.ts @@ -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(); @@ -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( diff --git a/src/main/services/main-loop.ts b/src/main/services/main-loop.ts index 9a55ebda..dfae5eec 100644 --- a/src/main/services/main-loop.ts +++ b/src/main/services/main-loop.ts @@ -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) { diff --git a/src/renderer/src/components/header/header.css.ts b/src/renderer/src/components/header/header.css.ts index cb18ae3e..6ad2e2ef 100644 --- a/src/renderer/src/components/header/header.css.ts +++ b/src/renderer/src/components/header/header.css.ts @@ -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", }, }); diff --git a/src/renderer/src/constants.ts b/src/renderer/src/constants.ts index 6beac79f..97bb0b57 100644 --- a/src/renderer/src/constants.ts +++ b/src/renderer/src/constants.ts @@ -1 +1,8 @@ +import { Downloader } from "@shared"; + export const VERSION_CODENAME = "Exodus"; + +export const DOWNLOADER_NAME = { + [Downloader.RealDebrid]: "Real-Debrid", + [Downloader.Torrent]: "Torrent", +}; diff --git a/src/renderer/src/hooks/index.ts b/src/renderer/src/hooks/index.ts index bf0b7612..563e3ff1 100644 --- a/src/renderer/src/hooks/index.ts +++ b/src/renderer/src/hooks/index.ts @@ -1,4 +1,5 @@ export * from "./use-download"; export * from "./use-library"; export * from "./use-date"; +export * from "./use-toast"; export * from "./redux"; diff --git a/src/renderer/src/hooks/use-toast.ts b/src/renderer/src/hooks/use-toast.ts new file mode 100644 index 00000000..a35b6039 --- /dev/null +++ b/src/renderer/src/hooks/use-toast.ts @@ -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 }; +} diff --git a/src/renderer/src/main.tsx b/src/renderer/src/main.tsx index a457592e..2303c062 100644 --- a/src/renderer/src/main.tsx +++ b/src/renderer/src/main.tsx @@ -40,6 +40,7 @@ i18n }) .then(() => { window.electron.updateUserPreferences({ language: i18n.language }); + i18n.changeLanguage("pt-BR"); }); ReactDOM.createRoot(document.getElementById("root")!).render( diff --git a/src/renderer/src/pages/downloads/downloads.tsx b/src/renderer/src/pages/downloads/downloads.tsx index 2059d029..74db0d52 100644 --- a/src/renderer/src/pages/downloads/downloads.tsx +++ b/src/renderer/src/pages/downloads/downloads.tsx @@ -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

{t("deleting")}

; } @@ -98,16 +94,16 @@ export function Downloads() { ); } - if (game?.progress === 1) { + if (game.progress === 1) { return ( <> -

{game?.repack?.title}

+

{game.repack?.title}

{t("completed")}

); } - if (game?.status === "paused") { + if (game.status === "paused") { return ( <>

{formatDownloadProgress(game.progress)}

@@ -116,7 +112,19 @@ export function Downloads() { ); } - return

{t(game?.status)}

; + if (game.status === "active") { + return ( + <> +

{formatDownloadProgress(game.progress)}

+ +

+ {formatBytes(game.bytesDownloaded)} / {finalDownloadSize} +

+ + ); + } + + return

{t(game.status)}

; }; 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 ( - <> - - - - ); - } - - if (game?.status === "paused") { - return ( - <> - - - - ); - } - - if (game?.progress === 1) { + if (game.progress === 1) { return ( <> + + + ); + } + + if (game.status === "paused") { + return ( + <> + + + + ); + } + return ( <> - + {downloaders.map((downloader) => ( + + ))} diff --git a/src/renderer/src/pages/settings/settings-real-debrid.tsx b/src/renderer/src/pages/settings/settings-real-debrid.tsx index 3f894070..0285663d 100644 --- a/src/renderer/src/pages/settings/settings-real-debrid.tsx +++ b/src/renderer/src/pages/settings/settings-real-debrid.tsx @@ -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 = 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 (
@@ -90,7 +92,7 @@ export function SettingsRealDebrid({ {form.useRealDebrid && ( diff --git a/src/renderer/src/pages/settings/settings.tsx b/src/renderer/src/pages/settings/settings.tsx index 28e3e7a4..dd790275 100644 --- a/src/renderer/src/pages/settings/settings.tsx +++ b/src/renderer/src/pages/settings/settings.tsx @@ -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(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 ( @@ -52,7 +53,7 @@ export function Settings() { } return ( - @@ -63,18 +64,18 @@ export function Settings() {
- {categories.map((category) => ( + {categories.map((category, index) => ( ))}
-

{t(currentCategory)}

+

{categories[currentCategoryIndex]}

{renderCategory()}