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 ActiveStatusBarItems:Arc::new(StandardMutex::new(HashMap::new())),
89 SourceControlManagementProviders:Arc::new(StandardMutex::new(HashMap::new())),
90 SourceControlManagementGroups:Arc::new(StandardMutex::new(HashMap::new())),
91 SourceControlManagementResources:Arc::new(StandardMutex::new(HashMap::new())),
92 NextSourceControlManagementProviderHandle:Arc::new(AtomicU32::new(1)),
93 }
94 }
95}
96
97impl MarkerState {
98 pub fn GetNextSourceControlManagementProviderHandle(&self) -> u32 {
100 self.NextSourceControlManagementProviderHandle
101 .fetch_add(1, AtomicOrdering::Relaxed)
102 }
103
104 pub fn GetCustomDocuments(&self) -> HashMap<String, CustomDocumentStateDTO> {
106 self.ActiveCustomDocuments
107 .lock()
108 .ok()
109 .map(|guard| guard.clone())
110 .unwrap_or_default()
111 }
112
113 pub fn AddOrUpdateCustomDocument(&self, id:String, document:CustomDocumentStateDTO) {
115 if let Ok(mut guard) = self.ActiveCustomDocuments.lock() {
116 guard.insert(id, document);
117 dev_log!("extensions", "[MarkerState] Custom document added/updated");
118 }
119 }
120
121 pub fn RemoveCustomDocument(&self, id:&str) {
123 if let Ok(mut guard) = self.ActiveCustomDocuments.lock() {
124 guard.remove(id);
125 dev_log!("extensions", "[MarkerState] Custom document removed: {}", id);
126 }
127 }
128
129 pub fn GetStatusBarItems(&self) -> HashMap<String, StatusBarEntryDTO> {
131 self.ActiveStatusBarItems
132 .lock()
133 .ok()
134 .map(|guard| guard.clone())
135 .unwrap_or_default()
136 }
137
138 pub fn AddOrUpdateStatusBarItem(&self, id:String, item:StatusBarEntryDTO) {
140 if let Ok(mut guard) = self.ActiveStatusBarItems.lock() {
141 guard.insert(id, item);
142 dev_log!("extensions", "[MarkerState] Status bar item added/updated");
143 }
144 }
145
146 pub fn RemoveStatusBarItem(&self, id:&str) {
148 if let Ok(mut guard) = self.ActiveStatusBarItems.lock() {
149 guard.remove(id);
150 dev_log!("extensions", "[MarkerState] Status bar item removed: {}", id);
151 }
152 }
153}