From 618ba09b028b7b4ada4d7b67da5e810907e2ded8 Mon Sep 17 00:00:00 2001 From: Dark-Alex-17 Date: Tue, 8 Aug 2023 10:50:07 -0600 Subject: [PATCH] Refactored the RadarrData and ActiveRadarrBlock structs into their own file in models/servarr_data to make things neater and cleaner and easier to build on --- src/app/app_tests.rs | 2 +- src/app/mod.rs | 2 +- src/app/radarr/mod.rs | 627 +------------- src/app/radarr/radarr_tests.rs | 800 ----------------- .../collections/collection_details_handler.rs | 5 +- .../collection_details_handler_tests.rs | 9 +- .../collections/collections_handler_tests.rs | 13 +- .../collections/edit_collection_handler.rs | 2 +- .../edit_collection_handler_tests.rs | 8 +- .../radarr_handlers/collections/mod.rs | 2 +- .../downloads/downloads_handler_tests.rs | 2 +- src/handlers/radarr_handlers/downloads/mod.rs | 2 +- .../indexers/edit_indexer_settings_handler.rs | 2 +- .../edit_indexer_settings_handler_tests.rs | 6 +- .../indexers/indexers_handler_tests.rs | 6 +- src/handlers/radarr_handlers/indexers/mod.rs | 4 +- .../library/add_movie_handler.rs | 4 +- .../library/add_movie_handler_tests.rs | 8 +- .../library/delete_movie_handler.rs | 2 +- .../library/delete_movie_handler_tests.rs | 6 +- .../library/edit_movie_handler.rs | 2 +- .../library/edit_movie_handler_tests.rs | 10 +- .../library/library_handler_tests.rs | 17 +- src/handlers/radarr_handlers/library/mod.rs | 6 +- .../library/movie_details_handler.rs | 4 +- .../library/movie_details_handler_tests.rs | 9 +- src/handlers/radarr_handlers/mod.rs | 2 +- .../radarr_handlers/radarr_handler_tests.rs | 2 +- .../radarr_handlers/root_folders/mod.rs | 2 +- .../root_folders_handler_tests.rs | 2 +- src/handlers/radarr_handlers/system/mod.rs | 2 +- .../system/system_details_handler.rs | 2 +- .../system/system_details_handler_tests.rs | 2 +- .../system/system_handler_tests.rs | 2 +- src/models/mod.rs | 4 +- src/models/model_tests.rs | 2 +- src/models/servarr_data/mod.rs | 1 + src/models/servarr_data/radarr_data.rs | 625 ++++++++++++++ src/models/servarr_data/radarr_data_tests.rs | 802 ++++++++++++++++++ .../servarr_data}/radarr_test_utils.rs | 2 +- src/network/radarr_network.rs | 2 +- src/network/radarr_network_tests.rs | 2 +- .../collections/collection_details_ui.rs | 2 +- .../collection_details_ui_tests.rs | 2 +- .../collections/collections_ui_tests.rs | 2 +- .../collections/edit_collection_ui.rs | 4 +- .../collections/edit_collection_ui_tests.rs | 2 +- src/ui/radarr_ui/collections/mod.rs | 2 +- .../radarr_ui/downloads/downloads_ui_tests.rs | 2 +- src/ui/radarr_ui/downloads/mod.rs | 2 +- .../radarr_ui/indexers/indexer_settings_ui.rs | 2 +- .../indexers/indexer_settings_ui_tests.rs | 2 +- .../radarr_ui/indexers/indexers_ui_tests.rs | 4 +- src/ui/radarr_ui/indexers/mod.rs | 2 +- src/ui/radarr_ui/library/add_movie_ui.rs | 2 +- .../radarr_ui/library/add_movie_ui_tests.rs | 2 +- src/ui/radarr_ui/library/delete_movie_ui.rs | 2 +- .../library/delete_movie_ui_tests.rs | 2 +- src/ui/radarr_ui/library/edit_movie_ui.rs | 4 +- .../radarr_ui/library/edit_movie_ui_tests.rs | 2 +- src/ui/radarr_ui/library/library_ui_tests.rs | 2 +- src/ui/radarr_ui/library/mod.rs | 2 +- src/ui/radarr_ui/library/movie_details_ui.rs | 2 +- .../library/movie_details_ui_tests.rs | 2 +- src/ui/radarr_ui/mod.rs | 4 +- src/ui/radarr_ui/radarr_ui_tests.rs | 2 +- src/ui/radarr_ui/root_folders/mod.rs | 2 +- .../root_folders/root_folders_ui_tests.rs | 2 +- src/ui/radarr_ui/system/mod.rs | 3 +- src/ui/radarr_ui/system/system_details_ui.rs | 2 +- .../system/system_details_ui_tests.rs | 2 +- src/ui/radarr_ui/system/system_ui_tests.rs | 2 +- 72 files changed, 1551 insertions(+), 1534 deletions(-) create mode 100644 src/models/servarr_data/mod.rs create mode 100644 src/models/servarr_data/radarr_data.rs create mode 100644 src/models/servarr_data/radarr_data_tests.rs rename src/{app/radarr => models/servarr_data}/radarr_test_utils.rs (98%) diff --git a/src/app/app_tests.rs b/src/app/app_tests.rs index 54fbc88..6285969 100644 --- a/src/app/app_tests.rs +++ b/src/app/app_tests.rs @@ -5,9 +5,9 @@ mod tests { use tokio::sync::mpsc; use crate::app::context_clues::{build_context_clue_string, SERVARR_CONTEXT_CLUES}; - use crate::app::radarr::{ActiveRadarrBlock, RadarrData}; use crate::app::{App, Data, RadarrConfig, DEFAULT_ROUTE}; use crate::models::{HorizontallyScrollableText, Route, TabRoute}; + use crate::models::servarr_data::radarr_data::{ActiveRadarrBlock, RadarrData}; use crate::network::radarr_network::RadarrEvent; use crate::network::NetworkEvent; diff --git a/src/app/mod.rs b/src/app/mod.rs index f92ab43..da5b4bb 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -6,8 +6,8 @@ use tokio::time::Instant; use tokio_util::sync::CancellationToken; use crate::app::context_clues::{build_context_clue_string, SERVARR_CONTEXT_CLUES}; -use crate::app::radarr::{ActiveRadarrBlock, RadarrData}; use crate::models::{HorizontallyScrollableText, Route, TabRoute, TabState}; +use crate::models::servarr_data::radarr_data::{ActiveRadarrBlock, RadarrData}; use crate::network::NetworkEvent; #[cfg(test)] diff --git a/src/app/radarr/mod.rs b/src/app/radarr/mod.rs index 7f41f77..e9d45f8 100644 --- a/src/app/radarr/mod.rs +++ b/src/app/radarr/mod.rs @@ -1,636 +1,13 @@ -use bimap::BiMap; -use chrono::{DateTime, Utc}; -use strum::IntoEnumIterator; -use strum_macros::EnumIter; - -use crate::app::{App, Route}; -use crate::models::radarr_models::{ - AddMovieSearchResult, Collection, CollectionMovie, Credit, DiskSpace, DownloadRecord, Indexer, - IndexerSettings, MinimumAvailability, Monitor, Movie, MovieHistoryItem, QueueEvent, Release, - ReleaseField, RootFolder, Task, -}; -use crate::models::{ - BlockSelectionState, HorizontallyScrollableText, ScrollableText, StatefulList, StatefulTable, - TabRoute, TabState, -}; +use crate::app::App; +use crate::models::servarr_data::radarr_data::ActiveRadarrBlock; use crate::network::radarr_network::RadarrEvent; -use super::context_clues::build_context_clue_string; - -use self::radarr_context_clues::{ - COLLECTIONS_CONTEXT_CLUES, DOWNLOADS_CONTEXT_CLUES, INDEXERS_CONTEXT_CLUES, - LIBRARY_CONTEXT_CLUES, MANUAL_MOVIE_SEARCH_CONTEXTUAL_CONTEXT_CLUES, - MANUAL_MOVIE_SEARCH_CONTEXT_CLUES, MOVIE_DETAILS_CONTEXT_CLUES, ROOT_FOLDERS_CONTEXT_CLUES, - SYSTEM_CONTEXT_CLUES, -}; - pub mod radarr_context_clues; #[cfg(test)] #[path = "radarr_tests.rs"] mod radarr_tests; -#[cfg(test)] -#[path = "radarr_test_utils.rs"] -pub mod radarr_test_utils; - -pub struct RadarrData<'a> { - pub root_folders: StatefulTable, - pub disk_space_vec: Vec, - pub version: String, - pub start_time: DateTime, - pub movies: StatefulTable, - pub filtered_movies: StatefulTable, - pub add_searched_movies: StatefulTable, - pub monitor_list: StatefulList, - pub minimum_availability_list: StatefulList, - pub quality_profile_list: StatefulList, - pub root_folder_list: StatefulList, - pub selected_block: BlockSelectionState<'a, ActiveRadarrBlock>, - pub downloads: StatefulTable, - pub indexers: StatefulTable, - pub indexer_settings: Option, - pub quality_profile_map: BiMap, - pub tags_map: BiMap, - pub movie_details: ScrollableText, - pub file_details: String, - pub audio_details: String, - pub video_details: String, - pub movie_history: StatefulTable, - pub movie_cast: StatefulTable, - pub movie_crew: StatefulTable, - pub movie_releases: StatefulTable, - pub movie_releases_sort: StatefulList, - pub collections: StatefulTable, - pub filtered_collections: StatefulTable, - pub collection_movies: StatefulTable, - pub logs: StatefulList, - pub log_details: StatefulList, - pub tasks: StatefulTable, - pub queued_events: StatefulTable, - pub updates: ScrollableText, - pub prompt_confirm_action: Option, - pub main_tabs: TabState, - pub movie_info_tabs: TabState, - pub search: HorizontallyScrollableText, - pub filter: HorizontallyScrollableText, - pub edit_path: HorizontallyScrollableText, - pub edit_tags: HorizontallyScrollableText, - pub edit_monitored: Option, - pub edit_search_on_add: Option, - pub sort_ascending: Option, - pub prompt_confirm: bool, - pub delete_movie_files: bool, - pub add_list_exclusion: bool, - pub is_searching: bool, - pub is_filtering: bool, -} - -impl<'a> RadarrData<'a> { - pub fn reset_movie_collection_table(&mut self) { - self.collection_movies = StatefulTable::default(); - } - - pub fn reset_log_details_list(&mut self) { - self.log_details = StatefulList::default(); - } - - pub fn reset_delete_movie_preferences(&mut self) { - self.delete_movie_files = false; - self.add_list_exclusion = false; - } - - pub fn reset_search(&mut self) { - self.is_searching = false; - self.search = HorizontallyScrollableText::default(); - self.filter = HorizontallyScrollableText::default(); - self.filtered_movies = StatefulTable::default(); - self.filtered_collections = StatefulTable::default(); - self.add_searched_movies = StatefulTable::default(); - } - - pub fn reset_filter(&mut self) { - self.is_filtering = false; - self.filter = HorizontallyScrollableText::default(); - self.filtered_movies = StatefulTable::default(); - self.filtered_collections = StatefulTable::default(); - } - - pub fn reset_add_edit_media_fields(&mut self) { - self.edit_monitored = None; - self.edit_search_on_add = None; - self.edit_path = HorizontallyScrollableText::default(); - self.edit_tags = HorizontallyScrollableText::default(); - self.reset_preferences_selections(); - } - - pub fn reset_movie_info_tabs(&mut self) { - self.file_details = String::default(); - self.audio_details = String::default(); - self.video_details = String::default(); - self.movie_details = ScrollableText::default(); - self.movie_history = StatefulTable::default(); - self.movie_cast = StatefulTable::default(); - self.movie_crew = StatefulTable::default(); - self.movie_releases = StatefulTable::default(); - self.movie_releases_sort = StatefulList::default(); - self.sort_ascending = None; - self.movie_info_tabs.index = 0; - } - - pub fn reset_preferences_selections(&mut self) { - self.monitor_list = StatefulList::default(); - self.minimum_availability_list = StatefulList::default(); - self.quality_profile_list = StatefulList::default(); - self.root_folder_list = StatefulList::default(); - } - - pub fn populate_preferences_lists(&mut self) { - self.monitor_list.set_items(Vec::from_iter(Monitor::iter())); - self - .minimum_availability_list - .set_items(Vec::from_iter(MinimumAvailability::iter())); - let mut quality_profile_names: Vec = - self.quality_profile_map.right_values().cloned().collect(); - quality_profile_names.sort(); - self.quality_profile_list.set_items(quality_profile_names); - self - .root_folder_list - .set_items(self.root_folders.items.to_vec()); - } - - pub fn populate_edit_movie_fields(&mut self) { - self.populate_preferences_lists(); - let Movie { - path, - tags, - monitored, - minimum_availability, - quality_profile_id, - .. - } = if self.filtered_movies.items.is_empty() { - self.movies.current_selection() - } else { - self.filtered_movies.current_selection() - }; - - self.edit_path = path.clone().into(); - self.edit_tags = tags - .iter() - .map(|tag_id| { - self - .tags_map - .get_by_left(&tag_id.as_u64().unwrap()) - .unwrap() - .clone() - }) - .collect::>() - .join(", ") - .into(); - self.edit_monitored = Some(*monitored); - - let minimum_availability_index = self - .minimum_availability_list - .items - .iter() - .position(|ma| ma == minimum_availability); - self - .minimum_availability_list - .state - .select(minimum_availability_index); - - let quality_profile_name = self - .quality_profile_map - .get_by_left(&quality_profile_id.as_u64().unwrap()) - .unwrap(); - let quality_profile_index = self - .quality_profile_list - .items - .iter() - .position(|profile| profile == quality_profile_name); - self - .quality_profile_list - .state - .select(quality_profile_index); - } - - pub fn populate_edit_collection_fields(&mut self) { - self.populate_preferences_lists(); - let Collection { - root_folder_path, - monitored, - search_on_add, - minimum_availability, - quality_profile_id, - .. - } = if self.filtered_collections.items.is_empty() { - self.collections.current_selection() - } else { - self.filtered_collections.current_selection() - }; - - self.edit_path = root_folder_path.clone().unwrap_or_default().into(); - self.edit_monitored = Some(*monitored); - self.edit_search_on_add = Some(*search_on_add); - - let minimum_availability_index = self - .minimum_availability_list - .items - .iter() - .position(|ma| ma == minimum_availability); - self - .minimum_availability_list - .state - .select(minimum_availability_index); - - let quality_profile_name = self - .quality_profile_map - .get_by_left(&quality_profile_id.as_u64().unwrap()) - .unwrap(); - let quality_profile_index = self - .quality_profile_list - .items - .iter() - .position(|profile| profile == quality_profile_name); - self - .quality_profile_list - .state - .select(quality_profile_index); - } -} - -impl<'a> Default for RadarrData<'a> { - fn default() -> RadarrData<'a> { - RadarrData { - root_folders: StatefulTable::default(), - disk_space_vec: Vec::new(), - version: String::default(), - start_time: DateTime::default(), - movies: StatefulTable::default(), - add_searched_movies: StatefulTable::default(), - monitor_list: StatefulList::default(), - minimum_availability_list: StatefulList::default(), - quality_profile_list: StatefulList::default(), - root_folder_list: StatefulList::default(), - selected_block: BlockSelectionState::default(), - filtered_movies: StatefulTable::default(), - downloads: StatefulTable::default(), - indexers: StatefulTable::default(), - indexer_settings: None, - quality_profile_map: BiMap::default(), - tags_map: BiMap::default(), - file_details: String::default(), - audio_details: String::default(), - video_details: String::default(), - movie_details: ScrollableText::default(), - movie_history: StatefulTable::default(), - movie_cast: StatefulTable::default(), - movie_crew: StatefulTable::default(), - movie_releases: StatefulTable::default(), - movie_releases_sort: StatefulList::default(), - collections: StatefulTable::default(), - filtered_collections: StatefulTable::default(), - collection_movies: StatefulTable::default(), - logs: StatefulList::default(), - log_details: StatefulList::default(), - tasks: StatefulTable::default(), - queued_events: StatefulTable::default(), - updates: ScrollableText::default(), - prompt_confirm_action: None, - search: HorizontallyScrollableText::default(), - filter: HorizontallyScrollableText::default(), - edit_path: HorizontallyScrollableText::default(), - edit_tags: HorizontallyScrollableText::default(), - edit_monitored: None, - edit_search_on_add: None, - sort_ascending: None, - is_searching: false, - is_filtering: false, - prompt_confirm: false, - delete_movie_files: false, - add_list_exclusion: false, - main_tabs: TabState::new(vec![ - TabRoute { - title: "Library", - route: ActiveRadarrBlock::Movies.into(), - help: String::new(), - contextual_help: Some(build_context_clue_string(&LIBRARY_CONTEXT_CLUES)), - }, - TabRoute { - title: "Downloads", - route: ActiveRadarrBlock::Downloads.into(), - help: String::new(), - contextual_help: Some(build_context_clue_string(&DOWNLOADS_CONTEXT_CLUES)), - }, - TabRoute { - title: "Collections", - route: ActiveRadarrBlock::Collections.into(), - help: String::new(), - contextual_help: Some(build_context_clue_string(&COLLECTIONS_CONTEXT_CLUES)), - }, - TabRoute { - title: "Root Folders", - route: ActiveRadarrBlock::RootFolders.into(), - help: String::new(), - contextual_help: Some(build_context_clue_string(&ROOT_FOLDERS_CONTEXT_CLUES)), - }, - TabRoute { - title: "Indexers", - route: ActiveRadarrBlock::Indexers.into(), - help: String::new(), - contextual_help: Some(build_context_clue_string(&INDEXERS_CONTEXT_CLUES)), - }, - TabRoute { - title: "System", - route: ActiveRadarrBlock::System.into(), - help: String::new(), - contextual_help: Some(build_context_clue_string(&SYSTEM_CONTEXT_CLUES)), - }, - ]), - movie_info_tabs: TabState::new(vec![ - TabRoute { - title: "Details", - route: ActiveRadarrBlock::MovieDetails.into(), - help: build_context_clue_string(&MOVIE_DETAILS_CONTEXT_CLUES), - contextual_help: None, - }, - TabRoute { - title: "History", - route: ActiveRadarrBlock::MovieHistory.into(), - help: build_context_clue_string(&MOVIE_DETAILS_CONTEXT_CLUES), - contextual_help: None, - }, - TabRoute { - title: "File", - route: ActiveRadarrBlock::FileInfo.into(), - help: build_context_clue_string(&MOVIE_DETAILS_CONTEXT_CLUES), - contextual_help: None, - }, - TabRoute { - title: "Cast", - route: ActiveRadarrBlock::Cast.into(), - help: build_context_clue_string(&MOVIE_DETAILS_CONTEXT_CLUES), - contextual_help: None, - }, - TabRoute { - title: "Crew", - route: ActiveRadarrBlock::Crew.into(), - help: build_context_clue_string(&MOVIE_DETAILS_CONTEXT_CLUES), - contextual_help: None, - }, - TabRoute { - title: "Manual Search", - route: ActiveRadarrBlock::ManualSearch.into(), - help: build_context_clue_string(&MANUAL_MOVIE_SEARCH_CONTEXT_CLUES), - contextual_help: Some(build_context_clue_string( - &MANUAL_MOVIE_SEARCH_CONTEXTUAL_CONTEXT_CLUES, - )), - }, - ]), - } - } -} - -#[derive(Clone, Copy, PartialEq, Eq, Debug, Default, EnumIter)] -pub enum ActiveRadarrBlock { - AddIndexer, - AddMovieAlreadyInLibrary, - AddMovieSearchInput, - AddMovieSearchResults, - AddMoviePrompt, - AddMovieSelectMinimumAvailability, - AddMovieSelectQualityProfile, - AddMovieSelectMonitor, - AddMovieSelectRootFolder, - AddMovieConfirmPrompt, - AddMovieTagsInput, - AddMovieEmptySearchResults, - AddRootFolderPrompt, - AutomaticallySearchMoviePrompt, - Collections, - CollectionDetails, - Cast, - Crew, - DeleteDownloadPrompt, - DeleteIndexerPrompt, - DeleteMoviePrompt, - DeleteMovieConfirmPrompt, - DeleteMovieToggleDeleteFile, - DeleteMovieToggleAddListExclusion, - DeleteRootFolderPrompt, - Downloads, - EditCollectionPrompt, - EditCollectionConfirmPrompt, - EditCollectionRootFolderPathInput, - EditCollectionSelectMinimumAvailability, - EditCollectionSelectQualityProfile, - EditCollectionToggleSearchOnAdd, - EditCollectionToggleMonitored, - EditIndexer, - EditMoviePrompt, - EditMovieConfirmPrompt, - EditMoviePathInput, - EditMovieSelectMinimumAvailability, - EditMovieSelectQualityProfile, - EditMovieTagsInput, - EditMovieToggleMonitored, - FileInfo, - FilterCollections, - FilterMovies, - Indexers, - IndexerSettingsPrompt, - IndexerSettingsAvailabilityDelayInput, - IndexerSettingsConfirmPrompt, - IndexerSettingsMaximumSizeInput, - IndexerSettingsMinimumAgeInput, - IndexerSettingsRetentionInput, - IndexerSettingsRssSyncIntervalInput, - IndexerSettingsToggleAllowHardcodedSubs, - IndexerSettingsTogglePreferIndexerFlags, - IndexerSettingsWhitelistedSubtitleTagsInput, - ManualSearch, - ManualSearchSortPrompt, - ManualSearchConfirmPrompt, - MovieDetails, - MovieHistory, - #[default] - Movies, - RootFolders, - System, - SystemLogs, - SystemQueuedEvents, - SystemTasks, - SystemTaskStartConfirmPrompt, - SystemUpdates, - UpdateAndScanPrompt, - UpdateAllCollectionsPrompt, - UpdateAllMoviesPrompt, - UpdateDownloadsPrompt, - SearchMovie, - SearchCollection, - ViewMovieOverview, -} - -pub static LIBRARY_BLOCKS: [ActiveRadarrBlock; 4] = [ - ActiveRadarrBlock::Movies, - ActiveRadarrBlock::SearchMovie, - ActiveRadarrBlock::FilterMovies, - ActiveRadarrBlock::UpdateAllMoviesPrompt, -]; -pub static COLLECTIONS_BLOCKS: [ActiveRadarrBlock; 4] = [ - ActiveRadarrBlock::Collections, - ActiveRadarrBlock::SearchCollection, - ActiveRadarrBlock::FilterCollections, - ActiveRadarrBlock::UpdateAllCollectionsPrompt, -]; -pub static INDEXERS_BLOCKS: [ActiveRadarrBlock; 4] = [ - ActiveRadarrBlock::AddIndexer, - ActiveRadarrBlock::EditIndexer, - ActiveRadarrBlock::DeleteIndexerPrompt, - ActiveRadarrBlock::Indexers, -]; -pub static ROOT_FOLDERS_BLOCKS: [ActiveRadarrBlock; 3] = [ - ActiveRadarrBlock::RootFolders, - ActiveRadarrBlock::AddRootFolderPrompt, - ActiveRadarrBlock::DeleteRootFolderPrompt, -]; -pub static ADD_MOVIE_BLOCKS: [ActiveRadarrBlock; 10] = [ - ActiveRadarrBlock::AddMovieSearchInput, - ActiveRadarrBlock::AddMovieSearchResults, - ActiveRadarrBlock::AddMovieEmptySearchResults, - ActiveRadarrBlock::AddMoviePrompt, - ActiveRadarrBlock::AddMovieSelectMinimumAvailability, - ActiveRadarrBlock::AddMovieSelectMonitor, - ActiveRadarrBlock::AddMovieSelectQualityProfile, - ActiveRadarrBlock::AddMovieSelectRootFolder, - ActiveRadarrBlock::AddMovieAlreadyInLibrary, - ActiveRadarrBlock::AddMovieTagsInput, -]; -pub static ADD_MOVIE_SELECTION_BLOCKS: [ActiveRadarrBlock; 6] = [ - ActiveRadarrBlock::AddMovieSelectRootFolder, - ActiveRadarrBlock::AddMovieSelectMonitor, - ActiveRadarrBlock::AddMovieSelectMinimumAvailability, - ActiveRadarrBlock::AddMovieSelectQualityProfile, - ActiveRadarrBlock::AddMovieTagsInput, - ActiveRadarrBlock::AddMovieConfirmPrompt, -]; -pub static EDIT_COLLECTION_BLOCKS: [ActiveRadarrBlock; 7] = [ - ActiveRadarrBlock::EditCollectionPrompt, - ActiveRadarrBlock::EditCollectionConfirmPrompt, - ActiveRadarrBlock::EditCollectionRootFolderPathInput, - ActiveRadarrBlock::EditCollectionSelectMinimumAvailability, - ActiveRadarrBlock::EditCollectionSelectQualityProfile, - ActiveRadarrBlock::EditCollectionToggleSearchOnAdd, - ActiveRadarrBlock::EditCollectionToggleMonitored, -]; -pub static EDIT_COLLECTION_SELECTION_BLOCKS: [ActiveRadarrBlock; 6] = [ - ActiveRadarrBlock::EditCollectionToggleMonitored, - ActiveRadarrBlock::EditCollectionSelectMinimumAvailability, - ActiveRadarrBlock::EditCollectionSelectQualityProfile, - ActiveRadarrBlock::EditCollectionRootFolderPathInput, - ActiveRadarrBlock::EditCollectionToggleSearchOnAdd, - ActiveRadarrBlock::EditCollectionConfirmPrompt, -]; -pub static EDIT_MOVIE_BLOCKS: [ActiveRadarrBlock; 7] = [ - ActiveRadarrBlock::EditMoviePrompt, - ActiveRadarrBlock::EditMovieConfirmPrompt, - ActiveRadarrBlock::EditMoviePathInput, - ActiveRadarrBlock::EditMovieSelectMinimumAvailability, - ActiveRadarrBlock::EditMovieSelectQualityProfile, - ActiveRadarrBlock::EditMovieTagsInput, - ActiveRadarrBlock::EditMovieToggleMonitored, -]; -pub static EDIT_MOVIE_SELECTION_BLOCKS: [ActiveRadarrBlock; 6] = [ - ActiveRadarrBlock::EditMovieToggleMonitored, - ActiveRadarrBlock::EditMovieSelectMinimumAvailability, - ActiveRadarrBlock::EditMovieSelectQualityProfile, - ActiveRadarrBlock::EditMoviePathInput, - ActiveRadarrBlock::EditMovieTagsInput, - ActiveRadarrBlock::EditMovieConfirmPrompt, -]; -pub static DOWNLOADS_BLOCKS: [ActiveRadarrBlock; 3] = [ - ActiveRadarrBlock::Downloads, - ActiveRadarrBlock::DeleteDownloadPrompt, - ActiveRadarrBlock::UpdateDownloadsPrompt, -]; -pub static MOVIE_DETAILS_BLOCKS: [ActiveRadarrBlock; 10] = [ - ActiveRadarrBlock::MovieDetails, - ActiveRadarrBlock::MovieHistory, - ActiveRadarrBlock::FileInfo, - ActiveRadarrBlock::Cast, - ActiveRadarrBlock::Crew, - ActiveRadarrBlock::AutomaticallySearchMoviePrompt, - ActiveRadarrBlock::UpdateAndScanPrompt, - ActiveRadarrBlock::ManualSearch, - ActiveRadarrBlock::ManualSearchSortPrompt, - ActiveRadarrBlock::ManualSearchConfirmPrompt, -]; -pub static COLLECTION_DETAILS_BLOCKS: [ActiveRadarrBlock; 2] = [ - ActiveRadarrBlock::CollectionDetails, - ActiveRadarrBlock::ViewMovieOverview, -]; -pub static SEARCH_BLOCKS: [ActiveRadarrBlock; 2] = [ - ActiveRadarrBlock::SearchMovie, - ActiveRadarrBlock::SearchCollection, -]; -pub static FILTER_BLOCKS: [ActiveRadarrBlock; 2] = [ - ActiveRadarrBlock::FilterMovies, - ActiveRadarrBlock::FilterCollections, -]; -pub static DELETE_MOVIE_BLOCKS: [ActiveRadarrBlock; 4] = [ - ActiveRadarrBlock::DeleteMoviePrompt, - ActiveRadarrBlock::DeleteMovieConfirmPrompt, - ActiveRadarrBlock::DeleteMovieToggleDeleteFile, - ActiveRadarrBlock::DeleteMovieToggleAddListExclusion, -]; -pub static DELETE_MOVIE_SELECTION_BLOCKS: [ActiveRadarrBlock; 3] = [ - ActiveRadarrBlock::DeleteMovieToggleDeleteFile, - ActiveRadarrBlock::DeleteMovieToggleAddListExclusion, - ActiveRadarrBlock::DeleteMovieConfirmPrompt, -]; -pub static INDEXER_SETTINGS_BLOCKS: [ActiveRadarrBlock; 10] = [ - ActiveRadarrBlock::IndexerSettingsPrompt, - ActiveRadarrBlock::IndexerSettingsAvailabilityDelayInput, - ActiveRadarrBlock::IndexerSettingsConfirmPrompt, - ActiveRadarrBlock::IndexerSettingsMaximumSizeInput, - ActiveRadarrBlock::IndexerSettingsMinimumAgeInput, - ActiveRadarrBlock::IndexerSettingsRetentionInput, - ActiveRadarrBlock::IndexerSettingsRssSyncIntervalInput, - ActiveRadarrBlock::IndexerSettingsToggleAllowHardcodedSubs, - ActiveRadarrBlock::IndexerSettingsTogglePreferIndexerFlags, - ActiveRadarrBlock::IndexerSettingsWhitelistedSubtitleTagsInput, -]; -pub static INDEXER_SETTINGS_SELECTION_BLOCKS: [ActiveRadarrBlock; 9] = [ - ActiveRadarrBlock::IndexerSettingsMinimumAgeInput, - ActiveRadarrBlock::IndexerSettingsRetentionInput, - ActiveRadarrBlock::IndexerSettingsMaximumSizeInput, - ActiveRadarrBlock::IndexerSettingsTogglePreferIndexerFlags, - ActiveRadarrBlock::IndexerSettingsAvailabilityDelayInput, - ActiveRadarrBlock::IndexerSettingsRssSyncIntervalInput, - ActiveRadarrBlock::IndexerSettingsWhitelistedSubtitleTagsInput, - ActiveRadarrBlock::IndexerSettingsToggleAllowHardcodedSubs, - ActiveRadarrBlock::IndexerSettingsConfirmPrompt, -]; -pub static SYSTEM_DETAILS_BLOCKS: [ActiveRadarrBlock; 5] = [ - ActiveRadarrBlock::SystemLogs, - ActiveRadarrBlock::SystemQueuedEvents, - ActiveRadarrBlock::SystemTasks, - ActiveRadarrBlock::SystemTaskStartConfirmPrompt, - ActiveRadarrBlock::SystemUpdates, -]; - -impl From for Route { - fn from(active_radarr_block: ActiveRadarrBlock) -> Route { - Route::Radarr(active_radarr_block, None) - } -} - -impl From<(ActiveRadarrBlock, Option)> for Route { - fn from(value: (ActiveRadarrBlock, Option)) -> Route { - Route::Radarr(value.0, value.1) - } -} - impl<'a> App<'a> { pub(super) async fn dispatch_by_radarr_block(&mut self, active_radarr_block: &ActiveRadarrBlock) { match active_radarr_block { diff --git a/src/app/radarr/radarr_tests.rs b/src/app/radarr/radarr_tests.rs index c8caba4..a095b87 100644 --- a/src/app/radarr/radarr_tests.rs +++ b/src/app/radarr/radarr_tests.rs @@ -1,805 +1,5 @@ #[cfg(test)] mod tests { - mod radarr_data_tests { - use bimap::BiMap; - use chrono::{DateTime, Utc}; - use pretty_assertions::{assert_eq, assert_str_eq}; - use rstest::rstest; - use serde_json::Number; - use strum::IntoEnumIterator; - - use crate::app::context_clues::build_context_clue_string; - use crate::app::radarr::radarr_context_clues::{ - COLLECTIONS_CONTEXT_CLUES, DOWNLOADS_CONTEXT_CLUES, INDEXERS_CONTEXT_CLUES, - LIBRARY_CONTEXT_CLUES, MANUAL_MOVIE_SEARCH_CONTEXTUAL_CONTEXT_CLUES, - MANUAL_MOVIE_SEARCH_CONTEXT_CLUES, MOVIE_DETAILS_CONTEXT_CLUES, ROOT_FOLDERS_CONTEXT_CLUES, - SYSTEM_CONTEXT_CLUES, - }; - use crate::app::radarr::radarr_test_utils::utils::create_test_radarr_data; - use crate::app::radarr::{ActiveRadarrBlock, RadarrData}; - use crate::models::radarr_models::{ - Collection, MinimumAvailability, Monitor, Movie, RootFolder, - }; - use crate::models::Route; - use crate::models::StatefulTable; - use crate::models::{BlockSelectionState, HorizontallyScrollableText}; - use crate::{ - assert_edit_media_reset, assert_filter_reset, assert_movie_info_tabs_reset, - assert_preferences_selections_reset, assert_search_reset, - }; - - #[test] - fn test_from_tuple_to_route_with_context() { - assert_eq!( - Route::from(( - ActiveRadarrBlock::AddMoviePrompt, - Some(ActiveRadarrBlock::AddMovieSearchResults) - )), - Route::Radarr( - ActiveRadarrBlock::AddMoviePrompt, - Some(ActiveRadarrBlock::AddMovieSearchResults), - ) - ); - } - - #[test] - fn test_reset_movie_collection_table() { - let mut radarr_data = create_test_radarr_data(); - - radarr_data.reset_movie_collection_table(); - - assert!(radarr_data.collection_movies.items.is_empty()); - } - - #[test] - fn test_reset_log_details_list() { - let mut radarr_data = create_test_radarr_data(); - - radarr_data.reset_log_details_list(); - - assert!(radarr_data.log_details.items.is_empty()); - } - - #[test] - fn test_reset_delete_movie_preferences() { - let mut radarr_data = create_test_radarr_data(); - - radarr_data.reset_delete_movie_preferences(); - - assert!(!radarr_data.delete_movie_files); - assert!(!radarr_data.add_list_exclusion); - } - - #[test] - fn test_reset_search() { - let mut radarr_data = create_test_radarr_data(); - - radarr_data.reset_search(); - - assert_search_reset!(radarr_data); - } - - #[test] - fn test_reset_filter() { - let mut radarr_data = create_test_radarr_data(); - - radarr_data.reset_filter(); - - assert_filter_reset!(radarr_data); - } - - #[test] - fn test_reset_movie_info_tabs() { - let mut radarr_data = create_test_radarr_data(); - - radarr_data.reset_movie_info_tabs(); - - assert_movie_info_tabs_reset!(radarr_data); - } - - #[test] - fn test_reset_add_edit_media_fields() { - let mut radarr_data = RadarrData { - edit_monitored: Some(true), - edit_search_on_add: Some(true), - edit_path: "test path".to_owned().into(), - edit_tags: "test tag".to_owned().into(), - ..RadarrData::default() - }; - - radarr_data.reset_add_edit_media_fields(); - - assert_edit_media_reset!(radarr_data); - } - - #[test] - fn test_reset_preferences_selections() { - let mut radarr_data = create_test_radarr_data(); - - radarr_data.reset_preferences_selections(); - - assert_preferences_selections_reset!(radarr_data); - } - - #[test] - fn test_populate_preferences_lists() { - let root_folder = RootFolder { - id: Number::from(1), - path: "/nfs".to_owned(), - accessible: true, - free_space: Number::from(219902325555200u64), - unmapped_folders: None, - }; - let mut radarr_data = RadarrData { - quality_profile_map: BiMap::from_iter([ - (2222, "HD - 1080p".to_owned()), - (1111, "Any".to_owned()), - ]), - ..RadarrData::default() - }; - radarr_data - .root_folders - .set_items(vec![root_folder.clone()]); - - radarr_data.populate_preferences_lists(); - - assert_eq!( - radarr_data.monitor_list.items, - Vec::from_iter(Monitor::iter()) - ); - assert_eq!( - radarr_data.minimum_availability_list.items, - Vec::from_iter(MinimumAvailability::iter()) - ); - assert_eq!( - radarr_data.quality_profile_list.items, - vec!["Any".to_owned(), "HD - 1080p".to_owned()] - ); - assert_eq!(radarr_data.root_folder_list.items, vec![root_folder]); - } - - #[rstest] - fn test_populate_edit_movie_fields(#[values(true, false)] test_filtered_movies: bool) { - let mut radarr_data = RadarrData { - edit_path: HorizontallyScrollableText::default(), - edit_tags: HorizontallyScrollableText::default(), - edit_monitored: None, - quality_profile_map: BiMap::from_iter([ - (2222, "HD - 1080p".to_owned()), - (1111, "Any".to_owned()), - ]), - tags_map: BiMap::from_iter([(1, "usenet".to_owned()), (2, "test".to_owned())]), - filtered_movies: StatefulTable::default(), - ..create_test_radarr_data() - }; - let movie = Movie { - path: "/nfs/movies/Test".to_owned(), - monitored: true, - quality_profile_id: Number::from(2222), - minimum_availability: MinimumAvailability::Released, - tags: vec![Number::from(1), Number::from(2)], - ..Movie::default() - }; - - if test_filtered_movies { - radarr_data.filtered_movies.set_items(vec![movie]); - } else { - radarr_data.movies.set_items(vec![movie]); - } - - radarr_data.populate_edit_movie_fields(); - - assert_eq!( - radarr_data.minimum_availability_list.items, - Vec::from_iter(MinimumAvailability::iter()) - ); - assert_eq!( - radarr_data.minimum_availability_list.current_selection(), - &MinimumAvailability::Released - ); - assert_eq!( - radarr_data.quality_profile_list.items, - vec!["Any".to_owned(), "HD - 1080p".to_owned()] - ); - assert_str_eq!( - radarr_data.quality_profile_list.current_selection(), - "HD - 1080p" - ); - assert_str_eq!(radarr_data.edit_path.text, "/nfs/movies/Test"); - assert_str_eq!(radarr_data.edit_tags.text, "usenet, test"); - assert_eq!(radarr_data.edit_monitored, Some(true)); - } - - #[rstest] - fn test_populate_edit_collection_fields( - #[values(true, false)] test_filtered_collections: bool, - ) { - let mut radarr_data = RadarrData { - edit_path: HorizontallyScrollableText::default(), - edit_monitored: None, - edit_search_on_add: None, - quality_profile_map: BiMap::from_iter([ - (2222, "HD - 1080p".to_owned()), - (1111, "Any".to_owned()), - ]), - filtered_collections: StatefulTable::default(), - ..create_test_radarr_data() - }; - let collection = Collection { - root_folder_path: Some("/nfs/movies/Test".to_owned()), - monitored: true, - search_on_add: true, - quality_profile_id: Number::from(2222), - minimum_availability: MinimumAvailability::Released, - ..Collection::default() - }; - - if test_filtered_collections { - radarr_data.filtered_collections.set_items(vec![collection]); - } else { - radarr_data.collections.set_items(vec![collection]); - } - - radarr_data.populate_edit_collection_fields(); - - assert_eq!( - radarr_data.minimum_availability_list.items, - Vec::from_iter(MinimumAvailability::iter()) - ); - assert_eq!( - radarr_data.minimum_availability_list.current_selection(), - &MinimumAvailability::Released - ); - assert_eq!( - radarr_data.quality_profile_list.items, - vec!["Any".to_owned(), "HD - 1080p".to_owned()] - ); - assert_str_eq!( - radarr_data.quality_profile_list.current_selection(), - "HD - 1080p" - ); - assert_str_eq!(radarr_data.edit_path.text, "/nfs/movies/Test"); - assert_eq!(radarr_data.edit_monitored, Some(true)); - assert_eq!(radarr_data.edit_search_on_add, Some(true)); - } - - #[test] - fn test_radarr_data_defaults() { - let radarr_data = RadarrData::default(); - - assert!(radarr_data.root_folders.items.is_empty()); - assert_eq!(radarr_data.disk_space_vec, Vec::new()); - assert!(radarr_data.version.is_empty()); - assert_eq!(radarr_data.start_time, >::default()); - assert!(radarr_data.movies.items.is_empty()); - assert!(radarr_data.add_searched_movies.items.is_empty()); - assert!(radarr_data.monitor_list.items.is_empty()); - assert!(radarr_data.minimum_availability_list.items.is_empty()); - assert!(radarr_data.quality_profile_list.items.is_empty()); - assert!(radarr_data.root_folder_list.items.is_empty()); - assert_eq!(radarr_data.selected_block, BlockSelectionState::default()); - assert!(radarr_data.filtered_movies.items.is_empty()); - assert!(radarr_data.downloads.items.is_empty()); - assert!(radarr_data.indexers.items.is_empty()); - assert!(radarr_data.indexer_settings.is_none()); - assert!(radarr_data.quality_profile_map.is_empty()); - assert!(radarr_data.tags_map.is_empty()); - assert!(radarr_data.file_details.is_empty()); - assert!(radarr_data.audio_details.is_empty()); - assert!(radarr_data.video_details.is_empty()); - assert!(radarr_data.movie_details.get_text().is_empty()); - assert!(radarr_data.movie_history.items.is_empty()); - assert!(radarr_data.movie_cast.items.is_empty()); - assert!(radarr_data.movie_crew.items.is_empty()); - assert!(radarr_data.movie_releases.items.is_empty()); - assert!(radarr_data.movie_releases_sort.items.is_empty()); - assert!(radarr_data.collections.items.is_empty()); - assert!(radarr_data.filtered_collections.items.is_empty()); - assert!(radarr_data.collection_movies.items.is_empty()); - assert!(radarr_data.logs.items.is_empty()); - assert!(radarr_data.log_details.items.is_empty()); - assert!(radarr_data.tasks.items.is_empty()); - assert!(radarr_data.queued_events.items.is_empty()); - assert!(radarr_data.updates.get_text().is_empty()); - assert!(radarr_data.prompt_confirm_action.is_none()); - assert!(radarr_data.search.text.is_empty()); - assert!(radarr_data.filter.text.is_empty()); - assert!(radarr_data.edit_path.text.is_empty()); - assert!(radarr_data.edit_tags.text.is_empty()); - assert!(radarr_data.edit_monitored.is_none()); - assert!(radarr_data.edit_search_on_add.is_none()); - assert!(radarr_data.sort_ascending.is_none()); - assert!(!radarr_data.is_searching); - assert!(!radarr_data.is_filtering); - assert!(!radarr_data.prompt_confirm); - assert!(!radarr_data.delete_movie_files); - assert!(!radarr_data.add_list_exclusion); - - assert_eq!(radarr_data.main_tabs.tabs.len(), 6); - - assert_str_eq!(radarr_data.main_tabs.tabs[0].title, "Library"); - assert_eq!( - radarr_data.main_tabs.tabs[0].route, - ActiveRadarrBlock::Movies.into() - ); - assert!(radarr_data.main_tabs.tabs[0].help.is_empty()); - assert_eq!( - radarr_data.main_tabs.tabs[0].contextual_help, - Some(build_context_clue_string(&LIBRARY_CONTEXT_CLUES)) - ); - - assert_str_eq!(radarr_data.main_tabs.tabs[1].title, "Downloads"); - assert_eq!( - radarr_data.main_tabs.tabs[1].route, - ActiveRadarrBlock::Downloads.into() - ); - assert!(radarr_data.main_tabs.tabs[1].help.is_empty()); - assert_eq!( - radarr_data.main_tabs.tabs[1].contextual_help, - Some(build_context_clue_string(&DOWNLOADS_CONTEXT_CLUES)) - ); - - assert_str_eq!(radarr_data.main_tabs.tabs[2].title, "Collections"); - assert_eq!( - radarr_data.main_tabs.tabs[2].route, - ActiveRadarrBlock::Collections.into() - ); - assert!(radarr_data.main_tabs.tabs[2].help.is_empty()); - assert_eq!( - radarr_data.main_tabs.tabs[2].contextual_help, - Some(build_context_clue_string(&COLLECTIONS_CONTEXT_CLUES)) - ); - - assert_str_eq!(radarr_data.main_tabs.tabs[3].title, "Root Folders"); - assert_eq!( - radarr_data.main_tabs.tabs[3].route, - ActiveRadarrBlock::RootFolders.into() - ); - assert!(radarr_data.main_tabs.tabs[3].help.is_empty()); - assert_eq!( - radarr_data.main_tabs.tabs[3].contextual_help, - Some(build_context_clue_string(&ROOT_FOLDERS_CONTEXT_CLUES)) - ); - - assert_str_eq!(radarr_data.main_tabs.tabs[4].title, "Indexers"); - assert_eq!( - radarr_data.main_tabs.tabs[4].route, - ActiveRadarrBlock::Indexers.into() - ); - assert!(radarr_data.main_tabs.tabs[4].help.is_empty()); - assert_eq!( - radarr_data.main_tabs.tabs[4].contextual_help, - Some(build_context_clue_string(&INDEXERS_CONTEXT_CLUES)) - ); - - assert_str_eq!(radarr_data.main_tabs.tabs[5].title, "System"); - assert_eq!( - radarr_data.main_tabs.tabs[5].route, - ActiveRadarrBlock::System.into() - ); - assert!(radarr_data.main_tabs.tabs[5].help.is_empty()); - assert_eq!( - radarr_data.main_tabs.tabs[5].contextual_help, - Some(build_context_clue_string(&SYSTEM_CONTEXT_CLUES)) - ); - - assert_eq!(radarr_data.movie_info_tabs.tabs.len(), 6); - - assert_str_eq!(radarr_data.movie_info_tabs.tabs[0].title, "Details"); - assert_eq!( - radarr_data.movie_info_tabs.tabs[0].route, - ActiveRadarrBlock::MovieDetails.into() - ); - assert_str_eq!( - radarr_data.movie_info_tabs.tabs[0].help, - build_context_clue_string(&MOVIE_DETAILS_CONTEXT_CLUES) - ); - assert!(radarr_data.movie_info_tabs.tabs[0] - .contextual_help - .is_none()); - - assert_str_eq!(radarr_data.movie_info_tabs.tabs[1].title, "History"); - assert_eq!( - radarr_data.movie_info_tabs.tabs[1].route, - ActiveRadarrBlock::MovieHistory.into() - ); - assert_str_eq!( - radarr_data.movie_info_tabs.tabs[1].help, - build_context_clue_string(&MOVIE_DETAILS_CONTEXT_CLUES) - ); - assert!(radarr_data.movie_info_tabs.tabs[1] - .contextual_help - .is_none()); - - assert_str_eq!(radarr_data.movie_info_tabs.tabs[2].title, "File"); - assert_eq!( - radarr_data.movie_info_tabs.tabs[2].route, - ActiveRadarrBlock::FileInfo.into() - ); - assert_str_eq!( - radarr_data.movie_info_tabs.tabs[2].help, - build_context_clue_string(&MOVIE_DETAILS_CONTEXT_CLUES) - ); - assert!(radarr_data.movie_info_tabs.tabs[2] - .contextual_help - .is_none()); - - assert_str_eq!(radarr_data.movie_info_tabs.tabs[3].title, "Cast"); - assert_eq!( - radarr_data.movie_info_tabs.tabs[3].route, - ActiveRadarrBlock::Cast.into() - ); - assert_str_eq!( - radarr_data.movie_info_tabs.tabs[3].help, - build_context_clue_string(&MOVIE_DETAILS_CONTEXT_CLUES) - ); - assert!(radarr_data.movie_info_tabs.tabs[3] - .contextual_help - .is_none()); - - assert_str_eq!(radarr_data.movie_info_tabs.tabs[4].title, "Crew"); - assert_eq!( - radarr_data.movie_info_tabs.tabs[4].route, - ActiveRadarrBlock::Crew.into() - ); - assert_str_eq!( - radarr_data.movie_info_tabs.tabs[4].help, - build_context_clue_string(&MOVIE_DETAILS_CONTEXT_CLUES) - ); - assert!(radarr_data.movie_info_tabs.tabs[4] - .contextual_help - .is_none()); - - assert_str_eq!(radarr_data.movie_info_tabs.tabs[5].title, "Manual Search"); - assert_eq!( - radarr_data.movie_info_tabs.tabs[5].route, - ActiveRadarrBlock::ManualSearch.into() - ); - assert_str_eq!( - radarr_data.movie_info_tabs.tabs[5].help, - build_context_clue_string(&MANUAL_MOVIE_SEARCH_CONTEXT_CLUES) - ); - assert_eq!( - radarr_data.movie_info_tabs.tabs[5].contextual_help, - Some(build_context_clue_string( - &MANUAL_MOVIE_SEARCH_CONTEXTUAL_CONTEXT_CLUES - )) - ); - } - } - - mod active_radarr_block_tests { - use pretty_assertions::assert_eq; - - use crate::app::radarr::{ - ActiveRadarrBlock, ADD_MOVIE_BLOCKS, ADD_MOVIE_SELECTION_BLOCKS, COLLECTIONS_BLOCKS, - COLLECTION_DETAILS_BLOCKS, DELETE_MOVIE_BLOCKS, DELETE_MOVIE_SELECTION_BLOCKS, - DOWNLOADS_BLOCKS, EDIT_COLLECTION_BLOCKS, EDIT_COLLECTION_SELECTION_BLOCKS, - EDIT_MOVIE_BLOCKS, EDIT_MOVIE_SELECTION_BLOCKS, FILTER_BLOCKS, INDEXERS_BLOCKS, - INDEXER_SETTINGS_BLOCKS, INDEXER_SETTINGS_SELECTION_BLOCKS, LIBRARY_BLOCKS, - MOVIE_DETAILS_BLOCKS, ROOT_FOLDERS_BLOCKS, SEARCH_BLOCKS, SYSTEM_DETAILS_BLOCKS, - }; - - #[test] - fn test_library_blocks_contents() { - assert_eq!(LIBRARY_BLOCKS.len(), 4); - assert!(LIBRARY_BLOCKS.contains(&ActiveRadarrBlock::Movies)); - assert!(LIBRARY_BLOCKS.contains(&ActiveRadarrBlock::SearchMovie)); - assert!(LIBRARY_BLOCKS.contains(&ActiveRadarrBlock::FilterMovies)); - assert!(LIBRARY_BLOCKS.contains(&ActiveRadarrBlock::UpdateAllMoviesPrompt)); - } - - #[test] - fn test_collections_blocks_contents() { - assert_eq!(COLLECTIONS_BLOCKS.len(), 4); - assert!(COLLECTIONS_BLOCKS.contains(&ActiveRadarrBlock::Collections)); - assert!(COLLECTIONS_BLOCKS.contains(&ActiveRadarrBlock::SearchCollection)); - assert!(COLLECTIONS_BLOCKS.contains(&ActiveRadarrBlock::FilterCollections)); - assert!(COLLECTIONS_BLOCKS.contains(&ActiveRadarrBlock::UpdateAllCollectionsPrompt)); - } - - #[test] - fn test_indexers_blocks_contents() { - assert_eq!(INDEXERS_BLOCKS.len(), 4); - assert!(INDEXERS_BLOCKS.contains(&ActiveRadarrBlock::AddIndexer)); - assert!(INDEXERS_BLOCKS.contains(&ActiveRadarrBlock::EditIndexer)); - assert!(INDEXERS_BLOCKS.contains(&ActiveRadarrBlock::DeleteIndexerPrompt)); - assert!(INDEXERS_BLOCKS.contains(&ActiveRadarrBlock::Indexers)); - } - - #[test] - fn test_root_folders_blocks_contents() { - assert_eq!(ROOT_FOLDERS_BLOCKS.len(), 3); - assert!(ROOT_FOLDERS_BLOCKS.contains(&ActiveRadarrBlock::RootFolders)); - assert!(ROOT_FOLDERS_BLOCKS.contains(&ActiveRadarrBlock::AddRootFolderPrompt)); - assert!(ROOT_FOLDERS_BLOCKS.contains(&ActiveRadarrBlock::DeleteRootFolderPrompt)); - } - - #[test] - fn test_add_movie_blocks_contents() { - assert_eq!(ADD_MOVIE_BLOCKS.len(), 10); - assert!(ADD_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::AddMovieSearchInput)); - assert!(ADD_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::AddMovieSearchResults)); - assert!(ADD_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::AddMovieEmptySearchResults)); - assert!(ADD_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::AddMoviePrompt)); - assert!(ADD_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::AddMovieSelectMinimumAvailability)); - assert!(ADD_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::AddMovieSelectMonitor)); - assert!(ADD_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::AddMovieSelectQualityProfile)); - assert!(ADD_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::AddMovieSelectRootFolder)); - assert!(ADD_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::AddMovieAlreadyInLibrary)); - assert!(ADD_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::AddMovieTagsInput)); - } - - #[test] - fn test_edit_collection_blocks_contents() { - assert_eq!(EDIT_COLLECTION_BLOCKS.len(), 7); - assert!(EDIT_COLLECTION_BLOCKS.contains(&ActiveRadarrBlock::EditCollectionPrompt)); - assert!(EDIT_COLLECTION_BLOCKS.contains(&ActiveRadarrBlock::EditCollectionConfirmPrompt)); - assert!( - EDIT_COLLECTION_BLOCKS.contains(&ActiveRadarrBlock::EditCollectionRootFolderPathInput) - ); - assert!(EDIT_COLLECTION_BLOCKS - .contains(&ActiveRadarrBlock::EditCollectionSelectMinimumAvailability)); - assert!( - EDIT_COLLECTION_BLOCKS.contains(&ActiveRadarrBlock::EditCollectionSelectQualityProfile) - ); - assert!(EDIT_COLLECTION_BLOCKS.contains(&ActiveRadarrBlock::EditCollectionToggleSearchOnAdd)); - assert!(EDIT_COLLECTION_BLOCKS.contains(&ActiveRadarrBlock::EditCollectionToggleMonitored)); - } - - #[test] - fn test_edit_movie_blocks_contents() { - assert_eq!(EDIT_MOVIE_BLOCKS.len(), 7); - assert!(EDIT_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::EditMoviePrompt)); - assert!(EDIT_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::EditMovieConfirmPrompt)); - assert!(EDIT_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::EditMoviePathInput)); - assert!(EDIT_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::EditMovieSelectMinimumAvailability)); - assert!(EDIT_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::EditMovieSelectQualityProfile)); - assert!(EDIT_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::EditMovieTagsInput)); - assert!(EDIT_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::EditMovieToggleMonitored)); - } - - #[test] - fn test_downloads_blocks_contents() { - assert_eq!(DOWNLOADS_BLOCKS.len(), 3); - assert!(DOWNLOADS_BLOCKS.contains(&ActiveRadarrBlock::Downloads)); - assert!(DOWNLOADS_BLOCKS.contains(&ActiveRadarrBlock::DeleteDownloadPrompt)); - assert!(DOWNLOADS_BLOCKS.contains(&ActiveRadarrBlock::UpdateDownloadsPrompt)); - } - - #[test] - fn test_movie_details_blocks_contents() { - assert_eq!(MOVIE_DETAILS_BLOCKS.len(), 10); - assert!(MOVIE_DETAILS_BLOCKS.contains(&ActiveRadarrBlock::MovieDetails)); - assert!(MOVIE_DETAILS_BLOCKS.contains(&ActiveRadarrBlock::MovieHistory)); - assert!(MOVIE_DETAILS_BLOCKS.contains(&ActiveRadarrBlock::FileInfo)); - assert!(MOVIE_DETAILS_BLOCKS.contains(&ActiveRadarrBlock::Cast)); - assert!(MOVIE_DETAILS_BLOCKS.contains(&ActiveRadarrBlock::Crew)); - assert!(MOVIE_DETAILS_BLOCKS.contains(&ActiveRadarrBlock::AutomaticallySearchMoviePrompt)); - assert!(MOVIE_DETAILS_BLOCKS.contains(&ActiveRadarrBlock::UpdateAndScanPrompt)); - assert!(MOVIE_DETAILS_BLOCKS.contains(&ActiveRadarrBlock::ManualSearch)); - assert!(MOVIE_DETAILS_BLOCKS.contains(&ActiveRadarrBlock::ManualSearchSortPrompt)); - assert!(MOVIE_DETAILS_BLOCKS.contains(&ActiveRadarrBlock::ManualSearchConfirmPrompt)); - } - - #[test] - fn test_collection_details_blocks_contents() { - assert_eq!(COLLECTION_DETAILS_BLOCKS.len(), 2); - assert!(COLLECTION_DETAILS_BLOCKS.contains(&ActiveRadarrBlock::CollectionDetails)); - assert!(COLLECTION_DETAILS_BLOCKS.contains(&ActiveRadarrBlock::ViewMovieOverview)); - } - - #[test] - fn test_search_blocks_contents() { - assert_eq!(SEARCH_BLOCKS.len(), 2); - assert!(SEARCH_BLOCKS.contains(&ActiveRadarrBlock::SearchMovie)); - assert!(SEARCH_BLOCKS.contains(&ActiveRadarrBlock::SearchCollection)); - } - - #[test] - fn test_filter_blocks_contents() { - assert_eq!(FILTER_BLOCKS.len(), 2); - assert!(FILTER_BLOCKS.contains(&ActiveRadarrBlock::FilterMovies)); - assert!(FILTER_BLOCKS.contains(&ActiveRadarrBlock::FilterCollections)); - } - - #[test] - fn test_delete_movie_blocks_contents() { - assert_eq!(DELETE_MOVIE_BLOCKS.len(), 4); - assert!(DELETE_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::DeleteMoviePrompt)); - assert!(DELETE_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::DeleteMovieConfirmPrompt)); - assert!(DELETE_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::DeleteMovieToggleDeleteFile)); - assert!(DELETE_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::DeleteMovieToggleAddListExclusion)); - } - - #[test] - fn test_indexer_settings_blocks_contents() { - assert_eq!(INDEXER_SETTINGS_BLOCKS.len(), 10); - assert!(INDEXER_SETTINGS_BLOCKS.contains(&ActiveRadarrBlock::IndexerSettingsPrompt)); - assert!( - INDEXER_SETTINGS_BLOCKS.contains(&ActiveRadarrBlock::IndexerSettingsAvailabilityDelayInput) - ); - assert!(INDEXER_SETTINGS_BLOCKS.contains(&ActiveRadarrBlock::IndexerSettingsConfirmPrompt)); - assert!(INDEXER_SETTINGS_BLOCKS.contains(&ActiveRadarrBlock::IndexerSettingsMaximumSizeInput)); - assert!(INDEXER_SETTINGS_BLOCKS.contains(&ActiveRadarrBlock::IndexerSettingsMinimumAgeInput)); - assert!(INDEXER_SETTINGS_BLOCKS.contains(&ActiveRadarrBlock::IndexerSettingsRetentionInput)); - assert!( - INDEXER_SETTINGS_BLOCKS.contains(&ActiveRadarrBlock::IndexerSettingsRssSyncIntervalInput) - ); - assert!(INDEXER_SETTINGS_BLOCKS - .contains(&ActiveRadarrBlock::IndexerSettingsToggleAllowHardcodedSubs)); - assert!(INDEXER_SETTINGS_BLOCKS - .contains(&ActiveRadarrBlock::IndexerSettingsTogglePreferIndexerFlags)); - assert!(INDEXER_SETTINGS_BLOCKS - .contains(&ActiveRadarrBlock::IndexerSettingsWhitelistedSubtitleTagsInput)); - } - - #[test] - fn test_system_details_blocks_contents() { - assert_eq!(SYSTEM_DETAILS_BLOCKS.len(), 5); - assert!(SYSTEM_DETAILS_BLOCKS.contains(&ActiveRadarrBlock::SystemLogs)); - assert!(SYSTEM_DETAILS_BLOCKS.contains(&ActiveRadarrBlock::SystemQueuedEvents)); - assert!(SYSTEM_DETAILS_BLOCKS.contains(&ActiveRadarrBlock::SystemTasks)); - assert!(SYSTEM_DETAILS_BLOCKS.contains(&ActiveRadarrBlock::SystemTaskStartConfirmPrompt)); - assert!(SYSTEM_DETAILS_BLOCKS.contains(&ActiveRadarrBlock::SystemUpdates)); - } - - #[test] - fn test_add_movie_selection_blocks_ordering() { - let mut add_movie_block_iter = ADD_MOVIE_SELECTION_BLOCKS.iter(); - - assert_eq!( - add_movie_block_iter.next().unwrap(), - &ActiveRadarrBlock::AddMovieSelectRootFolder - ); - assert_eq!( - add_movie_block_iter.next().unwrap(), - &ActiveRadarrBlock::AddMovieSelectMonitor - ); - assert_eq!( - add_movie_block_iter.next().unwrap(), - &ActiveRadarrBlock::AddMovieSelectMinimumAvailability - ); - assert_eq!( - add_movie_block_iter.next().unwrap(), - &ActiveRadarrBlock::AddMovieSelectQualityProfile - ); - assert_eq!( - add_movie_block_iter.next().unwrap(), - &ActiveRadarrBlock::AddMovieTagsInput - ); - assert_eq!( - add_movie_block_iter.next().unwrap(), - &ActiveRadarrBlock::AddMovieConfirmPrompt - ); - assert_eq!(add_movie_block_iter.next(), None); - } - - #[test] - fn test_edit_movie_selection_blocks_ordering() { - let mut edit_movie_block_iter = EDIT_MOVIE_SELECTION_BLOCKS.iter(); - - assert_eq!( - edit_movie_block_iter.next().unwrap(), - &ActiveRadarrBlock::EditMovieToggleMonitored - ); - assert_eq!( - edit_movie_block_iter.next().unwrap(), - &ActiveRadarrBlock::EditMovieSelectMinimumAvailability - ); - assert_eq!( - edit_movie_block_iter.next().unwrap(), - &ActiveRadarrBlock::EditMovieSelectQualityProfile - ); - assert_eq!( - edit_movie_block_iter.next().unwrap(), - &ActiveRadarrBlock::EditMoviePathInput - ); - assert_eq!( - edit_movie_block_iter.next().unwrap(), - &ActiveRadarrBlock::EditMovieTagsInput - ); - assert_eq!( - edit_movie_block_iter.next().unwrap(), - &ActiveRadarrBlock::EditMovieConfirmPrompt - ); - assert_eq!(edit_movie_block_iter.next(), None); - } - - #[test] - fn test_edit_collection_selection_blocks_ordering() { - let mut edit_collection_block_iter = EDIT_COLLECTION_SELECTION_BLOCKS.iter(); - - assert_eq!( - edit_collection_block_iter.next().unwrap(), - &ActiveRadarrBlock::EditCollectionToggleMonitored - ); - assert_eq!( - edit_collection_block_iter.next().unwrap(), - &ActiveRadarrBlock::EditCollectionSelectMinimumAvailability - ); - assert_eq!( - edit_collection_block_iter.next().unwrap(), - &ActiveRadarrBlock::EditCollectionSelectQualityProfile - ); - assert_eq!( - edit_collection_block_iter.next().unwrap(), - &ActiveRadarrBlock::EditCollectionRootFolderPathInput - ); - assert_eq!( - edit_collection_block_iter.next().unwrap(), - &ActiveRadarrBlock::EditCollectionToggleSearchOnAdd - ); - assert_eq!( - edit_collection_block_iter.next().unwrap(), - &ActiveRadarrBlock::EditCollectionConfirmPrompt - ); - assert_eq!(edit_collection_block_iter.next(), None); - } - - #[test] - fn test_delete_movie_selection_blocks_ordering() { - let mut delete_movie_block_iter = DELETE_MOVIE_SELECTION_BLOCKS.iter(); - - assert_eq!( - delete_movie_block_iter.next().unwrap(), - &ActiveRadarrBlock::DeleteMovieToggleDeleteFile - ); - assert_eq!( - delete_movie_block_iter.next().unwrap(), - &ActiveRadarrBlock::DeleteMovieToggleAddListExclusion - ); - assert_eq!( - delete_movie_block_iter.next().unwrap(), - &ActiveRadarrBlock::DeleteMovieConfirmPrompt - ); - assert_eq!(delete_movie_block_iter.next(), None); - } - - #[test] - fn test_indexer_settings_selection_blocks_ordering() { - let mut indexer_settings_block_iter = INDEXER_SETTINGS_SELECTION_BLOCKS.iter(); - - assert_eq!( - indexer_settings_block_iter.next().unwrap(), - &ActiveRadarrBlock::IndexerSettingsMinimumAgeInput - ); - assert_eq!( - indexer_settings_block_iter.next().unwrap(), - &ActiveRadarrBlock::IndexerSettingsRetentionInput - ); - assert_eq!( - indexer_settings_block_iter.next().unwrap(), - &ActiveRadarrBlock::IndexerSettingsMaximumSizeInput - ); - assert_eq!( - indexer_settings_block_iter.next().unwrap(), - &ActiveRadarrBlock::IndexerSettingsTogglePreferIndexerFlags - ); - assert_eq!( - indexer_settings_block_iter.next().unwrap(), - &ActiveRadarrBlock::IndexerSettingsAvailabilityDelayInput - ); - assert_eq!( - indexer_settings_block_iter.next().unwrap(), - &ActiveRadarrBlock::IndexerSettingsRssSyncIntervalInput - ); - assert_eq!( - indexer_settings_block_iter.next().unwrap(), - &ActiveRadarrBlock::IndexerSettingsWhitelistedSubtitleTagsInput - ); - assert_eq!( - indexer_settings_block_iter.next().unwrap(), - &ActiveRadarrBlock::IndexerSettingsToggleAllowHardcodedSubs - ); - assert_eq!( - indexer_settings_block_iter.next().unwrap(), - &ActiveRadarrBlock::IndexerSettingsConfirmPrompt - ); - assert_eq!(indexer_settings_block_iter.next(), None); - } - } - mod radarr_tests { use pretty_assertions::assert_eq; use tokio::sync::mpsc; diff --git a/src/handlers/radarr_handlers/collections/collection_details_handler.rs b/src/handlers/radarr_handlers/collections/collection_details_handler.rs index c882649..ced5ba0 100644 --- a/src/handlers/radarr_handlers/collections/collection_details_handler.rs +++ b/src/handlers/radarr_handlers/collections/collection_details_handler.rs @@ -1,12 +1,9 @@ use crate::app::key_binding::DEFAULT_KEYBINDINGS; -use crate::app::radarr::{ - ActiveRadarrBlock, ADD_MOVIE_SELECTION_BLOCKS, COLLECTION_DETAILS_BLOCKS, - EDIT_COLLECTION_SELECTION_BLOCKS, -}; use crate::app::App; use crate::event::Key; use crate::handlers::KeyEventHandler; use crate::models::{BlockSelectionState, Scrollable}; +use crate::models::servarr_data::radarr_data::{ActiveRadarrBlock, ADD_MOVIE_SELECTION_BLOCKS, COLLECTION_DETAILS_BLOCKS, EDIT_COLLECTION_SELECTION_BLOCKS}; #[cfg(test)] #[path = "collection_details_handler_tests.rs"] diff --git a/src/handlers/radarr_handlers/collections/collection_details_handler_tests.rs b/src/handlers/radarr_handlers/collections/collection_details_handler_tests.rs index 1fc0833..103b404 100644 --- a/src/handlers/radarr_handlers/collections/collection_details_handler_tests.rs +++ b/src/handlers/radarr_handlers/collections/collection_details_handler_tests.rs @@ -4,12 +4,12 @@ mod tests { use strum::IntoEnumIterator; use crate::app::key_binding::DEFAULT_KEYBINDINGS; - use crate::app::radarr::{ActiveRadarrBlock, COLLECTION_DETAILS_BLOCKS}; use crate::app::App; use crate::event::Key; use crate::handlers::radarr_handlers::collections::collection_details_handler::CollectionDetailsHandler; use crate::handlers::KeyEventHandler; use crate::models::radarr_models::CollectionMovie; + use crate::models::servarr_data::radarr_data::{ActiveRadarrBlock, COLLECTION_DETAILS_BLOCKS}; use crate::models::HorizontallyScrollableText; mod test_handle_scroll_up_and_down { @@ -52,8 +52,8 @@ mod tests { use bimap::BiMap; use pretty_assertions::assert_eq; - use crate::app::radarr::ADD_MOVIE_SELECTION_BLOCKS; use crate::models::radarr_models::Movie; + use crate::models::servarr_data::radarr_data::ADD_MOVIE_SELECTION_BLOCKS; use crate::models::BlockSelectionState; use super::*; @@ -204,10 +204,9 @@ mod tests { use serde_json::Number; use strum::IntoEnumIterator; - use crate::app::radarr::radarr_test_utils::utils::create_test_radarr_data; - use crate::app::radarr::RadarrData; - use crate::app::radarr::EDIT_COLLECTION_SELECTION_BLOCKS; use crate::models::radarr_models::{Collection, MinimumAvailability}; + use crate::models::servarr_data::radarr_data::radarr_test_utils::utils::create_test_radarr_data; + use crate::models::servarr_data::radarr_data::{RadarrData, EDIT_COLLECTION_SELECTION_BLOCKS}; use crate::models::HorizontallyScrollableText; use crate::models::StatefulTable; use crate::test_edit_collection_key; diff --git a/src/handlers/radarr_handlers/collections/collections_handler_tests.rs b/src/handlers/radarr_handlers/collections/collections_handler_tests.rs index 65c7cb5..7753e21 100644 --- a/src/handlers/radarr_handlers/collections/collections_handler_tests.rs +++ b/src/handlers/radarr_handlers/collections/collections_handler_tests.rs @@ -5,14 +5,14 @@ mod tests { use strum::IntoEnumIterator; use crate::app::key_binding::DEFAULT_KEYBINDINGS; - use crate::app::radarr::{ - ActiveRadarrBlock, COLLECTIONS_BLOCKS, COLLECTION_DETAILS_BLOCKS, EDIT_COLLECTION_BLOCKS, - }; use crate::app::App; use crate::event::Key; use crate::handlers::radarr_handlers::collections::CollectionsHandler; use crate::handlers::KeyEventHandler; use crate::models::radarr_models::Collection; + use crate::models::servarr_data::radarr_data::{ + ActiveRadarrBlock, COLLECTIONS_BLOCKS, COLLECTION_DETAILS_BLOCKS, EDIT_COLLECTION_BLOCKS, + }; use crate::models::HorizontallyScrollableText; use crate::{extended_stateful_iterable_vec, test_handler_delegation}; @@ -375,7 +375,7 @@ mod tests { mod test_handle_esc { use pretty_assertions::assert_eq; - use crate::app::radarr::radarr_test_utils::utils::create_test_radarr_data; + use crate::models::servarr_data::radarr_data::radarr_test_utils::utils::create_test_radarr_data; use crate::{assert_filter_reset, assert_search_reset}; use super::*; @@ -478,10 +478,9 @@ mod tests { use serde_json::Number; use strum::IntoEnumIterator; - use crate::app::radarr::radarr_test_utils::utils::create_test_radarr_data; - use crate::app::radarr::RadarrData; - use crate::app::radarr::EDIT_COLLECTION_SELECTION_BLOCKS; use crate::models::radarr_models::MinimumAvailability; + use crate::models::servarr_data::radarr_data::radarr_test_utils::utils::create_test_radarr_data; + use crate::models::servarr_data::radarr_data::{RadarrData, EDIT_COLLECTION_SELECTION_BLOCKS}; use crate::models::HorizontallyScrollableText; use crate::models::StatefulTable; use crate::{assert_refresh_key, test_edit_collection_key}; diff --git a/src/handlers/radarr_handlers/collections/edit_collection_handler.rs b/src/handlers/radarr_handlers/collections/edit_collection_handler.rs index 9813268..25c46b5 100644 --- a/src/handlers/radarr_handlers/collections/edit_collection_handler.rs +++ b/src/handlers/radarr_handlers/collections/edit_collection_handler.rs @@ -1,8 +1,8 @@ use crate::app::key_binding::DEFAULT_KEYBINDINGS; -use crate::app::radarr::{ActiveRadarrBlock, EDIT_COLLECTION_BLOCKS}; use crate::app::App; use crate::event::Key; use crate::handlers::{handle_prompt_toggle, KeyEventHandler}; +use crate::models::servarr_data::radarr_data::{ActiveRadarrBlock, EDIT_COLLECTION_BLOCKS}; use crate::models::Scrollable; use crate::network::radarr_network::RadarrEvent; use crate::{handle_text_box_keys, handle_text_box_left_right_keys}; diff --git a/src/handlers/radarr_handlers/collections/edit_collection_handler_tests.rs b/src/handlers/radarr_handlers/collections/edit_collection_handler_tests.rs index aa3031f..92f5916 100644 --- a/src/handlers/radarr_handlers/collections/edit_collection_handler_tests.rs +++ b/src/handlers/radarr_handlers/collections/edit_collection_handler_tests.rs @@ -4,19 +4,19 @@ mod tests { use strum::IntoEnumIterator; use crate::app::key_binding::DEFAULT_KEYBINDINGS; - use crate::app::radarr::{ActiveRadarrBlock, EDIT_COLLECTION_BLOCKS}; use crate::app::App; use crate::event::Key; use crate::handlers::radarr_handlers::collections::edit_collection_handler::EditCollectionHandler; use crate::handlers::KeyEventHandler; use crate::models::radarr_models::MinimumAvailability; + use crate::models::servarr_data::radarr_data::{ActiveRadarrBlock, EDIT_COLLECTION_BLOCKS}; mod test_handle_scroll_up_and_down { use pretty_assertions::assert_eq; use rstest::rstest; use strum::IntoEnumIterator; - use crate::app::radarr::EDIT_COLLECTION_SELECTION_BLOCKS; + use crate::models::servarr_data::radarr_data::EDIT_COLLECTION_SELECTION_BLOCKS; use crate::models::BlockSelectionState; use crate::{test_enum_scroll, test_iterable_scroll}; @@ -148,7 +148,7 @@ mod tests { use pretty_assertions::assert_eq; use rstest::rstest; - use crate::app::radarr::EDIT_COLLECTION_SELECTION_BLOCKS; + use crate::models::servarr_data::radarr_data::EDIT_COLLECTION_SELECTION_BLOCKS; use crate::models::{BlockSelectionState, Route}; use crate::network::radarr_network::RadarrEvent; @@ -389,7 +389,7 @@ mod tests { use pretty_assertions::assert_eq; use rstest::rstest; - use crate::app::radarr::radarr_test_utils::utils::create_test_radarr_data; + use crate::models::servarr_data::radarr_data::radarr_test_utils::utils::create_test_radarr_data; use crate::{assert_edit_media_reset, assert_preferences_selections_reset}; use super::*; diff --git a/src/handlers/radarr_handlers/collections/mod.rs b/src/handlers/radarr_handlers/collections/mod.rs index b6e2397..bac6818 100644 --- a/src/handlers/radarr_handlers/collections/mod.rs +++ b/src/handlers/radarr_handlers/collections/mod.rs @@ -1,5 +1,4 @@ use crate::app::key_binding::DEFAULT_KEYBINDINGS; -use crate::app::radarr::{ActiveRadarrBlock, COLLECTIONS_BLOCKS, EDIT_COLLECTION_SELECTION_BLOCKS}; use crate::app::App; use crate::event::Key; use crate::handlers::radarr_handlers::collections::collection_details_handler::CollectionDetailsHandler; @@ -11,6 +10,7 @@ use crate::handlers::{handle_clear_errors, handle_prompt_toggle, KeyEventHandler use crate::models::{BlockSelectionState, Scrollable}; use crate::network::radarr_network::RadarrEvent; use crate::{handle_text_box_keys, handle_text_box_left_right_keys}; +use crate::models::servarr_data::radarr_data::{ActiveRadarrBlock, COLLECTIONS_BLOCKS, EDIT_COLLECTION_SELECTION_BLOCKS}; mod collection_details_handler; mod edit_collection_handler; diff --git a/src/handlers/radarr_handlers/downloads/downloads_handler_tests.rs b/src/handlers/radarr_handlers/downloads/downloads_handler_tests.rs index 2bbe5ab..744d12f 100644 --- a/src/handlers/radarr_handlers/downloads/downloads_handler_tests.rs +++ b/src/handlers/radarr_handlers/downloads/downloads_handler_tests.rs @@ -4,11 +4,11 @@ mod tests { use strum::IntoEnumIterator; use crate::app::key_binding::DEFAULT_KEYBINDINGS; - use crate::app::radarr::{ActiveRadarrBlock, DOWNLOADS_BLOCKS}; use crate::app::App; use crate::event::Key; use crate::handlers::radarr_handlers::downloads::DownloadsHandler; use crate::handlers::KeyEventHandler; + use crate::models::servarr_data::radarr_data::{ActiveRadarrBlock, DOWNLOADS_BLOCKS}; mod test_handle_scroll_up_and_down { use rstest::rstest; diff --git a/src/handlers/radarr_handlers/downloads/mod.rs b/src/handlers/radarr_handlers/downloads/mod.rs index 65ac49c..5530fa7 100644 --- a/src/handlers/radarr_handlers/downloads/mod.rs +++ b/src/handlers/radarr_handlers/downloads/mod.rs @@ -1,9 +1,9 @@ use crate::app::key_binding::DEFAULT_KEYBINDINGS; -use crate::app::radarr::{ActiveRadarrBlock, DOWNLOADS_BLOCKS}; use crate::app::App; use crate::event::Key; use crate::handlers::radarr_handlers::handle_change_tab_left_right_keys; use crate::handlers::{handle_clear_errors, handle_prompt_toggle, KeyEventHandler}; +use crate::models::servarr_data::radarr_data::{ActiveRadarrBlock, DOWNLOADS_BLOCKS}; use crate::models::Scrollable; use crate::network::radarr_network::RadarrEvent; diff --git a/src/handlers/radarr_handlers/indexers/edit_indexer_settings_handler.rs b/src/handlers/radarr_handlers/indexers/edit_indexer_settings_handler.rs index 11aedcf..5637dc3 100644 --- a/src/handlers/radarr_handlers/indexers/edit_indexer_settings_handler.rs +++ b/src/handlers/radarr_handlers/indexers/edit_indexer_settings_handler.rs @@ -1,7 +1,7 @@ -use crate::app::radarr::{ActiveRadarrBlock, INDEXER_SETTINGS_BLOCKS}; use crate::app::App; use crate::event::Key; use crate::handlers::KeyEventHandler; +use crate::models::servarr_data::radarr_data::{ActiveRadarrBlock, INDEXER_SETTINGS_BLOCKS}; #[cfg(test)] #[path = "./edit_indexer_settings_handler_tests.rs"] diff --git a/src/handlers/radarr_handlers/indexers/edit_indexer_settings_handler_tests.rs b/src/handlers/radarr_handlers/indexers/edit_indexer_settings_handler_tests.rs index 8af2c9f..87af7de 100644 --- a/src/handlers/radarr_handlers/indexers/edit_indexer_settings_handler_tests.rs +++ b/src/handlers/radarr_handlers/indexers/edit_indexer_settings_handler_tests.rs @@ -3,17 +3,17 @@ mod tests { use strum::IntoEnumIterator; use crate::app::key_binding::DEFAULT_KEYBINDINGS; - use crate::app::radarr::{ActiveRadarrBlock, INDEXER_SETTINGS_BLOCKS}; use crate::app::App; use crate::event::Key; use crate::handlers::radarr_handlers::indexers::edit_indexer_settings_handler::IndexerSettingsHandler; use crate::handlers::KeyEventHandler; + use crate::models::servarr_data::radarr_data::{ActiveRadarrBlock, INDEXER_SETTINGS_BLOCKS}; mod test_handle_scroll_up_and_down { use pretty_assertions::assert_eq; use rstest::rstest; - use crate::app::radarr::INDEXER_SETTINGS_SELECTION_BLOCKS; + use crate::models::servarr_data::radarr_data::INDEXER_SETTINGS_SELECTION_BLOCKS; use crate::models::BlockSelectionState; use super::*; @@ -56,7 +56,7 @@ mod tests { mod test_handle_esc { use pretty_assertions::assert_eq; - use crate::app::radarr::radarr_test_utils::utils::create_test_radarr_data; + use crate::models::servarr_data::radarr_data::radarr_test_utils::utils::create_test_radarr_data; use super::*; diff --git a/src/handlers/radarr_handlers/indexers/indexers_handler_tests.rs b/src/handlers/radarr_handlers/indexers/indexers_handler_tests.rs index 75c13d1..fd21060 100644 --- a/src/handlers/radarr_handlers/indexers/indexers_handler_tests.rs +++ b/src/handlers/radarr_handlers/indexers/indexers_handler_tests.rs @@ -5,11 +5,13 @@ mod tests { use strum::IntoEnumIterator; use crate::app::key_binding::DEFAULT_KEYBINDINGS; - use crate::app::radarr::{ActiveRadarrBlock, INDEXERS_BLOCKS, INDEXER_SETTINGS_BLOCKS}; use crate::app::App; use crate::event::Key; use crate::handlers::radarr_handlers::indexers::IndexersHandler; use crate::handlers::KeyEventHandler; + use crate::models::servarr_data::radarr_data::{ + ActiveRadarrBlock, INDEXERS_BLOCKS, INDEXER_SETTINGS_BLOCKS, + }; use crate::test_handler_delegation; mod test_handle_scroll_up_and_down { @@ -251,8 +253,8 @@ mod tests { mod test_handle_key_char { use pretty_assertions::assert_eq; - use crate::app::radarr::INDEXER_SETTINGS_SELECTION_BLOCKS; use crate::assert_refresh_key; + use crate::models::servarr_data::radarr_data::INDEXER_SETTINGS_SELECTION_BLOCKS; use super::*; diff --git a/src/handlers/radarr_handlers/indexers/mod.rs b/src/handlers/radarr_handlers/indexers/mod.rs index 5590196..e6577d5 100644 --- a/src/handlers/radarr_handlers/indexers/mod.rs +++ b/src/handlers/radarr_handlers/indexers/mod.rs @@ -1,10 +1,12 @@ use crate::app::key_binding::DEFAULT_KEYBINDINGS; -use crate::app::radarr::{ActiveRadarrBlock, INDEXERS_BLOCKS, INDEXER_SETTINGS_SELECTION_BLOCKS}; use crate::app::App; use crate::event::Key; use crate::handlers::radarr_handlers::handle_change_tab_left_right_keys; use crate::handlers::radarr_handlers::indexers::edit_indexer_settings_handler::IndexerSettingsHandler; use crate::handlers::{handle_clear_errors, handle_prompt_toggle, KeyEventHandler}; +use crate::models::servarr_data::radarr_data::{ + ActiveRadarrBlock, INDEXERS_BLOCKS, INDEXER_SETTINGS_SELECTION_BLOCKS, +}; use crate::models::{BlockSelectionState, Scrollable}; use crate::network::radarr_network::RadarrEvent; diff --git a/src/handlers/radarr_handlers/library/add_movie_handler.rs b/src/handlers/radarr_handlers/library/add_movie_handler.rs index e74a30c..2e47039 100644 --- a/src/handlers/radarr_handlers/library/add_movie_handler.rs +++ b/src/handlers/radarr_handlers/library/add_movie_handler.rs @@ -1,6 +1,8 @@ use crate::app::key_binding::DEFAULT_KEYBINDINGS; -use crate::app::radarr::{ActiveRadarrBlock, ADD_MOVIE_BLOCKS, ADD_MOVIE_SELECTION_BLOCKS}; use crate::handlers::{handle_prompt_toggle, KeyEventHandler}; +use crate::models::servarr_data::radarr_data::{ + ActiveRadarrBlock, ADD_MOVIE_BLOCKS, ADD_MOVIE_SELECTION_BLOCKS, +}; use crate::models::{BlockSelectionState, Scrollable, StatefulTable}; use crate::network::radarr_network::RadarrEvent; use crate::{handle_text_box_keys, handle_text_box_left_right_keys, App, Key}; diff --git a/src/handlers/radarr_handlers/library/add_movie_handler_tests.rs b/src/handlers/radarr_handlers/library/add_movie_handler_tests.rs index 7ef27d6..f9d26fa 100644 --- a/src/handlers/radarr_handlers/library/add_movie_handler_tests.rs +++ b/src/handlers/radarr_handlers/library/add_movie_handler_tests.rs @@ -4,7 +4,6 @@ mod tests { use strum::IntoEnumIterator; use crate::app::key_binding::DEFAULT_KEYBINDINGS; - use crate::app::radarr::{ActiveRadarrBlock, ADD_MOVIE_BLOCKS}; use crate::app::App; use crate::event::Key; use crate::handlers::radarr_handlers::library::add_movie_handler::AddMovieHandler; @@ -12,6 +11,7 @@ mod tests { use crate::models::radarr_models::{ AddMovieSearchResult, MinimumAvailability, Monitor, RootFolder, }; + use crate::models::servarr_data::radarr_data::{ActiveRadarrBlock, ADD_MOVIE_BLOCKS}; use crate::models::HorizontallyScrollableText; mod test_handle_scroll_up_and_down { @@ -19,7 +19,7 @@ mod tests { use rstest::rstest; use strum::IntoEnumIterator; - use crate::app::radarr::ADD_MOVIE_SELECTION_BLOCKS; + use crate::models::servarr_data::radarr_data::ADD_MOVIE_SELECTION_BLOCKS; use crate::models::BlockSelectionState; use crate::{simple_stateful_iterable_vec, test_enum_scroll, test_iterable_scroll}; @@ -214,8 +214,8 @@ mod tests { use pretty_assertions::{assert_eq, assert_str_eq}; use rstest::rstest; - use crate::app::radarr::ADD_MOVIE_SELECTION_BLOCKS; use crate::models::radarr_models::Movie; + use crate::models::servarr_data::radarr_data::ADD_MOVIE_SELECTION_BLOCKS; use crate::models::BlockSelectionState; use crate::network::radarr_network::RadarrEvent; @@ -464,7 +464,7 @@ mod tests { use pretty_assertions::assert_eq; use rstest::rstest; - use crate::app::radarr::radarr_test_utils::utils::create_test_radarr_data; + use crate::models::servarr_data::radarr_data::radarr_test_utils::utils::create_test_radarr_data; use crate::{ assert_edit_media_reset, assert_preferences_selections_reset, assert_search_reset, simple_stateful_iterable_vec, diff --git a/src/handlers/radarr_handlers/library/delete_movie_handler.rs b/src/handlers/radarr_handlers/library/delete_movie_handler.rs index 33d1de5..6f7d422 100644 --- a/src/handlers/radarr_handlers/library/delete_movie_handler.rs +++ b/src/handlers/radarr_handlers/library/delete_movie_handler.rs @@ -1,7 +1,7 @@ -use crate::app::radarr::{ActiveRadarrBlock, DELETE_MOVIE_BLOCKS}; use crate::app::App; use crate::event::Key; use crate::handlers::{handle_prompt_toggle, KeyEventHandler}; +use crate::models::servarr_data::radarr_data::{ActiveRadarrBlock, DELETE_MOVIE_BLOCKS}; use crate::network::radarr_network::RadarrEvent; #[cfg(test)] diff --git a/src/handlers/radarr_handlers/library/delete_movie_handler_tests.rs b/src/handlers/radarr_handlers/library/delete_movie_handler_tests.rs index 16c2988..91bb8d8 100644 --- a/src/handlers/radarr_handlers/library/delete_movie_handler_tests.rs +++ b/src/handlers/radarr_handlers/library/delete_movie_handler_tests.rs @@ -3,17 +3,17 @@ mod tests { use strum::IntoEnumIterator; use crate::app::key_binding::DEFAULT_KEYBINDINGS; - use crate::app::radarr::{ActiveRadarrBlock, DELETE_MOVIE_BLOCKS}; use crate::app::App; use crate::event::Key; use crate::handlers::radarr_handlers::library::delete_movie_handler::DeleteMovieHandler; use crate::handlers::KeyEventHandler; + use crate::models::servarr_data::radarr_data::{ActiveRadarrBlock, DELETE_MOVIE_BLOCKS}; mod test_handle_scroll_up_and_down { use pretty_assertions::assert_eq; use rstest::rstest; - use crate::app::radarr::DELETE_MOVIE_SELECTION_BLOCKS; + use crate::models::servarr_data::radarr_data::DELETE_MOVIE_SELECTION_BLOCKS; use crate::models::BlockSelectionState; use super::*; @@ -66,7 +66,7 @@ mod tests { mod test_handle_submit { use pretty_assertions::assert_eq; - use crate::app::radarr::DELETE_MOVIE_SELECTION_BLOCKS; + use crate::models::servarr_data::radarr_data::DELETE_MOVIE_SELECTION_BLOCKS; use crate::models::BlockSelectionState; use crate::network::radarr_network::RadarrEvent; diff --git a/src/handlers/radarr_handlers/library/edit_movie_handler.rs b/src/handlers/radarr_handlers/library/edit_movie_handler.rs index 40eba00..25e2e6e 100644 --- a/src/handlers/radarr_handlers/library/edit_movie_handler.rs +++ b/src/handlers/radarr_handlers/library/edit_movie_handler.rs @@ -1,8 +1,8 @@ use crate::app::key_binding::DEFAULT_KEYBINDINGS; -use crate::app::radarr::{ActiveRadarrBlock, EDIT_MOVIE_BLOCKS}; use crate::app::App; use crate::event::Key; use crate::handlers::{handle_prompt_toggle, KeyEventHandler}; +use crate::models::servarr_data::radarr_data::{ActiveRadarrBlock, EDIT_MOVIE_BLOCKS}; use crate::models::Scrollable; use crate::network::radarr_network::RadarrEvent; use crate::{handle_text_box_keys, handle_text_box_left_right_keys}; diff --git a/src/handlers/radarr_handlers/library/edit_movie_handler_tests.rs b/src/handlers/radarr_handlers/library/edit_movie_handler_tests.rs index 3d30337..5151c43 100644 --- a/src/handlers/radarr_handlers/library/edit_movie_handler_tests.rs +++ b/src/handlers/radarr_handlers/library/edit_movie_handler_tests.rs @@ -4,19 +4,19 @@ mod tests { use strum::IntoEnumIterator; use crate::app::key_binding::DEFAULT_KEYBINDINGS; - use crate::app::radarr::{ActiveRadarrBlock, EDIT_MOVIE_BLOCKS}; use crate::app::App; use crate::event::Key; use crate::handlers::radarr_handlers::library::edit_movie_handler::EditMovieHandler; use crate::handlers::KeyEventHandler; use crate::models::radarr_models::MinimumAvailability; + use crate::models::servarr_data::radarr_data::{ActiveRadarrBlock, EDIT_MOVIE_BLOCKS}; mod test_handle_scroll_up_and_down { use pretty_assertions::assert_eq; use rstest::rstest; use strum::IntoEnumIterator; - use crate::app::radarr::EDIT_MOVIE_SELECTION_BLOCKS; + use crate::models::servarr_data::radarr_data::EDIT_MOVIE_SELECTION_BLOCKS; use crate::models::BlockSelectionState; use crate::{test_enum_scroll, test_iterable_scroll}; @@ -147,7 +147,9 @@ mod tests { use pretty_assertions::assert_eq; use rstest::rstest; - use crate::app::radarr::{EDIT_COLLECTION_SELECTION_BLOCKS, EDIT_MOVIE_SELECTION_BLOCKS}; + use crate::models::servarr_data::radarr_data::{ + EDIT_COLLECTION_SELECTION_BLOCKS, EDIT_MOVIE_SELECTION_BLOCKS, + }; use crate::models::{BlockSelectionState, Route}; use crate::network::radarr_network::RadarrEvent; @@ -369,7 +371,7 @@ mod tests { use pretty_assertions::assert_eq; use rstest::rstest; - use crate::app::radarr::radarr_test_utils::utils::create_test_radarr_data; + use crate::models::servarr_data::radarr_data::radarr_test_utils::utils::create_test_radarr_data; use crate::{assert_edit_media_reset, assert_preferences_selections_reset}; use super::*; diff --git a/src/handlers/radarr_handlers/library/library_handler_tests.rs b/src/handlers/radarr_handlers/library/library_handler_tests.rs index 810c482..d5d1ba6 100644 --- a/src/handlers/radarr_handlers/library/library_handler_tests.rs +++ b/src/handlers/radarr_handlers/library/library_handler_tests.rs @@ -5,15 +5,15 @@ mod tests { use strum::IntoEnumIterator; use crate::app::key_binding::DEFAULT_KEYBINDINGS; - use crate::app::radarr::{ - ActiveRadarrBlock, ADD_MOVIE_BLOCKS, DELETE_MOVIE_BLOCKS, EDIT_MOVIE_BLOCKS, LIBRARY_BLOCKS, - MOVIE_DETAILS_BLOCKS, - }; use crate::app::App; use crate::event::Key; use crate::handlers::radarr_handlers::library::LibraryHandler; use crate::handlers::KeyEventHandler; use crate::models::radarr_models::Movie; + use crate::models::servarr_data::radarr_data::{ + ActiveRadarrBlock, ADD_MOVIE_BLOCKS, DELETE_MOVIE_BLOCKS, EDIT_MOVIE_BLOCKS, LIBRARY_BLOCKS, + MOVIE_DETAILS_BLOCKS, + }; use crate::models::HorizontallyScrollableText; use crate::test_handler_delegation; @@ -90,8 +90,8 @@ mod tests { mod test_handle_delete { use pretty_assertions::assert_eq; - use crate::app::radarr::DELETE_MOVIE_SELECTION_BLOCKS; use crate::assert_delete_prompt; + use crate::models::servarr_data::radarr_data::DELETE_MOVIE_SELECTION_BLOCKS; use super::*; @@ -365,7 +365,7 @@ mod tests { mod test_handle_esc { use pretty_assertions::assert_eq; - use crate::app::radarr::radarr_test_utils::utils::create_test_radarr_data; + use crate::models::servarr_data::radarr_data::radarr_test_utils::utils::create_test_radarr_data; use crate::{assert_filter_reset, assert_search_reset}; use super::*; @@ -444,10 +444,9 @@ mod tests { use serde_json::Number; use strum::IntoEnumIterator; - use crate::app::radarr::radarr_test_utils::utils::create_test_radarr_data; - use crate::app::radarr::RadarrData; - use crate::app::radarr::EDIT_MOVIE_SELECTION_BLOCKS; use crate::models::radarr_models::MinimumAvailability; + use crate::models::servarr_data::radarr_data::radarr_test_utils::utils::create_test_radarr_data; + use crate::models::servarr_data::radarr_data::{RadarrData, EDIT_MOVIE_SELECTION_BLOCKS}; use crate::models::HorizontallyScrollableText; use crate::models::StatefulTable; use crate::{assert_refresh_key, test_edit_movie_key}; diff --git a/src/handlers/radarr_handlers/library/mod.rs b/src/handlers/radarr_handlers/library/mod.rs index f383cf0..ee196e7 100644 --- a/src/handlers/radarr_handlers/library/mod.rs +++ b/src/handlers/radarr_handlers/library/mod.rs @@ -1,7 +1,4 @@ use crate::app::key_binding::DEFAULT_KEYBINDINGS; -use crate::app::radarr::{ - ActiveRadarrBlock, DELETE_MOVIE_SELECTION_BLOCKS, EDIT_MOVIE_SELECTION_BLOCKS, LIBRARY_BLOCKS, -}; use crate::app::App; use crate::event::Key; use crate::handlers::radarr_handlers::library::add_movie_handler::AddMovieHandler; @@ -12,6 +9,9 @@ use crate::handlers::radarr_handlers::{ filter_table, handle_change_tab_left_right_keys, search_table, }; use crate::handlers::{handle_clear_errors, handle_prompt_toggle, KeyEventHandler}; +use crate::models::servarr_data::radarr_data::{ + ActiveRadarrBlock, DELETE_MOVIE_SELECTION_BLOCKS, EDIT_MOVIE_SELECTION_BLOCKS, LIBRARY_BLOCKS, +}; use crate::models::{BlockSelectionState, Scrollable}; use crate::network::radarr_network::RadarrEvent; use crate::{handle_text_box_keys, handle_text_box_left_right_keys}; diff --git a/src/handlers/radarr_handlers/library/movie_details_handler.rs b/src/handlers/radarr_handlers/library/movie_details_handler.rs index 2358da6..d5a4742 100644 --- a/src/handlers/radarr_handlers/library/movie_details_handler.rs +++ b/src/handlers/radarr_handlers/library/movie_details_handler.rs @@ -4,11 +4,13 @@ use serde_json::Number; use strum::IntoEnumIterator; use crate::app::key_binding::DEFAULT_KEYBINDINGS; -use crate::app::radarr::{ActiveRadarrBlock, EDIT_MOVIE_SELECTION_BLOCKS, MOVIE_DETAILS_BLOCKS}; use crate::app::App; use crate::event::Key; use crate::handlers::{handle_prompt_toggle, KeyEventHandler}; use crate::models::radarr_models::{Language, Release, ReleaseField}; +use crate::models::servarr_data::radarr_data::{ + ActiveRadarrBlock, EDIT_MOVIE_SELECTION_BLOCKS, MOVIE_DETAILS_BLOCKS, +}; use crate::models::{BlockSelectionState, Scrollable}; use crate::network::radarr_network::RadarrEvent; diff --git a/src/handlers/radarr_handlers/library/movie_details_handler_tests.rs b/src/handlers/radarr_handlers/library/movie_details_handler_tests.rs index a4d539d..d317084 100644 --- a/src/handlers/radarr_handlers/library/movie_details_handler_tests.rs +++ b/src/handlers/radarr_handlers/library/movie_details_handler_tests.rs @@ -6,7 +6,6 @@ mod tests { use strum::IntoEnumIterator; use crate::app::key_binding::DEFAULT_KEYBINDINGS; - use crate::app::radarr::{ActiveRadarrBlock, MOVIE_DETAILS_BLOCKS}; use crate::app::App; use crate::event::Key; use crate::handlers::radarr_handlers::library::movie_details_handler::{ @@ -16,6 +15,7 @@ mod tests { use crate::models::radarr_models::{ Credit, Language, MovieHistoryItem, Quality, QualityWrapper, Release, ReleaseField, }; + use crate::models::servarr_data::radarr_data::{ActiveRadarrBlock, MOVIE_DETAILS_BLOCKS}; use crate::models::{HorizontallyScrollableText, ScrollableText}; mod test_handle_scroll_up_and_down { @@ -354,8 +354,8 @@ mod tests { use pretty_assertions::assert_eq; use rstest::rstest; - use crate::app::radarr::radarr_test_utils::utils::create_test_radarr_data; use crate::assert_movie_info_tabs_reset; + use crate::models::servarr_data::radarr_data::radarr_test_utils::utils::create_test_radarr_data; use super::*; @@ -412,10 +412,9 @@ mod tests { use rstest::rstest; use strum::IntoEnumIterator; - use crate::app::radarr::radarr_test_utils::utils::create_test_radarr_data; - use crate::app::radarr::RadarrData; - use crate::app::radarr::EDIT_MOVIE_SELECTION_BLOCKS; use crate::models::radarr_models::{MinimumAvailability, Movie}; + use crate::models::servarr_data::radarr_data::radarr_test_utils::utils::create_test_radarr_data; + use crate::models::servarr_data::radarr_data::{RadarrData, EDIT_MOVIE_SELECTION_BLOCKS}; use crate::models::HorizontallyScrollableText; use crate::models::StatefulTable; use crate::test_edit_movie_key; diff --git a/src/handlers/radarr_handlers/mod.rs b/src/handlers/radarr_handlers/mod.rs index 328eb34..c07405d 100644 --- a/src/handlers/radarr_handlers/mod.rs +++ b/src/handlers/radarr_handlers/mod.rs @@ -1,5 +1,4 @@ use crate::app::key_binding::DEFAULT_KEYBINDINGS; -use crate::app::radarr::ActiveRadarrBlock; use crate::handlers::radarr_handlers::collections::CollectionsHandler; use crate::handlers::radarr_handlers::downloads::DownloadsHandler; use crate::handlers::radarr_handlers::indexers::IndexersHandler; @@ -7,6 +6,7 @@ use crate::handlers::radarr_handlers::library::LibraryHandler; use crate::handlers::radarr_handlers::root_folders::RootFoldersHandler; use crate::handlers::radarr_handlers::system::SystemHandler; use crate::handlers::KeyEventHandler; +use crate::models::servarr_data::radarr_data::ActiveRadarrBlock; use crate::utils::strip_non_search_characters; use crate::{App, Key}; diff --git a/src/handlers/radarr_handlers/radarr_handler_tests.rs b/src/handlers/radarr_handlers/radarr_handler_tests.rs index 2a8eebe..d684982 100644 --- a/src/handlers/radarr_handlers/radarr_handler_tests.rs +++ b/src/handlers/radarr_handlers/radarr_handler_tests.rs @@ -5,13 +5,13 @@ mod tests { use strum::IntoEnumIterator; use crate::app::key_binding::DEFAULT_KEYBINDINGS; - use crate::app::radarr::ActiveRadarrBlock; use crate::app::App; use crate::handlers::radarr_handlers::{ filter_table, handle_change_tab_left_right_keys, search_table, RadarrHandler, }; use crate::handlers::KeyEventHandler; use crate::models::radarr_models::Movie; + use crate::models::servarr_data::radarr_data::ActiveRadarrBlock; use crate::models::HorizontallyScrollableText; use crate::{extended_stateful_iterable_vec, test_handler_delegation}; diff --git a/src/handlers/radarr_handlers/root_folders/mod.rs b/src/handlers/radarr_handlers/root_folders/mod.rs index dd6fe69..0a65b0b 100644 --- a/src/handlers/radarr_handlers/root_folders/mod.rs +++ b/src/handlers/radarr_handlers/root_folders/mod.rs @@ -1,9 +1,9 @@ use crate::app::key_binding::DEFAULT_KEYBINDINGS; -use crate::app::radarr::{ActiveRadarrBlock, ROOT_FOLDERS_BLOCKS}; use crate::app::App; use crate::event::Key; use crate::handlers::radarr_handlers::handle_change_tab_left_right_keys; use crate::handlers::{handle_clear_errors, handle_prompt_toggle, KeyEventHandler}; +use crate::models::servarr_data::radarr_data::{ActiveRadarrBlock, ROOT_FOLDERS_BLOCKS}; use crate::models::{HorizontallyScrollableText, Scrollable}; use crate::network::radarr_network::RadarrEvent; use crate::{handle_text_box_keys, handle_text_box_left_right_keys}; diff --git a/src/handlers/radarr_handlers/root_folders/root_folders_handler_tests.rs b/src/handlers/radarr_handlers/root_folders/root_folders_handler_tests.rs index cf4a393..e5efce9 100644 --- a/src/handlers/radarr_handlers/root_folders/root_folders_handler_tests.rs +++ b/src/handlers/radarr_handlers/root_folders/root_folders_handler_tests.rs @@ -4,11 +4,11 @@ mod tests { use strum::IntoEnumIterator; use crate::app::key_binding::DEFAULT_KEYBINDINGS; - use crate::app::radarr::{ActiveRadarrBlock, ROOT_FOLDERS_BLOCKS}; use crate::app::App; use crate::event::Key; use crate::handlers::radarr_handlers::root_folders::RootFoldersHandler; use crate::handlers::KeyEventHandler; + use crate::models::servarr_data::radarr_data::{ActiveRadarrBlock, ROOT_FOLDERS_BLOCKS}; use crate::models::HorizontallyScrollableText; mod test_handle_scroll_up_and_down { diff --git a/src/handlers/radarr_handlers/system/mod.rs b/src/handlers/radarr_handlers/system/mod.rs index dfb0d0e..7b92d48 100644 --- a/src/handlers/radarr_handlers/system/mod.rs +++ b/src/handlers/radarr_handlers/system/mod.rs @@ -1,10 +1,10 @@ use crate::app::key_binding::DEFAULT_KEYBINDINGS; -use crate::app::radarr::ActiveRadarrBlock; use crate::app::App; use crate::event::Key; use crate::handlers::radarr_handlers::handle_change_tab_left_right_keys; use crate::handlers::radarr_handlers::system::system_details_handler::SystemDetailsHandler; use crate::handlers::{handle_clear_errors, KeyEventHandler}; +use crate::models::servarr_data::radarr_data::ActiveRadarrBlock; use crate::models::Scrollable; mod system_details_handler; diff --git a/src/handlers/radarr_handlers/system/system_details_handler.rs b/src/handlers/radarr_handlers/system/system_details_handler.rs index b66ae80..e1bb248 100644 --- a/src/handlers/radarr_handlers/system/system_details_handler.rs +++ b/src/handlers/radarr_handlers/system/system_details_handler.rs @@ -1,8 +1,8 @@ use crate::app::key_binding::DEFAULT_KEYBINDINGS; -use crate::app::radarr::{ActiveRadarrBlock, SYSTEM_DETAILS_BLOCKS}; use crate::app::App; use crate::event::Key; use crate::handlers::{handle_prompt_toggle, KeyEventHandler}; +use crate::models::servarr_data::radarr_data::{ActiveRadarrBlock, SYSTEM_DETAILS_BLOCKS}; use crate::models::Scrollable; use crate::network::radarr_network::RadarrEvent; diff --git a/src/handlers/radarr_handlers/system/system_details_handler_tests.rs b/src/handlers/radarr_handlers/system/system_details_handler_tests.rs index 0c60fde..7d8c7bd 100644 --- a/src/handlers/radarr_handlers/system/system_details_handler_tests.rs +++ b/src/handlers/radarr_handlers/system/system_details_handler_tests.rs @@ -4,12 +4,12 @@ mod tests { use strum::IntoEnumIterator; use crate::app::key_binding::DEFAULT_KEYBINDINGS; - use crate::app::radarr::{ActiveRadarrBlock, SYSTEM_DETAILS_BLOCKS}; use crate::app::App; use crate::event::Key; use crate::handlers::radarr_handlers::system::system_details_handler::SystemDetailsHandler; use crate::handlers::KeyEventHandler; use crate::models::radarr_models::{QueueEvent, Task}; + use crate::models::servarr_data::radarr_data::{ActiveRadarrBlock, SYSTEM_DETAILS_BLOCKS}; mod test_handle_scroll_up_and_down { use rstest::rstest; diff --git a/src/handlers/radarr_handlers/system/system_handler_tests.rs b/src/handlers/radarr_handlers/system/system_handler_tests.rs index c6a511e..5e9b558 100644 --- a/src/handlers/radarr_handlers/system/system_handler_tests.rs +++ b/src/handlers/radarr_handlers/system/system_handler_tests.rs @@ -5,11 +5,11 @@ mod tests { use strum::IntoEnumIterator; use crate::app::key_binding::DEFAULT_KEYBINDINGS; - use crate::app::radarr::{ActiveRadarrBlock, SYSTEM_DETAILS_BLOCKS}; use crate::app::App; use crate::event::Key; use crate::handlers::radarr_handlers::system::SystemHandler; use crate::handlers::KeyEventHandler; + use crate::models::servarr_data::radarr_data::{ActiveRadarrBlock, SYSTEM_DETAILS_BLOCKS}; use crate::test_handler_delegation; mod test_handle_left_right_action { diff --git a/src/models/mod.rs b/src/models/mod.rs index 883fcf0..93ff44f 100644 --- a/src/models/mod.rs +++ b/src/models/mod.rs @@ -1,12 +1,12 @@ use std::cell::RefCell; use std::fmt::{Debug, Display, Formatter}; +use crate::models::servarr_data::radarr_data::ActiveRadarrBlock; use serde::Deserialize; use tui::widgets::{ListState, TableState}; -use crate::app::radarr::ActiveRadarrBlock; - pub mod radarr_models; +pub mod servarr_data; #[cfg(test)] #[path = "model_tests.rs"] diff --git a/src/models/model_tests.rs b/src/models/model_tests.rs index 881f610..da45919 100644 --- a/src/models/model_tests.rs +++ b/src/models/model_tests.rs @@ -4,7 +4,7 @@ mod tests { use pretty_assertions::{assert_eq, assert_str_eq}; - use crate::app::radarr::ActiveRadarrBlock; + use crate::models::servarr_data::radarr_data::ActiveRadarrBlock; use crate::models::{ BlockSelectionState, HorizontallyScrollableText, Scrollable, ScrollableText, StatefulList, StatefulTable, TabRoute, TabState, diff --git a/src/models/servarr_data/mod.rs b/src/models/servarr_data/mod.rs new file mode 100644 index 0000000..f6d800f --- /dev/null +++ b/src/models/servarr_data/mod.rs @@ -0,0 +1 @@ +pub mod radarr_data; diff --git a/src/models/servarr_data/radarr_data.rs b/src/models/servarr_data/radarr_data.rs new file mode 100644 index 0000000..792f1ef --- /dev/null +++ b/src/models/servarr_data/radarr_data.rs @@ -0,0 +1,625 @@ +use crate::app::context_clues::build_context_clue_string; +use crate::app::radarr::radarr_context_clues::{ + COLLECTIONS_CONTEXT_CLUES, DOWNLOADS_CONTEXT_CLUES, INDEXERS_CONTEXT_CLUES, + LIBRARY_CONTEXT_CLUES, MANUAL_MOVIE_SEARCH_CONTEXTUAL_CONTEXT_CLUES, + MANUAL_MOVIE_SEARCH_CONTEXT_CLUES, MOVIE_DETAILS_CONTEXT_CLUES, ROOT_FOLDERS_CONTEXT_CLUES, + SYSTEM_CONTEXT_CLUES, +}; +use crate::models::radarr_models::{ + AddMovieSearchResult, Collection, CollectionMovie, Credit, DiskSpace, DownloadRecord, Indexer, + IndexerSettings, MinimumAvailability, Monitor, Movie, MovieHistoryItem, QueueEvent, Release, + ReleaseField, RootFolder, Task, +}; +use crate::models::{ + BlockSelectionState, HorizontallyScrollableText, Route, ScrollableText, StatefulList, + StatefulTable, TabRoute, TabState, +}; +use crate::network::radarr_network::RadarrEvent; +use bimap::BiMap; +use chrono::{DateTime, Utc}; +use strum::{EnumIter, IntoEnumIterator}; + +#[cfg(test)] +#[path = "radarr_data_tests.rs"] +mod radarr_data_tests; + +#[cfg(test)] +#[path = "radarr_test_utils.rs"] +pub mod radarr_test_utils; + +pub struct RadarrData<'a> { + pub root_folders: StatefulTable, + pub disk_space_vec: Vec, + pub version: String, + pub start_time: DateTime, + pub movies: StatefulTable, + pub filtered_movies: StatefulTable, + pub add_searched_movies: StatefulTable, + pub monitor_list: StatefulList, + pub minimum_availability_list: StatefulList, + pub quality_profile_list: StatefulList, + pub root_folder_list: StatefulList, + pub selected_block: BlockSelectionState<'a, ActiveRadarrBlock>, + pub downloads: StatefulTable, + pub indexers: StatefulTable, + pub indexer_settings: Option, + pub quality_profile_map: BiMap, + pub tags_map: BiMap, + pub movie_details: ScrollableText, + pub file_details: String, + pub audio_details: String, + pub video_details: String, + pub movie_history: StatefulTable, + pub movie_cast: StatefulTable, + pub movie_crew: StatefulTable, + pub movie_releases: StatefulTable, + pub movie_releases_sort: StatefulList, + pub collections: StatefulTable, + pub filtered_collections: StatefulTable, + pub collection_movies: StatefulTable, + pub logs: StatefulList, + pub log_details: StatefulList, + pub tasks: StatefulTable, + pub queued_events: StatefulTable, + pub updates: ScrollableText, + pub prompt_confirm_action: Option, + pub main_tabs: TabState, + pub movie_info_tabs: TabState, + pub search: HorizontallyScrollableText, + pub filter: HorizontallyScrollableText, + pub edit_path: HorizontallyScrollableText, + pub edit_tags: HorizontallyScrollableText, + pub edit_monitored: Option, + pub edit_search_on_add: Option, + pub sort_ascending: Option, + pub prompt_confirm: bool, + pub delete_movie_files: bool, + pub add_list_exclusion: bool, + pub is_searching: bool, + pub is_filtering: bool, +} + +impl<'a> RadarrData<'a> { + pub fn reset_movie_collection_table(&mut self) { + self.collection_movies = StatefulTable::default(); + } + + pub fn reset_log_details_list(&mut self) { + self.log_details = StatefulList::default(); + } + + pub fn reset_delete_movie_preferences(&mut self) { + self.delete_movie_files = false; + self.add_list_exclusion = false; + } + + pub fn reset_search(&mut self) { + self.is_searching = false; + self.search = HorizontallyScrollableText::default(); + self.filter = HorizontallyScrollableText::default(); + self.filtered_movies = StatefulTable::default(); + self.filtered_collections = StatefulTable::default(); + self.add_searched_movies = StatefulTable::default(); + } + + pub fn reset_filter(&mut self) { + self.is_filtering = false; + self.filter = HorizontallyScrollableText::default(); + self.filtered_movies = StatefulTable::default(); + self.filtered_collections = StatefulTable::default(); + } + + pub fn reset_add_edit_media_fields(&mut self) { + self.edit_monitored = None; + self.edit_search_on_add = None; + self.edit_path = HorizontallyScrollableText::default(); + self.edit_tags = HorizontallyScrollableText::default(); + self.reset_preferences_selections(); + } + + pub fn reset_movie_info_tabs(&mut self) { + self.file_details = String::default(); + self.audio_details = String::default(); + self.video_details = String::default(); + self.movie_details = ScrollableText::default(); + self.movie_history = StatefulTable::default(); + self.movie_cast = StatefulTable::default(); + self.movie_crew = StatefulTable::default(); + self.movie_releases = StatefulTable::default(); + self.movie_releases_sort = StatefulList::default(); + self.sort_ascending = None; + self.movie_info_tabs.index = 0; + } + + pub fn reset_preferences_selections(&mut self) { + self.monitor_list = StatefulList::default(); + self.minimum_availability_list = StatefulList::default(); + self.quality_profile_list = StatefulList::default(); + self.root_folder_list = StatefulList::default(); + } + + pub fn populate_preferences_lists(&mut self) { + self.monitor_list.set_items(Vec::from_iter(Monitor::iter())); + self + .minimum_availability_list + .set_items(Vec::from_iter(MinimumAvailability::iter())); + let mut quality_profile_names: Vec = + self.quality_profile_map.right_values().cloned().collect(); + quality_profile_names.sort(); + self.quality_profile_list.set_items(quality_profile_names); + self + .root_folder_list + .set_items(self.root_folders.items.to_vec()); + } + + pub fn populate_edit_movie_fields(&mut self) { + self.populate_preferences_lists(); + let Movie { + path, + tags, + monitored, + minimum_availability, + quality_profile_id, + .. + } = if self.filtered_movies.items.is_empty() { + self.movies.current_selection() + } else { + self.filtered_movies.current_selection() + }; + + self.edit_path = path.clone().into(); + self.edit_tags = tags + .iter() + .map(|tag_id| { + self + .tags_map + .get_by_left(&tag_id.as_u64().unwrap()) + .unwrap() + .clone() + }) + .collect::>() + .join(", ") + .into(); + self.edit_monitored = Some(*monitored); + + let minimum_availability_index = self + .minimum_availability_list + .items + .iter() + .position(|ma| ma == minimum_availability); + self + .minimum_availability_list + .state + .select(minimum_availability_index); + + let quality_profile_name = self + .quality_profile_map + .get_by_left(&quality_profile_id.as_u64().unwrap()) + .unwrap(); + let quality_profile_index = self + .quality_profile_list + .items + .iter() + .position(|profile| profile == quality_profile_name); + self + .quality_profile_list + .state + .select(quality_profile_index); + } + + pub fn populate_edit_collection_fields(&mut self) { + self.populate_preferences_lists(); + let Collection { + root_folder_path, + monitored, + search_on_add, + minimum_availability, + quality_profile_id, + .. + } = if self.filtered_collections.items.is_empty() { + self.collections.current_selection() + } else { + self.filtered_collections.current_selection() + }; + + self.edit_path = root_folder_path.clone().unwrap_or_default().into(); + self.edit_monitored = Some(*monitored); + self.edit_search_on_add = Some(*search_on_add); + + let minimum_availability_index = self + .minimum_availability_list + .items + .iter() + .position(|ma| ma == minimum_availability); + self + .minimum_availability_list + .state + .select(minimum_availability_index); + + let quality_profile_name = self + .quality_profile_map + .get_by_left(&quality_profile_id.as_u64().unwrap()) + .unwrap(); + let quality_profile_index = self + .quality_profile_list + .items + .iter() + .position(|profile| profile == quality_profile_name); + self + .quality_profile_list + .state + .select(quality_profile_index); + } +} + +impl<'a> Default for RadarrData<'a> { + fn default() -> RadarrData<'a> { + RadarrData { + root_folders: StatefulTable::default(), + disk_space_vec: Vec::new(), + version: String::default(), + start_time: DateTime::default(), + movies: StatefulTable::default(), + add_searched_movies: StatefulTable::default(), + monitor_list: StatefulList::default(), + minimum_availability_list: StatefulList::default(), + quality_profile_list: StatefulList::default(), + root_folder_list: StatefulList::default(), + selected_block: BlockSelectionState::default(), + filtered_movies: StatefulTable::default(), + downloads: StatefulTable::default(), + indexers: StatefulTable::default(), + indexer_settings: None, + quality_profile_map: BiMap::default(), + tags_map: BiMap::default(), + file_details: String::default(), + audio_details: String::default(), + video_details: String::default(), + movie_details: ScrollableText::default(), + movie_history: StatefulTable::default(), + movie_cast: StatefulTable::default(), + movie_crew: StatefulTable::default(), + movie_releases: StatefulTable::default(), + movie_releases_sort: StatefulList::default(), + collections: StatefulTable::default(), + filtered_collections: StatefulTable::default(), + collection_movies: StatefulTable::default(), + logs: StatefulList::default(), + log_details: StatefulList::default(), + tasks: StatefulTable::default(), + queued_events: StatefulTable::default(), + updates: ScrollableText::default(), + prompt_confirm_action: None, + search: HorizontallyScrollableText::default(), + filter: HorizontallyScrollableText::default(), + edit_path: HorizontallyScrollableText::default(), + edit_tags: HorizontallyScrollableText::default(), + edit_monitored: None, + edit_search_on_add: None, + sort_ascending: None, + is_searching: false, + is_filtering: false, + prompt_confirm: false, + delete_movie_files: false, + add_list_exclusion: false, + main_tabs: TabState::new(vec![ + TabRoute { + title: "Library", + route: ActiveRadarrBlock::Movies.into(), + help: String::new(), + contextual_help: Some(build_context_clue_string(&LIBRARY_CONTEXT_CLUES)), + }, + TabRoute { + title: "Downloads", + route: ActiveRadarrBlock::Downloads.into(), + help: String::new(), + contextual_help: Some(build_context_clue_string(&DOWNLOADS_CONTEXT_CLUES)), + }, + TabRoute { + title: "Collections", + route: ActiveRadarrBlock::Collections.into(), + help: String::new(), + contextual_help: Some(build_context_clue_string(&COLLECTIONS_CONTEXT_CLUES)), + }, + TabRoute { + title: "Root Folders", + route: ActiveRadarrBlock::RootFolders.into(), + help: String::new(), + contextual_help: Some(build_context_clue_string(&ROOT_FOLDERS_CONTEXT_CLUES)), + }, + TabRoute { + title: "Indexers", + route: ActiveRadarrBlock::Indexers.into(), + help: String::new(), + contextual_help: Some(build_context_clue_string(&INDEXERS_CONTEXT_CLUES)), + }, + TabRoute { + title: "System", + route: ActiveRadarrBlock::System.into(), + help: String::new(), + contextual_help: Some(build_context_clue_string(&SYSTEM_CONTEXT_CLUES)), + }, + ]), + movie_info_tabs: TabState::new(vec![ + TabRoute { + title: "Details", + route: ActiveRadarrBlock::MovieDetails.into(), + help: build_context_clue_string(&MOVIE_DETAILS_CONTEXT_CLUES), + contextual_help: None, + }, + TabRoute { + title: "History", + route: ActiveRadarrBlock::MovieHistory.into(), + help: build_context_clue_string(&MOVIE_DETAILS_CONTEXT_CLUES), + contextual_help: None, + }, + TabRoute { + title: "File", + route: ActiveRadarrBlock::FileInfo.into(), + help: build_context_clue_string(&MOVIE_DETAILS_CONTEXT_CLUES), + contextual_help: None, + }, + TabRoute { + title: "Cast", + route: ActiveRadarrBlock::Cast.into(), + help: build_context_clue_string(&MOVIE_DETAILS_CONTEXT_CLUES), + contextual_help: None, + }, + TabRoute { + title: "Crew", + route: ActiveRadarrBlock::Crew.into(), + help: build_context_clue_string(&MOVIE_DETAILS_CONTEXT_CLUES), + contextual_help: None, + }, + TabRoute { + title: "Manual Search", + route: ActiveRadarrBlock::ManualSearch.into(), + help: build_context_clue_string(&MANUAL_MOVIE_SEARCH_CONTEXT_CLUES), + contextual_help: Some(build_context_clue_string( + &MANUAL_MOVIE_SEARCH_CONTEXTUAL_CONTEXT_CLUES, + )), + }, + ]), + } + } +} + +#[derive(Clone, Copy, PartialEq, Eq, Debug, Default, EnumIter)] +pub enum ActiveRadarrBlock { + AddIndexer, + AddMovieAlreadyInLibrary, + AddMovieSearchInput, + AddMovieSearchResults, + AddMoviePrompt, + AddMovieSelectMinimumAvailability, + AddMovieSelectQualityProfile, + AddMovieSelectMonitor, + AddMovieSelectRootFolder, + AddMovieConfirmPrompt, + AddMovieTagsInput, + AddMovieEmptySearchResults, + AddRootFolderPrompt, + AutomaticallySearchMoviePrompt, + Collections, + CollectionDetails, + Cast, + Crew, + DeleteDownloadPrompt, + DeleteIndexerPrompt, + DeleteMoviePrompt, + DeleteMovieConfirmPrompt, + DeleteMovieToggleDeleteFile, + DeleteMovieToggleAddListExclusion, + DeleteRootFolderPrompt, + Downloads, + EditCollectionPrompt, + EditCollectionConfirmPrompt, + EditCollectionRootFolderPathInput, + EditCollectionSelectMinimumAvailability, + EditCollectionSelectQualityProfile, + EditCollectionToggleSearchOnAdd, + EditCollectionToggleMonitored, + EditIndexer, + EditMoviePrompt, + EditMovieConfirmPrompt, + EditMoviePathInput, + EditMovieSelectMinimumAvailability, + EditMovieSelectQualityProfile, + EditMovieTagsInput, + EditMovieToggleMonitored, + FileInfo, + FilterCollections, + FilterMovies, + Indexers, + IndexerSettingsPrompt, + IndexerSettingsAvailabilityDelayInput, + IndexerSettingsConfirmPrompt, + IndexerSettingsMaximumSizeInput, + IndexerSettingsMinimumAgeInput, + IndexerSettingsRetentionInput, + IndexerSettingsRssSyncIntervalInput, + IndexerSettingsToggleAllowHardcodedSubs, + IndexerSettingsTogglePreferIndexerFlags, + IndexerSettingsWhitelistedSubtitleTagsInput, + ManualSearch, + ManualSearchSortPrompt, + ManualSearchConfirmPrompt, + MovieDetails, + MovieHistory, + #[default] + Movies, + RootFolders, + System, + SystemLogs, + SystemQueuedEvents, + SystemTasks, + SystemTaskStartConfirmPrompt, + SystemUpdates, + UpdateAndScanPrompt, + UpdateAllCollectionsPrompt, + UpdateAllMoviesPrompt, + UpdateDownloadsPrompt, + SearchMovie, + SearchCollection, + ViewMovieOverview, +} + +pub static LIBRARY_BLOCKS: [ActiveRadarrBlock; 4] = [ + ActiveRadarrBlock::Movies, + ActiveRadarrBlock::SearchMovie, + ActiveRadarrBlock::FilterMovies, + ActiveRadarrBlock::UpdateAllMoviesPrompt, +]; +pub static COLLECTIONS_BLOCKS: [ActiveRadarrBlock; 4] = [ + ActiveRadarrBlock::Collections, + ActiveRadarrBlock::SearchCollection, + ActiveRadarrBlock::FilterCollections, + ActiveRadarrBlock::UpdateAllCollectionsPrompt, +]; +pub static INDEXERS_BLOCKS: [ActiveRadarrBlock; 4] = [ + ActiveRadarrBlock::AddIndexer, + ActiveRadarrBlock::EditIndexer, + ActiveRadarrBlock::DeleteIndexerPrompt, + ActiveRadarrBlock::Indexers, +]; +pub static ROOT_FOLDERS_BLOCKS: [ActiveRadarrBlock; 3] = [ + ActiveRadarrBlock::RootFolders, + ActiveRadarrBlock::AddRootFolderPrompt, + ActiveRadarrBlock::DeleteRootFolderPrompt, +]; +pub static ADD_MOVIE_BLOCKS: [ActiveRadarrBlock; 10] = [ + ActiveRadarrBlock::AddMovieSearchInput, + ActiveRadarrBlock::AddMovieSearchResults, + ActiveRadarrBlock::AddMovieEmptySearchResults, + ActiveRadarrBlock::AddMoviePrompt, + ActiveRadarrBlock::AddMovieSelectMinimumAvailability, + ActiveRadarrBlock::AddMovieSelectMonitor, + ActiveRadarrBlock::AddMovieSelectQualityProfile, + ActiveRadarrBlock::AddMovieSelectRootFolder, + ActiveRadarrBlock::AddMovieAlreadyInLibrary, + ActiveRadarrBlock::AddMovieTagsInput, +]; +pub static ADD_MOVIE_SELECTION_BLOCKS: [ActiveRadarrBlock; 6] = [ + ActiveRadarrBlock::AddMovieSelectRootFolder, + ActiveRadarrBlock::AddMovieSelectMonitor, + ActiveRadarrBlock::AddMovieSelectMinimumAvailability, + ActiveRadarrBlock::AddMovieSelectQualityProfile, + ActiveRadarrBlock::AddMovieTagsInput, + ActiveRadarrBlock::AddMovieConfirmPrompt, +]; +pub static EDIT_COLLECTION_BLOCKS: [ActiveRadarrBlock; 7] = [ + ActiveRadarrBlock::EditCollectionPrompt, + ActiveRadarrBlock::EditCollectionConfirmPrompt, + ActiveRadarrBlock::EditCollectionRootFolderPathInput, + ActiveRadarrBlock::EditCollectionSelectMinimumAvailability, + ActiveRadarrBlock::EditCollectionSelectQualityProfile, + ActiveRadarrBlock::EditCollectionToggleSearchOnAdd, + ActiveRadarrBlock::EditCollectionToggleMonitored, +]; +pub static EDIT_COLLECTION_SELECTION_BLOCKS: [ActiveRadarrBlock; 6] = [ + ActiveRadarrBlock::EditCollectionToggleMonitored, + ActiveRadarrBlock::EditCollectionSelectMinimumAvailability, + ActiveRadarrBlock::EditCollectionSelectQualityProfile, + ActiveRadarrBlock::EditCollectionRootFolderPathInput, + ActiveRadarrBlock::EditCollectionToggleSearchOnAdd, + ActiveRadarrBlock::EditCollectionConfirmPrompt, +]; +pub static EDIT_MOVIE_BLOCKS: [ActiveRadarrBlock; 7] = [ + ActiveRadarrBlock::EditMoviePrompt, + ActiveRadarrBlock::EditMovieConfirmPrompt, + ActiveRadarrBlock::EditMoviePathInput, + ActiveRadarrBlock::EditMovieSelectMinimumAvailability, + ActiveRadarrBlock::EditMovieSelectQualityProfile, + ActiveRadarrBlock::EditMovieTagsInput, + ActiveRadarrBlock::EditMovieToggleMonitored, +]; +pub static EDIT_MOVIE_SELECTION_BLOCKS: [ActiveRadarrBlock; 6] = [ + ActiveRadarrBlock::EditMovieToggleMonitored, + ActiveRadarrBlock::EditMovieSelectMinimumAvailability, + ActiveRadarrBlock::EditMovieSelectQualityProfile, + ActiveRadarrBlock::EditMoviePathInput, + ActiveRadarrBlock::EditMovieTagsInput, + ActiveRadarrBlock::EditMovieConfirmPrompt, +]; +pub static DOWNLOADS_BLOCKS: [ActiveRadarrBlock; 3] = [ + ActiveRadarrBlock::Downloads, + ActiveRadarrBlock::DeleteDownloadPrompt, + ActiveRadarrBlock::UpdateDownloadsPrompt, +]; +pub static MOVIE_DETAILS_BLOCKS: [ActiveRadarrBlock; 10] = [ + ActiveRadarrBlock::MovieDetails, + ActiveRadarrBlock::MovieHistory, + ActiveRadarrBlock::FileInfo, + ActiveRadarrBlock::Cast, + ActiveRadarrBlock::Crew, + ActiveRadarrBlock::AutomaticallySearchMoviePrompt, + ActiveRadarrBlock::UpdateAndScanPrompt, + ActiveRadarrBlock::ManualSearch, + ActiveRadarrBlock::ManualSearchSortPrompt, + ActiveRadarrBlock::ManualSearchConfirmPrompt, +]; +pub static COLLECTION_DETAILS_BLOCKS: [ActiveRadarrBlock; 2] = [ + ActiveRadarrBlock::CollectionDetails, + ActiveRadarrBlock::ViewMovieOverview, +]; +pub static SEARCH_BLOCKS: [ActiveRadarrBlock; 2] = [ + ActiveRadarrBlock::SearchMovie, + ActiveRadarrBlock::SearchCollection, +]; +pub static FILTER_BLOCKS: [ActiveRadarrBlock; 2] = [ + ActiveRadarrBlock::FilterMovies, + ActiveRadarrBlock::FilterCollections, +]; +pub static DELETE_MOVIE_BLOCKS: [ActiveRadarrBlock; 4] = [ + ActiveRadarrBlock::DeleteMoviePrompt, + ActiveRadarrBlock::DeleteMovieConfirmPrompt, + ActiveRadarrBlock::DeleteMovieToggleDeleteFile, + ActiveRadarrBlock::DeleteMovieToggleAddListExclusion, +]; +pub static DELETE_MOVIE_SELECTION_BLOCKS: [ActiveRadarrBlock; 3] = [ + ActiveRadarrBlock::DeleteMovieToggleDeleteFile, + ActiveRadarrBlock::DeleteMovieToggleAddListExclusion, + ActiveRadarrBlock::DeleteMovieConfirmPrompt, +]; +pub static INDEXER_SETTINGS_BLOCKS: [ActiveRadarrBlock; 10] = [ + ActiveRadarrBlock::IndexerSettingsPrompt, + ActiveRadarrBlock::IndexerSettingsAvailabilityDelayInput, + ActiveRadarrBlock::IndexerSettingsConfirmPrompt, + ActiveRadarrBlock::IndexerSettingsMaximumSizeInput, + ActiveRadarrBlock::IndexerSettingsMinimumAgeInput, + ActiveRadarrBlock::IndexerSettingsRetentionInput, + ActiveRadarrBlock::IndexerSettingsRssSyncIntervalInput, + ActiveRadarrBlock::IndexerSettingsToggleAllowHardcodedSubs, + ActiveRadarrBlock::IndexerSettingsTogglePreferIndexerFlags, + ActiveRadarrBlock::IndexerSettingsWhitelistedSubtitleTagsInput, +]; +pub static INDEXER_SETTINGS_SELECTION_BLOCKS: [ActiveRadarrBlock; 9] = [ + ActiveRadarrBlock::IndexerSettingsMinimumAgeInput, + ActiveRadarrBlock::IndexerSettingsRetentionInput, + ActiveRadarrBlock::IndexerSettingsMaximumSizeInput, + ActiveRadarrBlock::IndexerSettingsTogglePreferIndexerFlags, + ActiveRadarrBlock::IndexerSettingsAvailabilityDelayInput, + ActiveRadarrBlock::IndexerSettingsRssSyncIntervalInput, + ActiveRadarrBlock::IndexerSettingsWhitelistedSubtitleTagsInput, + ActiveRadarrBlock::IndexerSettingsToggleAllowHardcodedSubs, + ActiveRadarrBlock::IndexerSettingsConfirmPrompt, +]; +pub static SYSTEM_DETAILS_BLOCKS: [ActiveRadarrBlock; 5] = [ + ActiveRadarrBlock::SystemLogs, + ActiveRadarrBlock::SystemQueuedEvents, + ActiveRadarrBlock::SystemTasks, + ActiveRadarrBlock::SystemTaskStartConfirmPrompt, + ActiveRadarrBlock::SystemUpdates, +]; + +impl From for Route { + fn from(active_radarr_block: ActiveRadarrBlock) -> Route { + Route::Radarr(active_radarr_block, None) + } +} + +impl From<(ActiveRadarrBlock, Option)> for Route { + fn from(value: (ActiveRadarrBlock, Option)) -> Route { + Route::Radarr(value.0, value.1) + } +} diff --git a/src/models/servarr_data/radarr_data_tests.rs b/src/models/servarr_data/radarr_data_tests.rs new file mode 100644 index 0000000..57eff39 --- /dev/null +++ b/src/models/servarr_data/radarr_data_tests.rs @@ -0,0 +1,802 @@ +#[cfg(test)] +mod tests { + mod radarr_data_tests { + use bimap::BiMap; + use chrono::{DateTime, Utc}; + use pretty_assertions::{assert_eq, assert_str_eq}; + use rstest::rstest; + use serde_json::Number; + use strum::IntoEnumIterator; + + use crate::app::context_clues::build_context_clue_string; + use crate::app::radarr::radarr_context_clues::{ + COLLECTIONS_CONTEXT_CLUES, DOWNLOADS_CONTEXT_CLUES, INDEXERS_CONTEXT_CLUES, + LIBRARY_CONTEXT_CLUES, MANUAL_MOVIE_SEARCH_CONTEXTUAL_CONTEXT_CLUES, + MANUAL_MOVIE_SEARCH_CONTEXT_CLUES, MOVIE_DETAILS_CONTEXT_CLUES, ROOT_FOLDERS_CONTEXT_CLUES, + SYSTEM_CONTEXT_CLUES, + }; + use crate::models::radarr_models::{ + Collection, MinimumAvailability, Monitor, Movie, RootFolder, + }; + use crate::models::servarr_data::radarr_data::radarr_test_utils::utils; + use crate::models::servarr_data::radarr_data::{ActiveRadarrBlock, RadarrData}; + use crate::models::Route; + use crate::models::StatefulTable; + use crate::models::{BlockSelectionState, HorizontallyScrollableText}; + use crate::{ + assert_edit_media_reset, assert_filter_reset, assert_movie_info_tabs_reset, + assert_preferences_selections_reset, assert_search_reset, + }; + + #[test] + fn test_from_tuple_to_route_with_context() { + assert_eq!( + Route::from(( + ActiveRadarrBlock::AddMoviePrompt, + Some(ActiveRadarrBlock::AddMovieSearchResults) + )), + Route::Radarr( + ActiveRadarrBlock::AddMoviePrompt, + Some(ActiveRadarrBlock::AddMovieSearchResults), + ) + ); + } + + #[test] + fn test_reset_movie_collection_table() { + let mut radarr_data = utils::create_test_radarr_data(); + + radarr_data.reset_movie_collection_table(); + + assert!(radarr_data.collection_movies.items.is_empty()); + } + + #[test] + fn test_reset_log_details_list() { + let mut radarr_data = utils::create_test_radarr_data(); + + radarr_data.reset_log_details_list(); + + assert!(radarr_data.log_details.items.is_empty()); + } + + #[test] + fn test_reset_delete_movie_preferences() { + let mut radarr_data = utils::create_test_radarr_data(); + + radarr_data.reset_delete_movie_preferences(); + + assert!(!radarr_data.delete_movie_files); + assert!(!radarr_data.add_list_exclusion); + } + + #[test] + fn test_reset_search() { + let mut radarr_data = utils::create_test_radarr_data(); + + radarr_data.reset_search(); + + assert_search_reset!(radarr_data); + } + + #[test] + fn test_reset_filter() { + let mut radarr_data = utils::create_test_radarr_data(); + + radarr_data.reset_filter(); + + assert_filter_reset!(radarr_data); + } + + #[test] + fn test_reset_movie_info_tabs() { + let mut radarr_data = utils::create_test_radarr_data(); + + radarr_data.reset_movie_info_tabs(); + + assert_movie_info_tabs_reset!(radarr_data); + } + + #[test] + fn test_reset_add_edit_media_fields() { + let mut radarr_data = RadarrData { + edit_monitored: Some(true), + edit_search_on_add: Some(true), + edit_path: "test path".to_owned().into(), + edit_tags: "test tag".to_owned().into(), + ..RadarrData::default() + }; + + radarr_data.reset_add_edit_media_fields(); + + assert_edit_media_reset!(radarr_data); + } + + #[test] + fn test_reset_preferences_selections() { + let mut radarr_data = utils::create_test_radarr_data(); + + radarr_data.reset_preferences_selections(); + + assert_preferences_selections_reset!(radarr_data); + } + + #[test] + fn test_populate_preferences_lists() { + let root_folder = RootFolder { + id: Number::from(1), + path: "/nfs".to_owned(), + accessible: true, + free_space: Number::from(219902325555200u64), + unmapped_folders: None, + }; + let mut radarr_data = RadarrData { + quality_profile_map: BiMap::from_iter([ + (2222, "HD - 1080p".to_owned()), + (1111, "Any".to_owned()), + ]), + ..RadarrData::default() + }; + radarr_data + .root_folders + .set_items(vec![root_folder.clone()]); + + radarr_data.populate_preferences_lists(); + + assert_eq!( + radarr_data.monitor_list.items, + Vec::from_iter(Monitor::iter()) + ); + assert_eq!( + radarr_data.minimum_availability_list.items, + Vec::from_iter(MinimumAvailability::iter()) + ); + assert_eq!( + radarr_data.quality_profile_list.items, + vec!["Any".to_owned(), "HD - 1080p".to_owned()] + ); + assert_eq!(radarr_data.root_folder_list.items, vec![root_folder]); + } + + #[rstest] + fn test_populate_edit_movie_fields(#[values(true, false)] test_filtered_movies: bool) { + let mut radarr_data = RadarrData { + edit_path: HorizontallyScrollableText::default(), + edit_tags: HorizontallyScrollableText::default(), + edit_monitored: None, + quality_profile_map: BiMap::from_iter([ + (2222, "HD - 1080p".to_owned()), + (1111, "Any".to_owned()), + ]), + tags_map: BiMap::from_iter([(1, "usenet".to_owned()), (2, "test".to_owned())]), + filtered_movies: StatefulTable::default(), + ..utils::create_test_radarr_data() + }; + let movie = Movie { + path: "/nfs/movies/Test".to_owned(), + monitored: true, + quality_profile_id: Number::from(2222), + minimum_availability: MinimumAvailability::Released, + tags: vec![Number::from(1), Number::from(2)], + ..Movie::default() + }; + + if test_filtered_movies { + radarr_data.filtered_movies.set_items(vec![movie]); + } else { + radarr_data.movies.set_items(vec![movie]); + } + + radarr_data.populate_edit_movie_fields(); + + assert_eq!( + radarr_data.minimum_availability_list.items, + Vec::from_iter(MinimumAvailability::iter()) + ); + assert_eq!( + radarr_data.minimum_availability_list.current_selection(), + &MinimumAvailability::Released + ); + assert_eq!( + radarr_data.quality_profile_list.items, + vec!["Any".to_owned(), "HD - 1080p".to_owned()] + ); + assert_str_eq!( + radarr_data.quality_profile_list.current_selection(), + "HD - 1080p" + ); + assert_str_eq!(radarr_data.edit_path.text, "/nfs/movies/Test"); + assert_str_eq!(radarr_data.edit_tags.text, "usenet, test"); + assert_eq!(radarr_data.edit_monitored, Some(true)); + } + + #[rstest] + fn test_populate_edit_collection_fields( + #[values(true, false)] test_filtered_collections: bool, + ) { + let mut radarr_data = RadarrData { + edit_path: HorizontallyScrollableText::default(), + edit_monitored: None, + edit_search_on_add: None, + quality_profile_map: BiMap::from_iter([ + (2222, "HD - 1080p".to_owned()), + (1111, "Any".to_owned()), + ]), + filtered_collections: StatefulTable::default(), + ..utils::create_test_radarr_data() + }; + let collection = Collection { + root_folder_path: Some("/nfs/movies/Test".to_owned()), + monitored: true, + search_on_add: true, + quality_profile_id: Number::from(2222), + minimum_availability: MinimumAvailability::Released, + ..Collection::default() + }; + + if test_filtered_collections { + radarr_data.filtered_collections.set_items(vec![collection]); + } else { + radarr_data.collections.set_items(vec![collection]); + } + + radarr_data.populate_edit_collection_fields(); + + assert_eq!( + radarr_data.minimum_availability_list.items, + Vec::from_iter(MinimumAvailability::iter()) + ); + assert_eq!( + radarr_data.minimum_availability_list.current_selection(), + &MinimumAvailability::Released + ); + assert_eq!( + radarr_data.quality_profile_list.items, + vec!["Any".to_owned(), "HD - 1080p".to_owned()] + ); + assert_str_eq!( + radarr_data.quality_profile_list.current_selection(), + "HD - 1080p" + ); + assert_str_eq!(radarr_data.edit_path.text, "/nfs/movies/Test"); + assert_eq!(radarr_data.edit_monitored, Some(true)); + assert_eq!(radarr_data.edit_search_on_add, Some(true)); + } + + #[test] + fn test_radarr_data_defaults() { + let radarr_data = RadarrData::default(); + + assert!(radarr_data.root_folders.items.is_empty()); + assert_eq!(radarr_data.disk_space_vec, Vec::new()); + assert!(radarr_data.version.is_empty()); + assert_eq!(radarr_data.start_time, >::default()); + assert!(radarr_data.movies.items.is_empty()); + assert!(radarr_data.add_searched_movies.items.is_empty()); + assert!(radarr_data.monitor_list.items.is_empty()); + assert!(radarr_data.minimum_availability_list.items.is_empty()); + assert!(radarr_data.quality_profile_list.items.is_empty()); + assert!(radarr_data.root_folder_list.items.is_empty()); + assert_eq!(radarr_data.selected_block, BlockSelectionState::default()); + assert!(radarr_data.filtered_movies.items.is_empty()); + assert!(radarr_data.downloads.items.is_empty()); + assert!(radarr_data.indexers.items.is_empty()); + assert!(radarr_data.indexer_settings.is_none()); + assert!(radarr_data.quality_profile_map.is_empty()); + assert!(radarr_data.tags_map.is_empty()); + assert!(radarr_data.file_details.is_empty()); + assert!(radarr_data.audio_details.is_empty()); + assert!(radarr_data.video_details.is_empty()); + assert!(radarr_data.movie_details.get_text().is_empty()); + assert!(radarr_data.movie_history.items.is_empty()); + assert!(radarr_data.movie_cast.items.is_empty()); + assert!(radarr_data.movie_crew.items.is_empty()); + assert!(radarr_data.movie_releases.items.is_empty()); + assert!(radarr_data.movie_releases_sort.items.is_empty()); + assert!(radarr_data.collections.items.is_empty()); + assert!(radarr_data.filtered_collections.items.is_empty()); + assert!(radarr_data.collection_movies.items.is_empty()); + assert!(radarr_data.logs.items.is_empty()); + assert!(radarr_data.log_details.items.is_empty()); + assert!(radarr_data.tasks.items.is_empty()); + assert!(radarr_data.queued_events.items.is_empty()); + assert!(radarr_data.updates.get_text().is_empty()); + assert!(radarr_data.prompt_confirm_action.is_none()); + assert!(radarr_data.search.text.is_empty()); + assert!(radarr_data.filter.text.is_empty()); + assert!(radarr_data.edit_path.text.is_empty()); + assert!(radarr_data.edit_tags.text.is_empty()); + assert!(radarr_data.edit_monitored.is_none()); + assert!(radarr_data.edit_search_on_add.is_none()); + assert!(radarr_data.sort_ascending.is_none()); + assert!(!radarr_data.is_searching); + assert!(!radarr_data.is_filtering); + assert!(!radarr_data.prompt_confirm); + assert!(!radarr_data.delete_movie_files); + assert!(!radarr_data.add_list_exclusion); + + assert_eq!(radarr_data.main_tabs.tabs.len(), 6); + + assert_str_eq!(radarr_data.main_tabs.tabs[0].title, "Library"); + assert_eq!( + radarr_data.main_tabs.tabs[0].route, + ActiveRadarrBlock::Movies.into() + ); + assert!(radarr_data.main_tabs.tabs[0].help.is_empty()); + assert_eq!( + radarr_data.main_tabs.tabs[0].contextual_help, + Some(build_context_clue_string(&LIBRARY_CONTEXT_CLUES)) + ); + + assert_str_eq!(radarr_data.main_tabs.tabs[1].title, "Downloads"); + assert_eq!( + radarr_data.main_tabs.tabs[1].route, + ActiveRadarrBlock::Downloads.into() + ); + assert!(radarr_data.main_tabs.tabs[1].help.is_empty()); + assert_eq!( + radarr_data.main_tabs.tabs[1].contextual_help, + Some(build_context_clue_string(&DOWNLOADS_CONTEXT_CLUES)) + ); + + assert_str_eq!(radarr_data.main_tabs.tabs[2].title, "Collections"); + assert_eq!( + radarr_data.main_tabs.tabs[2].route, + ActiveRadarrBlock::Collections.into() + ); + assert!(radarr_data.main_tabs.tabs[2].help.is_empty()); + assert_eq!( + radarr_data.main_tabs.tabs[2].contextual_help, + Some(build_context_clue_string(&COLLECTIONS_CONTEXT_CLUES)) + ); + + assert_str_eq!(radarr_data.main_tabs.tabs[3].title, "Root Folders"); + assert_eq!( + radarr_data.main_tabs.tabs[3].route, + ActiveRadarrBlock::RootFolders.into() + ); + assert!(radarr_data.main_tabs.tabs[3].help.is_empty()); + assert_eq!( + radarr_data.main_tabs.tabs[3].contextual_help, + Some(build_context_clue_string(&ROOT_FOLDERS_CONTEXT_CLUES)) + ); + + assert_str_eq!(radarr_data.main_tabs.tabs[4].title, "Indexers"); + assert_eq!( + radarr_data.main_tabs.tabs[4].route, + ActiveRadarrBlock::Indexers.into() + ); + assert!(radarr_data.main_tabs.tabs[4].help.is_empty()); + assert_eq!( + radarr_data.main_tabs.tabs[4].contextual_help, + Some(build_context_clue_string(&INDEXERS_CONTEXT_CLUES)) + ); + + assert_str_eq!(radarr_data.main_tabs.tabs[5].title, "System"); + assert_eq!( + radarr_data.main_tabs.tabs[5].route, + ActiveRadarrBlock::System.into() + ); + assert!(radarr_data.main_tabs.tabs[5].help.is_empty()); + assert_eq!( + radarr_data.main_tabs.tabs[5].contextual_help, + Some(build_context_clue_string(&SYSTEM_CONTEXT_CLUES)) + ); + + assert_eq!(radarr_data.movie_info_tabs.tabs.len(), 6); + + assert_str_eq!(radarr_data.movie_info_tabs.tabs[0].title, "Details"); + assert_eq!( + radarr_data.movie_info_tabs.tabs[0].route, + ActiveRadarrBlock::MovieDetails.into() + ); + assert_str_eq!( + radarr_data.movie_info_tabs.tabs[0].help, + build_context_clue_string(&MOVIE_DETAILS_CONTEXT_CLUES) + ); + assert!(radarr_data.movie_info_tabs.tabs[0] + .contextual_help + .is_none()); + + assert_str_eq!(radarr_data.movie_info_tabs.tabs[1].title, "History"); + assert_eq!( + radarr_data.movie_info_tabs.tabs[1].route, + ActiveRadarrBlock::MovieHistory.into() + ); + assert_str_eq!( + radarr_data.movie_info_tabs.tabs[1].help, + build_context_clue_string(&MOVIE_DETAILS_CONTEXT_CLUES) + ); + assert!(radarr_data.movie_info_tabs.tabs[1] + .contextual_help + .is_none()); + + assert_str_eq!(radarr_data.movie_info_tabs.tabs[2].title, "File"); + assert_eq!( + radarr_data.movie_info_tabs.tabs[2].route, + ActiveRadarrBlock::FileInfo.into() + ); + assert_str_eq!( + radarr_data.movie_info_tabs.tabs[2].help, + build_context_clue_string(&MOVIE_DETAILS_CONTEXT_CLUES) + ); + assert!(radarr_data.movie_info_tabs.tabs[2] + .contextual_help + .is_none()); + + assert_str_eq!(radarr_data.movie_info_tabs.tabs[3].title, "Cast"); + assert_eq!( + radarr_data.movie_info_tabs.tabs[3].route, + ActiveRadarrBlock::Cast.into() + ); + assert_str_eq!( + radarr_data.movie_info_tabs.tabs[3].help, + build_context_clue_string(&MOVIE_DETAILS_CONTEXT_CLUES) + ); + assert!(radarr_data.movie_info_tabs.tabs[3] + .contextual_help + .is_none()); + + assert_str_eq!(radarr_data.movie_info_tabs.tabs[4].title, "Crew"); + assert_eq!( + radarr_data.movie_info_tabs.tabs[4].route, + ActiveRadarrBlock::Crew.into() + ); + assert_str_eq!( + radarr_data.movie_info_tabs.tabs[4].help, + build_context_clue_string(&MOVIE_DETAILS_CONTEXT_CLUES) + ); + assert!(radarr_data.movie_info_tabs.tabs[4] + .contextual_help + .is_none()); + + assert_str_eq!(radarr_data.movie_info_tabs.tabs[5].title, "Manual Search"); + assert_eq!( + radarr_data.movie_info_tabs.tabs[5].route, + ActiveRadarrBlock::ManualSearch.into() + ); + assert_str_eq!( + radarr_data.movie_info_tabs.tabs[5].help, + build_context_clue_string(&MANUAL_MOVIE_SEARCH_CONTEXT_CLUES) + ); + assert_eq!( + radarr_data.movie_info_tabs.tabs[5].contextual_help, + Some(build_context_clue_string( + &MANUAL_MOVIE_SEARCH_CONTEXTUAL_CONTEXT_CLUES + )) + ); + } + } + + mod active_radarr_block_tests { + use pretty_assertions::assert_eq; + + use crate::models::servarr_data::radarr_data::{ + ActiveRadarrBlock, ADD_MOVIE_BLOCKS, ADD_MOVIE_SELECTION_BLOCKS, COLLECTIONS_BLOCKS, + COLLECTION_DETAILS_BLOCKS, DELETE_MOVIE_BLOCKS, DELETE_MOVIE_SELECTION_BLOCKS, + DOWNLOADS_BLOCKS, EDIT_COLLECTION_BLOCKS, EDIT_COLLECTION_SELECTION_BLOCKS, + EDIT_MOVIE_BLOCKS, EDIT_MOVIE_SELECTION_BLOCKS, FILTER_BLOCKS, INDEXERS_BLOCKS, + INDEXER_SETTINGS_BLOCKS, INDEXER_SETTINGS_SELECTION_BLOCKS, LIBRARY_BLOCKS, + MOVIE_DETAILS_BLOCKS, ROOT_FOLDERS_BLOCKS, SEARCH_BLOCKS, SYSTEM_DETAILS_BLOCKS, + }; + + #[test] + fn test_library_blocks_contents() { + assert_eq!(LIBRARY_BLOCKS.len(), 4); + assert!(LIBRARY_BLOCKS.contains(&ActiveRadarrBlock::Movies)); + assert!(LIBRARY_BLOCKS.contains(&ActiveRadarrBlock::SearchMovie)); + assert!(LIBRARY_BLOCKS.contains(&ActiveRadarrBlock::FilterMovies)); + assert!(LIBRARY_BLOCKS.contains(&ActiveRadarrBlock::UpdateAllMoviesPrompt)); + } + + #[test] + fn test_collections_blocks_contents() { + assert_eq!(COLLECTIONS_BLOCKS.len(), 4); + assert!(COLLECTIONS_BLOCKS.contains(&ActiveRadarrBlock::Collections)); + assert!(COLLECTIONS_BLOCKS.contains(&ActiveRadarrBlock::SearchCollection)); + assert!(COLLECTIONS_BLOCKS.contains(&ActiveRadarrBlock::FilterCollections)); + assert!(COLLECTIONS_BLOCKS.contains(&ActiveRadarrBlock::UpdateAllCollectionsPrompt)); + } + + #[test] + fn test_indexers_blocks_contents() { + assert_eq!(INDEXERS_BLOCKS.len(), 4); + assert!(INDEXERS_BLOCKS.contains(&ActiveRadarrBlock::AddIndexer)); + assert!(INDEXERS_BLOCKS.contains(&ActiveRadarrBlock::EditIndexer)); + assert!(INDEXERS_BLOCKS.contains(&ActiveRadarrBlock::DeleteIndexerPrompt)); + assert!(INDEXERS_BLOCKS.contains(&ActiveRadarrBlock::Indexers)); + } + + #[test] + fn test_root_folders_blocks_contents() { + assert_eq!(ROOT_FOLDERS_BLOCKS.len(), 3); + assert!(ROOT_FOLDERS_BLOCKS.contains(&ActiveRadarrBlock::RootFolders)); + assert!(ROOT_FOLDERS_BLOCKS.contains(&ActiveRadarrBlock::AddRootFolderPrompt)); + assert!(ROOT_FOLDERS_BLOCKS.contains(&ActiveRadarrBlock::DeleteRootFolderPrompt)); + } + + #[test] + fn test_add_movie_blocks_contents() { + assert_eq!(ADD_MOVIE_BLOCKS.len(), 10); + assert!(ADD_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::AddMovieSearchInput)); + assert!(ADD_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::AddMovieSearchResults)); + assert!(ADD_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::AddMovieEmptySearchResults)); + assert!(ADD_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::AddMoviePrompt)); + assert!(ADD_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::AddMovieSelectMinimumAvailability)); + assert!(ADD_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::AddMovieSelectMonitor)); + assert!(ADD_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::AddMovieSelectQualityProfile)); + assert!(ADD_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::AddMovieSelectRootFolder)); + assert!(ADD_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::AddMovieAlreadyInLibrary)); + assert!(ADD_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::AddMovieTagsInput)); + } + + #[test] + fn test_edit_collection_blocks_contents() { + assert_eq!(EDIT_COLLECTION_BLOCKS.len(), 7); + assert!(EDIT_COLLECTION_BLOCKS.contains(&ActiveRadarrBlock::EditCollectionPrompt)); + assert!(EDIT_COLLECTION_BLOCKS.contains(&ActiveRadarrBlock::EditCollectionConfirmPrompt)); + assert!( + EDIT_COLLECTION_BLOCKS.contains(&ActiveRadarrBlock::EditCollectionRootFolderPathInput) + ); + assert!(EDIT_COLLECTION_BLOCKS + .contains(&ActiveRadarrBlock::EditCollectionSelectMinimumAvailability)); + assert!( + EDIT_COLLECTION_BLOCKS.contains(&ActiveRadarrBlock::EditCollectionSelectQualityProfile) + ); + assert!(EDIT_COLLECTION_BLOCKS.contains(&ActiveRadarrBlock::EditCollectionToggleSearchOnAdd)); + assert!(EDIT_COLLECTION_BLOCKS.contains(&ActiveRadarrBlock::EditCollectionToggleMonitored)); + } + + #[test] + fn test_edit_movie_blocks_contents() { + assert_eq!(EDIT_MOVIE_BLOCKS.len(), 7); + assert!(EDIT_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::EditMoviePrompt)); + assert!(EDIT_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::EditMovieConfirmPrompt)); + assert!(EDIT_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::EditMoviePathInput)); + assert!(EDIT_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::EditMovieSelectMinimumAvailability)); + assert!(EDIT_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::EditMovieSelectQualityProfile)); + assert!(EDIT_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::EditMovieTagsInput)); + assert!(EDIT_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::EditMovieToggleMonitored)); + } + + #[test] + fn test_downloads_blocks_contents() { + assert_eq!(DOWNLOADS_BLOCKS.len(), 3); + assert!(DOWNLOADS_BLOCKS.contains(&ActiveRadarrBlock::Downloads)); + assert!(DOWNLOADS_BLOCKS.contains(&ActiveRadarrBlock::DeleteDownloadPrompt)); + assert!(DOWNLOADS_BLOCKS.contains(&ActiveRadarrBlock::UpdateDownloadsPrompt)); + } + + #[test] + fn test_movie_details_blocks_contents() { + assert_eq!(MOVIE_DETAILS_BLOCKS.len(), 10); + assert!(MOVIE_DETAILS_BLOCKS.contains(&ActiveRadarrBlock::MovieDetails)); + assert!(MOVIE_DETAILS_BLOCKS.contains(&ActiveRadarrBlock::MovieHistory)); + assert!(MOVIE_DETAILS_BLOCKS.contains(&ActiveRadarrBlock::FileInfo)); + assert!(MOVIE_DETAILS_BLOCKS.contains(&ActiveRadarrBlock::Cast)); + assert!(MOVIE_DETAILS_BLOCKS.contains(&ActiveRadarrBlock::Crew)); + assert!(MOVIE_DETAILS_BLOCKS.contains(&ActiveRadarrBlock::AutomaticallySearchMoviePrompt)); + assert!(MOVIE_DETAILS_BLOCKS.contains(&ActiveRadarrBlock::UpdateAndScanPrompt)); + assert!(MOVIE_DETAILS_BLOCKS.contains(&ActiveRadarrBlock::ManualSearch)); + assert!(MOVIE_DETAILS_BLOCKS.contains(&ActiveRadarrBlock::ManualSearchSortPrompt)); + assert!(MOVIE_DETAILS_BLOCKS.contains(&ActiveRadarrBlock::ManualSearchConfirmPrompt)); + } + + #[test] + fn test_collection_details_blocks_contents() { + assert_eq!(COLLECTION_DETAILS_BLOCKS.len(), 2); + assert!(COLLECTION_DETAILS_BLOCKS.contains(&ActiveRadarrBlock::CollectionDetails)); + assert!(COLLECTION_DETAILS_BLOCKS.contains(&ActiveRadarrBlock::ViewMovieOverview)); + } + + #[test] + fn test_search_blocks_contents() { + assert_eq!(SEARCH_BLOCKS.len(), 2); + assert!(SEARCH_BLOCKS.contains(&ActiveRadarrBlock::SearchMovie)); + assert!(SEARCH_BLOCKS.contains(&ActiveRadarrBlock::SearchCollection)); + } + + #[test] + fn test_filter_blocks_contents() { + assert_eq!(FILTER_BLOCKS.len(), 2); + assert!(FILTER_BLOCKS.contains(&ActiveRadarrBlock::FilterMovies)); + assert!(FILTER_BLOCKS.contains(&ActiveRadarrBlock::FilterCollections)); + } + + #[test] + fn test_delete_movie_blocks_contents() { + assert_eq!(DELETE_MOVIE_BLOCKS.len(), 4); + assert!(DELETE_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::DeleteMoviePrompt)); + assert!(DELETE_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::DeleteMovieConfirmPrompt)); + assert!(DELETE_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::DeleteMovieToggleDeleteFile)); + assert!(DELETE_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::DeleteMovieToggleAddListExclusion)); + } + + #[test] + fn test_indexer_settings_blocks_contents() { + assert_eq!(INDEXER_SETTINGS_BLOCKS.len(), 10); + assert!(INDEXER_SETTINGS_BLOCKS.contains(&ActiveRadarrBlock::IndexerSettingsPrompt)); + assert!( + INDEXER_SETTINGS_BLOCKS.contains(&ActiveRadarrBlock::IndexerSettingsAvailabilityDelayInput) + ); + assert!(INDEXER_SETTINGS_BLOCKS.contains(&ActiveRadarrBlock::IndexerSettingsConfirmPrompt)); + assert!(INDEXER_SETTINGS_BLOCKS.contains(&ActiveRadarrBlock::IndexerSettingsMaximumSizeInput)); + assert!(INDEXER_SETTINGS_BLOCKS.contains(&ActiveRadarrBlock::IndexerSettingsMinimumAgeInput)); + assert!(INDEXER_SETTINGS_BLOCKS.contains(&ActiveRadarrBlock::IndexerSettingsRetentionInput)); + assert!( + INDEXER_SETTINGS_BLOCKS.contains(&ActiveRadarrBlock::IndexerSettingsRssSyncIntervalInput) + ); + assert!(INDEXER_SETTINGS_BLOCKS + .contains(&ActiveRadarrBlock::IndexerSettingsToggleAllowHardcodedSubs)); + assert!(INDEXER_SETTINGS_BLOCKS + .contains(&ActiveRadarrBlock::IndexerSettingsTogglePreferIndexerFlags)); + assert!(INDEXER_SETTINGS_BLOCKS + .contains(&ActiveRadarrBlock::IndexerSettingsWhitelistedSubtitleTagsInput)); + } + + #[test] + fn test_system_details_blocks_contents() { + assert_eq!(SYSTEM_DETAILS_BLOCKS.len(), 5); + assert!(SYSTEM_DETAILS_BLOCKS.contains(&ActiveRadarrBlock::SystemLogs)); + assert!(SYSTEM_DETAILS_BLOCKS.contains(&ActiveRadarrBlock::SystemQueuedEvents)); + assert!(SYSTEM_DETAILS_BLOCKS.contains(&ActiveRadarrBlock::SystemTasks)); + assert!(SYSTEM_DETAILS_BLOCKS.contains(&ActiveRadarrBlock::SystemTaskStartConfirmPrompt)); + assert!(SYSTEM_DETAILS_BLOCKS.contains(&ActiveRadarrBlock::SystemUpdates)); + } + + #[test] + fn test_add_movie_selection_blocks_ordering() { + let mut add_movie_block_iter = ADD_MOVIE_SELECTION_BLOCKS.iter(); + + assert_eq!( + add_movie_block_iter.next().unwrap(), + &ActiveRadarrBlock::AddMovieSelectRootFolder + ); + assert_eq!( + add_movie_block_iter.next().unwrap(), + &ActiveRadarrBlock::AddMovieSelectMonitor + ); + assert_eq!( + add_movie_block_iter.next().unwrap(), + &ActiveRadarrBlock::AddMovieSelectMinimumAvailability + ); + assert_eq!( + add_movie_block_iter.next().unwrap(), + &ActiveRadarrBlock::AddMovieSelectQualityProfile + ); + assert_eq!( + add_movie_block_iter.next().unwrap(), + &ActiveRadarrBlock::AddMovieTagsInput + ); + assert_eq!( + add_movie_block_iter.next().unwrap(), + &ActiveRadarrBlock::AddMovieConfirmPrompt + ); + assert_eq!(add_movie_block_iter.next(), None); + } + + #[test] + fn test_edit_movie_selection_blocks_ordering() { + let mut edit_movie_block_iter = EDIT_MOVIE_SELECTION_BLOCKS.iter(); + + assert_eq!( + edit_movie_block_iter.next().unwrap(), + &ActiveRadarrBlock::EditMovieToggleMonitored + ); + assert_eq!( + edit_movie_block_iter.next().unwrap(), + &ActiveRadarrBlock::EditMovieSelectMinimumAvailability + ); + assert_eq!( + edit_movie_block_iter.next().unwrap(), + &ActiveRadarrBlock::EditMovieSelectQualityProfile + ); + assert_eq!( + edit_movie_block_iter.next().unwrap(), + &ActiveRadarrBlock::EditMoviePathInput + ); + assert_eq!( + edit_movie_block_iter.next().unwrap(), + &ActiveRadarrBlock::EditMovieTagsInput + ); + assert_eq!( + edit_movie_block_iter.next().unwrap(), + &ActiveRadarrBlock::EditMovieConfirmPrompt + ); + assert_eq!(edit_movie_block_iter.next(), None); + } + + #[test] + fn test_edit_collection_selection_blocks_ordering() { + let mut edit_collection_block_iter = EDIT_COLLECTION_SELECTION_BLOCKS.iter(); + + assert_eq!( + edit_collection_block_iter.next().unwrap(), + &ActiveRadarrBlock::EditCollectionToggleMonitored + ); + assert_eq!( + edit_collection_block_iter.next().unwrap(), + &ActiveRadarrBlock::EditCollectionSelectMinimumAvailability + ); + assert_eq!( + edit_collection_block_iter.next().unwrap(), + &ActiveRadarrBlock::EditCollectionSelectQualityProfile + ); + assert_eq!( + edit_collection_block_iter.next().unwrap(), + &ActiveRadarrBlock::EditCollectionRootFolderPathInput + ); + assert_eq!( + edit_collection_block_iter.next().unwrap(), + &ActiveRadarrBlock::EditCollectionToggleSearchOnAdd + ); + assert_eq!( + edit_collection_block_iter.next().unwrap(), + &ActiveRadarrBlock::EditCollectionConfirmPrompt + ); + assert_eq!(edit_collection_block_iter.next(), None); + } + + #[test] + fn test_delete_movie_selection_blocks_ordering() { + let mut delete_movie_block_iter = DELETE_MOVIE_SELECTION_BLOCKS.iter(); + + assert_eq!( + delete_movie_block_iter.next().unwrap(), + &ActiveRadarrBlock::DeleteMovieToggleDeleteFile + ); + assert_eq!( + delete_movie_block_iter.next().unwrap(), + &ActiveRadarrBlock::DeleteMovieToggleAddListExclusion + ); + assert_eq!( + delete_movie_block_iter.next().unwrap(), + &ActiveRadarrBlock::DeleteMovieConfirmPrompt + ); + assert_eq!(delete_movie_block_iter.next(), None); + } + + #[test] + fn test_indexer_settings_selection_blocks_ordering() { + let mut indexer_settings_block_iter = INDEXER_SETTINGS_SELECTION_BLOCKS.iter(); + + assert_eq!( + indexer_settings_block_iter.next().unwrap(), + &ActiveRadarrBlock::IndexerSettingsMinimumAgeInput + ); + assert_eq!( + indexer_settings_block_iter.next().unwrap(), + &ActiveRadarrBlock::IndexerSettingsRetentionInput + ); + assert_eq!( + indexer_settings_block_iter.next().unwrap(), + &ActiveRadarrBlock::IndexerSettingsMaximumSizeInput + ); + assert_eq!( + indexer_settings_block_iter.next().unwrap(), + &ActiveRadarrBlock::IndexerSettingsTogglePreferIndexerFlags + ); + assert_eq!( + indexer_settings_block_iter.next().unwrap(), + &ActiveRadarrBlock::IndexerSettingsAvailabilityDelayInput + ); + assert_eq!( + indexer_settings_block_iter.next().unwrap(), + &ActiveRadarrBlock::IndexerSettingsRssSyncIntervalInput + ); + assert_eq!( + indexer_settings_block_iter.next().unwrap(), + &ActiveRadarrBlock::IndexerSettingsWhitelistedSubtitleTagsInput + ); + assert_eq!( + indexer_settings_block_iter.next().unwrap(), + &ActiveRadarrBlock::IndexerSettingsToggleAllowHardcodedSubs + ); + assert_eq!( + indexer_settings_block_iter.next().unwrap(), + &ActiveRadarrBlock::IndexerSettingsConfirmPrompt + ); + assert_eq!(indexer_settings_block_iter.next(), None); + } + } +} diff --git a/src/app/radarr/radarr_test_utils.rs b/src/models/servarr_data/radarr_test_utils.rs similarity index 98% rename from src/app/radarr/radarr_test_utils.rs rename to src/models/servarr_data/radarr_test_utils.rs index c16873c..ef5180f 100644 --- a/src/app/radarr/radarr_test_utils.rs +++ b/src/models/servarr_data/radarr_test_utils.rs @@ -1,10 +1,10 @@ #[cfg(test)] pub mod utils { - use crate::app::radarr::RadarrData; use crate::models::radarr_models::{ AddMovieSearchResult, Collection, CollectionMovie, Credit, MinimumAvailability, Monitor, Movie, MovieHistoryItem, Release, ReleaseField, RootFolder, }; + use crate::models::servarr_data::radarr_data::RadarrData; use crate::models::{HorizontallyScrollableText, ScrollableText}; pub fn create_test_radarr_data<'a>() -> RadarrData<'a> { diff --git a/src/network/radarr_network.rs b/src/network/radarr_network.rs index b261ad8..a523523 100644 --- a/src/network/radarr_network.rs +++ b/src/network/radarr_network.rs @@ -6,7 +6,6 @@ use serde::Serialize; use serde_json::{json, Number, Value}; use urlencoding::encode; -use crate::app::radarr::ActiveRadarrBlock; use crate::app::RadarrConfig; use crate::models::radarr_models::{ AddMovieBody, AddMovieSearchResult, AddOptions, AddRootFolderBody, Collection, CollectionMovie, @@ -14,6 +13,7 @@ use crate::models::radarr_models::{ IndexerSettings, LogResponse, Movie, MovieCommandBody, MovieHistoryItem, QualityProfile, QueueEvent, Release, ReleaseDownloadBody, RootFolder, SystemStatus, Tag, Task, Update, }; +use crate::models::servarr_data::radarr_data::ActiveRadarrBlock; use crate::models::{HorizontallyScrollableText, Route, Scrollable, ScrollableText}; use crate::network::{Network, NetworkEvent, RequestMethod, RequestProps}; use crate::utils::{convert_runtime, convert_to_gb}; diff --git a/src/network/radarr_network_tests.rs b/src/network/radarr_network_tests.rs index fc19c1e..33b298e 100644 --- a/src/network/radarr_network_tests.rs +++ b/src/network/radarr_network_tests.rs @@ -12,11 +12,11 @@ mod test { use tokio::sync::Mutex; use tokio_util::sync::CancellationToken; - use crate::app::radarr::ActiveRadarrBlock; use crate::models::radarr_models::{ CollectionMovie, IndexerField, IndexerSelectOption, Language, MediaInfo, MinimumAvailability, Monitor, MovieFile, Quality, QualityWrapper, Rating, RatingsList, }; + use crate::models::servarr_data::radarr_data::ActiveRadarrBlock; use crate::models::HorizontallyScrollableText; use crate::App; diff --git a/src/ui/radarr_ui/collections/collection_details_ui.rs b/src/ui/radarr_ui/collections/collection_details_ui.rs index 6521681..97f2d90 100644 --- a/src/ui/radarr_ui/collections/collection_details_ui.rs +++ b/src/ui/radarr_ui/collections/collection_details_ui.rs @@ -6,9 +6,9 @@ use tui::Frame; use crate::app::context_clues::{build_context_clue_string, BARE_POPUP_CONTEXT_CLUES}; use crate::app::radarr::radarr_context_clues::COLLECTION_DETAILS_CONTEXT_CLUES; -use crate::app::radarr::{ActiveRadarrBlock, COLLECTION_DETAILS_BLOCKS}; use crate::app::App; use crate::models::radarr_models::CollectionMovie; +use crate::models::servarr_data::radarr_data::{ActiveRadarrBlock, COLLECTION_DETAILS_BLOCKS}; use crate::models::Route; use crate::ui::radarr_ui::collections::draw_collections; use crate::ui::utils::{ diff --git a/src/ui/radarr_ui/collections/collection_details_ui_tests.rs b/src/ui/radarr_ui/collections/collection_details_ui_tests.rs index 0d70de7..48a0dca 100644 --- a/src/ui/radarr_ui/collections/collection_details_ui_tests.rs +++ b/src/ui/radarr_ui/collections/collection_details_ui_tests.rs @@ -2,7 +2,7 @@ mod tests { use strum::IntoEnumIterator; - use crate::app::radarr::{ActiveRadarrBlock, COLLECTION_DETAILS_BLOCKS}; + use crate::models::servarr_data::radarr_data::{ActiveRadarrBlock, COLLECTION_DETAILS_BLOCKS}; use crate::ui::radarr_ui::collections::collection_details_ui::CollectionDetailsUi; use crate::ui::DrawUi; diff --git a/src/ui/radarr_ui/collections/collections_ui_tests.rs b/src/ui/radarr_ui/collections/collections_ui_tests.rs index cd0c3ca..94a7996 100644 --- a/src/ui/radarr_ui/collections/collections_ui_tests.rs +++ b/src/ui/radarr_ui/collections/collections_ui_tests.rs @@ -2,7 +2,7 @@ mod tests { use strum::IntoEnumIterator; - use crate::app::radarr::{ + use crate::models::servarr_data::radarr_data::{ ActiveRadarrBlock, COLLECTIONS_BLOCKS, COLLECTION_DETAILS_BLOCKS, EDIT_COLLECTION_BLOCKS, }; use crate::ui::radarr_ui::collections::CollectionsUi; diff --git a/src/ui/radarr_ui/collections/edit_collection_ui.rs b/src/ui/radarr_ui/collections/edit_collection_ui.rs index 97d5f1b..ab7fe7c 100644 --- a/src/ui/radarr_ui/collections/edit_collection_ui.rs +++ b/src/ui/radarr_ui/collections/edit_collection_ui.rs @@ -2,8 +2,10 @@ use tui::backend::Backend; use tui::layout::{Constraint, Rect}; use tui::Frame; -use crate::app::radarr::{ActiveRadarrBlock, COLLECTION_DETAILS_BLOCKS, EDIT_COLLECTION_BLOCKS}; use crate::app::App; +use crate::models::servarr_data::radarr_data::{ + ActiveRadarrBlock, COLLECTION_DETAILS_BLOCKS, EDIT_COLLECTION_BLOCKS, +}; use crate::models::Route; use crate::ui::radarr_ui::collections::collection_details_ui::CollectionDetailsUi; use crate::ui::radarr_ui::collections::draw_collections; diff --git a/src/ui/radarr_ui/collections/edit_collection_ui_tests.rs b/src/ui/radarr_ui/collections/edit_collection_ui_tests.rs index 760e71d..32c9ec7 100644 --- a/src/ui/radarr_ui/collections/edit_collection_ui_tests.rs +++ b/src/ui/radarr_ui/collections/edit_collection_ui_tests.rs @@ -2,7 +2,7 @@ mod tests { use strum::IntoEnumIterator; - use crate::app::radarr::{ActiveRadarrBlock, EDIT_COLLECTION_BLOCKS}; + use crate::models::servarr_data::radarr_data::{ActiveRadarrBlock, EDIT_COLLECTION_BLOCKS}; use crate::ui::radarr_ui::collections::edit_collection_ui::EditCollectionUi; use crate::ui::DrawUi; diff --git a/src/ui/radarr_ui/collections/mod.rs b/src/ui/radarr_ui/collections/mod.rs index 30dca14..ee7e39e 100644 --- a/src/ui/radarr_ui/collections/mod.rs +++ b/src/ui/radarr_ui/collections/mod.rs @@ -5,9 +5,9 @@ use tui::Frame; pub(super) use collection_details_ui::draw_collection_details; -use crate::app::radarr::{ActiveRadarrBlock, COLLECTIONS_BLOCKS}; use crate::app::App; use crate::models::radarr_models::Collection; +use crate::models::servarr_data::radarr_data::{ActiveRadarrBlock, COLLECTIONS_BLOCKS}; use crate::models::Route; use crate::ui::radarr_ui::collections::collection_details_ui::CollectionDetailsUi; use crate::ui::radarr_ui::collections::edit_collection_ui::EditCollectionUi; diff --git a/src/ui/radarr_ui/downloads/downloads_ui_tests.rs b/src/ui/radarr_ui/downloads/downloads_ui_tests.rs index ab08b40..596a596 100644 --- a/src/ui/radarr_ui/downloads/downloads_ui_tests.rs +++ b/src/ui/radarr_ui/downloads/downloads_ui_tests.rs @@ -2,7 +2,7 @@ mod tests { use strum::IntoEnumIterator; - use crate::app::radarr::{ActiveRadarrBlock, DOWNLOADS_BLOCKS}; + use crate::models::servarr_data::radarr_data::{ActiveRadarrBlock, DOWNLOADS_BLOCKS}; use crate::ui::radarr_ui::downloads::DownloadsUi; use crate::ui::DrawUi; diff --git a/src/ui/radarr_ui/downloads/mod.rs b/src/ui/radarr_ui/downloads/mod.rs index e7a44ef..ddcf209 100644 --- a/src/ui/radarr_ui/downloads/mod.rs +++ b/src/ui/radarr_ui/downloads/mod.rs @@ -3,9 +3,9 @@ use tui::layout::{Constraint, Rect}; use tui::widgets::{Cell, Row}; use tui::Frame; -use crate::app::radarr::{ActiveRadarrBlock, DOWNLOADS_BLOCKS}; use crate::app::App; use crate::models::radarr_models::DownloadRecord; +use crate::models::servarr_data::radarr_data::{ActiveRadarrBlock, DOWNLOADS_BLOCKS}; use crate::models::{HorizontallyScrollableText, Route}; use crate::ui::utils::{get_width_from_percentage, layout_block_top_border, style_primary}; use crate::ui::{draw_prompt_box, draw_prompt_popup_over, draw_table, DrawUi, TableProps}; diff --git a/src/ui/radarr_ui/indexers/indexer_settings_ui.rs b/src/ui/radarr_ui/indexers/indexer_settings_ui.rs index a02ffc2..774ea38 100644 --- a/src/ui/radarr_ui/indexers/indexer_settings_ui.rs +++ b/src/ui/radarr_ui/indexers/indexer_settings_ui.rs @@ -2,8 +2,8 @@ use tui::backend::Backend; use tui::layout::Rect; use tui::Frame; -use crate::app::radarr::INDEXER_SETTINGS_BLOCKS; use crate::app::App; +use crate::models::servarr_data::radarr_data::INDEXER_SETTINGS_BLOCKS; use crate::models::Route; use crate::ui::DrawUi; diff --git a/src/ui/radarr_ui/indexers/indexer_settings_ui_tests.rs b/src/ui/radarr_ui/indexers/indexer_settings_ui_tests.rs index 7072738..8877b37 100644 --- a/src/ui/radarr_ui/indexers/indexer_settings_ui_tests.rs +++ b/src/ui/radarr_ui/indexers/indexer_settings_ui_tests.rs @@ -2,7 +2,7 @@ mod tests { use strum::IntoEnumIterator; - use crate::app::radarr::{ActiveRadarrBlock, INDEXER_SETTINGS_BLOCKS}; + use crate::models::servarr_data::radarr_data::{ActiveRadarrBlock, INDEXER_SETTINGS_BLOCKS}; use crate::ui::radarr_ui::indexers::indexer_settings_ui::IndexerSettingsUi; use crate::ui::DrawUi; diff --git a/src/ui/radarr_ui/indexers/indexers_ui_tests.rs b/src/ui/radarr_ui/indexers/indexers_ui_tests.rs index e327cc6..89edd2b 100644 --- a/src/ui/radarr_ui/indexers/indexers_ui_tests.rs +++ b/src/ui/radarr_ui/indexers/indexers_ui_tests.rs @@ -2,7 +2,9 @@ mod tests { use strum::IntoEnumIterator; - use crate::app::radarr::{ActiveRadarrBlock, INDEXERS_BLOCKS, INDEXER_SETTINGS_BLOCKS}; + use crate::models::servarr_data::radarr_data::{ + ActiveRadarrBlock, INDEXERS_BLOCKS, INDEXER_SETTINGS_BLOCKS, + }; use crate::ui::radarr_ui::indexers::IndexersUi; use crate::ui::DrawUi; diff --git a/src/ui/radarr_ui/indexers/mod.rs b/src/ui/radarr_ui/indexers/mod.rs index 3b14e25..ef314f5 100644 --- a/src/ui/radarr_ui/indexers/mod.rs +++ b/src/ui/radarr_ui/indexers/mod.rs @@ -4,9 +4,9 @@ use tui::text::Text; use tui::widgets::{Cell, Row}; use tui::Frame; -use crate::app::radarr::{ActiveRadarrBlock, INDEXERS_BLOCKS}; use crate::app::App; use crate::models::radarr_models::Indexer; +use crate::models::servarr_data::radarr_data::{ActiveRadarrBlock, INDEXERS_BLOCKS}; use crate::models::Route; use crate::ui::radarr_ui::indexers::indexer_settings_ui::IndexerSettingsUi; use crate::ui::utils::{layout_block_top_border, style_failure, style_primary, style_success}; diff --git a/src/ui/radarr_ui/library/add_movie_ui.rs b/src/ui/radarr_ui/library/add_movie_ui.rs index e971853..4980984 100644 --- a/src/ui/radarr_ui/library/add_movie_ui.rs +++ b/src/ui/radarr_ui/library/add_movie_ui.rs @@ -6,8 +6,8 @@ use tui::Frame; use crate::app::context_clues::{build_context_clue_string, BARE_POPUP_CONTEXT_CLUES}; use crate::app::radarr::radarr_context_clues::ADD_MOVIE_SEARCH_RESULTS_CONTEXT_CLUES; -use crate::app::radarr::{ActiveRadarrBlock, ADD_MOVIE_BLOCKS}; use crate::models::radarr_models::AddMovieSearchResult; +use crate::models::servarr_data::radarr_data::{ActiveRadarrBlock, ADD_MOVIE_BLOCKS}; use crate::models::Route; use crate::ui::radarr_ui::collections::{draw_collection_details, draw_collections}; use crate::ui::radarr_ui::library::draw_library; diff --git a/src/ui/radarr_ui/library/add_movie_ui_tests.rs b/src/ui/radarr_ui/library/add_movie_ui_tests.rs index 2ca8f6e..4b9c360 100644 --- a/src/ui/radarr_ui/library/add_movie_ui_tests.rs +++ b/src/ui/radarr_ui/library/add_movie_ui_tests.rs @@ -2,7 +2,7 @@ mod tests { use strum::IntoEnumIterator; - use crate::app::radarr::{ActiveRadarrBlock, ADD_MOVIE_BLOCKS}; + use crate::models::servarr_data::radarr_data::{ActiveRadarrBlock, ADD_MOVIE_BLOCKS}; use crate::ui::radarr_ui::library::add_movie_ui::AddMovieUi; use crate::ui::DrawUi; diff --git a/src/ui/radarr_ui/library/delete_movie_ui.rs b/src/ui/radarr_ui/library/delete_movie_ui.rs index d9d745e..a30a1ff 100644 --- a/src/ui/radarr_ui/library/delete_movie_ui.rs +++ b/src/ui/radarr_ui/library/delete_movie_ui.rs @@ -2,8 +2,8 @@ use tui::backend::Backend; use tui::layout::Rect; use tui::Frame; -use crate::app::radarr::{ActiveRadarrBlock, DELETE_MOVIE_BLOCKS}; use crate::app::App; +use crate::models::servarr_data::radarr_data::{ActiveRadarrBlock, DELETE_MOVIE_BLOCKS}; use crate::models::Route; use crate::ui::radarr_ui::library::draw_library; use crate::ui::{draw_prompt_box_with_checkboxes, draw_prompt_popup_over, DrawUi}; diff --git a/src/ui/radarr_ui/library/delete_movie_ui_tests.rs b/src/ui/radarr_ui/library/delete_movie_ui_tests.rs index 8713a9f..6837d3f 100644 --- a/src/ui/radarr_ui/library/delete_movie_ui_tests.rs +++ b/src/ui/radarr_ui/library/delete_movie_ui_tests.rs @@ -2,7 +2,7 @@ mod tests { use strum::IntoEnumIterator; - use crate::app::radarr::{ActiveRadarrBlock, DELETE_MOVIE_BLOCKS}; + use crate::models::servarr_data::radarr_data::{ActiveRadarrBlock, DELETE_MOVIE_BLOCKS}; use crate::ui::radarr_ui::library::delete_movie_ui::DeleteMovieUi; use crate::ui::DrawUi; diff --git a/src/ui/radarr_ui/library/edit_movie_ui.rs b/src/ui/radarr_ui/library/edit_movie_ui.rs index 4e1cc39..f8cfbf0 100644 --- a/src/ui/radarr_ui/library/edit_movie_ui.rs +++ b/src/ui/radarr_ui/library/edit_movie_ui.rs @@ -2,8 +2,10 @@ use tui::backend::Backend; use tui::layout::{Constraint, Rect}; use tui::Frame; -use crate::app::radarr::{ActiveRadarrBlock, EDIT_MOVIE_BLOCKS, MOVIE_DETAILS_BLOCKS}; use crate::app::App; +use crate::models::servarr_data::radarr_data::{ + ActiveRadarrBlock, EDIT_MOVIE_BLOCKS, MOVIE_DETAILS_BLOCKS, +}; use crate::models::Route; use crate::ui::radarr_ui::library::draw_library; use crate::ui::radarr_ui::library::movie_details_ui::MovieDetailsUi; diff --git a/src/ui/radarr_ui/library/edit_movie_ui_tests.rs b/src/ui/radarr_ui/library/edit_movie_ui_tests.rs index 2c17fc0..47cdc9c 100644 --- a/src/ui/radarr_ui/library/edit_movie_ui_tests.rs +++ b/src/ui/radarr_ui/library/edit_movie_ui_tests.rs @@ -2,7 +2,7 @@ mod tests { use strum::IntoEnumIterator; - use crate::app::radarr::{ActiveRadarrBlock, EDIT_MOVIE_BLOCKS}; + use crate::models::servarr_data::radarr_data::{ActiveRadarrBlock, EDIT_MOVIE_BLOCKS}; use crate::ui::radarr_ui::library::edit_movie_ui::EditMovieUi; use crate::ui::DrawUi; diff --git a/src/ui/radarr_ui/library/library_ui_tests.rs b/src/ui/radarr_ui/library/library_ui_tests.rs index b8fdc15..c37708a 100644 --- a/src/ui/radarr_ui/library/library_ui_tests.rs +++ b/src/ui/radarr_ui/library/library_ui_tests.rs @@ -2,7 +2,7 @@ mod tests { use strum::IntoEnumIterator; - use crate::app::radarr::{ + use crate::models::servarr_data::radarr_data::{ ActiveRadarrBlock, ADD_MOVIE_BLOCKS, DELETE_MOVIE_BLOCKS, EDIT_MOVIE_BLOCKS, LIBRARY_BLOCKS, MOVIE_DETAILS_BLOCKS, }; diff --git a/src/ui/radarr_ui/library/mod.rs b/src/ui/radarr_ui/library/mod.rs index 394a80b..07b0e2a 100644 --- a/src/ui/radarr_ui/library/mod.rs +++ b/src/ui/radarr_ui/library/mod.rs @@ -3,9 +3,9 @@ use tui::layout::{Constraint, Rect}; use tui::widgets::{Cell, Row}; use tui::Frame; -use crate::app::radarr::{ActiveRadarrBlock, LIBRARY_BLOCKS}; use crate::app::App; use crate::models::radarr_models::Movie; +use crate::models::servarr_data::radarr_data::{ActiveRadarrBlock, LIBRARY_BLOCKS}; use crate::models::Route; use crate::ui::radarr_ui::library::add_movie_ui::AddMovieUi; use crate::ui::radarr_ui::library::delete_movie_ui::DeleteMovieUi; diff --git a/src/ui/radarr_ui/library/movie_details_ui.rs b/src/ui/radarr_ui/library/movie_details_ui.rs index d5a7339..f420287 100644 --- a/src/ui/radarr_ui/library/movie_details_ui.rs +++ b/src/ui/radarr_ui/library/movie_details_ui.rs @@ -7,9 +7,9 @@ use tui::text::{Line, Span, Text}; use tui::widgets::{Cell, ListItem, Paragraph, Row, Wrap}; use tui::Frame; -use crate::app::radarr::{ActiveRadarrBlock, MOVIE_DETAILS_BLOCKS}; use crate::app::App; use crate::models::radarr_models::{Credit, MovieHistoryItem, Release, ReleaseField}; +use crate::models::servarr_data::radarr_data::{ActiveRadarrBlock, MOVIE_DETAILS_BLOCKS}; use crate::models::Route; use crate::ui::radarr_ui::library::draw_library; use crate::ui::utils::{ diff --git a/src/ui/radarr_ui/library/movie_details_ui_tests.rs b/src/ui/radarr_ui/library/movie_details_ui_tests.rs index 65b8140..d7d1cb1 100644 --- a/src/ui/radarr_ui/library/movie_details_ui_tests.rs +++ b/src/ui/radarr_ui/library/movie_details_ui_tests.rs @@ -2,7 +2,7 @@ mod tests { use strum::IntoEnumIterator; - use crate::app::radarr::{ActiveRadarrBlock, MOVIE_DETAILS_BLOCKS}; + use crate::models::servarr_data::radarr_data::{ActiveRadarrBlock, MOVIE_DETAILS_BLOCKS}; use crate::ui::radarr_ui::library::movie_details_ui::MovieDetailsUi; use crate::ui::DrawUi; diff --git a/src/ui/radarr_ui/mod.rs b/src/ui/radarr_ui/mod.rs index 9a62bb1..a3010d5 100644 --- a/src/ui/radarr_ui/mod.rs +++ b/src/ui/radarr_ui/mod.rs @@ -9,10 +9,12 @@ use tui::widgets::ListItem; use tui::widgets::Paragraph; use tui::Frame; -use crate::app::radarr::{ActiveRadarrBlock, RadarrData, FILTER_BLOCKS, SEARCH_BLOCKS}; use crate::app::App; use crate::logos::RADARR_LOGO; use crate::models::radarr_models::{DiskSpace, DownloadRecord, Movie, RootFolder}; +use crate::models::servarr_data::radarr_data::{ + ActiveRadarrBlock, RadarrData, FILTER_BLOCKS, SEARCH_BLOCKS, +}; use crate::models::Route; use crate::ui::draw_selectable_list; use crate::ui::draw_tabs; diff --git a/src/ui/radarr_ui/radarr_ui_tests.rs b/src/ui/radarr_ui/radarr_ui_tests.rs index b1dc966..d89b78c 100644 --- a/src/ui/radarr_ui/radarr_ui_tests.rs +++ b/src/ui/radarr_ui/radarr_ui_tests.rs @@ -2,7 +2,7 @@ mod tests { use strum::IntoEnumIterator; - use crate::app::radarr::ActiveRadarrBlock; + use crate::models::servarr_data::radarr_data::ActiveRadarrBlock; use crate::ui::radarr_ui::RadarrUi; use crate::ui::DrawUi; diff --git a/src/ui/radarr_ui/root_folders/mod.rs b/src/ui/radarr_ui/root_folders/mod.rs index 70e7610..1871761 100644 --- a/src/ui/radarr_ui/root_folders/mod.rs +++ b/src/ui/radarr_ui/root_folders/mod.rs @@ -3,9 +3,9 @@ use tui::layout::{Alignment, Constraint, Rect}; use tui::widgets::{Cell, Paragraph, Row}; use tui::Frame; -use crate::app::radarr::{ActiveRadarrBlock, ROOT_FOLDERS_BLOCKS}; use crate::app::App; use crate::models::radarr_models::RootFolder; +use crate::models::servarr_data::radarr_data::{ActiveRadarrBlock, ROOT_FOLDERS_BLOCKS}; use crate::models::Route; use crate::ui::utils::{ borderless_block, layout_block_top_border, show_cursor, style_default, style_help, style_primary, diff --git a/src/ui/radarr_ui/root_folders/root_folders_ui_tests.rs b/src/ui/radarr_ui/root_folders/root_folders_ui_tests.rs index 09c3d29..e5a3b8d 100644 --- a/src/ui/radarr_ui/root_folders/root_folders_ui_tests.rs +++ b/src/ui/radarr_ui/root_folders/root_folders_ui_tests.rs @@ -2,7 +2,7 @@ mod tests { use strum::IntoEnumIterator; - use crate::app::radarr::{ActiveRadarrBlock, ROOT_FOLDERS_BLOCKS}; + use crate::models::servarr_data::radarr_data::{ActiveRadarrBlock, ROOT_FOLDERS_BLOCKS}; use crate::ui::radarr_ui::root_folders::RootFoldersUi; use crate::ui::DrawUi; diff --git a/src/ui/radarr_ui/system/mod.rs b/src/ui/radarr_ui/system/mod.rs index bf1345b..7cbb3ce 100644 --- a/src/ui/radarr_ui/system/mod.rs +++ b/src/ui/radarr_ui/system/mod.rs @@ -11,7 +11,9 @@ use tui::{ Frame, }; +use crate::app::App; use crate::models::radarr_models::Task; +use crate::models::servarr_data::radarr_data::ActiveRadarrBlock; use crate::ui::radarr_ui::radarr_ui_utils::{ convert_to_minutes_hours_days, determine_log_style_by_level, }; @@ -19,7 +21,6 @@ use crate::ui::radarr_ui::system::system_details_ui::SystemDetailsUi; use crate::ui::utils::{layout_block_top_border, style_help, style_primary}; use crate::ui::{draw_table, ListProps, TableProps}; use crate::{ - app::{radarr::ActiveRadarrBlock, App}, models::Route, ui::{ draw_list_box, diff --git a/src/ui/radarr_ui/system/system_details_ui.rs b/src/ui/radarr_ui/system/system_details_ui.rs index 978648b..28cc537 100644 --- a/src/ui/radarr_ui/system/system_details_ui.rs +++ b/src/ui/radarr_ui/system/system_details_ui.rs @@ -6,8 +6,8 @@ use tui::Frame; use crate::app::context_clues::{build_context_clue_string, BARE_POPUP_CONTEXT_CLUES}; use crate::app::radarr::radarr_context_clues::SYSTEM_TASKS_CONTEXT_CLUES; -use crate::app::radarr::{ActiveRadarrBlock, SYSTEM_DETAILS_BLOCKS}; use crate::app::App; +use crate::models::servarr_data::radarr_data::{ActiveRadarrBlock, SYSTEM_DETAILS_BLOCKS}; use crate::models::Route; use crate::ui::radarr_ui::radarr_ui_utils::determine_log_style_by_level; use crate::ui::radarr_ui::system::{ diff --git a/src/ui/radarr_ui/system/system_details_ui_tests.rs b/src/ui/radarr_ui/system/system_details_ui_tests.rs index 85f184d..6792558 100644 --- a/src/ui/radarr_ui/system/system_details_ui_tests.rs +++ b/src/ui/radarr_ui/system/system_details_ui_tests.rs @@ -2,7 +2,7 @@ mod tests { use strum::IntoEnumIterator; - use crate::app::radarr::{ActiveRadarrBlock, SYSTEM_DETAILS_BLOCKS}; + use crate::models::servarr_data::radarr_data::{ActiveRadarrBlock, SYSTEM_DETAILS_BLOCKS}; use crate::ui::radarr_ui::system::system_details_ui::SystemDetailsUi; use crate::ui::DrawUi; diff --git a/src/ui/radarr_ui/system/system_ui_tests.rs b/src/ui/radarr_ui/system/system_ui_tests.rs index 2663c4f..f7886f3 100644 --- a/src/ui/radarr_ui/system/system_ui_tests.rs +++ b/src/ui/radarr_ui/system/system_ui_tests.rs @@ -2,7 +2,7 @@ mod tests { use strum::IntoEnumIterator; - use crate::app::radarr::{ActiveRadarrBlock, SYSTEM_DETAILS_BLOCKS}; + use crate::models::servarr_data::radarr_data::{ActiveRadarrBlock, SYSTEM_DETAILS_BLOCKS}; use crate::ui::radarr_ui::system::SystemUi; use crate::ui::DrawUi;