use cosmic::cosmic_config::cosmic_config_derive::CosmicConfigEntry; use cosmic::cosmic_config::{self, Config, CosmicConfigEntry}; use serde::{Deserialize, Serialize}; use std::fmt::Debug; pub const APP_ID: &str = "com.system76.CosmicAppList"; pub const VERSION: &str = "0.1.0"; #[derive(Debug, Clone, Deserialize, Serialize, Default, PartialEq, Eq)] pub enum TopLevelFilter { #[default] ActiveWorkspace, ConfiguredOutput, } #[derive(Debug, Clone, Default, Deserialize, Serialize, PartialEq, Eq, CosmicConfigEntry)] pub struct AppListConfig { pub filter_top_levels: Option, pub favorites: Vec, } impl AppListConfig { pub fn add_favorite(&mut self, id: String, config: &Config) { if !self.favorites.contains(&id) { self.favorites.push(id); let _ = self.write_entry(config); } } pub fn remove_favorite(&mut self, id: String, config: &Config) { if let Some(pos) = self.favorites.iter().position(|e| e == &id) { self.favorites.remove(pos); let _ = self.write_entry(config); } } pub fn update_favorites(&mut self, favorites: Vec, config: &Config) { self.favorites = favorites; let _ = self.write_entry(config); } }