aboutsummaryrefslogtreecommitdiff
path: root/src/client/shell/preferences.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/shell/preferences.rs')
-rw-r--r--src/client/shell/preferences.rs19
1 files changed, 19 insertions, 0 deletions
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<String>,
+}
+
#[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<crate::config::AgentPanelSortConfig>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub(super) collapsed_groups: Vec<String>,
+ #[serde(default, skip_serializing_if = "Vec::is_empty")]
+ pub(super) remote_collapsed_groups: Vec<ClientRemoteCollapsedGroups>,
}
pub(super) fn path_for_local_endpoint(socket_path: &Path) -> PathBuf {
@@ -74,6 +83,16 @@ mod tests {
}
#[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!(
"herdr-shell-concurrent-preferences-{}.json",