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:
Dark-Alex-17 committed 2025-12-04 10:02:32 -07:00
1 parent cba53e0841
commit a0073b65ad
10 files changed
+109 -197

No files matched your search

+5 -45
View File
@@ -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> {