Mountain/ApplicationState/State/FeatureState/Webviews/
WebviewState.rs1use std::{
34 collections::HashMap,
35 sync::{Arc, Mutex as StandardMutex},
36};
37
38use crate::{ApplicationState::DTO::WebviewStateDTO::WebviewStateDTO, dev_log};
39
40#[derive(Clone)]
42pub struct WebviewState {
43 pub ActiveWebviews:Arc<StandardMutex<HashMap<String, WebviewStateDTO>>>,
45}
46
47impl Default for WebviewState {
48 fn default() -> Self {
49 dev_log!("extensions", "[WebviewState] Initializing default webview state...");
50
51 Self { ActiveWebviews:Arc::new(StandardMutex::new(HashMap::new())) }
52 }
53}
54
55impl WebviewState {
56 pub fn GetAll(&self) -> HashMap<String, WebviewStateDTO> {
58 self.ActiveWebviews.lock().ok().map(|guard| guard.clone()).unwrap_or_default()
59 }
60
61 pub fn Get(&self, id:&str) -> Option<WebviewStateDTO> {
63 self.ActiveWebviews.lock().ok().and_then(|guard| guard.get(id).cloned())
64 }
65
66 pub fn AddOrUpdate(&self, id:String, webview:WebviewStateDTO) {
68 if let Ok(mut guard) = self.ActiveWebviews.lock() {
69 guard.insert(id, webview);
70 dev_log!("extensions", "[WebviewState] Webview added/updated");
71 }
72 }
73
74 pub fn Remove(&self, id:&str) {
76 if let Ok(mut guard) = self.ActiveWebviews.lock() {
77 guard.remove(id);
78 dev_log!("extensions", "[WebviewState] Webview removed: {}", id);
79 }
80 }
81
82 pub fn Clear(&self) {
84 if let Ok(mut guard) = self.ActiveWebviews.lock() {
85 guard.clear();
86 dev_log!("extensions", "[WebviewState] All webviews cleared");
87 }
88 }
89
90 pub fn Count(&self) -> usize { self.ActiveWebviews.lock().ok().map(|guard| guard.len()).unwrap_or(0) }
92
93 pub fn Contains(&self, id:&str) -> bool {
95 self.ActiveWebviews
96 .lock()
97 .ok()
98 .map(|guard| guard.contains_key(id))
99 .unwrap_or(false)
100 }
101}