diff --git a/Cargo.lock b/Cargo.lock index e60fe24..b6c38a4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -247,13 +247,14 @@ dependencies = [ [[package]] name = "compact_str" -version = "0.7.1" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f86b9c4c00838774a6d902ef931eff7470720c51d90c2e32cfe15dc304737b3f" +checksum = "6050c3a16ddab2e412160b31f2c871015704239bca62f72f6e5f0be631d3f644" dependencies = [ "castaway", "cfg-if", "itoa", + "rustversion", "ryu", "static_assertions", ] @@ -302,6 +303,22 @@ dependencies = [ "winapi", ] +[[package]] +name = "crossterm" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "829d955a0bb380ef178a640b91779e3987da38c9aea133b20614cfed8cdea9c6" +dependencies = [ + "bitflags 2.6.0", + "crossterm_winapi", + "mio 1.0.1", + "parking_lot", + "rustix", + "signal-hook", + "signal-hook-mio", + "winapi", +] + [[package]] name = "crossterm_winapi" version = "0.9.1" @@ -732,6 +749,16 @@ version = "2.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5" +[[package]] +name = "instability" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b23a0c8dfe501baac4adf6ebbfa6eddf8f0c07f56b058cc1288017e32397846c" +dependencies = [ + "quote", + "syn 2.0.72", +] + [[package]] name = "ipnet" version = "2.9.0" @@ -744,15 +771,6 @@ version = "1.70.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" -[[package]] -name = "itertools" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" -dependencies = [ - "either", -] - [[package]] name = "itertools" version = "0.13.0" @@ -876,7 +894,7 @@ dependencies = [ "bimap", "chrono", "confy", - "crossterm", + "crossterm 0.27.0", "derivative", "human-panic", "indoc", @@ -939,6 +957,7 @@ checksum = "4569e456d394deccd22ce1c1913e6ea0e54519f577285001215d33557431afe4" dependencies = [ "hermit-abi", "libc", + "log", "wasi", "windows-sys 0.52.0", ] @@ -1213,19 +1232,20 @@ dependencies = [ [[package]] name = "ratatui" -version = "0.26.3" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f44c9e68fd46eda15c646fbb85e1040b657a58cdc8c98db1d97a55930d991eef" +checksum = "fdef7f9be5c0122f890d58bdf4d964349ba6a6161f705907526d891efabba57d" dependencies = [ "bitflags 2.6.0", "cassowary", "compact_str", - "crossterm", - "itertools 0.12.1", + "crossterm 0.28.1", + "instability", + "itertools", "lru", "paste", - "stability", "strum", + "strum_macros", "time", "unicode-segmentation", "unicode-truncate", @@ -1536,12 +1556,13 @@ dependencies = [ [[package]] name = "signal-hook-mio" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af" +checksum = "34db1a06d485c9142248b7a054f034b349b212551f3dfd19c94d45a754a217cd" dependencies = [ "libc", "mio 0.8.11", + "mio 1.0.1", "signal-hook", ] @@ -1585,16 +1606,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "stability" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d904e7009df136af5297832a3ace3370cd14ff1546a232f4f185036c2736fcac" -dependencies = [ - "quote", - "syn 2.0.72", -] - [[package]] name = "static_assertions" version = "1.1.0" @@ -1908,7 +1919,7 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b3644627a5af5fa321c95b9b235a72fd24cd29c648c2c379431e6628655627bf" dependencies = [ - "itertools 0.13.0", + "itertools", "unicode-segmentation", "unicode-width", ] diff --git a/Cargo.toml b/Cargo.toml index 4a5ae69..293fc52 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -32,7 +32,7 @@ strum = {version = "0.26.1", features = ["derive"] } strum_macros = "0.26.1" tokio = { version = "1.36.0", features = ["full"] } tokio-util = "0.7.8" -ratatui = { version = "0.26.0", features = ["all-widgets"] } +ratatui = { version = "0.28.0", features = ["all-widgets"] } urlencoding = "2.1.2" [dev-dependencies] diff --git a/src/models/stateful_list.rs b/src/models/stateful_list.rs index 5ae712c..d31d79f 100644 --- a/src/models/stateful_list.rs +++ b/src/models/stateful_list.rs @@ -18,18 +18,16 @@ impl Scrollable for StatefulList { return; } - let selected_row = match self.state.selected() { + match self.state.selected() { Some(i) => { if i >= self.items.len() - 1 { - 0 + self.state.select_first(); } else { - i + 1 + self.state.select_next(); } } - None => 0, + None => self.state.select_first(), }; - - self.state.select(Some(selected_row)); } fn scroll_up(&mut self) { @@ -37,18 +35,16 @@ impl Scrollable for StatefulList { return; } - let selected_row = match self.state.selected() { + match self.state.selected() { Some(i) => { if i == 0 { - self.items.len() - 1 + self.state.select(Some(self.items.len() - 1)); } else { - i - 1 + self.state.select_previous(); } } - None => 0, + None => self.state.select_first(), }; - - self.state.select(Some(selected_row)); } fn scroll_to_top(&mut self) { @@ -56,7 +52,7 @@ impl Scrollable for StatefulList { return; } - self.state.select(Some(0)); + self.state.select_first(); } fn scroll_to_bottom(&mut self) { diff --git a/src/models/stateful_table.rs b/src/models/stateful_table.rs index 8afce93..0fc1225 100644 --- a/src/models/stateful_table.rs +++ b/src/models/stateful_table.rs @@ -42,22 +42,17 @@ where return; } - let selected_row = match self.filtered_state.as_ref().unwrap().selected() { + match self.filtered_state.as_ref().unwrap().selected() { Some(i) => { if i >= filtered_items.len() - 1 { - 0 + self.filtered_state.as_mut().unwrap().select_first(); } else { - i + 1 + self.filtered_state.as_mut().unwrap().select_next(); } } - None => 0, + None => self.filtered_state.as_mut().unwrap().select_first(), }; - self - .filtered_state - .as_mut() - .unwrap() - .select(Some(selected_row)); return; } @@ -65,18 +60,16 @@ where return; } - let selected_row = match self.state.selected() { + match self.state.selected() { Some(i) => { if i >= self.items.len() - 1 { - 0 + self.state.select_first(); } else { - i + 1 + self.state.select_next(); } } - None => 0, + None => self.state.select_first(), }; - - self.state.select(Some(selected_row)); } fn scroll_up(&mut self) { @@ -85,22 +78,21 @@ where return; } - let selected_row = match self.filtered_state.as_ref().unwrap().selected() { + match self.filtered_state.as_ref().unwrap().selected() { Some(i) => { if i == 0 { - filtered_items.len() - 1 + self + .filtered_state + .as_mut() + .unwrap() + .select(Some(filtered_items.len() - 1)); } else { - i - 1 + self.filtered_state.as_mut().unwrap().select_previous(); } } - None => 0, + None => self.filtered_state.as_mut().unwrap().select_first(), }; - self - .filtered_state - .as_mut() - .unwrap() - .select(Some(selected_row)); return; } @@ -108,18 +100,16 @@ where return; } - let selected_row = match self.state.selected() { + match self.state.selected() { Some(i) => { if i == 0 { - self.items.len() - 1 + self.state.select(Some(self.items.len() - 1)); } else { - i - 1 + self.state.select_previous(); } } - None => 0, + None => self.state.select_first(), }; - - self.state.select(Some(selected_row)); } fn scroll_to_top(&mut self) { @@ -128,7 +118,7 @@ where return; } - self.filtered_state.as_mut().unwrap().select(Some(0)); + self.filtered_state.as_mut().unwrap().select_first(); return; } @@ -136,7 +126,7 @@ where return; } - self.state.select(Some(0)); + self.state.select_first(); } fn scroll_to_bottom(&mut self) { diff --git a/src/ui/mod.rs b/src/ui/mod.rs index abb6cb9..f725af4 100644 --- a/src/ui/mod.rs +++ b/src/ui/mod.rs @@ -31,7 +31,7 @@ pub trait DrawUi { } pub fn ui(f: &mut Frame<'_>, app: &mut App<'_>) { - f.render_widget(background_block(), f.size()); + f.render_widget(background_block(), f.area()); let [header_area, context_area, table_area] = if !app.error.text.is_empty() { let [header_area, error_area, context_area, table_area] = Layout::vertical([ Constraint::Length(3), @@ -39,7 +39,7 @@ pub fn ui(f: &mut Frame<'_>, app: &mut App<'_>) { Constraint::Length(10), Constraint::Fill(0), ]) - .areas(f.size()); + .areas(f.area()); draw_error(f, app, error_area); @@ -50,7 +50,7 @@ pub fn ui(f: &mut Frame<'_>, app: &mut App<'_>) { Constraint::Length(10), Constraint::Fill(0), ]) - .areas(f.size()) + .areas(f.area()) }; draw_header_row(f, app, header_area); @@ -110,7 +110,7 @@ pub fn draw_popup( size: Size, ) { let (percent_x, percent_y) = size.to_percent(); - let popup_area = centered_rect(percent_x, percent_y, f.size()); + let popup_area = centered_rect(percent_x, percent_y, f.area()); f.render_widget(Clear, popup_area); f.render_widget(background_block(), popup_area); popup_fn(f, app, popup_area); @@ -118,7 +118,7 @@ pub fn draw_popup( fn draw_popup_ui(f: &mut Frame<'_>, app: &mut App<'_>, size: Size) { let (percent_x, percent_y) = size.to_percent(); - let popup_area = centered_rect(percent_x, percent_y, f.size()); + let popup_area = centered_rect(percent_x, percent_y, f.area()); f.render_widget(Clear, popup_area); f.render_widget(background_block(), popup_area); T::draw(f, app, popup_area); diff --git a/src/ui/radarr_ui/blocklist/mod.rs b/src/ui/radarr_ui/blocklist/mod.rs index 714780b..733f02c 100644 --- a/src/ui/radarr_ui/blocklist/mod.rs +++ b/src/ui/radarr_ui/blocklist/mod.rs @@ -56,7 +56,7 @@ impl DrawUi for BlocklistUi { .yes_no_value(app.data.radarr_data.prompt_confirm); draw_blocklist_table(f, app, area); - f.render_widget(Popup::new(confirmation_prompt).size(Size::Prompt), f.size()); + f.render_widget(Popup::new(confirmation_prompt).size(Size::Prompt), f.area()); } ActiveRadarrBlock::BlocklistClearAllItemsPrompt => { let confirmation_prompt = ConfirmationPrompt::new() @@ -67,7 +67,7 @@ impl DrawUi for BlocklistUi { draw_blocklist_table(f, app, area); f.render_widget( Popup::new(confirmation_prompt).size(Size::SmallPrompt), - f.size(), + f.area(), ); } _ => (), @@ -197,5 +197,5 @@ fn draw_blocklist_item_details_popup(f: &mut Frame<'_>, app: &mut App<'_>) { .style(Style::new().secondary()) .alignment(Alignment::Left); - f.render_widget(Popup::new(message).size(Size::NarrowMessage), f.size()); + f.render_widget(Popup::new(message).size(Size::NarrowMessage), f.area()); } diff --git a/src/ui/radarr_ui/collections/edit_collection_ui.rs b/src/ui/radarr_ui/collections/edit_collection_ui.rs index 1c1255b..9eedf8d 100644 --- a/src/ui/radarr_ui/collections/edit_collection_ui.rs +++ b/src/ui/radarr_ui/collections/edit_collection_ui.rs @@ -182,7 +182,7 @@ fn draw_edit_collection_select_minimum_availability_popup(f: &mut Frame<'_>, app ); let popup = Popup::new(min_availability_list).size(Size::Dropdown); - f.render_widget(popup, f.size()); + f.render_widget(popup, f.area()); } fn draw_edit_collection_select_quality_profile_popup(f: &mut Frame<'_>, app: &mut App<'_>) { @@ -198,5 +198,5 @@ fn draw_edit_collection_select_quality_profile_popup(f: &mut Frame<'_>, app: &mu ); let popup = Popup::new(quality_profile_list).size(Size::Dropdown); - f.render_widget(popup, f.size()); + f.render_widget(popup, f.area()); } diff --git a/src/ui/radarr_ui/collections/mod.rs b/src/ui/radarr_ui/collections/mod.rs index d53687e..c3fa10b 100644 --- a/src/ui/radarr_ui/collections/mod.rs +++ b/src/ui/radarr_ui/collections/mod.rs @@ -55,7 +55,7 @@ impl DrawUi for CollectionsUi { let popup = Popup::new(Message::new("Collection not found!")).size(Size::Message); draw_collections(f, app, area); - f.render_widget(popup, f.size()); + f.render_widget(popup, f.area()); } ActiveRadarrBlock::FilterCollections => draw_popup_over( f, @@ -72,7 +72,7 @@ impl DrawUi for CollectionsUi { .size(Size::Message); draw_collections(f, app, area); - f.render_widget(popup, f.size()); + f.render_widget(popup, f.area()); } ActiveRadarrBlock::UpdateAllCollectionsPrompt => { let confirmation_prompt = ConfirmationPrompt::new() @@ -81,7 +81,7 @@ impl DrawUi for CollectionsUi { .yes_no_value(app.data.radarr_data.prompt_confirm); draw_collections(f, app, area); - f.render_widget(Popup::new(confirmation_prompt).size(Size::Prompt), f.size()); + f.render_widget(Popup::new(confirmation_prompt).size(Size::Prompt), f.area()); } _ => (), }; diff --git a/src/ui/radarr_ui/downloads/mod.rs b/src/ui/radarr_ui/downloads/mod.rs index e2172dc..26a8773 100644 --- a/src/ui/radarr_ui/downloads/mod.rs +++ b/src/ui/radarr_ui/downloads/mod.rs @@ -44,7 +44,7 @@ impl DrawUi for DownloadsUi { .yes_no_value(app.data.radarr_data.prompt_confirm); draw_downloads(f, app, area); - f.render_widget(Popup::new(confirmation_prompt).size(Size::Prompt), f.size()); + f.render_widget(Popup::new(confirmation_prompt).size(Size::Prompt), f.area()); } ActiveRadarrBlock::UpdateDownloadsPrompt => { let confirmation_prompt = ConfirmationPrompt::new() @@ -53,7 +53,7 @@ impl DrawUi for DownloadsUi { .yes_no_value(app.data.radarr_data.prompt_confirm); draw_downloads(f, app, area); - f.render_widget(Popup::new(confirmation_prompt).size(Size::Prompt), f.size()); + f.render_widget(Popup::new(confirmation_prompt).size(Size::Prompt), f.area()); } _ => (), } diff --git a/src/ui/radarr_ui/indexers/mod.rs b/src/ui/radarr_ui/indexers/mod.rs index 9729587..93a22a8 100644 --- a/src/ui/radarr_ui/indexers/mod.rs +++ b/src/ui/radarr_ui/indexers/mod.rs @@ -54,7 +54,7 @@ impl DrawUi for IndexersUi { title_block("Testing Indexer"), )) .size(Size::LargeMessage); - f.render_widget(loading_popup, f.size()); + f.render_widget(loading_popup, f.area()); } else { let popup = if let Some(result) = app.data.radarr_data.indexer_test_error.as_ref() { Popup::new(Message::new(result.clone())).size(Size::LargeMessage) @@ -65,7 +65,7 @@ impl DrawUi for IndexersUi { Popup::new(message).size(Size::Message) }; - f.render_widget(popup, f.size()); + f.render_widget(popup, f.area()); } } ActiveRadarrBlock::DeleteIndexerPrompt => { @@ -86,7 +86,7 @@ impl DrawUi for IndexersUi { .yes_no_value(app.data.radarr_data.prompt_confirm); draw_indexers(f, app, area); - f.render_widget(Popup::new(confirmation_prompt).size(Size::Prompt), f.size()); + f.render_widget(Popup::new(confirmation_prompt).size(Size::Prompt), f.area()); } _ => (), }; diff --git a/src/ui/radarr_ui/library/add_movie_ui.rs b/src/ui/radarr_ui/library/add_movie_ui.rs index a4c0939..e087d16 100644 --- a/src/ui/radarr_ui/library/add_movie_ui.rs +++ b/src/ui/radarr_ui/library/add_movie_ui.rs @@ -80,7 +80,7 @@ impl DrawUi for AddMovieUi { draw_add_movie_search(f, app, area); f.render_widget( Popup::new(Message::new("This film is already in your library")).size(Size::Message), - f.size(), + f.area(), ); } _ => (), @@ -223,7 +223,7 @@ fn draw_add_movie_search(f: &mut Frame<'_>, app: &mut App<'_>, area: Rect) { let error_message_popup = Popup::new(error_message).size(Size::Message); f.render_widget(layout_block(), results_area); - f.render_widget(error_message_popup, f.size()); + f.render_widget(error_message_popup, f.area()); f.render_widget(help_paragraph, help_area); } ActiveRadarrBlock::AddMovieSearchResults @@ -447,7 +447,7 @@ fn draw_add_movie_select_monitor_popup(f: &mut Frame<'_>, app: &mut App<'_>) { ); let popup = Popup::new(monitor_list).size(Size::Dropdown); - f.render_widget(popup, f.size()); + f.render_widget(popup, f.area()); } fn draw_add_movie_select_minimum_availability_popup(f: &mut Frame<'_>, app: &mut App<'_>) { @@ -463,7 +463,7 @@ fn draw_add_movie_select_minimum_availability_popup(f: &mut Frame<'_>, app: &mut ); let popup = Popup::new(minimum_availability_list).size(Size::Dropdown); - f.render_widget(popup, f.size()); + f.render_widget(popup, f.area()); } fn draw_add_movie_select_quality_profile_popup(f: &mut Frame<'_>, app: &mut App<'_>) { @@ -479,7 +479,7 @@ fn draw_add_movie_select_quality_profile_popup(f: &mut Frame<'_>, app: &mut App< ); let popup = Popup::new(quality_profile_list).size(Size::Dropdown); - f.render_widget(popup, f.size()); + f.render_widget(popup, f.area()); } fn draw_add_movie_select_root_folder_popup(f: &mut Frame<'_>, app: &mut App<'_>) { @@ -495,5 +495,5 @@ fn draw_add_movie_select_root_folder_popup(f: &mut Frame<'_>, app: &mut App<'_>) ); let popup = Popup::new(root_folder_list).size(Size::Dropdown); - f.render_widget(popup, f.size()); + f.render_widget(popup, f.area()); } diff --git a/src/ui/radarr_ui/library/delete_movie_ui.rs b/src/ui/radarr_ui/library/delete_movie_ui.rs index 0a67dd6..3dd0d61 100644 --- a/src/ui/radarr_ui/library/delete_movie_ui.rs +++ b/src/ui/radarr_ui/library/delete_movie_ui.rs @@ -51,7 +51,7 @@ impl DrawUi for DeleteMovieUi { .yes_no_value(app.data.radarr_data.prompt_confirm); draw_library(f, app, area); - f.render_widget(Popup::new(confirmation_prompt).size(Size::Prompt), f.size()); + f.render_widget(Popup::new(confirmation_prompt).size(Size::Prompt), f.area()); } } } diff --git a/src/ui/radarr_ui/library/edit_movie_ui.rs b/src/ui/radarr_ui/library/edit_movie_ui.rs index e1136ad..a1fe967 100644 --- a/src/ui/radarr_ui/library/edit_movie_ui.rs +++ b/src/ui/radarr_ui/library/edit_movie_ui.rs @@ -194,7 +194,7 @@ fn draw_edit_movie_select_minimum_availability_popup(f: &mut Frame<'_>, app: &mu ); let popup = Popup::new(minimum_availability_list).size(Size::Dropdown); - f.render_widget(popup, f.size()); + f.render_widget(popup, f.area()); } fn draw_edit_movie_select_quality_profile_popup(f: &mut Frame<'_>, app: &mut App<'_>) { @@ -210,5 +210,5 @@ fn draw_edit_movie_select_quality_profile_popup(f: &mut Frame<'_>, app: &mut App ); let popup = Popup::new(quality_profile_list).size(Size::Dropdown); - f.render_widget(popup, f.size()); + f.render_widget(popup, f.area()); } diff --git a/src/ui/radarr_ui/library/mod.rs b/src/ui/radarr_ui/library/mod.rs index 6e966e9..e34b443 100644 --- a/src/ui/radarr_ui/library/mod.rs +++ b/src/ui/radarr_ui/library/mod.rs @@ -60,7 +60,7 @@ impl DrawUi for LibraryUi { let popup = Popup::new(Message::new("Movie not found!")).size(Size::Message); draw_library(f, app, area); - f.render_widget(popup, f.size()); + f.render_widget(popup, f.area()); } ActiveRadarrBlock::FilterMovies => draw_popup_over( f, @@ -75,7 +75,7 @@ impl DrawUi for LibraryUi { .size(Size::Message); draw_library(f, app, area); - f.render_widget(popup, f.size()); + f.render_widget(popup, f.area()); } ActiveRadarrBlock::UpdateAllMoviesPrompt => { let confirmation_prompt = ConfirmationPrompt::new() @@ -84,7 +84,7 @@ impl DrawUi for LibraryUi { .yes_no_value(app.data.radarr_data.prompt_confirm); draw_library(f, app, area); - f.render_widget(Popup::new(confirmation_prompt).size(Size::Prompt), f.size()); + f.render_widget(Popup::new(confirmation_prompt).size(Size::Prompt), f.area()); } _ => (), }; diff --git a/src/ui/radarr_ui/library/movie_details_ui.rs b/src/ui/radarr_ui/library/movie_details_ui.rs index 6a05e25..0a7bd6f 100644 --- a/src/ui/radarr_ui/library/movie_details_ui.rs +++ b/src/ui/radarr_ui/library/movie_details_ui.rs @@ -61,7 +61,7 @@ impl DrawUi for MovieDetailsUi { .yes_no_value(app.data.radarr_data.prompt_confirm); draw_movie_info(f, app, content_area); - f.render_widget(Popup::new(confirmation_prompt).size(Size::Prompt), f.size()); + f.render_widget(Popup::new(confirmation_prompt).size(Size::Prompt), f.area()); } ActiveRadarrBlock::UpdateAndScanPrompt => { let prompt = format!( @@ -73,7 +73,7 @@ impl DrawUi for MovieDetailsUi { .prompt(&prompt) .yes_no_value(app.data.radarr_data.prompt_confirm); - f.render_widget(Popup::new(confirmation_prompt).size(Size::Prompt), f.size()); + f.render_widget(Popup::new(confirmation_prompt).size(Size::Prompt), f.area()); } ActiveRadarrBlock::ManualSearchConfirmPrompt => { draw_manual_search_confirm_prompt(f, app); @@ -517,14 +517,14 @@ fn draw_manual_search_confirm_prompt(f: &mut Frame<'_>, app: &mut App<'_>) { .content(content_paragraph) .yes_no_value(app.data.radarr_data.prompt_confirm); - f.render_widget(Popup::new(confirmation_prompt).size(Size::Small), f.size()); + f.render_widget(Popup::new(confirmation_prompt).size(Size::Small), f.area()); } else { let confirmation_prompt = ConfirmationPrompt::new() .title(title) .prompt(&prompt) .yes_no_value(app.data.radarr_data.prompt_confirm); - f.render_widget(Popup::new(confirmation_prompt).size(Size::Prompt), f.size()); + f.render_widget(Popup::new(confirmation_prompt).size(Size::Prompt), f.area()); } } diff --git a/src/ui/radarr_ui/root_folders/mod.rs b/src/ui/radarr_ui/root_folders/mod.rs index 8f4837a..bff2797 100644 --- a/src/ui/radarr_ui/root_folders/mod.rs +++ b/src/ui/radarr_ui/root_folders/mod.rs @@ -52,7 +52,7 @@ impl DrawUi for RootFoldersUi { .yes_no_value(app.data.radarr_data.prompt_confirm); draw_root_folders(f, app, area); - f.render_widget(Popup::new(confirmation_prompt).size(Size::Prompt), f.size()); + f.render_widget(Popup::new(confirmation_prompt).size(Size::Prompt), f.area()); } _ => (), } diff --git a/src/ui/radarr_ui/system/system_details_ui.rs b/src/ui/radarr_ui/system/system_details_ui.rs index 2c318bb..db4582a 100644 --- a/src/ui/radarr_ui/system/system_details_ui.rs +++ b/src/ui/radarr_ui/system/system_details_ui.rs @@ -87,7 +87,7 @@ fn draw_logs_popup(f: &mut Frame<'_>, app: &mut App<'_>) { .block(block) .footer(&help_footer); - f.render_widget(popup, f.size()); + f.render_widget(popup, f.area()); return; } @@ -103,7 +103,7 @@ fn draw_logs_popup(f: &mut Frame<'_>, app: &mut App<'_>) { .block(block) .footer(&help_footer); - f.render_widget(popup, f.size()); + f.render_widget(popup, f.area()); } fn draw_tasks_popup(f: &mut Frame<'_>, app: &mut App<'_>, area: Rect) { @@ -145,7 +145,7 @@ fn draw_tasks_popup(f: &mut Frame<'_>, app: &mut App<'_>, area: Rect) { .prompt(&prompt) .yes_no_value(app.data.radarr_data.prompt_confirm); - f.render_widget(Popup::new(confirmation_prompt).size(Size::Prompt), f.size()); + f.render_widget(Popup::new(confirmation_prompt).size(Size::Prompt), f.area()); } } @@ -166,7 +166,7 @@ fn draw_updates_popup(f: &mut Frame<'_>, app: &mut App<'_>) { .block(block) .footer(&help_footer); - f.render_widget(popup, f.size()); + f.render_widget(popup, f.area()); } else { let loading = LoadingBlock::new(app.is_loading, borderless_block()); let popup = Popup::new(loading) @@ -174,6 +174,6 @@ fn draw_updates_popup(f: &mut Frame<'_>, app: &mut App<'_>) { .block(block) .footer(&help_footer); - f.render_widget(popup, f.size()); + f.render_widget(popup, f.area()); } } diff --git a/src/ui/styles.rs b/src/ui/styles.rs index 2bbeaad..744f633 100644 --- a/src/ui/styles.rs +++ b/src/ui/styles.rs @@ -1,5 +1,5 @@ -use ratatui::prelude::{Color, Styled}; -use ratatui::style::Stylize; +use ratatui::prelude::Color; +use ratatui::style::{Styled, Stylize}; pub const COLOR_ORANGE: Color = Color::Rgb(255, 170, 66); @@ -99,7 +99,7 @@ where fn unreleased(self) -> T { self.light_cyan() } - + fn warning(self) -> T { self.magenta() } diff --git a/src/ui/utils.rs b/src/ui/utils.rs index a209894..94125e8 100644 --- a/src/ui/utils.rs +++ b/src/ui/utils.rs @@ -98,7 +98,7 @@ pub fn centered_rect(percent_x: u16, percent_y: u16, area: Rect) -> Rect { pub fn line_gauge_with_title(title: &str, ratio: f64) -> LineGauge<'_> { LineGauge::new() .block(Block::new().title(title)) - .gauge_style(Style::new().cyan()) + .filled_style(Style::new().cyan()) .line_set(symbols::line::THICK) .ratio(ratio) .label(Line::from(format!("{:.0}%", ratio * 100.0))) @@ -107,7 +107,7 @@ pub fn line_gauge_with_title(title: &str, ratio: f64) -> LineGauge<'_> { pub fn line_gauge_with_label(title: &str, ratio: f64) -> LineGauge<'_> { LineGauge::new() .block(Block::new()) - .gauge_style(Style::new().cyan()) + .filled_style(Style::new().cyan()) .line_set(symbols::line::THICK) .ratio(ratio) .label(Line::from(format!("{title}: {:.0}%", ratio * 100.0))) diff --git a/src/ui/widgets/button.rs b/src/ui/widgets/button.rs index 20997d7..ca18a8a 100644 --- a/src/ui/widgets/button.rs +++ b/src/ui/widgets/button.rs @@ -2,7 +2,8 @@ use crate::ui::styles::ManagarrStyle; use crate::ui::utils::{layout_block, style_block_highlight}; use ratatui::buffer::Buffer; use ratatui::layout::{Alignment, Constraint, Flex, Layout, Rect}; -use ratatui::prelude::{Style, Styled, Text, Widget}; +use ratatui::prelude::{Style, Text, Widget}; +use ratatui::style::Styled; use ratatui::widgets::Paragraph; #[cfg(test)] diff --git a/src/ui/widgets/input_box.rs b/src/ui/widgets/input_box.rs index 610b58a..e0048c3 100644 --- a/src/ui/widgets/input_box.rs +++ b/src/ui/widgets/input_box.rs @@ -1,5 +1,5 @@ use ratatui::buffer::Buffer; -use ratatui::layout::{Alignment, Constraint, Layout, Rect}; +use ratatui::layout::{Alignment, Constraint, Layout, Position, Rect}; use ratatui::prelude::Text; use ratatui::style::{Style, Styled, Stylize}; use ratatui::widgets::{Block, Paragraph, Widget}; @@ -84,12 +84,15 @@ impl<'a> InputBox<'a> { }; if self.cursor_after_string { - f.set_cursor( - area.x + (self.content.len() - self.offset) as u16 + 1, - area.y + 1, - ); + f.set_cursor_position(Position { + x: area.x + (self.content.len() - self.offset) as u16 + 1, + y: area.y + 1, + }); } else { - f.set_cursor(area.x + 1u16, area.y + 1); + f.set_cursor_position(Position { + x: area.x + 1u16, + y: area.y + 1, + }); } }