From 68c7b78ec237034cbb0e21c8666842ed7991641d Mon Sep 17 00:00:00 2001 From: akbash Date: Tue, 8 Sep 2026 17:51:59 +0300 Subject: fix: collapse worktree groups with saved machines (#3781) * fix: collapse worktree groups with saved machines refs #3778 * fix: scope worktree collapse by machine refs #3778 * fix: collapse machines without switching focus refs #3778 --------- Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com> Co-authored-by: Ogulcan Celik --- src/client/shell/preferences.rs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'src/client/shell/preferences.rs') diff --git a/src/client/shell/preferences.rs b/src/client/shell/preferences.rs index f657dfbf..fcfe1440 100644 --- a/src/client/shell/preferences.rs +++ b/src/client/shell/preferences.rs @@ -7,6 +7,13 @@ static NEXT_TEMP_FILE: AtomicU64 = AtomicU64::new(1); use serde::{Deserialize, Serialize}; +#[derive(Clone, Debug, Deserialize, Serialize)] +pub(super) struct ClientRemoteCollapsedGroups { + pub(super) profile_id: String, + #[serde(default, skip_serializing_if = "Vec::is_empty")] + pub(super) collapsed_groups: Vec, +} + #[derive(Clone, Debug, Default, Deserialize, Serialize)] pub(super) struct ClientChromePreferences { #[serde(default, skip_serializing_if = "Option::is_none")] @@ -19,6 +26,8 @@ pub(super) struct ClientChromePreferences { pub(super) agent_panel_sort: Option, #[serde(default, skip_serializing_if = "Vec::is_empty")] pub(super) collapsed_groups: Vec, + #[serde(default, skip_serializing_if = "Vec::is_empty")] + pub(super) remote_collapsed_groups: Vec, } pub(super) fn path_for_local_endpoint(socket_path: &Path) -> PathBuf { @@ -73,6 +82,16 @@ mod tests { assert_ne!(first, second); } + #[test] + fn legacy_preferences_default_remote_collapses() { + let preferences: ClientChromePreferences = + serde_json::from_str(r#"{"collapsed_groups":["/repo"]}"#) + .expect("legacy client chrome preferences"); + + assert_eq!(preferences.collapsed_groups, ["/repo"]); + assert!(preferences.remote_collapsed_groups.is_empty()); + } + #[test] fn concurrent_stores_leave_complete_preferences() { let path = std::env::temp_dir().join(format!( -- cgit v1.2.3