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,
tags,
fields,
priority,
..
} = radarr_data.indexers.current_selection();
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_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()
.unwrap()
@@ -45,6 +45,7 @@ mod test {
enable_interactive_search: true,
tags: vec![Number::from(1), Number::from(2)],
fields: Some(fields),
priority: 1,
..Indexer::default()
};
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_automatic_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.api_key.text, "1234");
@@ -93,6 +95,7 @@ mod test {
enable_interactive_search: true,
tags: vec![Number::from(1), Number::from(2)],
fields: Some(fields),
priority: 1,
..Indexer::default()
};
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_automatic_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.api_key.text, "1234");
assert!(edit_indexer_modal.seed_ratio.text.is_empty());
+2
View File
@@ -84,6 +84,7 @@ impl From<&SonarrData<'_>> for EditIndexerModal {
enable_interactive_search,
tags,
fields,
priority,
..
} = sonarr_data.indexers.current_selection();
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_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()
.unwrap()
@@ -104,6 +104,7 @@ mod tests {
enable_interactive_search: true,
tags: vec![Number::from(1), Number::from(2)],
fields: Some(fields),
priority: 1,
..Indexer::default()
};
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_automatic_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.api_key.text, "1234");
@@ -152,6 +154,7 @@ mod tests {
enable_interactive_search: true,
tags: vec![Number::from(1), Number::from(2)],
fields: Some(fields),
priority: 1,
..Indexer::default()
};
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_automatic_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.api_key.text, "1234");
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");
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 (
name,
@@ -942,6 +939,9 @@ impl<'a, 'b> Network<'a, 'b> {
tags,
priority,
) = 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"]
.as_array()
.unwrap()
+3 -3
View File
@@ -858,9 +858,6 @@ impl<'a, 'b> Network<'a, 'b> {
info!("Constructing edit indexer body");
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 (
name,
@@ -873,6 +870,9 @@ impl<'a, 'b> Network<'a, 'b> {
tags,
priority,
) = 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"]
.as_array()
.unwrap()
+20 -9
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() {
let edit_indexer_modal = edit_indexer_modal_option.as_ref().unwrap();
let [settings_area, _, buttons_area, help_area] = Layout::vertical([
Constraint::Length(15),
let [_, settings_area, _, buttons_area, help_area] = Layout::vertical([
Constraint::Fill(1),
Constraint::Length(18),
Constraint::Fill(1),
Constraint::Length(3),
Constraint::Length(1),
@@ -71,13 +72,15 @@ fn draw_edit_indexer_prompt(f: &mut Frame<'_>, app: &mut App<'_>, area: Rect) {
Layout::horizontal([Constraint::Ratio(1, 2), Constraint::Ratio(1, 2)])
.margin(1)
.areas(settings_area);
let [name_area, rss_area, auto_search_area, interactive_search_area] = Layout::vertical([
Constraint::Length(3),
Constraint::Length(3),
Constraint::Length(3),
Constraint::Length(3),
])
.areas(left_side_area);
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),
])
.areas(left_side_area);
let [url_area, api_key_area, seed_ratio_area, tags_area] = Layout::vertical([
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);
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)
.offset(edit_indexer_modal.name.offset.load(Ordering::SeqCst))
.label("Name")
@@ -107,6 +111,11 @@ fn draw_edit_indexer_prompt(f: &mut Frame<'_>, app: &mut App<'_>, area: Rect) {
.label("Tags")
.highlighted(selected_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!(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!(tags_input_box, f, tags_area);
render_selectable_input_box!(priority_input_box, f, priority_area);
} else {
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")
+1 -1
View File
@@ -29,7 +29,7 @@ impl Size {
match self {
Size::SmallPrompt => (20, 20),
Size::Prompt => (37, 37),
Size::LargePrompt => (70, 45),
Size::LargePrompt => (70, 50),
Size::Message => (25, 8),
Size::NarrowMessage => (50, 20),
Size::LargeMessage => (25, 25),
+1 -1
View File
@@ -8,7 +8,7 @@ mod tests {
fn test_dimensions_to_percent() {
assert_eq!(Size::SmallPrompt.to_percent(), (20, 20));
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::NarrowMessage.to_percent(), (50, 20));
assert_eq!(Size::LargeMessage.to_percent(), (25, 25));