fix(radarr): Provide the movie ID alongside all TriggerAutomaticMovieSearch events when publishing to the networking channel
This commit is contained in:
@@ -1,7 +1,9 @@
|
||||
use crate::app::key_binding::DEFAULT_KEYBINDINGS;
|
||||
use crate::handlers::table_handler::TableHandlingConfig;
|
||||
use crate::handlers::{handle_prompt_toggle, KeyEventHandler};
|
||||
use crate::models::radarr_models::{AddMovieBody, AddMovieOptions, AddMovieSearchResult, CollectionMovie};
|
||||
use crate::models::radarr_models::{
|
||||
AddMovieBody, AddMovieOptions, AddMovieSearchResult, CollectionMovie,
|
||||
};
|
||||
use crate::models::servarr_data::radarr::modals::AddMovieModal;
|
||||
use crate::models::servarr_data::radarr::radarr_data::{
|
||||
ActiveRadarrBlock, ADD_MOVIE_BLOCKS, ADD_MOVIE_SELECTION_BLOCKS,
|
||||
@@ -54,10 +56,10 @@ impl<'a, 'b> AddMovieHandler<'a, 'b> {
|
||||
quality_profile_list,
|
||||
..
|
||||
} = self.app.data.radarr_data.add_movie_modal.as_ref().unwrap();
|
||||
let (tmdb_id, title) = if let Some(context) = self.context
|
||||
{
|
||||
let (tmdb_id, title) = if let Some(context) = self.context {
|
||||
if context == ActiveRadarrBlock::CollectionDetails {
|
||||
let CollectionMovie { tmdb_id, title, .. } = self.app
|
||||
let CollectionMovie { tmdb_id, title, .. } = self
|
||||
.app
|
||||
.data
|
||||
.radarr_data
|
||||
.collection_movies
|
||||
@@ -65,7 +67,8 @@ impl<'a, 'b> AddMovieHandler<'a, 'b> {
|
||||
.clone();
|
||||
(tmdb_id, title.text)
|
||||
} else {
|
||||
let AddMovieSearchResult { tmdb_id, title, .. } = self.app
|
||||
let AddMovieSearchResult { tmdb_id, title, .. } = self
|
||||
.app
|
||||
.data
|
||||
.radarr_data
|
||||
.add_searched_movies
|
||||
@@ -76,7 +79,8 @@ impl<'a, 'b> AddMovieHandler<'a, 'b> {
|
||||
(tmdb_id, title.text)
|
||||
}
|
||||
} else {
|
||||
let AddMovieSearchResult { tmdb_id, title, .. } = self.app
|
||||
let AddMovieSearchResult { tmdb_id, title, .. } = self
|
||||
.app
|
||||
.data
|
||||
.radarr_data
|
||||
.add_searched_movies
|
||||
@@ -87,7 +91,8 @@ impl<'a, 'b> AddMovieHandler<'a, 'b> {
|
||||
(tmdb_id, title.text)
|
||||
};
|
||||
let quality_profile = quality_profile_list.current_selection();
|
||||
let quality_profile_id = *self.app
|
||||
let quality_profile_id = *self
|
||||
.app
|
||||
.data
|
||||
.radarr_data
|
||||
.quality_profile_map
|
||||
@@ -446,7 +451,8 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for AddMovieHandler<'a,
|
||||
match self.app.data.radarr_data.selected_block.get_active_block() {
|
||||
ActiveRadarrBlock::AddMovieConfirmPrompt => {
|
||||
if self.app.data.radarr_data.prompt_confirm {
|
||||
self.app.data.radarr_data.prompt_confirm_action = Some(RadarrEvent::AddMovie(self.build_add_movie_body()));
|
||||
self.app.data.radarr_data.prompt_confirm_action =
|
||||
Some(RadarrEvent::AddMovie(self.build_add_movie_body()));
|
||||
}
|
||||
|
||||
self.app.pop_navigation_stack();
|
||||
@@ -546,7 +552,8 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for AddMovieHandler<'a,
|
||||
&& key == DEFAULT_KEYBINDINGS.confirm.key
|
||||
{
|
||||
self.app.data.radarr_data.prompt_confirm = true;
|
||||
self.app.data.radarr_data.prompt_confirm_action = Some(RadarrEvent::AddMovie(self.build_add_movie_body()));
|
||||
self.app.data.radarr_data.prompt_confirm_action =
|
||||
Some(RadarrEvent::AddMovie(self.build_add_movie_body()));
|
||||
self.app.pop_navigation_stack();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1522,7 +1522,7 @@ mod tests {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
#[test]
|
||||
fn test_add_movie_search_no_panic_on_none_search_result() {
|
||||
let mut app = App::default();
|
||||
|
||||
@@ -22,12 +22,8 @@ impl<'a, 'b> DeleteMovieHandler<'a, 'b> {
|
||||
let id = self.app.data.radarr_data.movies.current_selection().id;
|
||||
let delete_movie_files = self.app.data.radarr_data.delete_movie_files;
|
||||
let add_list_exclusion = self.app.data.radarr_data.add_list_exclusion;
|
||||
self
|
||||
.app
|
||||
.data
|
||||
.radarr_data
|
||||
.reset_delete_movie_preferences();
|
||||
|
||||
self.app.data.radarr_data.reset_delete_movie_preferences();
|
||||
|
||||
DeleteMovieParams {
|
||||
id,
|
||||
delete_movie_files,
|
||||
@@ -92,7 +88,8 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for DeleteMovieHandler<'
|
||||
match self.app.data.radarr_data.selected_block.get_active_block() {
|
||||
ActiveRadarrBlock::DeleteMovieConfirmPrompt => {
|
||||
if self.app.data.radarr_data.prompt_confirm {
|
||||
self.app.data.radarr_data.prompt_confirm_action = Some(RadarrEvent::DeleteMovie(self.build_delete_movie_params()));
|
||||
self.app.data.radarr_data.prompt_confirm_action =
|
||||
Some(RadarrEvent::DeleteMovie(self.build_delete_movie_params()));
|
||||
self.app.should_refresh = true;
|
||||
} else {
|
||||
self.app.data.radarr_data.reset_delete_movie_preferences();
|
||||
@@ -128,7 +125,8 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for DeleteMovieHandler<'
|
||||
&& self.key == DEFAULT_KEYBINDINGS.confirm.key
|
||||
{
|
||||
self.app.data.radarr_data.prompt_confirm = true;
|
||||
self.app.data.radarr_data.prompt_confirm_action = Some(RadarrEvent::DeleteMovie(self.build_delete_movie_params()));
|
||||
self.app.data.radarr_data.prompt_confirm_action =
|
||||
Some(RadarrEvent::DeleteMovie(self.build_delete_movie_params()));
|
||||
self.app.should_refresh = true;
|
||||
|
||||
self.app.pop_navigation_stack();
|
||||
|
||||
@@ -330,7 +330,8 @@ mod tests {
|
||||
&mut app,
|
||||
ActiveRadarrBlock::DeleteMoviePrompt,
|
||||
None,
|
||||
).build_delete_movie_params();
|
||||
)
|
||||
.build_delete_movie_params();
|
||||
|
||||
assert_eq!(delete_movie_params, expected_delete_movie_params);
|
||||
assert!(!app.data.radarr_data.delete_movie_files);
|
||||
|
||||
@@ -23,7 +23,16 @@ pub(super) struct EditMovieHandler<'a, 'b> {
|
||||
impl<'a, 'b> EditMovieHandler<'a, 'b> {
|
||||
fn build_edit_movie_params(&mut self) -> EditMovieParams {
|
||||
let movie_id = self.app.data.radarr_data.movies.current_selection().id;
|
||||
let tags = self.app.data.radarr_data.edit_movie_modal.as_ref().unwrap().tags.text.clone();
|
||||
let tags = self
|
||||
.app
|
||||
.data
|
||||
.radarr_data
|
||||
.edit_movie_modal
|
||||
.as_ref()
|
||||
.unwrap()
|
||||
.tags
|
||||
.text
|
||||
.clone();
|
||||
let params = {
|
||||
let EditMovieModal {
|
||||
monitored,
|
||||
@@ -33,7 +42,8 @@ impl<'a, 'b> EditMovieHandler<'a, 'b> {
|
||||
..
|
||||
} = self.app.data.radarr_data.edit_movie_modal.as_ref().unwrap();
|
||||
let quality_profile = quality_profile_list.current_selection();
|
||||
let quality_profile_id = *self.app
|
||||
let quality_profile_id = *self
|
||||
.app
|
||||
.data
|
||||
.radarr_data
|
||||
.quality_profile_map
|
||||
@@ -265,7 +275,8 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for EditMovieHandler<'a,
|
||||
match self.app.data.radarr_data.selected_block.get_active_block() {
|
||||
ActiveRadarrBlock::EditMovieConfirmPrompt => {
|
||||
if self.app.data.radarr_data.prompt_confirm {
|
||||
self.app.data.radarr_data.prompt_confirm_action = Some(RadarrEvent::EditMovie(self.build_edit_movie_params()));
|
||||
self.app.data.radarr_data.prompt_confirm_action =
|
||||
Some(RadarrEvent::EditMovie(self.build_edit_movie_params()));
|
||||
self.app.should_refresh = true;
|
||||
}
|
||||
|
||||
@@ -376,7 +387,8 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for EditMovieHandler<'a,
|
||||
&& key == DEFAULT_KEYBINDINGS.confirm.key
|
||||
{
|
||||
self.app.data.radarr_data.prompt_confirm = true;
|
||||
self.app.data.radarr_data.prompt_confirm_action = Some(RadarrEvent::EditMovie(self.build_edit_movie_params()));
|
||||
self.app.data.radarr_data.prompt_confirm_action =
|
||||
Some(RadarrEvent::EditMovie(self.build_edit_movie_params()));
|
||||
self.app.should_refresh = true;
|
||||
|
||||
self.app.pop_navigation_stack();
|
||||
|
||||
@@ -1185,7 +1185,8 @@ mod tests {
|
||||
&mut app,
|
||||
ActiveRadarrBlock::EditMoviePrompt,
|
||||
None,
|
||||
).build_edit_movie_params();
|
||||
)
|
||||
.build_edit_movie_params();
|
||||
|
||||
assert_eq!(edit_movie_params, expected_edit_movie_params);
|
||||
assert!(app.data.radarr_data.edit_movie_modal.is_none());
|
||||
|
||||
@@ -6,7 +6,9 @@ use crate::event::Key;
|
||||
use crate::handle_table_events;
|
||||
use crate::handlers::table_handler::TableHandlingConfig;
|
||||
use crate::handlers::{handle_prompt_toggle, KeyEventHandler};
|
||||
use crate::models::radarr_models::{Credit, MovieHistoryItem, RadarrRelease, RadarrReleaseDownloadBody};
|
||||
use crate::models::radarr_models::{
|
||||
Credit, MovieHistoryItem, RadarrRelease, RadarrReleaseDownloadBody,
|
||||
};
|
||||
use crate::models::servarr_data::radarr::radarr_data::{
|
||||
ActiveRadarrBlock, EDIT_MOVIE_SELECTION_BLOCKS, MOVIE_DETAILS_BLOCKS,
|
||||
};
|
||||
@@ -79,15 +81,14 @@ impl<'a, 'b> MovieDetailsHandler<'a, 'b> {
|
||||
.movie_crew,
|
||||
Credit
|
||||
);
|
||||
|
||||
|
||||
fn build_radarr_release_download_body(&self) -> RadarrReleaseDownloadBody {
|
||||
let movie_id = self.app.data.radarr_data.movies.current_selection().id;
|
||||
let (guid, indexer_id) = {
|
||||
let RadarrRelease {
|
||||
guid,
|
||||
indexer_id,
|
||||
..
|
||||
} = self.app
|
||||
guid, indexer_id, ..
|
||||
} = self
|
||||
.app
|
||||
.data
|
||||
.radarr_data
|
||||
.movie_details_modal
|
||||
@@ -105,6 +106,10 @@ impl<'a, 'b> MovieDetailsHandler<'a, 'b> {
|
||||
movie_id,
|
||||
}
|
||||
}
|
||||
|
||||
fn extract_movie_id(&self) -> i64 {
|
||||
self.app.data.radarr_data.movies.current_selection().id
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for MovieDetailsHandler<'a, 'b> {
|
||||
@@ -266,7 +271,7 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for MovieDetailsHandler<
|
||||
ActiveRadarrBlock::AutomaticallySearchMoviePrompt => {
|
||||
if self.app.data.radarr_data.prompt_confirm {
|
||||
self.app.data.radarr_data.prompt_confirm_action =
|
||||
Some(RadarrEvent::TriggerAutomaticSearch(None));
|
||||
Some(RadarrEvent::TriggerAutomaticSearch(self.extract_movie_id()));
|
||||
}
|
||||
|
||||
self.app.pop_navigation_stack();
|
||||
@@ -285,8 +290,9 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for MovieDetailsHandler<
|
||||
}
|
||||
ActiveRadarrBlock::ManualSearchConfirmPrompt => {
|
||||
if self.app.data.radarr_data.prompt_confirm {
|
||||
self.app.data.radarr_data.prompt_confirm_action =
|
||||
Some(RadarrEvent::DownloadRelease(self.build_radarr_release_download_body()));
|
||||
self.app.data.radarr_data.prompt_confirm_action = Some(RadarrEvent::DownloadRelease(
|
||||
self.build_radarr_release_download_body(),
|
||||
));
|
||||
}
|
||||
|
||||
self.app.pop_navigation_stack();
|
||||
@@ -359,7 +365,7 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for MovieDetailsHandler<
|
||||
{
|
||||
self.app.data.radarr_data.prompt_confirm = true;
|
||||
self.app.data.radarr_data.prompt_confirm_action =
|
||||
Some(RadarrEvent::TriggerAutomaticSearch(None));
|
||||
Some(RadarrEvent::TriggerAutomaticSearch(self.extract_movie_id()));
|
||||
|
||||
self.app.pop_navigation_stack();
|
||||
}
|
||||
@@ -371,7 +377,9 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for MovieDetailsHandler<
|
||||
}
|
||||
ActiveRadarrBlock::ManualSearchConfirmPrompt if key == DEFAULT_KEYBINDINGS.confirm.key => {
|
||||
self.app.data.radarr_data.prompt_confirm = true;
|
||||
self.app.data.radarr_data.prompt_confirm_action = Some(RadarrEvent::DownloadRelease(self.build_radarr_release_download_body()));
|
||||
self.app.data.radarr_data.prompt_confirm_action = Some(RadarrEvent::DownloadRelease(
|
||||
self.build_radarr_release_download_body(),
|
||||
));
|
||||
|
||||
self.app.pop_navigation_stack();
|
||||
}
|
||||
|
||||
@@ -361,7 +361,7 @@ mod tests {
|
||||
#[rstest]
|
||||
#[case(
|
||||
ActiveRadarrBlock::AutomaticallySearchMoviePrompt,
|
||||
RadarrEvent::TriggerAutomaticSearch(None)
|
||||
RadarrEvent::TriggerAutomaticSearch(1)
|
||||
)]
|
||||
#[case(
|
||||
ActiveRadarrBlock::UpdateAndScanPrompt,
|
||||
@@ -388,11 +388,7 @@ mod tests {
|
||||
.movie_releases
|
||||
.set_items(vec![release()]);
|
||||
app.data.radarr_data.movie_details_modal = Some(movie_details_modal);
|
||||
app
|
||||
.data
|
||||
.radarr_data
|
||||
.movies
|
||||
.set_items(vec![movie()]);
|
||||
app.data.radarr_data.movies.set_items(vec![movie()]);
|
||||
app.data.radarr_data.prompt_confirm = true;
|
||||
app.push_navigation_stack(ActiveRadarrBlock::MovieDetails.into());
|
||||
app.push_navigation_stack(prompt_block.into());
|
||||
@@ -786,7 +782,7 @@ mod tests {
|
||||
#[rstest]
|
||||
#[case(
|
||||
ActiveRadarrBlock::AutomaticallySearchMoviePrompt,
|
||||
RadarrEvent::TriggerAutomaticSearch(None)
|
||||
RadarrEvent::TriggerAutomaticSearch(1)
|
||||
)]
|
||||
#[case(
|
||||
ActiveRadarrBlock::UpdateAndScanPrompt,
|
||||
@@ -813,11 +809,7 @@ mod tests {
|
||||
.movie_releases
|
||||
.set_items(vec![release()]);
|
||||
app.data.radarr_data.movie_details_modal = Some(movie_details_modal);
|
||||
app
|
||||
.data
|
||||
.radarr_data
|
||||
.movies
|
||||
.set_items(vec![movie()]);
|
||||
app.data.radarr_data.movies.set_items(vec![movie()]);
|
||||
app.data.radarr_data.prompt_confirm = true;
|
||||
app.push_navigation_stack(ActiveRadarrBlock::MovieDetails.into());
|
||||
app.push_navigation_stack(prompt_block.into());
|
||||
@@ -850,11 +842,7 @@ mod tests {
|
||||
.movie_releases
|
||||
.set_items(vec![release()]);
|
||||
app.data.radarr_data.movie_details_modal = Some(movie_details_modal);
|
||||
app
|
||||
.data
|
||||
.radarr_data
|
||||
.movies
|
||||
.set_items(vec![movie()]);
|
||||
app.data.radarr_data.movies.set_items(vec![movie()]);
|
||||
let expected_body = RadarrReleaseDownloadBody {
|
||||
guid: "1234".to_owned(),
|
||||
indexer_id: 2,
|
||||
@@ -866,11 +854,28 @@ mod tests {
|
||||
&mut app,
|
||||
ActiveRadarrBlock::ManualSearchConfirmPrompt,
|
||||
None,
|
||||
).build_radarr_release_download_body();
|
||||
)
|
||||
.build_radarr_release_download_body();
|
||||
|
||||
assert_eq!(body, expected_body);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_extract_movie_id() {
|
||||
let mut app = App::default();
|
||||
app.data.radarr_data.movies.set_items(vec![movie()]);
|
||||
|
||||
let movie_id = MovieDetailsHandler::with(
|
||||
DEFAULT_KEYBINDINGS.esc.key,
|
||||
&mut app,
|
||||
ActiveRadarrBlock::AutomaticallySearchMoviePrompt,
|
||||
None,
|
||||
)
|
||||
.extract_movie_id();
|
||||
|
||||
assert_eq!(movie_id, 1);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_releases_sorting_options_source() {
|
||||
let expected_cmp_fn: fn(&RadarrRelease, &RadarrRelease) -> Ordering =
|
||||
|
||||
Reference in New Issue
Block a user