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};
55use log::debug;
56
57use crate::ApplicationState::DTO::CustomDocumentStateDTO::CustomDocumentStateDTO;
58
59#[derive(Clone)]
61pub struct MarkerState {
62 pub ActiveCustomDocuments:Arc<StandardMutex<HashMap<String, CustomDocumentStateDTO>>>,
64
65 pub ActiveStatusBarItems:Arc<StandardMutex<HashMap<String, StatusBarEntryDTO>>>,
67
68 pub SourceControlManagementProviders:Arc<StandardMutex<HashMap<u32, SourceControlManagementProviderDTO>>>,
70
71 pub SourceControlManagementGroups:
73 Arc<StandardMutex<HashMap<u32, HashMap<String, SourceControlManagementGroupDTO>>>>,
74
75 pub SourceControlManagementResources:
77 Arc<StandardMutex<HashMap<u32, HashMap<String, Vec<SourceControlManagementResourceDTO>>>>>,
78
79 pub NextSourceControlManagementProviderHandle:Arc<AtomicU32>,
81}
82
83impl Default for MarkerState {
84 fn default() -> Self {
85 debug!("[MarkerState] Initializing default marker state...");
86
87 Self {
88 ActiveCustomDocuments:Arc::new(StandardMutex::new(HashMap::new())),
89 ActiveStatusBarItems:Arc::new(StandardMutex::new(HashMap::new())),
90 SourceControlManagementProviders:Arc::new(StandardMutex::new(HashMap::new())),
91 SourceControlManagementGroups:Arc::new(StandardMutex::new(HashMap::new())),
92 SourceControlManagementResources:Arc::new(StandardMutex::new(HashMap::new())),
93 NextSourceControlManagementProviderHandle:Arc::new(AtomicU32::new(1)),
94 }
95 }
96}
97
98impl MarkerState {
99 pub fn GetNextSourceControlManagementProviderHandle(&self) -> u32 {
101 self.NextSourceControlManagementProviderHandle
102 .fetch_add(1, AtomicOrdering::Relaxed)
103 }
104
105 pub fn GetCustomDocuments(&self) -> HashMap<String, CustomDocumentStateDTO> {
107 self.ActiveCustomDocuments
108 .lock()
109 .ok()
110 .map(|guard| guard.clone())
111 .unwrap_or_default()
112 }
113
114 pub fn AddOrUpdateCustomDocument(&self, id:String, document:CustomDocumentStateDTO) {
116 if let Ok(mut guard) = self.ActiveCustomDocuments.lock() {
117 guard.insert(id, document);
118 debug!("[MarkerState] Custom document added/updated");
119 }
120 }
121
122 pub fn RemoveCustomDocument(&self, id:&str) {
124 if let Ok(mut guard) = self.ActiveCustomDocuments.lock() {
125 guard.remove(id);
126 debug!("[MarkerState] Custom document removed: {}", id);
127 }
128 }
129
130 pub fn GetStatusBarItems(&self) -> HashMap<String, StatusBarEntryDTO> {
132 self.ActiveStatusBarItems
133 .lock()
134 .ok()
135 .map(|guard| guard.clone())
136 .unwrap_or_default()
137 }
138
139 pub fn AddOrUpdateStatusBarItem(&self, id:String, item:StatusBarEntryDTO) {
141 if let Ok(mut guard) = self.ActiveStatusBarItems.lock() {
142 guard.insert(id, item);
143 debug!("[MarkerState] Status bar item added/updated");
144 }
145 }
146
147 pub fn RemoveStatusBarItem(&self, id:&str) {
149 if let Ok(mut guard) = self.ActiveStatusBarItems.lock() {
150 guard.remove(id);
151 debug!("[MarkerState] Status bar item removed: {}", id);
152 }
153 }
154}