feat(ui): Support for modifying the indexer priority in Radarr

This commit is contained in:
2024-12-03 18:12:23 -07:00
parent 093ef136e7
commit a0b27ec105
9 changed files with 40 additions and 17 deletions
+2
View File
@@ -36,6 +36,7 @@ impl From<&RadarrData<'_>> for EditIndexerModal {
enable_interactive_search, enable_interactive_search,
tags, tags,
fields, fields,
priority,
.. ..
} = radarr_data.indexers.current_selection(); } = radarr_data.indexers.current_selection();
let seed_ratio_field_option = fields let seed_ratio_field_option = fields
@@ -53,6 +54,7 @@ impl From<&RadarrData<'_>> for EditIndexerModal {
edit_indexer_modal.enable_rss = Some(*enable_rss); edit_indexer_modal.enable_rss = Some(*enable_rss);
edit_indexer_modal.enable_automatic_search = Some(*enable_automatic_search); edit_indexer_modal.enable_automatic_search = Some(*enable_automatic_search);
edit_indexer_modal.enable_interactive_search = Some(*enable_interactive_search); edit_indexer_modal.enable_interactive_search = Some(*enable_interactive_search);
edit_indexer_modal.priority = *priority;
edit_indexer_modal.url = fields edit_indexer_modal.url = fields
.as_ref() .as_ref()
.unwrap() .unwrap()
@@ -45,6 +45,7 @@ mod test {
enable_interactive_search: true, enable_interactive_search: true,
tags: vec![Number::from(1), Number::from(2)], tags: vec![Number::from(1), Number::from(2)],
fields: Some(fields), fields: Some(fields),
priority: 1,
..Indexer::default() ..Indexer::default()
}; };
radarr_data.indexers.set_items(vec![indexer]); radarr_data.indexers.set_items(vec![indexer]);
@@ -55,6 +56,7 @@ mod test {
assert_eq!(edit_indexer_modal.enable_rss, Some(true)); assert_eq!(edit_indexer_modal.enable_rss, Some(true));
assert_eq!(edit_indexer_modal.enable_automatic_search, Some(true)); assert_eq!(edit_indexer_modal.enable_automatic_search, Some(true));
assert_eq!(edit_indexer_modal.enable_interactive_search, Some(true)); assert_eq!(edit_indexer_modal.enable_interactive_search, Some(true));
assert_eq!(edit_indexer_modal.priority, 1);
assert_str_eq!(edit_indexer_modal.url.text, "https://test.com"); assert_str_eq!(edit_indexer_modal.url.text, "https://test.com");
assert_str_eq!(edit_indexer_modal.api_key.text, "1234"); assert_str_eq!(edit_indexer_modal.api_key.text, "1234");
@@ -93,6 +95,7 @@ mod test {
enable_interactive_search: true, enable_interactive_search: true,
tags: vec![Number::from(1), Number::from(2)], tags: vec![Number::from(1), Number::from(2)],
fields: Some(fields), fields: Some(fields),
priority: 1,
..Indexer::default() ..Indexer::default()
}; };
radarr_data.indexers.set_items(vec![indexer]); radarr_data.indexers.set_items(vec![indexer]);
@@ -103,6 +106,7 @@ mod test {
assert_eq!(edit_indexer_modal.enable_rss, Some(true)); assert_eq!(edit_indexer_modal.enable_rss, Some(true));
assert_eq!(edit_indexer_modal.enable_automatic_search, Some(true)); assert_eq!(edit_indexer_modal.enable_automatic_search, Some(true));
assert_eq!(edit_indexer_modal.enable_interactive_search, Some(true)); assert_eq!(edit_indexer_modal.enable_interactive_search, Some(true));
assert_eq!(edit_indexer_modal.priority, 1);
assert_str_eq!(edit_indexer_modal.url.text, "https://test.com"); assert_str_eq!(edit_indexer_modal.url.text, "https://test.com");
assert_str_eq!(edit_indexer_modal.api_key.text, "1234"); assert_str_eq!(edit_indexer_modal.api_key.text, "1234");
assert!(edit_indexer_modal.seed_ratio.text.is_empty()); assert!(edit_indexer_modal.seed_ratio.text.is_empty());
+2
View File
@@ -84,6 +84,7 @@ impl From<&SonarrData<'_>> for EditIndexerModal {
enable_interactive_search, enable_interactive_search,
tags, tags,
fields, fields,
priority,
.. ..
} = sonarr_data.indexers.current_selection(); } = sonarr_data.indexers.current_selection();
let seed_ratio_field_option = fields let seed_ratio_field_option = fields
@@ -101,6 +102,7 @@ impl From<&SonarrData<'_>> for EditIndexerModal {
edit_indexer_modal.enable_rss = Some(*enable_rss); edit_indexer_modal.enable_rss = Some(*enable_rss);
edit_indexer_modal.enable_automatic_search = Some(*enable_automatic_search); edit_indexer_modal.enable_automatic_search = Some(*enable_automatic_search);
edit_indexer_modal.enable_interactive_search = Some(*enable_interactive_search); edit_indexer_modal.enable_interactive_search = Some(*enable_interactive_search);
edit_indexer_modal.priority = *priority;
edit_indexer_modal.url = fields edit_indexer_modal.url = fields
.as_ref() .as_ref()
.unwrap() .unwrap()
@@ -104,6 +104,7 @@ mod tests {
enable_interactive_search: true, enable_interactive_search: true,
tags: vec![Number::from(1), Number::from(2)], tags: vec![Number::from(1), Number::from(2)],
fields: Some(fields), fields: Some(fields),
priority: 1,
..Indexer::default() ..Indexer::default()
}; };
sonarr_data.indexers.set_items(vec![indexer]); sonarr_data.indexers.set_items(vec![indexer]);
@@ -114,6 +115,7 @@ mod tests {
assert_eq!(edit_indexer_modal.enable_rss, Some(true)); assert_eq!(edit_indexer_modal.enable_rss, Some(true));
assert_eq!(edit_indexer_modal.enable_automatic_search, Some(true)); assert_eq!(edit_indexer_modal.enable_automatic_search, Some(true));
assert_eq!(edit_indexer_modal.enable_interactive_search, Some(true)); assert_eq!(edit_indexer_modal.enable_interactive_search, Some(true));
assert_eq!(edit_indexer_modal.priority, 1);
assert_str_eq!(edit_indexer_modal.url.text, "https://test.com"); assert_str_eq!(edit_indexer_modal.url.text, "https://test.com");
assert_str_eq!(edit_indexer_modal.api_key.text, "1234"); assert_str_eq!(edit_indexer_modal.api_key.text, "1234");
@@ -152,6 +154,7 @@ mod tests {
enable_interactive_search: true, enable_interactive_search: true,
tags: vec![Number::from(1), Number::from(2)], tags: vec![Number::from(1), Number::from(2)],
fields: Some(fields), fields: Some(fields),
priority: 1,
..Indexer::default() ..Indexer::default()
}; };
sonarr_data.indexers.set_items(vec![indexer]); sonarr_data.indexers.set_items(vec![indexer]);
@@ -162,6 +165,7 @@ mod tests {
assert_eq!(edit_indexer_modal.enable_rss, Some(true)); assert_eq!(edit_indexer_modal.enable_rss, Some(true));
assert_eq!(edit_indexer_modal.enable_automatic_search, Some(true)); assert_eq!(edit_indexer_modal.enable_automatic_search, Some(true));
assert_eq!(edit_indexer_modal.enable_interactive_search, Some(true)); assert_eq!(edit_indexer_modal.enable_interactive_search, Some(true));
assert_eq!(edit_indexer_modal.priority, 1);
assert_str_eq!(edit_indexer_modal.url.text, "https://test.com"); assert_str_eq!(edit_indexer_modal.url.text, "https://test.com");
assert_str_eq!(edit_indexer_modal.api_key.text, "1234"); assert_str_eq!(edit_indexer_modal.api_key.text, "1234");
assert!(edit_indexer_modal.seed_ratio.text.is_empty()); assert!(edit_indexer_modal.seed_ratio.text.is_empty());
+3 -3
View File
@@ -927,9 +927,6 @@ impl<'a, 'b> Network<'a, 'b> {
info!("Constructing edit indexer body"); info!("Constructing edit indexer body");
let mut detailed_indexer_body: Value = serde_json::from_str(&response).unwrap(); let mut detailed_indexer_body: Value = serde_json::from_str(&response).unwrap();
let priority = detailed_indexer_body["priority"]
.as_i64()
.expect("Unable to deserialize 'priority'");
let ( let (
name, name,
@@ -942,6 +939,9 @@ impl<'a, 'b> Network<'a, 'b> {
tags, tags,
priority, priority,
) = if let Some(params) = edit_indexer_params { ) = if let Some(params) = edit_indexer_params {
let priority = detailed_indexer_body["priority"]
.as_i64()
.expect("Unable to deserialize 'priority'");
let seed_ratio_field_option = detailed_indexer_body["fields"] let seed_ratio_field_option = detailed_indexer_body["fields"]
.as_array() .as_array()
.unwrap() .unwrap()
+3 -3
View File
@@ -858,9 +858,6 @@ impl<'a, 'b> Network<'a, 'b> {
info!("Constructing edit indexer body"); info!("Constructing edit indexer body");
let mut detailed_indexer_body: Value = serde_json::from_str(&response).unwrap(); let mut detailed_indexer_body: Value = serde_json::from_str(&response).unwrap();
let priority = detailed_indexer_body["priority"]
.as_i64()
.expect("Unable to deserialize 'priority'");
let ( let (
name, name,
@@ -873,6 +870,9 @@ impl<'a, 'b> Network<'a, 'b> {
tags, tags,
priority, priority,
) = if let Some(params) = edit_indexer_params { ) = if let Some(params) = edit_indexer_params {
let priority = detailed_indexer_body["priority"]
.as_i64()
.expect("Unable to deserialize 'priority'");
let seed_ratio_field_option = detailed_indexer_body["fields"] let seed_ratio_field_option = detailed_indexer_body["fields"]
.as_array() .as_array()
.unwrap() .unwrap()
+14 -3
View File
@@ -59,8 +59,9 @@ fn draw_edit_indexer_prompt(f: &mut Frame<'_>, app: &mut App<'_>, area: Rect) {
if edit_indexer_modal_option.is_some() { if edit_indexer_modal_option.is_some() {
let edit_indexer_modal = edit_indexer_modal_option.as_ref().unwrap(); let edit_indexer_modal = edit_indexer_modal_option.as_ref().unwrap();
let [settings_area, _, buttons_area, help_area] = Layout::vertical([ let [_, settings_area, _, buttons_area, help_area] = Layout::vertical([
Constraint::Length(15), Constraint::Fill(1),
Constraint::Length(18),
Constraint::Fill(1), Constraint::Fill(1),
Constraint::Length(3), Constraint::Length(3),
Constraint::Length(1), Constraint::Length(1),
@@ -71,7 +72,9 @@ fn draw_edit_indexer_prompt(f: &mut Frame<'_>, app: &mut App<'_>, area: Rect) {
Layout::horizontal([Constraint::Ratio(1, 2), Constraint::Ratio(1, 2)]) Layout::horizontal([Constraint::Ratio(1, 2), Constraint::Ratio(1, 2)])
.margin(1) .margin(1)
.areas(settings_area); .areas(settings_area);
let [name_area, rss_area, auto_search_area, interactive_search_area] = Layout::vertical([ let [name_area, rss_area, auto_search_area, interactive_search_area, priority_area] =
Layout::vertical([
Constraint::Length(3),
Constraint::Length(3), Constraint::Length(3),
Constraint::Length(3), Constraint::Length(3),
Constraint::Length(3), Constraint::Length(3),
@@ -87,6 +90,7 @@ fn draw_edit_indexer_prompt(f: &mut Frame<'_>, app: &mut App<'_>, area: Rect) {
.areas(right_side_area); .areas(right_side_area);
if let Route::Radarr(active_radarr_block, _) = app.get_current_route() { if let Route::Radarr(active_radarr_block, _) = app.get_current_route() {
let priority = edit_indexer_modal.priority.to_string();
let name_input_box = InputBox::new(&edit_indexer_modal.name.text) let name_input_box = InputBox::new(&edit_indexer_modal.name.text)
.offset(edit_indexer_modal.name.offset.load(Ordering::SeqCst)) .offset(edit_indexer_modal.name.offset.load(Ordering::SeqCst))
.label("Name") .label("Name")
@@ -107,6 +111,11 @@ fn draw_edit_indexer_prompt(f: &mut Frame<'_>, app: &mut App<'_>, area: Rect) {
.label("Tags") .label("Tags")
.highlighted(selected_block == ActiveRadarrBlock::EditIndexerTagsInput) .highlighted(selected_block == ActiveRadarrBlock::EditIndexerTagsInput)
.selected(active_radarr_block == ActiveRadarrBlock::EditIndexerTagsInput); .selected(active_radarr_block == ActiveRadarrBlock::EditIndexerTagsInput);
let priority_input_box = InputBox::new(&priority)
.cursor_after_string(false)
.label("Indexer Priority ▴▾")
.highlighted(selected_block == ActiveRadarrBlock::EditIndexerPriorityInput)
.selected(active_radarr_block == ActiveRadarrBlock::EditIndexerPriorityInput);
render_selectable_input_box!(name_input_box, f, name_area); render_selectable_input_box!(name_input_box, f, name_area);
render_selectable_input_box!(url_input_box, f, url_area); render_selectable_input_box!(url_input_box, f, url_area);
@@ -126,8 +135,10 @@ fn draw_edit_indexer_prompt(f: &mut Frame<'_>, app: &mut App<'_>, area: Rect) {
render_selectable_input_box!(seed_ratio_input_box, f, seed_ratio_area); render_selectable_input_box!(seed_ratio_input_box, f, seed_ratio_area);
render_selectable_input_box!(tags_input_box, f, tags_area); render_selectable_input_box!(tags_input_box, f, tags_area);
render_selectable_input_box!(priority_input_box, f, priority_area);
} else { } else {
render_selectable_input_box!(tags_input_box, f, seed_ratio_area); render_selectable_input_box!(tags_input_box, f, seed_ratio_area);
render_selectable_input_box!(priority_input_box, f, tags_area);
} }
let rss_checkbox = Checkbox::new("Enable RSS") let rss_checkbox = Checkbox::new("Enable RSS")
+1 -1
View File
@@ -29,7 +29,7 @@ impl Size {
match self { match self {
Size::SmallPrompt => (20, 20), Size::SmallPrompt => (20, 20),
Size::Prompt => (37, 37), Size::Prompt => (37, 37),
Size::LargePrompt => (70, 45), Size::LargePrompt => (70, 50),
Size::Message => (25, 8), Size::Message => (25, 8),
Size::NarrowMessage => (50, 20), Size::NarrowMessage => (50, 20),
Size::LargeMessage => (25, 25), Size::LargeMessage => (25, 25),
+1 -1
View File
@@ -8,7 +8,7 @@ mod tests {
fn test_dimensions_to_percent() { fn test_dimensions_to_percent() {
assert_eq!(Size::SmallPrompt.to_percent(), (20, 20)); assert_eq!(Size::SmallPrompt.to_percent(), (20, 20));
assert_eq!(Size::Prompt.to_percent(), (37, 37)); assert_eq!(Size::Prompt.to_percent(), (37, 37));
assert_eq!(Size::LargePrompt.to_percent(), (70, 45)); assert_eq!(Size::LargePrompt.to_percent(), (70, 50));
assert_eq!(Size::Message.to_percent(), (25, 8)); assert_eq!(Size::Message.to_percent(), (25, 8));
assert_eq!(Size::NarrowMessage.to_percent(), (50, 20)); assert_eq!(Size::NarrowMessage.to_percent(), (50, 20));
assert_eq!(Size::LargeMessage.to_percent(), (25, 25)); assert_eq!(Size::LargeMessage.to_percent(), (25, 25));