From af9746758743f860ec0b16179ce9375532f36703 Mon Sep 17 00:00:00 2001 From: ming Date: Thu, 27 Aug 2026 21:56:13 +0800 Subject: [PATCH] fix(core): normalize favorite order after binding deletion --- crates/core/src/bindings.rs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/crates/core/src/bindings.rs b/crates/core/src/bindings.rs index ecf433d..06634de 100644 --- a/crates/core/src/bindings.rs +++ b/crates/core/src/bindings.rs @@ -94,10 +94,26 @@ pub fn save_binding(mut binding: Binding) -> Result { pub fn delete_binding(id: &str) -> Result { let mut store = list_bindings()?; store.bindings.retain(|binding| binding.id != id); + normalize_favorite_orders(&mut store); write_store(&store)?; Ok(store) } +fn normalize_favorite_orders(store: &mut BindingStore) { + let mut favorite_indices = store + .bindings + .iter() + .enumerate() + .filter(|(_, binding)| binding.favorite) + .map(|(index, binding)| (index, binding.favorite_order)) + .collect::>(); + favorite_indices.sort_by_key(|(_, favorite_order)| *favorite_order); + + for (order, (index, _)) in favorite_indices.into_iter().enumerate() { + store.bindings[index].favorite_order = order as u32 + 1; + } +} + pub async fn execute_binding(id: &str, config: &AppConfig) -> Result { let store = list_bindings()?; let binding = store @@ -363,7 +379,7 @@ mod tests { let reloaded = list_bindings().expect("reload after delete"); assert_eq!(reloaded.bindings.len(), 1); assert_eq!(reloaded.bindings[0].id, "spotify"); - assert_eq!(reloaded.bindings[0].favorite_order, 2); + assert_eq!(reloaded.bindings[0].favorite_order, 1); }); }