diff --git a/backend/src/api/panel_api.rs b/backend/src/api/panel_api.rs index 792fda3d6..1986b9a43 100644 --- a/backend/src/api/panel_api.rs +++ b/backend/src/api/panel_api.rs @@ -1142,21 +1142,21 @@ fn collect_accounts(input: &ConfigInput) -> Vec { } fn compare_alias_exp_date(a: &ConfigInputAliasDto, b: &ConfigInputAliasDto) -> Ordering { - let a_ts = a.exp_date.unwrap_or(i64::MAX); - let b_ts = b.exp_date.unwrap_or(i64::MAX); - a_ts.cmp(&b_ts).then_with(|| a.name.cmp(&b.name)) + let a_ts = a.exp_date.unwrap_or(i64::MIN); + let b_ts = b.exp_date.unwrap_or(i64::MIN); + b_ts.cmp(&a_ts).then_with(|| a.name.cmp(&b.name)) } fn compare_alias_exp_date_config(a: &ConfigInputAlias, b: &ConfigInputAlias) -> Ordering { - let a_ts = a.exp_date.unwrap_or(i64::MAX); - let b_ts = b.exp_date.unwrap_or(i64::MAX); - a_ts.cmp(&b_ts).then_with(|| a.name.cmp(&b.name)) + let a_ts = a.exp_date.unwrap_or(i64::MIN); + let b_ts = b.exp_date.unwrap_or(i64::MIN); + b_ts.cmp(&a_ts).then_with(|| a.name.cmp(&b.name)) } fn compare_account_exp_date(a: &AccountCredentials, b: &AccountCredentials) -> Ordering { - let a_ts = a.exp_date.unwrap_or(i64::MAX); - let b_ts = b.exp_date.unwrap_or(i64::MAX); - a_ts.cmp(&b_ts).then_with(|| a.name.cmp(&b.name)) + let a_ts = a.exp_date.unwrap_or(i64::MIN); + let b_ts = b.exp_date.unwrap_or(i64::MIN); + b_ts.cmp(&a_ts).then_with(|| a.name.cmp(&b.name)) } fn aliases_need_sort_config(aliases: &[ConfigInputAlias]) -> bool { @@ -2439,28 +2439,17 @@ async fn sync_panel_api_for_input_on_boot( let mut time_cache = load_panel_api_time_cache(app_state.as_ref(), &cache_path).await; let cached_entry = time_cache.inputs.get(input.name.as_ref()).cloned(); - if panel_cfg.alias_pool.is_some() { - if let Some(csv_path) = csv_path.as_ref() { - let _csv_lock = app_state.app_config.file_locks.write_lock(csv_path).await; - match csv_patch_batch_sort_by_exp_date(input.input_type, csv_path).await { - Ok(true) => any_change = true, - Ok(false) => {} - Err(err) => debug_if_enabled!( - "panel_api boot/update failed to sort csv alias pool for {}: {}", - sanitize_sensitive_info(&input.name), - err - ), - } - } else if input + if panel_cfg.alias_pool.is_some() + && csv_path.is_none() + && input .aliases .as_ref() .is_some_and(|aliases| aliases_need_sort_config(aliases)) - { - sources_yml_patches.push(SourcesYmlPatch::SortAliases { - input_name: input.name.clone(), - }); - pending_sources_yml = true; - } + { + sources_yml_patches.push(SourcesYmlPatch::SortAliases { + input_name: input.name.clone(), + }); + pending_sources_yml = true; } if let Some((root_username, root_password)) = extract_account_creds_from_input(input.as_ref()) { @@ -3631,6 +3620,21 @@ async fn sync_panel_api_for_input_on_boot( } } + if panel_cfg.alias_pool.is_some() { + if let Some(csv_path) = csv_path.as_ref() { + let _csv_lock = app_state.app_config.file_locks.write_lock(csv_path).await; + match csv_patch_batch_sort_by_exp_date(input.input_type, csv_path).await { + Ok(true) => any_change = true, + Ok(false) => {} + Err(err) => debug_if_enabled!( + "panel_api boot/update final sort failed for csv alias pool {}: {}", + sanitize_sensitive_info(&input.name), + err + ), + } + } + } + if pending_sources_yml { let _src_lock = app_state .app_config diff --git a/backend/src/repository/alias_repository.rs b/backend/src/repository/alias_repository.rs index fdb4a423a..02f39519b 100644 --- a/backend/src/repository/alias_repository.rs +++ b/backend/src/repository/alias_repository.rs @@ -554,9 +554,9 @@ pub async fn csv_patch_batch_sort_by_exp_date( } let mut sorted = aliases.clone(); sorted.sort_by(|a, b| { - let a_ts = a.exp_date.unwrap_or(i64::MAX); - let b_ts = b.exp_date.unwrap_or(i64::MAX); - a_ts.cmp(&b_ts).then_with(|| a.name.cmp(&b.name)) + let a_ts = a.exp_date.unwrap_or(i64::MIN); + let b_ts = b.exp_date.unwrap_or(i64::MIN); + b_ts.cmp(&a_ts).then_with(|| a.name.cmp(&b.name)) }); if sorted == aliases { return Ok(false); diff --git a/backend/src/utils/file/config_reader.rs b/backend/src/utils/file/config_reader.rs index 82dd54ff0..7801efc58 100644 --- a/backend/src/utils/file/config_reader.rs +++ b/backend/src/utils/file/config_reader.rs @@ -527,9 +527,9 @@ pub async fn persist_source_config( { if let Some(aliases) = input.aliases.as_mut() { aliases.sort_by(|a, b| { - let a_ts = a.exp_date.unwrap_or(i64::MAX); - let b_ts = b.exp_date.unwrap_or(i64::MAX); - a_ts.cmp(&b_ts).then_with(|| a.name.cmp(&b.name)) + let a_ts = a.exp_date.unwrap_or(i64::MIN); + let b_ts = b.exp_date.unwrap_or(i64::MIN); + b_ts.cmp(&a_ts).then_with(|| a.name.cmp(&b.name)) }); } }