From cc605acc8399fcbe0335340471a244b8b8224fd8 Mon Sep 17 00:00:00 2001 From: Mohamed Abbas Date: Mon, 27 Apr 2026 15:15:41 +0300 Subject: [PATCH] Added shutdown group (#1732) --- backend/pb/handlers.go | 34 ++++++++++++++++++++++++ backend/pb/pb.go | 1 + frontend/src/routes/+page.svelte | 45 ++++++++++++++++++++++++++++++-- frontend/translations/ar-SA.json | 3 +++ frontend/translations/bg-BG.json | 3 +++ frontend/translations/cs-CZ.json | 3 +++ frontend/translations/de-DE.json | 3 +++ frontend/translations/en-US.json | 3 +++ frontend/translations/es-ES.json | 3 +++ frontend/translations/fr-FR.json | 3 +++ frontend/translations/hi-IN.json | 5 ++++ frontend/translations/id-ID.json | 5 ++++ frontend/translations/it-IT.json | 3 +++ frontend/translations/ja-JP.json | 3 +++ frontend/translations/ko-KR.json | 3 +++ frontend/translations/nb-NO.json | 3 +++ frontend/translations/nl-NL.json | 3 +++ frontend/translations/pl-PL.json | 3 +++ frontend/translations/pt-PT.json | 3 +++ frontend/translations/ru-RU.json | 3 +++ frontend/translations/uk-UA.json | 3 +++ frontend/translations/vi-VN.json | 3 +++ frontend/translations/zh-CN.json | 3 +++ frontend/translations/zh-TW.json | 3 +++ 24 files changed, 145 insertions(+), 2 deletions(-) diff --git a/backend/pb/handlers.go b/backend/pb/handlers.go index d96a1478..794c3fb3 100644 --- a/backend/pb/handlers.go +++ b/backend/pb/handlers.go @@ -202,6 +202,40 @@ func HandlerWakeGroup(e *core.RequestEvent) error { return e.JSON(http.StatusOK, records) } +func HandlerShutdownGroup(e *core.RequestEvent) error { + records, err := e.App.FindRecordsByFilter("devices", "groups.id = {:grpId} && status = 'online'", "", 0, 0, + dbx.Params{"grpId": e.Request.PathValue("id")}, + ) + if err != nil { + return apis.NewNotFoundError("No devices in group", err) + } + + for _, record := range records { + go func() { + record.Set("status", "pending") + if err := e.App.Save(record); err != nil { + logger.Error.Println("Failed to save record:", err) + } + + if err := networking.ShutdownDevice(record); err != nil { + logger.Error.Println(err) + record.Set("status", "online") + if err := e.App.Save(record); err != nil { + logger.Error.Println("Failed to save record:", err) + } + return + } + + record.Set("status", "offline") + if err := e.App.Save(record); err != nil { + logger.Error.Println("Failed to save record:", err) + } + }() + } + + return e.JSON(http.StatusOK, records) +} + type Nmaprun struct { Host []struct { Address []struct { diff --git a/backend/pb/pb.go b/backend/pb/pb.go index 0430764c..4fc75535 100644 --- a/backend/pb/pb.go +++ b/backend/pb/pb.go @@ -74,6 +74,7 @@ func StartPocketBase(distDirFS fs.FS) { se.Router.GET("/api/upsnap/sleep/{id}", HandlerSleep).Bind(RequireUpSnapPermission()) se.Router.GET("/api/upsnap/reboot/{id}", HandlerReboot).Bind(RequireUpSnapPermission()) se.Router.GET("/api/upsnap/shutdown/{id}", HandlerShutdown).Bind(RequireUpSnapPermission()) + se.Router.GET("/api/upsnap/shutdowngroup/{id}", HandlerShutdownGroup).Bind(RequireUpSnapPermission()) se.Router.GET("/api/upsnap/scan", HandlerScan).Bind(RequireScanDevicesPermission()) se.Router.POST("/api/upsnap/init-superuser", HandlerInitSuperuser) // https://github.com/pocketbase/pocketbase/discussions/6198 se.Router.POST("/api/upsnap/validate-cron", HandlerValidateCron) diff --git a/frontend/src/routes/+page.svelte b/frontend/src/routes/+page.svelte index 3e7febdf..a2b86e5b 100644 --- a/frontend/src/routes/+page.svelte +++ b/frontend/src/routes/+page.svelte @@ -25,6 +25,8 @@ let orderByGroups = $state(true); let searchQuery = $state(''); let searchInput: HTMLInputElement | undefined = $state(); + let modalShutdownGroup: HTMLDialogElement | undefined = $state(); + let pendingShutdownGroup: Group | null = $state(null); let filteredDevices: Device[] = $derived([]); let devicesWithoutGroups: Device[] = $derived([]); let devicesWithGroup: { @@ -111,6 +113,23 @@ }); } + function askShutdownGroupConfirmation(group: Group) { + pendingShutdownGroup = group; + modalShutdownGroup?.showModal(); + } + + function executeShutdownGroup() { + if (pendingShutdownGroup) { + fetch(`${backendUrl}api/upsnap/shutdowngroup/${pendingShutdownGroup.id}`, { + headers: { + Authorization: $pocketbase.authStore.token + } + }).catch((err) => { + toast.error(err.message); + }); + } + } + onMount(() => { orderBy = (localStorage.getItem('orderBy') as 'name' | 'ip') || 'name'; orderByGroups = localStorage.getItem('orderByGroups') !== 'false'; @@ -191,13 +210,18 @@ {/if} {#each devicesWithGroup.sort( (a, b) => (a.group?.name ?? '').localeCompare( b.group?.name ?? '', $localeStore, { numeric: true } ) ) as { group, devices } (group?.id)}
-

- {group?.name ?? 'Unknown group name'} +

+ {group?.name ?? 'Unknown group name'} +

{#each devices as device, i (device.id)} @@ -237,3 +261,20 @@
{/if} + + + + diff --git a/frontend/translations/ar-SA.json b/frontend/translations/ar-SA.json index 382f187f..0eeb4107 100644 --- a/frontend/translations/ar-SA.json +++ b/frontend/translations/ar-SA.json @@ -51,6 +51,8 @@ "device_link": "الرابط", "device_modal_confirm_shutdown_desc": "يرجى التأكيد لإيقاف {device}.", "device_modal_confirm_shutdown_title": "إيقاف {device}؟", + "home_modal_confirm_shutdown_group_desc": "يرجى التأكيد لإيقاف جميع الأجهزة في {group}.", + "home_modal_confirm_shutdown_group_title": "إيقاف {group}؟", "device_modal_confirm_wake_desc": "يرجى التأكيد لتشغيل {device}.", "device_modal_confirm_wake_title": "تشغيل {device}؟", "device_network_scan_add_all": "إضافة جميع الأجهزة", @@ -117,6 +119,7 @@ "home_page_title": "الرئيسية", "home_search_placeholder": "البحث عن الأجهزة", "home_wake_group": "تشغيل المجموعة", + "home_shutdown_group": "إيقاف المجموعة", "login_btn_login": "تسجيل الدخول", "login_btn_more": "المزيد", "login_email_label": "البريد الإلكتروني أو اسم المستخدم:", diff --git a/frontend/translations/bg-BG.json b/frontend/translations/bg-BG.json index e8962f0f..60a48ce6 100644 --- a/frontend/translations/bg-BG.json +++ b/frontend/translations/bg-BG.json @@ -51,6 +51,8 @@ "device_link": "Връзка", "device_modal_confirm_shutdown_desc": "Моля, потвърдете изключването на {device}.", "device_modal_confirm_shutdown_title": "Изключване на {device}?", + "home_modal_confirm_shutdown_group_desc": "Моля, потвърдете изключването на всички устройства в {group}.", + "home_modal_confirm_shutdown_group_title": "Изключване на {group}?", "device_modal_confirm_wake_desc": "Моля, потвърдете събуждането на {device}.", "device_modal_confirm_wake_title": "Събуждане на {device}?", "device_network_scan_add_all": "Добавяне на всички устройства", @@ -117,6 +119,7 @@ "home_page_title": "Начало", "home_search_placeholder": "Търсене на устройства", "home_wake_group": "Събуждане на група", + "home_shutdown_group": "Изключване на група", "login_btn_login": "Влизане", "login_btn_more": "...", "login_email_label": "Имейл или потребителско име:", diff --git a/frontend/translations/cs-CZ.json b/frontend/translations/cs-CZ.json index 1efd1983..44827ab7 100644 --- a/frontend/translations/cs-CZ.json +++ b/frontend/translations/cs-CZ.json @@ -51,6 +51,8 @@ "device_link": "Odkaz", "device_modal_confirm_shutdown_desc": "Prosím potvrďte vypnutí zařízení {device}.", "device_modal_confirm_shutdown_title": "Vypnout {device}?", + "home_modal_confirm_shutdown_group_desc": "Potvrďte vypnutí všech zařízení ve skupině {group}.", + "home_modal_confirm_shutdown_group_title": "Vypnout {group}?", "device_modal_confirm_wake_desc": "Prosím potvrďte probuzení zařízení {device}.", "device_modal_confirm_wake_title": "Probudit {device}?", "device_network_scan_add_all": "Přidat všechna zařízení", @@ -117,6 +119,7 @@ "home_page_title": "Domů", "home_search_placeholder": "Vyhledat zařízení", "home_wake_group": "Skupiny pro probuzení", + "home_shutdown_group": "Skupiny vypnutí", "login_btn_login": "Přihlásit se", "login_btn_more": "Více", "login_email_label": "E-mailová adresa nebo uživatelské jméno:", diff --git a/frontend/translations/de-DE.json b/frontend/translations/de-DE.json index e676d4e5..bd44ca99 100644 --- a/frontend/translations/de-DE.json +++ b/frontend/translations/de-DE.json @@ -51,6 +51,8 @@ "device_link": "Link", "device_modal_confirm_shutdown_desc": "Bitte bestätigen, um {device} herunterzufahren.", "device_modal_confirm_shutdown_title": "{device} herunterfahren?", + "home_modal_confirm_shutdown_group_desc": "Bitte bestätigen, um alle Geräte in {group} herunterzufahren.", + "home_modal_confirm_shutdown_group_title": "{group} herunterfahren?", "device_modal_confirm_wake_desc": "Bitte bestätigen, um {device} einzuschalten.", "device_modal_confirm_wake_title": "{device} einschalten?", "device_network_scan_add_all": "Alle Geräte hinzufügen", @@ -117,6 +119,7 @@ "home_page_title": "Home", "home_search_placeholder": "Suche nach Geräten", "home_wake_group": "Gruppe wecken", + "home_shutdown_group": "Gruppe herunterfahren", "login_btn_login": "Login", "login_btn_more": "Mehr", "login_email_label": "Email oder Nutzername:", diff --git a/frontend/translations/en-US.json b/frontend/translations/en-US.json index 1b5ae97b..d43fa0c7 100644 --- a/frontend/translations/en-US.json +++ b/frontend/translations/en-US.json @@ -51,6 +51,8 @@ "device_link": "Link", "device_modal_confirm_shutdown_desc": "Please confirm to shutdown {device}.", "device_modal_confirm_shutdown_title": "Shutdown {device}?", + "home_modal_confirm_shutdown_group_desc": "Please confirm to shutdown all devices in {group}.", + "home_modal_confirm_shutdown_group_title": "Shutdown {group}?", "device_modal_confirm_wake_desc": "Please confirm to wake {device}.", "device_modal_confirm_wake_title": "Wake {device}?", "device_network_scan_add_all": "Add all devices", @@ -117,6 +119,7 @@ "home_page_title": "Home", "home_search_placeholder": "Search for devices", "home_wake_group": "Wake group", + "home_shutdown_group": "Shutdown group", "login_btn_login": "Login", "login_btn_more": "More", "login_email_label": "Email or Username:", diff --git a/frontend/translations/es-ES.json b/frontend/translations/es-ES.json index 31d788a0..26502c2b 100644 --- a/frontend/translations/es-ES.json +++ b/frontend/translations/es-ES.json @@ -51,6 +51,8 @@ "device_link": "Link", "device_modal_confirm_shutdown_desc": "Por favor confirme para apagar {device}.", "device_modal_confirm_shutdown_title": "{device} apagar?", + "home_modal_confirm_shutdown_group_desc": "Por favor confirme para apagar todos los dispositivos en {group}.", + "home_modal_confirm_shutdown_group_title": "Apagar {group}?", "device_modal_confirm_wake_desc": "Confirme para activar {device}.", "device_modal_confirm_wake_title": "{device} activar?", "device_network_scan_add_all": "Añadir todos los dispositivos", @@ -117,6 +119,7 @@ "home_page_title": "Inicio", "home_search_placeholder": "Buscar dispositivos", "home_wake_group": "Grupo Wake", + "home_shutdown_group": "Grupo apagar", "login_btn_login": "Entrar", "login_btn_more": "Más", "login_email_label": "Email o Nombre de usuario:", diff --git a/frontend/translations/fr-FR.json b/frontend/translations/fr-FR.json index 05cbd8bd..eb6cec8a 100644 --- a/frontend/translations/fr-FR.json +++ b/frontend/translations/fr-FR.json @@ -51,6 +51,8 @@ "device_link": "Lien", "device_modal_confirm_shutdown_desc": "Veuillez confirmer l'arrêt de {device}.", "device_modal_confirm_shutdown_title": "Arrêter {device} ?", + "home_modal_confirm_shutdown_group_desc": "Veuillez confirmer l'arrêt de tous les appareils dans {group}.", + "home_modal_confirm_shutdown_group_title": "Arrêter {group} ?", "device_modal_confirm_wake_desc": "Veuillez confirmer le réveil de {device}.", "device_modal_confirm_wake_title": "Réveiller {device} ?", "device_network_scan_add_all": "Ajouter tous les appareils", @@ -117,6 +119,7 @@ "home_page_title": "Accueil", "home_search_placeholder": "Recherche de dispositifs", "home_wake_group": "Groupe de réveil", + "home_shutdown_group": "Groupe éteindre", "login_btn_login": "Connexion", "login_btn_more": "Plus", "login_email_label": "Courriel ou nom d'utilisateur :", diff --git a/frontend/translations/hi-IN.json b/frontend/translations/hi-IN.json index 3876775d..6f338942 100644 --- a/frontend/translations/hi-IN.json +++ b/frontend/translations/hi-IN.json @@ -51,6 +51,10 @@ "device_link": "लिंक", "device_modal_confirm_shutdown_desc": "कृपया {device} को बंद करने की पुष्टि करें।", "device_modal_confirm_shutdown_title": "{device} को बंद करें?", + "home_modal_confirm_shutdown_group_desc": "कृपया {group} में सभी उपकरणों को बंद करने की पुष्टि करें।", + "home_modal_confirm_shutdown_group_title": "{group} को बंद करें?", + "home_modal_confirm_shutdown_group_desc": "कृपया {group} में सभी उपकरणों को बंद करने की पुष्टि करें।", + "home_modal_confirm_shutdown_group_title": "{group} को बंद करें?", "device_modal_confirm_wake_desc": "कृपया {device} को जगाने की पुष्टि करें।", "device_modal_confirm_wake_title": "{device} को जगाएँ?", "device_network_scan_add_all": "सभी डिवाइस जोड़ें", @@ -117,6 +121,7 @@ "home_page_title": "होम", "home_search_placeholder": "डिवाइस खोजें", "home_wake_group": "समूह जगाएँ", + "home_shutdown_group": "समूह बंद करें", "login_btn_login": "लॉगिन", "login_btn_more": "अधिक", "login_email_label": "ईमेल या उपयोगकर्ता नाम:", diff --git a/frontend/translations/id-ID.json b/frontend/translations/id-ID.json index 52d45ab6..910dfa61 100644 --- a/frontend/translations/id-ID.json +++ b/frontend/translations/id-ID.json @@ -51,6 +51,10 @@ "device_link": "Tautan", "device_modal_confirm_shutdown_desc": "Harap konfirmasi untuk mematikan {device}.", "device_modal_confirm_shutdown_title": "Matikan {device}?", + "home_modal_confirm_shutdown_group_desc": "Harap konfirmasi untuk mematikan semua perangkat di {group}.", + "home_modal_confirm_shutdown_group_title": "Matikan {group}?", + "home_modal_confirm_shutdown_group_desc": "Harap konfirmasi untuk mematikan semua perangkat di {group}.", + "home_modal_confirm_shutdown_group_title": "Matikan {group}?", "device_modal_confirm_wake_desc": "Harap konfirmasi untuk membangunkan {device}.", "device_modal_confirm_wake_title": "Bangunkan {device}?", "device_network_scan_add_all": "Tambahkan semua perangkat", @@ -117,6 +121,7 @@ "home_page_title": "Beranda", "home_search_placeholder": "Mencari perangkat", "home_wake_group": "Kelompok bangun", + "home_shutdown_group": "Kelompok matikan", "login_btn_login": "Masuk", "login_btn_more": "Lainnya", "login_email_label": "Email atau Nama Pengguna:", diff --git a/frontend/translations/it-IT.json b/frontend/translations/it-IT.json index c6cbf474..f13d1e2a 100644 --- a/frontend/translations/it-IT.json +++ b/frontend/translations/it-IT.json @@ -51,6 +51,8 @@ "device_link": "Collegamento", "device_modal_confirm_shutdown_desc": "Sicuro di voler spegnere {device}.", "device_modal_confirm_shutdown_title": "Spegnere {device}?", + "home_modal_confirm_shutdown_group_desc": "Sicuro di voler spegnere tutti i dispositivi in {group}.", + "home_modal_confirm_shutdown_group_title": "Spegnere {group}?", "device_modal_confirm_wake_desc": "Sicuro di voler accendere {device}.", "device_modal_confirm_wake_title": "Accendere {device}?", "device_network_scan_add_all": "Aggiungi tutti i dispositivi", @@ -117,6 +119,7 @@ "home_page_title": "Home", "home_search_placeholder": "Ricerca di dispositivi", "home_wake_group": "Gruppo Wake", + "home_shutdown_group": "Gruppo spegni", "login_btn_login": "Login", "login_btn_more": "Di più...", "login_email_label": "Email o nome utente:", diff --git a/frontend/translations/ja-JP.json b/frontend/translations/ja-JP.json index 70bc8dbc..4110ae97 100644 --- a/frontend/translations/ja-JP.json +++ b/frontend/translations/ja-JP.json @@ -51,6 +51,8 @@ "device_link": "リンク", "device_modal_confirm_shutdown_desc": "{device} をシャットダウンすることを確認してください。", "device_modal_confirm_shutdown_title": "{device} をシャットダウンしますか?", + "home_modal_confirm_shutdown_group_desc": "{group} のすべてのデバイスをシャットダウンすることを確認してください。", + "home_modal_confirm_shutdown_group_title": "{group} をシャットダウンしますか?", "device_modal_confirm_wake_desc": "{device} を起動することを確認してください。", "device_modal_confirm_wake_title": "{device} を起動しますか?", "device_network_scan_add_all": "すべてのデバイスを追加", @@ -117,6 +119,7 @@ "home_page_title": "ホーム", "home_search_placeholder": "デバイスの検索", "home_wake_group": "ウェークグループ", + "home_shutdown_group": "グループ終了", "login_btn_login": "ログイン", "login_btn_more": "詳細", "login_email_label": "メールアドレスまたはユーザー名:", diff --git a/frontend/translations/ko-KR.json b/frontend/translations/ko-KR.json index cd68256d..6e9bd8c3 100644 --- a/frontend/translations/ko-KR.json +++ b/frontend/translations/ko-KR.json @@ -51,6 +51,8 @@ "device_link": "링크", "device_modal_confirm_shutdown_desc": "정말 {device}를 종료할까요?", "device_modal_confirm_shutdown_title": "{device}를 종료할까요?", + "home_modal_confirm_shutdown_group_desc": "{group}의 모든 장치 종료를 확인하세요.", + "home_modal_confirm_shutdown_group_title": "{group} 종료?", "device_modal_confirm_wake_desc": "{device}를 시작하시려면 예를 눌러주세요.", "device_modal_confirm_wake_title": "{device}를 시작할까요?", "device_network_scan_add_all": "모든 기기 추가하기", @@ -117,6 +119,7 @@ "home_page_title": "홈", "home_search_placeholder": "기기 검색", "home_wake_group": "깨우기 그룹", + "home_shutdown_group": "그룹 종료", "login_btn_login": "로그인", "login_btn_more": "더보기", "login_email_label": "이메일 또는 사용자명", diff --git a/frontend/translations/nb-NO.json b/frontend/translations/nb-NO.json index 153cee9a..b927f880 100644 --- a/frontend/translations/nb-NO.json +++ b/frontend/translations/nb-NO.json @@ -51,6 +51,8 @@ "device_link": "Link", "device_modal_confirm_shutdown_desc": "Bekreft å slå av {device}.", "device_modal_confirm_shutdown_title": "Slå av {device}?", + "home_modal_confirm_shutdown_group_desc": "Bekreft å slå av alle enheter i {group}.", + "home_modal_confirm_shutdown_group_title": "Slå av {group}?", "device_modal_confirm_wake_desc": "Vennligst bekreft for å vekke {device}.", "device_modal_confirm_wake_title": "Vekk {device}?", "device_network_scan_add_all": "Legg til alle enheter", @@ -117,6 +119,7 @@ "home_page_title": "Hjem", "home_search_placeholder": "Søk etter enheter", "home_wake_group": "Vekkegruppe", + "home_shutdown_group": "Slå av gruppe", "login_btn_login": "Logg inn", "login_btn_more": "Mer", "login_email_label": "E-post eller brukernavn:", diff --git a/frontend/translations/nl-NL.json b/frontend/translations/nl-NL.json index 0be4f630..9470ef35 100644 --- a/frontend/translations/nl-NL.json +++ b/frontend/translations/nl-NL.json @@ -51,6 +51,8 @@ "device_link": "Link", "device_modal_confirm_shutdown_desc": "Bevestig om {device} af te sluiten.", "device_modal_confirm_shutdown_title": "Afsluiten {device}?", + "home_modal_confirm_shutdown_group_desc": "Bevestig om alle apparaten in {group} af te sluiten.", + "home_modal_confirm_shutdown_group_title": "Afsluiten {group}?", "device_modal_confirm_wake_desc": "Bevestig om {device} te wekken.", "device_modal_confirm_wake_title": "Wek {device}?", "device_network_scan_add_all": "Alle apparaten toevoegen", @@ -117,6 +119,7 @@ "home_page_title": "Home", "home_search_placeholder": "Apparaten zoeken", "home_wake_group": "Wake groep", + "home_shutdown_group": "Groep afsluiten", "login_btn_login": "Inloggen", "login_btn_more": "Meer", "login_email_label": "E-mail of gebruikersnaam:", diff --git a/frontend/translations/pl-PL.json b/frontend/translations/pl-PL.json index 86908734..805a66e4 100644 --- a/frontend/translations/pl-PL.json +++ b/frontend/translations/pl-PL.json @@ -51,6 +51,8 @@ "device_link": "Link", "device_modal_confirm_shutdown_desc": "Potwierdź wyłączenie {device}.", "device_modal_confirm_shutdown_title": "Wyłączyć {device}?", + "home_modal_confirm_shutdown_group_desc": "Potwierdź wyłączenie wszystkich urządzeń w {group}.", + "home_modal_confirm_shutdown_group_title": "Wyłączyć {group}?", "device_modal_confirm_wake_desc": "Potwierdź włączenie {device}.", "device_modal_confirm_wake_title": "Włączyć {device}?", "device_network_scan_add_all": "Dodaj wszystkie urządzenia", @@ -117,6 +119,7 @@ "home_page_title": "Strona Główna", "home_search_placeholder": "Wyszukiwanie urządzeń", "home_wake_group": "Grupa Wake", + "home_shutdown_group": "Grupa zamknięcia", "login_btn_login": "Zaloguj", "login_btn_more": "Więcej", "login_email_label": "Email lub nazwa użytkownika:", diff --git a/frontend/translations/pt-PT.json b/frontend/translations/pt-PT.json index a900121a..e489a550 100644 --- a/frontend/translations/pt-PT.json +++ b/frontend/translations/pt-PT.json @@ -51,6 +51,8 @@ "device_link": "Link", "device_modal_confirm_shutdown_desc": "Confirme o encerramento do {device}.", "device_modal_confirm_shutdown_title": "Desligar {device}?", + "home_modal_confirm_shutdown_group_desc": "Confirme o encerramento de todos os dispositivos em {group}.", + "home_modal_confirm_shutdown_group_title": "Desligar {group}?", "device_modal_confirm_wake_desc": "Confirme para ativar {device}.", "device_modal_confirm_wake_title": "Despertar {device}?", "device_network_scan_add_all": "Adicionar todos os dispositivos", @@ -117,6 +119,7 @@ "home_page_title": "Início", "home_search_placeholder": "Procurar dispositivos", "home_wake_group": "Grupo de despertar", + "home_shutdown_group": "Grupo desligar", "login_btn_login": "Entrar", "login_btn_more": "Mais", "login_email_label": "Email ou Utilizador:", diff --git a/frontend/translations/ru-RU.json b/frontend/translations/ru-RU.json index 912d3728..ee3eb67f 100644 --- a/frontend/translations/ru-RU.json +++ b/frontend/translations/ru-RU.json @@ -51,6 +51,8 @@ "device_link": "Ссылка", "device_modal_confirm_shutdown_desc": "Пожалуйста подтвердите для выключения {device}.", "device_modal_confirm_shutdown_title": "Выключить {device}?", + "home_modal_confirm_shutdown_group_desc": "Пожалуйста, подтвердите выключение всех устройств в {group}.", + "home_modal_confirm_shutdown_group_title": "Выключить {group}?", "device_modal_confirm_wake_desc": "Пожалуйста подтвердите для пробуждения {device}.", "device_modal_confirm_wake_title": "Пробудить {device}?", "device_network_scan_add_all": "Добавить все устройства", @@ -117,6 +119,7 @@ "home_page_title": "Home", "home_search_placeholder": "Поиск устройств", "home_wake_group": "Группа пробуждения", + "home_shutdown_group": "Группа выключения", "login_btn_login": "Войти", "login_btn_more": "Больше", "login_email_label": "Email или имя пользователя:", diff --git a/frontend/translations/uk-UA.json b/frontend/translations/uk-UA.json index 1b7da1ef..36c32ca1 100644 --- a/frontend/translations/uk-UA.json +++ b/frontend/translations/uk-UA.json @@ -51,6 +51,8 @@ "device_link": "Посилання", "device_modal_confirm_shutdown_desc": "Підтвердьте, щоб вимкнути {device}.", "device_modal_confirm_shutdown_title": "Вимкнути {device}?", + "home_modal_confirm_shutdown_group_desc": "Будь ласка, підтвердіть вимкнення всіх пристроїв у {group}.", + "home_modal_confirm_shutdown_group_title": "Вимкнути {group}?", "device_modal_confirm_wake_desc": "Будь ласка, підтвердьте, щоб розбудити {device}.", "device_modal_confirm_wake_title": "Розбудити {device}?", "device_network_scan_add_all": "Додайте всі пристрої", @@ -117,6 +119,7 @@ "home_page_title": "Головна", "home_search_placeholder": "Пошук пристроїв", "home_wake_group": "Пробудження групи", + "home_shutdown_group": "Вимкнення групи", "login_btn_login": "Увійти", "login_btn_more": "Додатково", "login_email_label": "Електронна пошта або ім'я користувача:", diff --git a/frontend/translations/vi-VN.json b/frontend/translations/vi-VN.json index 1c9465e1..99e19ea9 100644 --- a/frontend/translations/vi-VN.json +++ b/frontend/translations/vi-VN.json @@ -51,6 +51,8 @@ "device_link": "Liên kết", "device_modal_confirm_shutdown_desc": "Vui lòng xác nhận tắt {device}.", "device_modal_confirm_shutdown_title": "Tắt {device}?", + "home_modal_confirm_shutdown_group_desc": "Vui lòng xác nhận tắt tất cả thiết bị trong {group}.", + "home_modal_confirm_shutdown_group_title": "Tắt {group}?", "device_modal_confirm_wake_desc": "Vui lòng xác nhận bật {device}.", "device_modal_confirm_wake_title": "Bật {device}?", "device_network_scan_add_all": "Thêm tất cả thiết bị", @@ -117,6 +119,7 @@ "home_page_title": "Trang chủ", "home_search_placeholder": "Tìm kiếm thiết bị", "home_wake_group": "Bật nhóm", + "home_shutdown_group": "Tắt nhóm", "login_btn_login": "Đăng nhập", "login_btn_more": "Thêm", "login_email_label": "Email hoặc Tên đăng nhập:", diff --git a/frontend/translations/zh-CN.json b/frontend/translations/zh-CN.json index 7c098c5a..b201add1 100644 --- a/frontend/translations/zh-CN.json +++ b/frontend/translations/zh-CN.json @@ -51,6 +51,8 @@ "device_link": "链接", "device_modal_confirm_shutdown_desc": "您确定要关闭 {device} 吗?", "device_modal_confirm_shutdown_title": "关闭 {device}?", + "home_modal_confirm_shutdown_group_desc": "请确认关闭 {group} 中的所有设备。", + "home_modal_confirm_shutdown_group_title": "关闭 {group}?", "device_modal_confirm_wake_desc": "您确定要唤醒 {device} 吗?", "device_modal_confirm_wake_title": "唤醒 {device}?", "device_network_scan_add_all": "添加全部设备", @@ -117,6 +119,7 @@ "home_page_title": "首页", "home_search_placeholder": "搜索设备", "home_wake_group": "唤醒小组", + "home_shutdown_group": "关闭小组", "login_btn_login": "登录", "login_btn_more": "更多", "login_email_label": "邮箱/用户名:", diff --git a/frontend/translations/zh-TW.json b/frontend/translations/zh-TW.json index 762ed592..41e3abfd 100644 --- a/frontend/translations/zh-TW.json +++ b/frontend/translations/zh-TW.json @@ -51,6 +51,8 @@ "device_link": "連結", "device_modal_confirm_shutdown_desc": "您確定要關閉 {device} 嗎?", "device_modal_confirm_shutdown_title": "關閉 {device}?", + "home_modal_confirm_shutdown_group_desc": "請確認關閉 {group} 中的所有裝置。", + "home_modal_confirm_shutdown_group_title": "關閉 {group}?", "device_modal_confirm_wake_desc": "您確定要喚醒 {device} 嗎?", "device_modal_confirm_wake_title": "喚醒 {device}?", "device_network_scan_add_all": "新增全部裝置", @@ -117,6 +119,7 @@ "home_page_title": "首頁", "home_search_placeholder": "搜尋裝置", "home_wake_group": "群組喚醒", + "home_shutdown_group": "關閉群組", "login_btn_login": "登入", "login_btn_more": "更多", "login_email_label": "電子郵件/使用者名稱:",