Added 'Test All Indexers' table and functionality to the Indexers tab, and upgraded to Ratatui 0.24.0 and cleaned up code for newer Ratatui version

This commit is contained in:
2023-11-25 17:36:30 -07:00
parent d0ce98eb93
commit 76e21e7697
44 changed files with 1132 additions and 428 deletions
+15 -28
View File
@@ -1,8 +1,7 @@
use tui::backend::Backend;
use tui::layout::{Alignment, Constraint, Rect};
use tui::text::Text;
use tui::widgets::{Cell, ListItem, Paragraph, Row};
use tui::Frame;
use ratatui::layout::{Alignment, Constraint, Rect};
use ratatui::text::Text;
use ratatui::widgets::{Cell, ListItem, Paragraph, Row};
use ratatui::Frame;
use crate::app::context_clues::{build_context_clue_string, BARE_POPUP_CONTEXT_CLUES};
use crate::app::radarr::radarr_context_clues::ADD_MOVIE_SEARCH_RESULTS_CONTEXT_CLUES;
@@ -40,10 +39,10 @@ impl DrawUi for AddMovieUi {
false
}
fn draw<B: Backend>(f: &mut Frame<'_, B>, app: &mut App<'_>, content_rect: Rect) {
fn draw(f: &mut Frame<'_>, app: &mut App<'_>, content_rect: Rect) {
if let Route::Radarr(active_radarr_block, context_option) = *app.get_current_route() {
let draw_add_movie_search_popup =
|f: &mut Frame<'_, B>, app: &mut App<'_>, area: Rect| match active_radarr_block {
|f: &mut Frame<'_>, app: &mut App<'_>, area: Rect| match active_radarr_block {
ActiveRadarrBlock::AddMovieSearchInput
| ActiveRadarrBlock::AddMovieSearchResults
| ActiveRadarrBlock::AddMovieEmptySearchResults => {
@@ -103,7 +102,7 @@ impl DrawUi for AddMovieUi {
}
}
fn draw_add_movie_search<B: Backend>(f: &mut Frame<'_, B>, app: &mut App<'_>, area: Rect) {
fn draw_add_movie_search(f: &mut Frame<'_>, app: &mut App<'_>, area: Rect) {
let is_loading = app.is_loading || app.data.radarr_data.add_searched_movies.is_none();
let current_selection =
if let Some(add_searched_movies) = app.data.radarr_data.add_searched_movies.as_ref() {
@@ -277,7 +276,7 @@ fn draw_add_movie_search<B: Backend>(f: &mut Frame<'_, B>, app: &mut App<'_>, ar
);
}
fn draw_confirmation_popup<B: Backend>(f: &mut Frame<'_, B>, app: &mut App<'_>, prompt_area: Rect) {
fn draw_confirmation_popup(f: &mut Frame<'_>, app: &mut App<'_>, prompt_area: Rect) {
if let Route::Radarr(active_radarr_block, _) = *app.get_current_route() {
match active_radarr_block {
ActiveRadarrBlock::AddMovieSelectMonitor => {
@@ -324,11 +323,7 @@ fn draw_confirmation_popup<B: Backend>(f: &mut Frame<'_, B>, app: &mut App<'_>,
}
}
fn draw_confirmation_prompt<B: Backend>(
f: &mut Frame<'_, B>,
app: &mut App<'_>,
prompt_area: Rect,
) {
fn draw_confirmation_prompt(f: &mut Frame<'_>, app: &mut App<'_>, prompt_area: Rect) {
let (movie_title, movie_overview) = if let Route::Radarr(_, Some(_)) = app.get_current_route() {
(
&app
@@ -469,11 +464,7 @@ fn draw_confirmation_prompt<B: Backend>(
);
}
fn draw_add_movie_select_monitor_popup<B: Backend>(
f: &mut Frame<'_, B>,
app: &mut App<'_>,
popup_area: Rect,
) {
fn draw_add_movie_select_monitor_popup(f: &mut Frame<'_>, app: &mut App<'_>, popup_area: Rect) {
draw_selectable_list(
f,
popup_area,
@@ -488,8 +479,8 @@ fn draw_add_movie_select_monitor_popup<B: Backend>(
);
}
fn draw_add_movie_select_minimum_availability_popup<B: Backend>(
f: &mut Frame<'_, B>,
fn draw_add_movie_select_minimum_availability_popup(
f: &mut Frame<'_>,
app: &mut App<'_>,
popup_area: Rect,
) {
@@ -507,8 +498,8 @@ fn draw_add_movie_select_minimum_availability_popup<B: Backend>(
);
}
fn draw_add_movie_select_quality_profile_popup<B: Backend>(
f: &mut Frame<'_, B>,
fn draw_add_movie_select_quality_profile_popup(
f: &mut Frame<'_>,
app: &mut App<'_>,
popup_area: Rect,
) {
@@ -526,11 +517,7 @@ fn draw_add_movie_select_quality_profile_popup<B: Backend>(
);
}
fn draw_add_movie_select_root_folder_popup<B: Backend>(
f: &mut Frame<'_, B>,
app: &mut App<'_>,
popup_area: Rect,
) {
fn draw_add_movie_select_root_folder_popup(f: &mut Frame<'_>, app: &mut App<'_>, popup_area: Rect) {
draw_selectable_list(
f,
popup_area,
+29 -31
View File
@@ -1,6 +1,5 @@
use tui::backend::Backend;
use tui::layout::Rect;
use tui::Frame;
use ratatui::layout::Rect;
use ratatui::Frame;
use crate::app::App;
use crate::models::servarr_data::radarr::radarr_data::{ActiveRadarrBlock, DELETE_MOVIE_BLOCKS};
@@ -23,39 +22,38 @@ impl DrawUi for DeleteMovieUi {
false
}
fn draw<B: Backend>(f: &mut Frame<'_, B>, app: &mut App<'_>, content_rect: Rect) {
fn draw(f: &mut Frame<'_>, app: &mut App<'_>, content_rect: Rect) {
if matches!(
*app.get_current_route(),
Route::Radarr(ActiveRadarrBlock::DeleteMoviePrompt, _)
) {
let draw_delete_movie_prompt =
|f: &mut Frame<'_, B>, app: &mut App<'_>, prompt_area: Rect| {
let selected_block = app.data.radarr_data.selected_block.get_active_block();
draw_prompt_box_with_checkboxes(
f,
prompt_area,
"Delete Movie",
format!(
"Do you really want to delete: \n{}?",
app.data.radarr_data.movies.current_selection().title.text
)
.as_str(),
vec![
(
"Delete Movie Files",
app.data.radarr_data.delete_movie_files,
selected_block == &ActiveRadarrBlock::DeleteMovieToggleDeleteFile,
),
(
"Add List Exclusion",
app.data.radarr_data.add_list_exclusion,
selected_block == &ActiveRadarrBlock::DeleteMovieToggleAddListExclusion,
),
],
selected_block == &ActiveRadarrBlock::DeleteMovieConfirmPrompt,
app.data.radarr_data.prompt_confirm,
let draw_delete_movie_prompt = |f: &mut Frame<'_>, app: &mut App<'_>, prompt_area: Rect| {
let selected_block = app.data.radarr_data.selected_block.get_active_block();
draw_prompt_box_with_checkboxes(
f,
prompt_area,
"Delete Movie",
format!(
"Do you really want to delete: \n{}?",
app.data.radarr_data.movies.current_selection().title.text
)
};
.as_str(),
vec![
(
"Delete Movie Files",
app.data.radarr_data.delete_movie_files,
selected_block == &ActiveRadarrBlock::DeleteMovieToggleDeleteFile,
),
(
"Add List Exclusion",
app.data.radarr_data.add_list_exclusion,
selected_block == &ActiveRadarrBlock::DeleteMovieToggleAddListExclusion,
),
],
selected_block == &ActiveRadarrBlock::DeleteMovieConfirmPrompt,
app.data.radarr_data.prompt_confirm,
)
};
draw_prompt_popup_over(f, app, content_rect, draw_library, draw_delete_movie_prompt);
}
+11 -16
View File
@@ -1,7 +1,6 @@
use tui::backend::Backend;
use tui::layout::{Constraint, Rect};
use tui::widgets::ListItem;
use tui::Frame;
use ratatui::layout::{Constraint, Rect};
use ratatui::widgets::ListItem;
use ratatui::Frame;
use crate::app::App;
use crate::models::servarr_data::radarr::modals::EditMovieModal;
@@ -36,10 +35,10 @@ impl DrawUi for EditMovieUi {
false
}
fn draw<B: Backend>(f: &mut Frame<'_, B>, app: &mut App<'_>, content_rect: Rect) {
fn draw(f: &mut Frame<'_>, app: &mut App<'_>, content_rect: Rect) {
if let Route::Radarr(active_radarr_block, context_option) = *app.get_current_route() {
let draw_edit_movie_prompt =
|f: &mut Frame<'_, B>, app: &mut App<'_>, prompt_area: Rect| match active_radarr_block {
|f: &mut Frame<'_>, app: &mut App<'_>, prompt_area: Rect| match active_radarr_block {
ActiveRadarrBlock::EditMovieSelectMinimumAvailability => {
draw_drop_down_popup(
f,
@@ -73,7 +72,7 @@ impl DrawUi for EditMovieUi {
draw_medium_popup_over(f, app, content_rect, draw_library, draw_edit_movie_prompt);
}
_ if MOVIE_DETAILS_BLOCKS.contains(&context) => {
draw_large_popup_over_background_fn_with_ui::<B, MovieDetailsUi>(
draw_large_popup_over_background_fn_with_ui::<MovieDetailsUi>(
f,
app,
content_rect,
@@ -88,11 +87,7 @@ impl DrawUi for EditMovieUi {
}
}
fn draw_edit_movie_confirmation_prompt<B: Backend>(
f: &mut Frame<'_, B>,
app: &mut App<'_>,
prompt_area: Rect,
) {
fn draw_edit_movie_confirmation_prompt(f: &mut Frame<'_>, app: &mut App<'_>, prompt_area: Rect) {
let (movie_title, movie_overview) =
if let Some(filtered_movies) = app.data.radarr_data.filtered_movies.as_ref() {
(
@@ -216,8 +211,8 @@ fn draw_edit_movie_confirmation_prompt<B: Backend>(
);
}
fn draw_edit_movie_select_minimum_availability_popup<B: Backend>(
f: &mut Frame<'_, B>,
fn draw_edit_movie_select_minimum_availability_popup(
f: &mut Frame<'_>,
app: &mut App<'_>,
popup_area: Rect,
) {
@@ -235,8 +230,8 @@ fn draw_edit_movie_select_minimum_availability_popup<B: Backend>(
);
}
fn draw_edit_movie_select_quality_profile_popup<B: Backend>(
f: &mut Frame<'_, B>,
fn draw_edit_movie_select_quality_profile_popup(
f: &mut Frame<'_>,
app: &mut App<'_>,
popup_area: Rect,
) {
+10 -15
View File
@@ -1,7 +1,6 @@
use tui::backend::Backend;
use tui::layout::{Constraint, Rect};
use tui::widgets::{Cell, Row};
use tui::Frame;
use ratatui::layout::{Constraint, Rect};
use ratatui::widgets::{Cell, Row};
use ratatui::Frame;
use crate::app::App;
use crate::models::radarr_models::Movie;
@@ -43,7 +42,7 @@ impl DrawUi for LibraryUi {
false
}
fn draw<B: Backend>(f: &mut Frame<'_, B>, app: &mut App<'_>, content_rect: Rect) {
fn draw(f: &mut Frame<'_>, app: &mut App<'_>, content_rect: Rect) {
let route = *app.get_current_route();
let mut library_ui_matchers = |active_radarr_block: ActiveRadarrBlock| match active_radarr_block
{
@@ -107,7 +106,7 @@ impl DrawUi for LibraryUi {
}
}
pub(super) fn draw_library<B: Backend>(f: &mut Frame<'_, B>, app: &mut App<'_>, area: Rect) {
pub(super) fn draw_library(f: &mut Frame<'_>, app: &mut App<'_>, area: Rect) {
let current_selection =
if let Some(filtered_movies) = app.data.radarr_data.filtered_movies.as_ref() {
filtered_movies.current_selection().clone()
@@ -206,11 +205,7 @@ pub(super) fn draw_library<B: Backend>(f: &mut Frame<'_, B>, app: &mut App<'_>,
);
}
fn draw_update_all_movies_prompt<B: Backend>(
f: &mut Frame<'_, B>,
app: &mut App<'_>,
prompt_area: Rect,
) {
fn draw_update_all_movies_prompt(f: &mut Frame<'_>, app: &mut App<'_>, prompt_area: Rect) {
draw_prompt_box(
f,
prompt_area,
@@ -220,7 +215,7 @@ fn draw_update_all_movies_prompt<B: Backend>(
);
}
fn draw_movie_search_box<B: Backend>(f: &mut Frame<'_, B>, app: &mut App<'_>, area: Rect) {
fn draw_movie_search_box(f: &mut Frame<'_>, app: &mut App<'_>, area: Rect) {
draw_input_box_popup(
f,
area,
@@ -229,7 +224,7 @@ fn draw_movie_search_box<B: Backend>(f: &mut Frame<'_, B>, app: &mut App<'_>, ar
);
}
fn draw_filter_movies_box<B: Backend>(f: &mut Frame<'_, B>, app: &mut App<'_>, area: Rect) {
fn draw_filter_movies_box(f: &mut Frame<'_>, app: &mut App<'_>, area: Rect) {
draw_input_box_popup(
f,
area,
@@ -238,10 +233,10 @@ fn draw_filter_movies_box<B: Backend>(f: &mut Frame<'_, B>, app: &mut App<'_>, a
)
}
fn draw_search_movie_error_box<B: Backend>(f: &mut Frame<'_, B>, _: &mut App<'_>, area: Rect) {
fn draw_search_movie_error_box(f: &mut Frame<'_>, _: &mut App<'_>, area: Rect) {
draw_error_message_popup(f, area, "Movie not found!");
}
fn draw_filter_movies_error_box<B: Backend>(f: &mut Frame<'_, B>, _: &mut App<'_>, area: Rect) {
fn draw_filter_movies_error_box(f: &mut Frame<'_>, _: &mut App<'_>, area: Rect) {
draw_error_message_popup(f, area, "No movies found matching the given filter!");
}
+17 -30
View File
@@ -1,11 +1,10 @@
use std::iter;
use tui::backend::Backend;
use tui::layout::{Alignment, Constraint, Rect};
use tui::style::{Modifier, Style};
use tui::text::{Line, Span, Text};
use tui::widgets::{Cell, ListItem, Paragraph, Row, Wrap};
use tui::Frame;
use ratatui::layout::{Alignment, Constraint, Rect};
use ratatui::style::{Modifier, Style};
use ratatui::text::{Line, Span, Text};
use ratatui::widgets::{Cell, ListItem, Paragraph, Row, Wrap};
use ratatui::Frame;
use crate::app::App;
use crate::models::radarr_models::{Credit, MovieHistoryItem, Release, ReleaseField};
@@ -39,9 +38,9 @@ impl DrawUi for MovieDetailsUi {
false
}
fn draw<B: Backend>(f: &mut Frame<'_, B>, app: &mut App<'_>, content_rect: Rect) {
fn draw(f: &mut Frame<'_>, app: &mut App<'_>, content_rect: Rect) {
if let Route::Radarr(active_radarr_block, context_option) = *app.get_current_route() {
let draw_movie_info_popup = |f: &mut Frame<'_, B>, app: &mut App<'_>, popup_area: Rect| {
let draw_movie_info_popup = |f: &mut Frame<'_>, app: &mut App<'_>, popup_area: Rect| {
let (content_area, _) = draw_tabs(
f,
popup_area,
@@ -100,7 +99,7 @@ impl DrawUi for MovieDetailsUi {
}
}
fn draw_movie_info<B: Backend>(f: &mut Frame<'_, B>, app: &mut App<'_>, area: Rect) {
fn draw_movie_info(f: &mut Frame<'_>, app: &mut App<'_>, area: Rect) {
if let Route::Radarr(active_radarr_block, _) =
app.data.radarr_data.movie_info_tabs.get_active_route()
{
@@ -116,11 +115,7 @@ fn draw_movie_info<B: Backend>(f: &mut Frame<'_, B>, app: &mut App<'_>, area: Re
}
}
fn draw_search_movie_prompt<B: Backend>(
f: &mut Frame<'_, B>,
app: &mut App<'_>,
prompt_area: Rect,
) {
fn draw_search_movie_prompt(f: &mut Frame<'_>, app: &mut App<'_>, prompt_area: Rect) {
draw_prompt_box(
f,
prompt_area,
@@ -134,11 +129,7 @@ fn draw_search_movie_prompt<B: Backend>(
);
}
fn draw_update_and_scan_prompt<B: Backend>(
f: &mut Frame<'_, B>,
app: &mut App<'_>,
prompt_area: Rect,
) {
fn draw_update_and_scan_prompt(f: &mut Frame<'_>, app: &mut App<'_>, prompt_area: Rect) {
draw_prompt_box(
f,
prompt_area,
@@ -152,7 +143,7 @@ fn draw_update_and_scan_prompt<B: Backend>(
);
}
fn draw_file_info<B: Backend>(f: &mut Frame<'_, B>, app: &App<'_>, content_area: Rect) {
fn draw_file_info(f: &mut Frame<'_>, app: &App<'_>, content_area: Rect) {
match app.data.radarr_data.movie_details_modal.as_ref() {
Some(movie_details_modal)
if !movie_details_modal.file_details.is_empty() && !app.is_loading =>
@@ -210,7 +201,7 @@ fn draw_file_info<B: Backend>(f: &mut Frame<'_, B>, app: &App<'_>, content_area:
}
}
fn draw_movie_details<B: Backend>(f: &mut Frame<'_, B>, app: &App<'_>, content_area: Rect) {
fn draw_movie_details(f: &mut Frame<'_>, app: &App<'_>, content_area: Rect) {
let block = layout_block_top_border();
match app.data.radarr_data.movie_details_modal.as_ref() {
@@ -253,7 +244,7 @@ fn draw_movie_details<B: Backend>(f: &mut Frame<'_, B>, app: &App<'_>, content_a
}
}
fn draw_movie_history<B: Backend>(f: &mut Frame<'_, B>, app: &mut App<'_>, content_area: Rect) {
fn draw_movie_history(f: &mut Frame<'_>, app: &mut App<'_>, content_area: Rect) {
if let Some(movie_details_modal) = app.data.radarr_data.movie_details_modal.as_mut() {
let current_selection = if movie_details_modal.movie_history.items.is_empty() {
MovieHistoryItem::default()
@@ -321,7 +312,7 @@ fn draw_movie_history<B: Backend>(f: &mut Frame<'_, B>, app: &mut App<'_>, conte
}
}
fn draw_movie_cast<B: Backend>(f: &mut Frame<'_, B>, app: &mut App<'_>, content_area: Rect) {
fn draw_movie_cast(f: &mut Frame<'_>, app: &mut App<'_>, content_area: Rect) {
draw_table(
f,
content_area,
@@ -363,7 +354,7 @@ fn draw_movie_cast<B: Backend>(f: &mut Frame<'_, B>, app: &mut App<'_>, content_
);
}
fn draw_movie_crew<B: Backend>(f: &mut Frame<'_, B>, app: &mut App<'_>, content_area: Rect) {
fn draw_movie_crew(f: &mut Frame<'_>, app: &mut App<'_>, content_area: Rect) {
draw_table(
f,
content_area,
@@ -407,7 +398,7 @@ fn draw_movie_crew<B: Backend>(f: &mut Frame<'_, B>, app: &mut App<'_>, content_
);
}
fn draw_movie_releases<B: Backend>(f: &mut Frame<'_, B>, app: &mut App<'_>, content_area: Rect) {
fn draw_movie_releases(f: &mut Frame<'_>, app: &mut App<'_>, content_area: Rect) {
let (current_selection, is_empty, sort_ascending) =
match app.data.radarr_data.movie_details_modal.as_ref() {
Some(movie_details_modal) if !movie_details_modal.movie_releases.items.is_empty() => (
@@ -549,11 +540,7 @@ fn draw_movie_releases<B: Backend>(f: &mut Frame<'_, B>, app: &mut App<'_>, cont
);
}
fn draw_manual_search_confirm_prompt<B: Backend>(
f: &mut Frame<'_, B>,
app: &mut App<'_>,
prompt_area: Rect,
) {
fn draw_manual_search_confirm_prompt(f: &mut Frame<'_>, app: &mut App<'_>, prompt_area: Rect) {
let current_selection = app
.data
.radarr_data