diff --git a/src/app/sonarr/mod.rs b/src/app/sonarr/mod.rs index 471055f..25ea0d7 100644 --- a/src/app/sonarr/mod.rs +++ b/src/app/sonarr/mod.rs @@ -187,12 +187,11 @@ impl<'a> App<'a> { async fn check_for_sonarr_prompt_action(&mut self) { if self.data.sonarr_data.prompt_confirm { self.data.sonarr_data.prompt_confirm = false; - if let Some(sonarr_event) = &self.data.sonarr_data.prompt_confirm_action { + if let Some(sonarr_event) = self.data.sonarr_data.prompt_confirm_action.take() { self - .dispatch_network_event(sonarr_event.clone().into()) + .dispatch_network_event(sonarr_event.into()) .await; self.should_refresh = true; - self.data.sonarr_data.prompt_confirm_action = None; } } } diff --git a/src/handlers/radarr_handlers/collections/edit_collection_handler.rs b/src/handlers/radarr_handlers/collections/edit_collection_handler.rs index a20494d..fbc59c0 100644 --- a/src/handlers/radarr_handlers/collections/edit_collection_handler.rs +++ b/src/handlers/radarr_handlers/collections/edit_collection_handler.rs @@ -22,6 +22,13 @@ pub(super) struct EditCollectionHandler<'a, 'b> { impl<'a, 'b> EditCollectionHandler<'a, 'b> { fn build_edit_collection_params(&mut self) -> EditCollectionParams { + let edit_collection_modal = self + .app + .data + .radarr_data + .edit_collection_modal + .take() + .expect("EditCollectionModal is None"); let collection_id = self.app.data.radarr_data.collections.current_selection().id; let EditCollectionModal { path, @@ -29,13 +36,7 @@ impl<'a, 'b> EditCollectionHandler<'a, 'b> { minimum_availability_list, monitored, quality_profile_list, - } = self - .app - .data - .radarr_data - .edit_collection_modal - .as_ref() - .unwrap(); + } = edit_collection_modal; let quality_profile = quality_profile_list.current_selection(); let quality_profile_id = *self .app @@ -48,15 +49,13 @@ impl<'a, 'b> EditCollectionHandler<'a, 'b> { .next() .unwrap(); - let root_folder_path: String = path.text.clone(); - let monitored = monitored.unwrap_or_default(); + let root_folder_path = path.text; let search_on_add = search_on_add.unwrap_or_default(); let minimum_availability = *minimum_availability_list.current_selection(); - self.app.data.radarr_data.edit_collection_modal = None; EditCollectionParams { collection_id, - monitored: Some(monitored), + monitored, minimum_availability: Some(minimum_availability), quality_profile_id: Some(quality_profile_id), root_folder_path: Some(root_folder_path), diff --git a/src/handlers/radarr_handlers/indexers/edit_indexer_handler.rs b/src/handlers/radarr_handlers/indexers/edit_indexer_handler.rs index 04ca108..cbbcee3 100644 --- a/src/handlers/radarr_handlers/indexers/edit_indexer_handler.rs +++ b/src/handlers/radarr_handlers/indexers/edit_indexer_handler.rs @@ -21,56 +21,42 @@ pub(super) struct EditIndexerHandler<'a, 'b> { impl<'a, 'b> EditIndexerHandler<'a, 'b> { fn build_edit_indexer_params(&mut self) -> EditIndexerParams { - let indexer_id = self.app.data.radarr_data.indexers.current_selection().id; - let tags = self + let edit_indexer_modal = self .app .data .radarr_data .edit_indexer_modal - .as_ref() - .unwrap() - .tags - .text - .clone(); + .take() + .expect("Edit Indexer Modal is None"); + let indexer_id = self.app.data.radarr_data.indexers.current_selection().id; + let tags = edit_indexer_modal.tags.text; - let params = { - let EditIndexerModal { - name, - enable_rss, - enable_automatic_search, - enable_interactive_search, - url, - api_key, - seed_ratio, - priority, - .. - } = self - .app - .data - .radarr_data - .edit_indexer_modal - .as_ref() - .unwrap(); + let EditIndexerModal { + name, + enable_rss, + enable_automatic_search, + enable_interactive_search, + url, + api_key, + seed_ratio, + priority, + .. + } = edit_indexer_modal; - EditIndexerParams { - indexer_id, - name: Some(name.text.clone()), - enable_rss: Some(enable_rss.unwrap_or_default()), - enable_automatic_search: Some(enable_automatic_search.unwrap_or_default()), - enable_interactive_search: Some(enable_interactive_search.unwrap_or_default()), - url: Some(url.text.clone()), - api_key: Some(api_key.text.clone()), - seed_ratio: Some(seed_ratio.text.clone()), - tags: None, - tag_input_string: Some(tags), - priority: Some(*priority), - clear_tags: false, - } - }; - - self.app.data.radarr_data.edit_indexer_modal = None; - - params + EditIndexerParams { + indexer_id, + name: Some(name.text), + enable_rss: Some(enable_rss.unwrap_or_default()), + enable_automatic_search: Some(enable_automatic_search.unwrap_or_default()), + enable_interactive_search: Some(enable_interactive_search.unwrap_or_default()), + url: Some(url.text), + api_key: Some(api_key.text), + seed_ratio: Some(seed_ratio.text), + tags: None, + tag_input_string: Some(tags), + priority: Some(priority), + clear_tags: false, + } } } 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 82b6431..f3d8bab 100644 --- a/src/handlers/radarr_handlers/indexers/edit_indexer_settings_handler.rs +++ b/src/handlers/radarr_handlers/indexers/edit_indexer_settings_handler.rs @@ -22,9 +22,13 @@ pub(super) struct IndexerSettingsHandler<'a, 'b> { impl<'a, 'b> IndexerSettingsHandler<'a, 'b> { fn build_edit_indexer_settings_body(&mut self) -> IndexerSettings { - let indexer_settings = self.app.data.radarr_data.indexer_settings.clone().unwrap(); - self.app.data.radarr_data.indexer_settings = None; - indexer_settings + self + .app + .data + .radarr_data + .indexer_settings + .take() + .expect("Indexer settings not found") } } diff --git a/src/handlers/radarr_handlers/library/add_movie_handler.rs b/src/handlers/radarr_handlers/library/add_movie_handler.rs index 34ee87d..51b2317 100644 --- a/src/handlers/radarr_handlers/library/add_movie_handler.rs +++ b/src/handlers/radarr_handlers/library/add_movie_handler.rs @@ -39,23 +39,21 @@ impl<'a, 'b> AddMovieHandler<'a, 'b> { ); fn build_add_movie_body(&mut self) -> AddMovieBody { - let tags = self + let add_movie_modal = self .app .data .radarr_data .add_movie_modal - .as_ref() - .unwrap() - .tags - .text - .clone(); + .take() + .expect("AddMovieModal is None"); + let tags = add_movie_modal.tags.text; let AddMovieModal { root_folder_list, monitor_list, minimum_availability_list, quality_profile_list, .. - } = self.app.data.radarr_data.add_movie_modal.as_ref().unwrap(); + } = add_movie_modal; let (tmdb_id, title) = if let Some(context) = self.context { if context == ActiveRadarrBlock::CollectionDetails { let CollectionMovie { tmdb_id, title, .. } = self @@ -63,9 +61,8 @@ impl<'a, 'b> AddMovieHandler<'a, 'b> { .data .radarr_data .collection_movies - .current_selection() - .clone(); - (tmdb_id, title.text) + .current_selection(); + (*tmdb_id, title.clone().text) } else { let AddMovieSearchResult { tmdb_id, title, .. } = self .app @@ -74,9 +71,8 @@ impl<'a, 'b> AddMovieHandler<'a, 'b> { .add_searched_movies .as_ref() .unwrap() - .current_selection() - .clone(); - (tmdb_id, title.text) + .current_selection(); + (*tmdb_id, title.clone().text) } } else { let AddMovieSearchResult { tmdb_id, title, .. } = self @@ -86,9 +82,8 @@ impl<'a, 'b> AddMovieHandler<'a, 'b> { .add_searched_movies .as_ref() .unwrap() - .current_selection() - .clone(); - (tmdb_id, title.text) + .current_selection(); + (*tmdb_id, title.clone().text) }; let quality_profile = quality_profile_list.current_selection(); let quality_profile_id = *self @@ -106,8 +101,6 @@ impl<'a, 'b> AddMovieHandler<'a, 'b> { let monitor = monitor_list.current_selection().to_string(); let minimum_availability = minimum_availability_list.current_selection().to_string(); - self.app.data.radarr_data.add_movie_modal = None; - AddMovieBody { tmdb_id, title, diff --git a/src/handlers/radarr_handlers/library/edit_movie_handler.rs b/src/handlers/radarr_handlers/library/edit_movie_handler.rs index 3dc167c..f351708 100644 --- a/src/handlers/radarr_handlers/library/edit_movie_handler.rs +++ b/src/handlers/radarr_handlers/library/edit_movie_handler.rs @@ -23,51 +23,43 @@ pub(super) struct EditMovieHandler<'a, 'b> { impl<'a, 'b> EditMovieHandler<'a, 'b> { fn build_edit_movie_params(&mut self) -> EditMovieParams { let movie_id = self.app.data.radarr_data.movies.current_selection().id; - let tags = self + let edit_movie_modal = self .app .data .radarr_data .edit_movie_modal - .as_ref() - .unwrap() - .tags - .text - .clone(); - let params = { - let EditMovieModal { - monitored, - path, - minimum_availability_list, - quality_profile_list, - .. - } = self.app.data.radarr_data.edit_movie_modal.as_ref().unwrap(); - let quality_profile = quality_profile_list.current_selection(); - let quality_profile_id = *self - .app - .data - .radarr_data - .quality_profile_map - .iter() - .filter(|(_, value)| *value == quality_profile) - .map(|(key, _)| key) - .next() - .unwrap(); + .take() + .expect("Edit movie modal is None"); + let tags = edit_movie_modal.tags.text; + let EditMovieModal { + monitored, + path, + minimum_availability_list, + quality_profile_list, + .. + } = edit_movie_modal; + let quality_profile = quality_profile_list.current_selection(); + let quality_profile_id = *self + .app + .data + .radarr_data + .quality_profile_map + .iter() + .filter(|(_, value)| *value == quality_profile) + .map(|(key, _)| key) + .next() + .unwrap(); - EditMovieParams { - movie_id, - monitored: *monitored, - minimum_availability: Some(*minimum_availability_list.current_selection()), - quality_profile_id: Some(quality_profile_id), - root_folder_path: Some(path.text.clone()), - tags: None, - tag_input_string: Some(tags), - clear_tags: false, - } - }; - - self.app.data.radarr_data.edit_movie_modal = None; - - params + EditMovieParams { + movie_id, + monitored, + minimum_availability: Some(*minimum_availability_list.current_selection()), + quality_profile_id: Some(quality_profile_id), + root_folder_path: Some(path.text), + tags: None, + tag_input_string: Some(tags), + clear_tags: false, + } } } diff --git a/src/handlers/radarr_handlers/root_folders/mod.rs b/src/handlers/radarr_handlers/root_folders/mod.rs index cbf8a3a..98f6ccb 100644 --- a/src/handlers/radarr_handlers/root_folders/mod.rs +++ b/src/handlers/radarr_handlers/root_folders/mod.rs @@ -30,19 +30,17 @@ impl<'a, 'b> RootFoldersHandler<'a, 'b> { ); fn build_add_root_folder_body(&mut self) -> AddRootFolderBody { - let path = self + let edit_root_folder = self .app .data .radarr_data .edit_root_folder - .as_ref() - .unwrap() - .text - .clone(); + .take() + .expect("AddRootFolder is None"); - self.app.data.radarr_data.edit_root_folder = None; - - AddRootFolderBody { path } + AddRootFolderBody { + path: edit_root_folder.text, + } } fn extract_root_folder_id(&mut self) -> i64 { diff --git a/src/handlers/sonarr_handlers/indexers/edit_indexer_handler.rs b/src/handlers/sonarr_handlers/indexers/edit_indexer_handler.rs index c2eea19..d5da277 100644 --- a/src/handlers/sonarr_handlers/indexers/edit_indexer_handler.rs +++ b/src/handlers/sonarr_handlers/indexers/edit_indexer_handler.rs @@ -21,55 +21,41 @@ pub(super) struct EditIndexerHandler<'a, 'b> { impl<'a, 'b> EditIndexerHandler<'a, 'b> { fn build_edit_indexer_params(&mut self) -> EditIndexerParams { - let indexer_id = self.app.data.sonarr_data.indexers.current_selection().id; - let tags = self + let edit_indexer_modal = self .app .data .sonarr_data .edit_indexer_modal - .as_ref() - .unwrap() - .tags - .text - .clone(); - let params = { - let EditIndexerModal { - name, - enable_rss, - enable_automatic_search, - enable_interactive_search, - url, - api_key, - seed_ratio, - priority, - .. - } = self - .app - .data - .sonarr_data - .edit_indexer_modal - .as_ref() - .unwrap(); + .take() + .expect("EditIndexerModal is None"); + let indexer_id = self.app.data.sonarr_data.indexers.current_selection().id; + let tags = edit_indexer_modal.tags.text; + let EditIndexerModal { + name, + enable_rss, + enable_automatic_search, + enable_interactive_search, + url, + api_key, + seed_ratio, + priority, + .. + } = edit_indexer_modal; - EditIndexerParams { - indexer_id, - name: Some(name.text.clone()), - enable_rss: Some(enable_rss.unwrap_or_default()), - enable_automatic_search: Some(enable_automatic_search.unwrap_or_default()), - enable_interactive_search: Some(enable_interactive_search.unwrap_or_default()), - url: Some(url.text.clone()), - api_key: Some(api_key.text.clone()), - seed_ratio: Some(seed_ratio.text.clone()), - tags: None, - tag_input_string: Some(tags), - priority: Some(*priority), - clear_tags: false, - } - }; - - self.app.data.sonarr_data.edit_indexer_modal = None; - - params + EditIndexerParams { + indexer_id, + name: Some(name.text), + enable_rss, + enable_automatic_search, + enable_interactive_search, + url: Some(url.text), + api_key: Some(api_key.text), + seed_ratio: Some(seed_ratio.text), + tags: None, + tag_input_string: Some(tags), + priority: Some(priority), + clear_tags: false, + } } } diff --git a/src/handlers/sonarr_handlers/indexers/edit_indexer_settings_handler.rs b/src/handlers/sonarr_handlers/indexers/edit_indexer_settings_handler.rs index f1cd505..51a7441 100644 --- a/src/handlers/sonarr_handlers/indexers/edit_indexer_settings_handler.rs +++ b/src/handlers/sonarr_handlers/indexers/edit_indexer_settings_handler.rs @@ -22,18 +22,13 @@ pub(super) struct IndexerSettingsHandler<'a, 'b> { impl<'a, 'b> IndexerSettingsHandler<'a, 'b> { fn build_edit_indexer_settings_params(&mut self) -> IndexerSettings { - let indexer_settings = self + self .app .data .sonarr_data .indexer_settings - .as_ref() - .unwrap() - .clone(); - - self.app.data.sonarr_data.indexer_settings = None; - - indexer_settings + .take() + .expect("IndexerSettings is None") } } diff --git a/src/handlers/sonarr_handlers/library/add_series_handler.rs b/src/handlers/sonarr_handlers/library/add_series_handler.rs index 8704c2f..ab5199b 100644 --- a/src/handlers/sonarr_handlers/library/add_series_handler.rs +++ b/src/handlers/sonarr_handlers/library/add_series_handler.rs @@ -37,16 +37,14 @@ impl<'a, 'b> AddSeriesHandler<'a, 'b> { ); fn build_add_series_body(&mut self) -> AddSeriesBody { - let tags = self + let add_series_modal = self .app .data .sonarr_data .add_series_modal - .as_ref() - .unwrap() - .tags - .text - .clone(); + .take() + .expect("AddSeriesModal is None"); + let tags = add_series_modal.tags.text; let AddSeriesModal { root_folder_list, monitor_list, @@ -55,8 +53,7 @@ impl<'a, 'b> AddSeriesHandler<'a, 'b> { series_type_list, use_season_folder, .. - } = self.app.data.sonarr_data.add_series_modal.as_ref().unwrap(); - let season_folder = *use_season_folder; + } = add_series_modal; let (tvdb_id, title) = { let AddSeriesSearchResult { tvdb_id, title, .. } = self .app @@ -65,9 +62,8 @@ impl<'a, 'b> AddSeriesHandler<'a, 'b> { .add_searched_series .as_ref() .unwrap() - .current_selection() - .clone(); - (tvdb_id, title.text) + .current_selection(); + (*tvdb_id, title.clone().text) }; let quality_profile = quality_profile_list.current_selection(); let quality_profile_id = *self @@ -96,8 +92,6 @@ impl<'a, 'b> AddSeriesHandler<'a, 'b> { let monitor = monitor_list.current_selection().to_string(); let series_type = series_type_list.current_selection().to_string(); - self.app.data.sonarr_data.add_series_modal = None; - AddSeriesBody { tvdb_id, title, @@ -106,7 +100,7 @@ impl<'a, 'b> AddSeriesHandler<'a, 'b> { quality_profile_id, language_profile_id, series_type, - season_folder, + season_folder: use_season_folder, tags: Vec::new(), tag_input_string: Some(tags), add_options: AddSeriesOptions { diff --git a/src/handlers/sonarr_handlers/library/edit_series_handler.rs b/src/handlers/sonarr_handlers/library/edit_series_handler.rs index 424cfa9..3dfa705 100644 --- a/src/handlers/sonarr_handlers/library/edit_series_handler.rs +++ b/src/handlers/sonarr_handlers/library/edit_series_handler.rs @@ -22,73 +22,59 @@ pub(super) struct EditSeriesHandler<'a, 'b> { impl<'a, 'b> EditSeriesHandler<'a, 'b> { fn build_edit_series_params(&mut self) -> EditSeriesParams { - let series_id = self.app.data.sonarr_data.series.current_selection().id; - let tags = self + let edit_series_modal = self .app .data .sonarr_data .edit_series_modal - .as_ref() - .unwrap() - .tags - .text - .clone(); + .take() + .expect("EditSeriesModal is None"); + let series_id = self.app.data.sonarr_data.series.current_selection().id; + let tags = edit_series_modal.tags.text; - let params = { - let EditSeriesModal { - monitored, - use_season_folders, - path, - series_type_list, - quality_profile_list, - language_profile_list, - .. - } = self - .app - .data - .sonarr_data - .edit_series_modal - .as_ref() - .unwrap(); - let quality_profile = quality_profile_list.current_selection(); - let quality_profile_id = *self - .app - .data - .sonarr_data - .quality_profile_map - .iter() - .filter(|(_, value)| *value == quality_profile) - .map(|(key, _)| key) - .next() - .unwrap(); - let language_profile = language_profile_list.current_selection(); - let language_profile_id = *self - .app - .data - .sonarr_data - .language_profiles_map - .iter() - .filter(|(_, value)| *value == language_profile) - .map(|(key, _)| key) - .next() - .unwrap(); + let EditSeriesModal { + monitored, + use_season_folders, + path, + series_type_list, + quality_profile_list, + language_profile_list, + .. + } = edit_series_modal; + let quality_profile = quality_profile_list.current_selection(); + let quality_profile_id = *self + .app + .data + .sonarr_data + .quality_profile_map + .iter() + .filter(|(_, value)| *value == quality_profile) + .map(|(key, _)| key) + .next() + .unwrap(); + let language_profile = language_profile_list.current_selection(); + let language_profile_id = *self + .app + .data + .sonarr_data + .language_profiles_map + .iter() + .filter(|(_, value)| *value == language_profile) + .map(|(key, _)| key) + .next() + .unwrap(); - EditSeriesParams { - series_id, - monitored: Some(monitored.unwrap_or_default()), - use_season_folders: Some(use_season_folders.unwrap_or_default()), - series_type: Some(*series_type_list.current_selection()), - quality_profile_id: Some(quality_profile_id), - language_profile_id: Some(language_profile_id), - root_folder_path: Some(path.text.clone()), - tag_input_string: Some(tags), - ..EditSeriesParams::default() - } - }; - - self.app.data.sonarr_data.edit_series_modal = None; - - params + EditSeriesParams { + series_id, + monitored, + use_season_folders, + series_type: Some(*series_type_list.current_selection()), + quality_profile_id: Some(quality_profile_id), + language_profile_id: Some(language_profile_id), + root_folder_path: Some(path.text), + tag_input_string: Some(tags), + ..EditSeriesParams::default() + } } } diff --git a/src/handlers/sonarr_handlers/root_folders/mod.rs b/src/handlers/sonarr_handlers/root_folders/mod.rs index 047a18a..37149a8 100644 --- a/src/handlers/sonarr_handlers/root_folders/mod.rs +++ b/src/handlers/sonarr_handlers/root_folders/mod.rs @@ -35,11 +35,9 @@ impl<'a, 'b> RootFoldersHandler<'a, 'b> { .data .sonarr_data .edit_root_folder - .as_ref() - .unwrap() - .text - .clone(); - self.app.data.sonarr_data.edit_root_folder = None; + .take() + .expect("EditRootFolder is None") + .text; AddRootFolderBody { path: root_folder } } diff --git a/src/models/stateful_table.rs b/src/models/stateful_table.rs index 0fc1225..0c5d3ff 100644 --- a/src/models/stateful_table.rs +++ b/src/models/stateful_table.rs @@ -235,9 +235,9 @@ where } pub fn apply_filter(&mut self, filter_field: fn(&T) -> &str) -> bool { - let filter_matches = match self.filter { - Some(ref filter) if !filter.text.is_empty() => { - let scrubbed_filter = strip_non_search_characters(&filter.text.clone()); + let filter_matches = match self.filter.take() { + Some(filter) if !filter.text.is_empty() => { + let scrubbed_filter = strip_non_search_characters(&filter.text); self .items @@ -249,8 +249,6 @@ where _ => Vec::new(), }; - self.filter = None; - if filter_matches.is_empty() { return false; } @@ -266,21 +264,20 @@ where } pub fn apply_search(&mut self, search_field: fn(&T) -> &str) -> bool { - let search_index = if let Some(search) = self.search.as_ref() { - let search_string = search.text.clone().to_lowercase(); + let search_index = match self.search.take() { + Some(search) => { + let search_string = search.text.to_lowercase(); - self - .filtered_items - .as_ref() - .unwrap_or(&self.items) - .iter() - .position(|item| strip_non_search_characters(search_field(item)).contains(&search_string)) - } else { - None + self + .filtered_items + .as_ref() + .unwrap_or(&self.items) + .iter() + .position(|item| strip_non_search_characters(search_field(item)).contains(&search_string)) + } + _ => None, }; - self.search = None; - if search_index.is_none() { return false; }