refactor: Added accessor methods to servarr_data structs, replaced for loops with functional iterator chains, eliminated mutable state tracking, and updated network module to use get_or_insert_default() for modal options
This commit is contained in:
@@ -90,18 +90,7 @@ impl From<&RadarrData<'_>> for EditIndexerModal {
|
||||
.into();
|
||||
}
|
||||
|
||||
edit_indexer_modal.tags = tags
|
||||
.iter()
|
||||
.map(|tag_id| {
|
||||
radarr_data
|
||||
.tags_map
|
||||
.get_by_left(&tag_id.as_i64().expect("Tag ID must be a valid i64"))
|
||||
.expect("Tag ID must exist in tags map")
|
||||
.clone()
|
||||
})
|
||||
.collect::<Vec<String>>()
|
||||
.join(", ")
|
||||
.into();
|
||||
edit_indexer_modal.tags = radarr_data.tag_ids_to_display(tags).into();
|
||||
|
||||
edit_indexer_modal
|
||||
}
|
||||
@@ -132,18 +121,7 @@ impl From<&RadarrData<'_>> for EditMovieModal {
|
||||
.minimum_availability_list
|
||||
.set_items(Vec::from_iter(MinimumAvailability::iter()));
|
||||
edit_movie_modal.path = path.clone().into();
|
||||
edit_movie_modal.tags = tags
|
||||
.iter()
|
||||
.map(|tag_id| {
|
||||
radarr_data
|
||||
.tags_map
|
||||
.get_by_left(&tag_id.as_i64().expect("Tag ID must be a valid i64"))
|
||||
.expect("Tag ID must exist in tags map")
|
||||
.clone()
|
||||
})
|
||||
.collect::<Vec<String>>()
|
||||
.join(", ")
|
||||
.into();
|
||||
edit_movie_modal.tags = radarr_data.tag_ids_to_display(tags).into();
|
||||
|
||||
edit_movie_modal.monitored = Some(*monitored);
|
||||
|
||||
@@ -157,15 +135,9 @@ impl From<&RadarrData<'_>> for EditMovieModal {
|
||||
.state
|
||||
.select(minimum_availability_index);
|
||||
|
||||
let mut quality_profile_names: Vec<String> = radarr_data
|
||||
.quality_profile_map
|
||||
.right_values()
|
||||
.cloned()
|
||||
.collect();
|
||||
quality_profile_names.sort();
|
||||
edit_movie_modal
|
||||
.quality_profile_list
|
||||
.set_items(quality_profile_names);
|
||||
.set_items(radarr_data.sorted_quality_profile_names());
|
||||
let quality_profile_name = radarr_data
|
||||
.quality_profile_map
|
||||
.get_by_left(quality_profile_id)
|
||||
@@ -202,15 +174,9 @@ impl From<&RadarrData<'_>> for AddMovieModal {
|
||||
add_movie_modal
|
||||
.minimum_availability_list
|
||||
.set_items(Vec::from_iter(MinimumAvailability::iter()));
|
||||
let mut quality_profile_names: Vec<String> = radarr_data
|
||||
.quality_profile_map
|
||||
.right_values()
|
||||
.cloned()
|
||||
.collect();
|
||||
quality_profile_names.sort();
|
||||
add_movie_modal
|
||||
.quality_profile_list
|
||||
.set_items(quality_profile_names);
|
||||
.set_items(radarr_data.sorted_quality_profile_names());
|
||||
add_movie_modal
|
||||
.root_folder_list
|
||||
.set_items(radarr_data.root_folders.items.to_vec());
|
||||
@@ -246,15 +212,9 @@ impl From<&RadarrData<'_>> for EditCollectionModal {
|
||||
edit_collection_modal
|
||||
.minimum_availability_list
|
||||
.set_items(Vec::from_iter(MinimumAvailability::iter()));
|
||||
let mut quality_profile_names: Vec<String> = radarr_data
|
||||
.quality_profile_map
|
||||
.right_values()
|
||||
.cloned()
|
||||
.collect();
|
||||
quality_profile_names.sort();
|
||||
edit_collection_modal
|
||||
.quality_profile_list
|
||||
.set_items(quality_profile_names);
|
||||
.set_items(radarr_data.sorted_quality_profile_names());
|
||||
|
||||
let minimum_availability_index = edit_collection_modal
|
||||
.minimum_availability_list
|
||||
|
||||
@@ -23,6 +23,7 @@ use crate::models::{
|
||||
use crate::network::radarr_network::RadarrEvent;
|
||||
use bimap::BiMap;
|
||||
use chrono::{DateTime, Utc};
|
||||
use serde_json::Number;
|
||||
use strum::EnumIter;
|
||||
|
||||
#[cfg(test)]
|
||||
@@ -81,6 +82,23 @@ impl RadarrData<'_> {
|
||||
self.movie_details_modal = None;
|
||||
self.movie_info_tabs.index = 0;
|
||||
}
|
||||
|
||||
pub fn tag_ids_to_display(&self, tag_ids: &[Number]) -> String {
|
||||
tag_ids
|
||||
.iter()
|
||||
.filter_map(|tag_id| {
|
||||
let id = tag_id.as_i64()?;
|
||||
self.tags_map.get_by_left(&id).cloned()
|
||||
})
|
||||
.collect::<Vec<_>>()
|
||||
.join(", ")
|
||||
}
|
||||
|
||||
pub fn sorted_quality_profile_names(&self) -> Vec<String> {
|
||||
let mut names: Vec<String> = self.quality_profile_map.right_values().cloned().collect();
|
||||
names.sort();
|
||||
names
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> Default for RadarrData<'a> {
|
||||
|
||||
@@ -45,24 +45,12 @@ impl From<&SonarrData<'_>> for AddSeriesModal {
|
||||
add_series_modal
|
||||
.series_type_list
|
||||
.set_items(Vec::from_iter(SeriesType::iter()));
|
||||
let mut quality_profile_names: Vec<String> = sonarr_data
|
||||
.quality_profile_map
|
||||
.right_values()
|
||||
.cloned()
|
||||
.collect();
|
||||
quality_profile_names.sort();
|
||||
add_series_modal
|
||||
.quality_profile_list
|
||||
.set_items(quality_profile_names);
|
||||
let mut language_profile_names: Vec<String> = sonarr_data
|
||||
.language_profiles_map
|
||||
.right_values()
|
||||
.cloned()
|
||||
.collect();
|
||||
language_profile_names.sort();
|
||||
.set_items(sonarr_data.sorted_quality_profile_names());
|
||||
add_series_modal
|
||||
.language_profile_list
|
||||
.set_items(language_profile_names);
|
||||
.set_items(sonarr_data.sorted_language_profile_names());
|
||||
add_series_modal
|
||||
.root_folder_list
|
||||
.set_items(sonarr_data.root_folders.items.to_vec());
|
||||
@@ -135,18 +123,7 @@ impl From<&SonarrData<'_>> for EditIndexerModal {
|
||||
.into();
|
||||
}
|
||||
|
||||
edit_indexer_modal.tags = tags
|
||||
.iter()
|
||||
.map(|tag_id| {
|
||||
sonarr_data
|
||||
.tags_map
|
||||
.get_by_left(&tag_id.as_i64().expect("Tag ID must be a valid i64"))
|
||||
.expect("Tag ID must exist in tags map")
|
||||
.clone()
|
||||
})
|
||||
.collect::<Vec<String>>()
|
||||
.join(", ")
|
||||
.into();
|
||||
edit_indexer_modal.tags = sonarr_data.tag_ids_to_display(tags).into();
|
||||
|
||||
edit_indexer_modal
|
||||
}
|
||||
@@ -181,18 +158,7 @@ impl From<&SonarrData<'_>> for EditSeriesModal {
|
||||
.series_type_list
|
||||
.set_items(Vec::from_iter(SeriesType::iter()));
|
||||
edit_series_modal.path = path.clone().into();
|
||||
edit_series_modal.tags = tags
|
||||
.iter()
|
||||
.map(|tag_id| {
|
||||
sonarr_data
|
||||
.tags_map
|
||||
.get_by_left(&tag_id.as_i64().expect("Tag ID must be a valid i64"))
|
||||
.expect("Tag ID must exist in tags map")
|
||||
.clone()
|
||||
})
|
||||
.collect::<Vec<String>>()
|
||||
.join(", ")
|
||||
.into();
|
||||
edit_series_modal.tags = sonarr_data.tag_ids_to_display(tags).into();
|
||||
|
||||
edit_series_modal.monitored = Some(*monitored);
|
||||
edit_series_modal.use_season_folders = Some(*season_folder);
|
||||
@@ -207,15 +173,9 @@ impl From<&SonarrData<'_>> for EditSeriesModal {
|
||||
.state
|
||||
.select(series_type_index);
|
||||
|
||||
let mut quality_profile_names: Vec<String> = sonarr_data
|
||||
.quality_profile_map
|
||||
.right_values()
|
||||
.cloned()
|
||||
.collect();
|
||||
quality_profile_names.sort();
|
||||
edit_series_modal
|
||||
.quality_profile_list
|
||||
.set_items(quality_profile_names);
|
||||
.set_items(sonarr_data.sorted_quality_profile_names());
|
||||
let quality_profile_name = sonarr_data
|
||||
.quality_profile_map
|
||||
.get_by_left(quality_profile_id)
|
||||
@@ -229,15 +189,9 @@ impl From<&SonarrData<'_>> for EditSeriesModal {
|
||||
.quality_profile_list
|
||||
.state
|
||||
.select(quality_profile_index);
|
||||
let mut language_profile_names: Vec<String> = sonarr_data
|
||||
.language_profiles_map
|
||||
.right_values()
|
||||
.cloned()
|
||||
.collect();
|
||||
language_profile_names.sort();
|
||||
edit_series_modal
|
||||
.language_profile_list
|
||||
.set_items(language_profile_names);
|
||||
.set_items(sonarr_data.sorted_language_profile_names());
|
||||
let language_profile_name = sonarr_data
|
||||
.language_profiles_map
|
||||
.get_by_left(language_profile_id)
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
use bimap::BiMap;
|
||||
use chrono::{DateTime, Utc};
|
||||
use serde_json::Number;
|
||||
use strum::EnumIter;
|
||||
|
||||
use crate::{
|
||||
@@ -87,6 +88,29 @@ impl SonarrData<'_> {
|
||||
self.seasons = StatefulTable::default();
|
||||
self.series_info_tabs.index = 0;
|
||||
}
|
||||
|
||||
pub fn tag_ids_to_display(&self, tag_ids: &[Number]) -> String {
|
||||
tag_ids
|
||||
.iter()
|
||||
.filter_map(|tag_id| {
|
||||
let id = tag_id.as_i64()?;
|
||||
self.tags_map.get_by_left(&id).cloned()
|
||||
})
|
||||
.collect::<Vec<_>>()
|
||||
.join(", ")
|
||||
}
|
||||
|
||||
pub fn sorted_quality_profile_names(&self) -> Vec<String> {
|
||||
let mut names: Vec<String> = self.quality_profile_map.right_values().cloned().collect();
|
||||
names.sort();
|
||||
names
|
||||
}
|
||||
|
||||
pub fn sorted_language_profile_names(&self) -> Vec<String> {
|
||||
let mut names: Vec<String> = self.language_profiles_map.right_values().cloned().collect();
|
||||
names.sort();
|
||||
names
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> Default for SonarrData<'a> {
|
||||
|
||||
Reference in New Issue
Block a user