Mountain/Environment/StatusBarProvider/
entry_management.rs

1//! # StatusBarProvider - Entry Management
2//!
3//! Implementation of status bar entry creation and disposal for
4//! [`MountainEnvironment`]
5
6use CommonLibrary::{Error::CommonError::CommonError, StatusBar::DTO::StatusBarEntryDTO::StatusBarEntryDTO};
7use log::info;
8use serde_json::json;
9use tauri::{Emitter, Manager};
10
11use super::super::{MountainEnvironment::MountainEnvironment, Utility};
12
13/// Entry management operations implementation for MountainEnvironment
14pub(super) async fn set_status_bar_entry_impl(
15	env:&MountainEnvironment,
16	entry:StatusBarEntryDTO,
17) -> Result<(), CommonError> {
18	info!("[StatusBarProvider] Setting entry: {}", entry.EntryIdentifier);
19
20	let mut items_guard = env
21		.ApplicationState
22		.Feature
23		.Markers
24		.ActiveStatusBarItems
25		.lock()
26		.map_err(Utility::MapApplicationStateLockErrorToCommonError)?;
27
28	items_guard.insert(entry.EntryIdentifier.clone(), entry.clone());
29
30	drop(items_guard);
31
32	env.ApplicationHandle
33		.emit("sky://statusbar/set-entry", entry)
34		.map_err(|error| CommonError::UserInterfaceInteraction { Reason:error.to_string() })
35}
36
37/// Removes a status bar item from the UI.
38pub(super) async fn dispose_status_bar_entry_impl(
39	env:&MountainEnvironment,
40	entry_identifier:String,
41) -> Result<(), CommonError> {
42	info!("[StatusBarProvider] Disposing entry: {}", entry_identifier);
43
44	env.ApplicationState
45		.Feature
46		.Markers
47		.ActiveStatusBarItems
48		.lock()
49		.map_err(Utility::MapApplicationStateLockErrorToCommonError)?
50		.remove(&entry_identifier);
51
52	env.ApplicationHandle
53		.emit("sky://statusbar/dispose-entry", json!({ "EntryIdentifier": entry_identifier }))
54		.map_err(|error| CommonError::UserInterfaceInteraction { Reason:error.to_string() })
55}