Mountain/ApplicationState/State/FeatureState/Markers/
MarkerState.rs1use std::{
39 collections::HashMap,
40 sync::{
41 Arc,
42 Mutex as StandardMutex,
43 atomic::{AtomicU32, Ordering as AtomicOrdering},
44 },
45};
46
47use CommonLibrary::{
48 SourceControlManagement::DTO::{
49 SourceControlManagementGroupDTO::SourceControlManagementGroupDTO,
50 SourceControlManagementProviderDTO::SourceControlManagementProviderDTO,
51 SourceControlManagementResourceDTO::SourceControlManagementResourceDTO,
52 },
53 StatusBar::DTO::StatusBarEntryDTO::StatusBarEntryDTO,
54};
55
56use crate::{ApplicationState::DTO::CustomDocumentStateDTO::CustomDocumentStateDTO, dev_log};
57
58#[derive(Clone)]
60pub struct MarkerState {
61 pub ActiveCustomDocuments:Arc<StandardMutex<HashMap<String, CustomDocumentStateDTO>>>,
63
64 pub ActiveStatusBarItems:Arc<StandardMutex<HashMap<String, StatusBarEntryDTO>>>,
66
67 pub SourceControlManagementProviders:Arc<StandardMutex<HashMap<u32, SourceControlManagementProviderDTO>>>,
69
70 pub SourceControlManagementGroups:
72 Arc<StandardMutex<HashMap<u32, HashMap<String, SourceControlManagementGroupDTO>>>>,
73
74 pub SourceControlManagementResources:
76 Arc<StandardMutex<HashMap<u32, HashMap<String, Vec<SourceControlManagementResourceDTO>>>>>,
77
78 pub NextSourceControlManagementProviderHandle:Arc<AtomicU32>,
80}
81
82impl Default for MarkerState {
83 fn default() -> Self {
84 dev_log!("extensions", "[MarkerState] Initializing default marker state...");
85
86 Self {
87 ActiveCustomDocuments:Arc::new(StandardMutex::new(HashMap::new())),
88
89 ActiveStatusBarItems:Arc::new(StandardMutex::new(HashMap::new())),
90
91 SourceControlManagementProviders:Arc::new(StandardMutex::new(HashMap::new())),
92
93 SourceControlManagementGroups:Arc::new(StandardMutex::new(HashMap::new())),
94
95 SourceControlManagementResources:Arc::new(StandardMutex::new(HashMap::new())),
96
97 NextSourceControlManagementProviderHandle:Arc::new(AtomicU32::new(1)),
98 }
99 }
100}
101
102impl MarkerState {
103 pub fn GetNextSourceControlManagementProviderHandle(&self) -> u32 {
105 self.NextSourceControlManagementProviderHandle
106 .fetch_add(1, AtomicOrdering::Relaxed)
107 }
108
109 pub fn GetCustomDocuments(&self) -> HashMap<String, CustomDocumentStateDTO> {
111 self.ActiveCustomDocuments
112 .lock()
113 .ok()
114 .map(|guard| guard.clone())
115 .unwrap_or_default()
116 }
117
118 pub fn AddOrUpdateCustomDocument(&self, id:String, document:CustomDocumentStateDTO) {
120 if let Ok(mut guard) = self.ActiveCustomDocuments.lock() {
121 guard.insert(id, document);
122
123 dev_log!("extensions", "[MarkerState] Custom document added/updated");
124 }
125 }
126
127 pub fn RemoveCustomDocument(&self, id:&str) {
129 if let Ok(mut guard) = self.ActiveCustomDocuments.lock() {
130 guard.remove(id);
131
132 dev_log!("extensions", "[MarkerState] Custom document removed: {}", id);
133 }
134 }
135
136 pub fn GetStatusBarItems(&self) -> HashMap<String, StatusBarEntryDTO> {
138 self.ActiveStatusBarItems
139 .lock()
140 .ok()
141 .map(|guard| guard.clone())
142 .unwrap_or_default()
143 }
144
145 pub fn AddOrUpdateStatusBarItem(&self, id:String, item:StatusBarEntryDTO) {
147 if let Ok(mut guard) = self.ActiveStatusBarItems.lock() {
148 guard.insert(id, item);
149
150 dev_log!("extensions", "[MarkerState] Status bar item added/updated");
151 }
152 }
153
154 pub fn RemoveStatusBarItem(&self, id:&str) {
156 if let Ok(mut guard) = self.ActiveStatusBarItems.lock() {
157 guard.remove(id);
158
159 dev_log!("extensions", "[MarkerState] Status bar item removed: {}", id);
160 }
161 }
162}