feat: Full CLI and TUI support for the Lidarr Indexers tab

This commit is contained in:
2026-01-14 13:30:51 -07:00
parent 8abcf44866
commit c74d5936d2
91 changed files with 9481 additions and 166 deletions
+72
View File
@@ -1,6 +1,8 @@
use strum::IntoEnumIterator;
use super::lidarr_data::LidarrData;
use crate::models::servarr_data::modals::EditIndexerModal;
use crate::models::servarr_models::Indexer;
use crate::models::{
HorizontallyScrollableText,
lidarr_models::{MonitorType, NewItemMonitorType},
@@ -114,6 +116,76 @@ impl From<&LidarrData<'_>> for EditArtistModal {
}
}
impl From<&LidarrData<'_>> for EditIndexerModal {
fn from(lidarr_data: &LidarrData<'_>) -> EditIndexerModal {
let mut edit_indexer_modal = EditIndexerModal::default();
let Indexer {
name,
enable_rss,
enable_automatic_search,
enable_interactive_search,
tags,
fields,
priority,
..
} = lidarr_data.indexers.current_selection();
let seed_ratio_field_option = fields
.as_ref()
.expect("indexer fields must exist")
.iter()
.find(|field| {
field.name.as_ref().expect("indexer field name must exist") == "seedCriteria.seedRatio"
});
let seed_ratio_value_option = if let Some(seed_ratio_field) = seed_ratio_field_option {
seed_ratio_field.value.clone()
} else {
None
};
edit_indexer_modal.name = name.clone().expect("indexer name must exist").into();
edit_indexer_modal.enable_rss = Some(*enable_rss);
edit_indexer_modal.enable_automatic_search = Some(*enable_automatic_search);
edit_indexer_modal.enable_interactive_search = Some(*enable_interactive_search);
edit_indexer_modal.priority = *priority;
edit_indexer_modal.url = fields
.as_ref()
.expect("indexer fields must exist")
.iter()
.find(|field| field.name.as_ref().expect("indexer field name must exist") == "baseUrl")
.expect("baseUrl field must exist")
.value
.clone()
.expect("baseUrl field value must exist")
.as_str()
.expect("baseUrl field value must be a string")
.into();
edit_indexer_modal.api_key = fields
.as_ref()
.expect("indexer fields must exist")
.iter()
.find(|field| field.name.as_ref().expect("indexer field name must exist") == "apiKey")
.expect("apiKey field must exist")
.value
.clone()
.expect("apiKey field value must exist")
.as_str()
.expect("apiKey field value must be a string")
.into();
if let Some(seed_ratio_value) = seed_ratio_value_option {
edit_indexer_modal.seed_ratio = seed_ratio_value
.as_f64()
.expect("Seed ratio value must be a valid f64")
.to_string()
.into();
}
edit_indexer_modal.tags = lidarr_data.tag_ids_to_display(tags).into();
edit_indexer_modal
}
}
#[derive(Default)]
#[cfg_attr(test, derive(Debug))]
pub struct AddRootFolderModal {