use bimap::BiMap; use chrono::{DateTime, Utc}; use strum::EnumIter; use crate::models::{ sonarr_models::{BlocklistItem, DownloadRecord, Episode, Indexer, Series}, stateful_list::StatefulList, stateful_table::StatefulTable, stateful_tree::StatefulTree, HorizontallyScrollableText, Route, }; use super::modals::EpisodeDetailsModal; #[cfg(test)] #[path = "sonarr_data_tests.rs"] mod sonarr_data_tests; pub struct SonarrData { pub version: String, pub start_time: DateTime, pub series: StatefulTable, pub blocklist: StatefulTable, pub logs: StatefulList, pub episodes_tree: StatefulTree, pub episodes_table: StatefulTable, pub downloads: StatefulTable, pub episode_details_modal: Option, pub quality_profile_map: BiMap, pub indexers: StatefulTable, } impl Default for SonarrData { fn default() -> SonarrData { SonarrData { version: String::new(), start_time: DateTime::default(), series: StatefulTable::default(), blocklist: StatefulTable::default(), logs: StatefulList::default(), episodes_tree: StatefulTree::default(), episodes_table: StatefulTable::default(), downloads: StatefulTable::default(), episode_details_modal: None, quality_profile_map: BiMap::new(), indexers: StatefulTable::default(), } } } #[derive(Clone, Copy, PartialEq, Eq, Debug, Default, EnumIter)] pub enum ActiveSonarrBlock { Blocklist, BlocklistSortPrompt, EpisodesExplorer, EpisodesTable, EpisodesTableSortPrompt, #[default] Series, SeriesSortPrompt, } impl From for Route { fn from(active_sonarr_block: ActiveSonarrBlock) -> Route { Route::Sonarr(active_sonarr_block, None) } } impl From<(ActiveSonarrBlock, Option)> for Route { fn from(value: (ActiveSonarrBlock, Option)) -> Route { Route::Sonarr(value.0, value.1) } }