From fea672a8a6e60007069514c83e441ca1a09aeb2a Mon Sep 17 00:00:00 2001 From: euzu Date: Fri, 19 Dec 2025 18:46:30 +0100 Subject: [PATCH] panel api --- backend/src/api/panel_api.rs | 4 +++- frontend/public/assets/i18n/en.json | 1 + frontend/src/app/components/config/config_view.rs | 7 ++++++- frontend/src/app/components/config/panel_config_view.rs | 1 - 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/backend/src/api/panel_api.rs b/backend/src/api/panel_api.rs index e748cc75a..fd6ddbf25 100644 --- a/backend/src/api/panel_api.rs +++ b/backend/src/api/panel_api.rs @@ -567,12 +567,14 @@ async fn patch_batch_csv_update_exp_date( Ok(()) } +const MAX_ALIAS_NAME_ATTEMPTS: usize = 1000; + fn derive_unique_alias_name(existing: &[String], input_name: &str, username: &str) -> String { let base = format!("{input_name}-{username}"); if !existing.contains(&base) { return base; } - for i in 2..1000 { + for i in 2..MAX_ALIAS_NAME_ATTEMPTS { let cand = format!("{base}-{i}"); if !existing.contains(&cand) { return cand; diff --git a/frontend/public/assets/i18n/en.json b/frontend/public/assets/i18n/en.json index 40c1daad8..8c1730e08 100644 --- a/frontend/public/assets/i18n/en.json +++ b/frontend/public/assets/i18n/en.json @@ -395,6 +395,7 @@ "MESSAGE": "Enter Your Credentials" }, "SAVE": { + "NO_CHANGES": "No changes", "MAIN_CONFIG": { "SUCCESS": "Main config saved!", "FAIL": "Failed to save the main config!" diff --git a/frontend/src/app/components/config/config_view.rs b/frontend/src/app/components/config/config_view.rs index 00f435051..55443374b 100644 --- a/frontend/src/app/components/config/config_view.rs +++ b/frontend/src/app/components/config/config_view.rs @@ -4,6 +4,7 @@ use crate::app::components::config::{ApiConfigView, HdHomerunConfigView, IpCheck use crate::app::components::{Card, TabItem, TabSet, TextButton}; use crate::html_if; use std::str::FromStr; +use log::warn; use yew::platform::spawn_local; use yew::prelude::*; use yew_i18n::use_translation; @@ -153,6 +154,7 @@ pub fn ConfigView() -> Html { if modified_forms.is_empty() { set_edit_mode.set(false); + services.toastr.info(translate.t("MESSAGES.SAVE.NO_CHANGES")); return; } @@ -220,7 +222,10 @@ pub fn ConfigView() -> Html { if ok { set_edit_mode.set(false); - let _cfg = services.config.get_server_config().await; + if services.config.get_server_config().await.is_none() { + // Log but don't fail - save succeeded, refresh is best-effort + warn!("Config refresh failed"); + } } }); }) diff --git a/frontend/src/app/components/config/panel_config_view.rs b/frontend/src/app/components/config/panel_config_view.rs index 9af75efd7..8796d4dcb 100644 --- a/frontend/src/app/components/config/panel_config_view.rs +++ b/frontend/src/app/components/config/panel_config_view.rs @@ -393,7 +393,6 @@ pub fn PanelConfigView() -> Html { } else { form_state.dispatch(PanelConfigFormAction::SetAll(SourcesConfigDto::default())); } - || () }); }