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