feat(ui): Support for modifying the indexer priority in Radarr
This commit is contained in:
@@ -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());
|
||||||
|
|||||||
@@ -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());
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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,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)])
|
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] =
|
||||||
Constraint::Length(3),
|
Layout::vertical([
|
||||||
Constraint::Length(3),
|
Constraint::Length(3),
|
||||||
Constraint::Length(3),
|
Constraint::Length(3),
|
||||||
Constraint::Length(3),
|
Constraint::Length(3),
|
||||||
])
|
Constraint::Length(3),
|
||||||
.areas(left_side_area);
|
Constraint::Length(3),
|
||||||
|
])
|
||||||
|
.areas(left_side_area);
|
||||||
let [url_area, api_key_area, seed_ratio_area, tags_area] = Layout::vertical([
|
let [url_area, api_key_area, seed_ratio_area, tags_area] = Layout::vertical([
|
||||||
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")
|
||||||
|
|||||||
@@ -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),
|
||||||
|
|||||||
@@ -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));
|
||||||
|
|||||||
Reference in New Issue
Block a user