fix(handler): Fixed a bug in the movie details handler that would allow key events to be processed before the data was finished loading
This commit is contained in:
@@ -47,18 +47,28 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for MovieDetailsHandler<
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn is_ready(&self) -> bool {
|
fn is_ready(&self) -> bool {
|
||||||
let movie_details_modal_is_ready =
|
|
||||||
if let Some(movie_details_modal) = &self.app.data.radarr_data.movie_details_modal {
|
if let Some(movie_details_modal) = &self.app.data.radarr_data.movie_details_modal {
|
||||||
!movie_details_modal.movie_details.is_empty()
|
match self.active_radarr_block {
|
||||||
|| !movie_details_modal.movie_history.is_empty()
|
ActiveRadarrBlock::MovieDetails => {
|
||||||
|| !movie_details_modal.movie_cast.is_empty()
|
!self.app.is_loading && !movie_details_modal.movie_details.is_empty()
|
||||||
|| !movie_details_modal.movie_crew.is_empty()
|
}
|
||||||
|| !movie_details_modal.movie_releases.is_empty()
|
ActiveRadarrBlock::MovieHistory => {
|
||||||
|
!self.app.is_loading && !movie_details_modal.movie_history.is_empty()
|
||||||
|
}
|
||||||
|
ActiveRadarrBlock::Cast => {
|
||||||
|
!self.app.is_loading && !movie_details_modal.movie_cast.is_empty()
|
||||||
|
}
|
||||||
|
ActiveRadarrBlock::Crew => {
|
||||||
|
!self.app.is_loading && !movie_details_modal.movie_crew.is_empty()
|
||||||
|
}
|
||||||
|
ActiveRadarrBlock::ManualSearch => {
|
||||||
|
!self.app.is_loading && !movie_details_modal.movie_releases.is_empty()
|
||||||
|
}
|
||||||
|
_ => !self.app.is_loading,
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
false
|
false
|
||||||
};
|
}
|
||||||
|
|
||||||
!self.app.is_loading && movie_details_modal_is_ready
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn handle_scroll_up(&mut self) {
|
fn handle_scroll_up(&mut self) {
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ mod tests {
|
|||||||
use std::cmp::Ordering;
|
use std::cmp::Ordering;
|
||||||
|
|
||||||
use pretty_assertions::assert_str_eq;
|
use pretty_assertions::assert_str_eq;
|
||||||
|
use rstest::rstest;
|
||||||
use serde_json::Number;
|
use serde_json::Number;
|
||||||
use strum::IntoEnumIterator;
|
use strum::IntoEnumIterator;
|
||||||
|
|
||||||
@@ -1245,10 +1246,12 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_manual_search_submit() {
|
fn test_manual_search_submit() {
|
||||||
let mut app = App::default();
|
let mut app = App::default();
|
||||||
app.data.radarr_data.movie_details_modal = Some(MovieDetailsModal {
|
let mut modal = MovieDetailsModal {
|
||||||
movie_details: ScrollableText::with_string("test".to_owned()),
|
movie_details: ScrollableText::with_string("test".to_owned()),
|
||||||
..MovieDetailsModal::default()
|
..MovieDetailsModal::default()
|
||||||
});
|
};
|
||||||
|
modal.movie_releases.set_items(vec![Release::default()]);
|
||||||
|
app.data.radarr_data.movie_details_modal = Some(modal);
|
||||||
app.push_navigation_stack(ActiveRadarrBlock::ManualSearch.into());
|
app.push_navigation_stack(ActiveRadarrBlock::ManualSearch.into());
|
||||||
|
|
||||||
MovieDetailsHandler::with(
|
MovieDetailsHandler::with(
|
||||||
@@ -1486,10 +1489,17 @@ mod tests {
|
|||||||
active_radarr_block: ActiveRadarrBlock,
|
active_radarr_block: ActiveRadarrBlock,
|
||||||
) {
|
) {
|
||||||
let mut app = App::default();
|
let mut app = App::default();
|
||||||
app.data.radarr_data.movie_details_modal = Some(MovieDetailsModal {
|
let mut modal = MovieDetailsModal {
|
||||||
movie_details: ScrollableText::with_string("test".to_owned()),
|
movie_details: ScrollableText::with_string("Test".to_owned()),
|
||||||
..MovieDetailsModal::default()
|
..MovieDetailsModal::default()
|
||||||
});
|
};
|
||||||
|
modal
|
||||||
|
.movie_history
|
||||||
|
.set_items(vec![MovieHistoryItem::default()]);
|
||||||
|
modal.movie_cast.set_items(vec![Credit::default()]);
|
||||||
|
modal.movie_crew.set_items(vec![Credit::default()]);
|
||||||
|
modal.movie_releases.set_items(vec![Release::default()]);
|
||||||
|
app.data.radarr_data.movie_details_modal = Some(modal);
|
||||||
|
|
||||||
MovieDetailsHandler::with(
|
MovieDetailsHandler::with(
|
||||||
&DEFAULT_KEYBINDINGS.search.key,
|
&DEFAULT_KEYBINDINGS.search.key,
|
||||||
@@ -1539,10 +1549,9 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_sort_key() {
|
fn test_sort_key() {
|
||||||
let mut app = App::default();
|
let mut app = App::default();
|
||||||
app.data.radarr_data.movie_details_modal = Some(MovieDetailsModal {
|
let mut modal = MovieDetailsModal::default();
|
||||||
movie_details: ScrollableText::with_string("test".to_owned()),
|
modal.movie_releases.set_items(release_vec());
|
||||||
..MovieDetailsModal::default()
|
app.data.radarr_data.movie_details_modal = Some(modal);
|
||||||
});
|
|
||||||
|
|
||||||
MovieDetailsHandler::with(
|
MovieDetailsHandler::with(
|
||||||
&DEFAULT_KEYBINDINGS.sort.key,
|
&DEFAULT_KEYBINDINGS.sort.key,
|
||||||
@@ -1670,10 +1679,17 @@ mod tests {
|
|||||||
active_radarr_block: ActiveRadarrBlock,
|
active_radarr_block: ActiveRadarrBlock,
|
||||||
) {
|
) {
|
||||||
let mut app = App::default();
|
let mut app = App::default();
|
||||||
app.data.radarr_data.movie_details_modal = Some(MovieDetailsModal {
|
let mut modal = MovieDetailsModal {
|
||||||
movie_details: ScrollableText::with_string("test".to_owned()),
|
movie_details: ScrollableText::with_string("Test".to_owned()),
|
||||||
..MovieDetailsModal::default()
|
..MovieDetailsModal::default()
|
||||||
});
|
};
|
||||||
|
modal
|
||||||
|
.movie_history
|
||||||
|
.set_items(vec![MovieHistoryItem::default()]);
|
||||||
|
modal.movie_cast.set_items(vec![Credit::default()]);
|
||||||
|
modal.movie_crew.set_items(vec![Credit::default()]);
|
||||||
|
modal.movie_releases.set_items(vec![Release::default()]);
|
||||||
|
app.data.radarr_data.movie_details_modal = Some(modal);
|
||||||
|
|
||||||
MovieDetailsHandler::with(
|
MovieDetailsHandler::with(
|
||||||
&DEFAULT_KEYBINDINGS.update.key,
|
&DEFAULT_KEYBINDINGS.update.key,
|
||||||
@@ -1733,10 +1749,17 @@ mod tests {
|
|||||||
active_radarr_block: ActiveRadarrBlock,
|
active_radarr_block: ActiveRadarrBlock,
|
||||||
) {
|
) {
|
||||||
let mut app = App::default();
|
let mut app = App::default();
|
||||||
app.data.radarr_data.movie_details_modal = Some(MovieDetailsModal {
|
let mut modal = MovieDetailsModal {
|
||||||
movie_details: ScrollableText::with_string("test".to_owned()),
|
movie_details: ScrollableText::with_string("Test".to_owned()),
|
||||||
..MovieDetailsModal::default()
|
..MovieDetailsModal::default()
|
||||||
});
|
};
|
||||||
|
modal
|
||||||
|
.movie_history
|
||||||
|
.set_items(vec![MovieHistoryItem::default()]);
|
||||||
|
modal.movie_cast.set_items(vec![Credit::default()]);
|
||||||
|
modal.movie_crew.set_items(vec![Credit::default()]);
|
||||||
|
modal.movie_releases.set_items(vec![Release::default()]);
|
||||||
|
app.data.radarr_data.movie_details_modal = Some(modal);
|
||||||
|
|
||||||
MovieDetailsHandler::with(
|
MovieDetailsHandler::with(
|
||||||
&DEFAULT_KEYBINDINGS.refresh.key,
|
&DEFAULT_KEYBINDINGS.refresh.key,
|
||||||
@@ -1994,15 +2017,37 @@ mod tests {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[rstest]
|
||||||
fn test_movie_details_handler_is_not_ready_when_loading() {
|
fn test_movie_details_handler_is_not_ready_when_loading(
|
||||||
|
#[values(
|
||||||
|
ActiveRadarrBlock::MovieDetails,
|
||||||
|
ActiveRadarrBlock::MovieHistory,
|
||||||
|
ActiveRadarrBlock::FileInfo,
|
||||||
|
ActiveRadarrBlock::Cast,
|
||||||
|
ActiveRadarrBlock::Crew,
|
||||||
|
ActiveRadarrBlock::ManualSearch,
|
||||||
|
ActiveRadarrBlock::ManualSearch
|
||||||
|
)]
|
||||||
|
movie_details_block: ActiveRadarrBlock,
|
||||||
|
) {
|
||||||
let mut app = App::default();
|
let mut app = App::default();
|
||||||
app.is_loading = true;
|
app.is_loading = true;
|
||||||
|
let mut modal = MovieDetailsModal {
|
||||||
|
movie_details: ScrollableText::with_string("Test".to_owned()),
|
||||||
|
..MovieDetailsModal::default()
|
||||||
|
};
|
||||||
|
modal
|
||||||
|
.movie_history
|
||||||
|
.set_items(vec![MovieHistoryItem::default()]);
|
||||||
|
modal.movie_cast.set_items(vec![Credit::default()]);
|
||||||
|
modal.movie_crew.set_items(vec![Credit::default()]);
|
||||||
|
modal.movie_releases.set_items(vec![Release::default()]);
|
||||||
|
app.data.radarr_data.movie_details_modal = Some(modal);
|
||||||
|
|
||||||
let handler = MovieDetailsHandler::with(
|
let handler = MovieDetailsHandler::with(
|
||||||
&DEFAULT_KEYBINDINGS.esc.key,
|
&DEFAULT_KEYBINDINGS.esc.key,
|
||||||
&mut app,
|
&mut app,
|
||||||
&ActiveRadarrBlock::MovieDetails,
|
&movie_details_block,
|
||||||
&None,
|
&None,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user