feat(handler): Support for toggling the monitoring status of a specified episode in the Sonarr UI

This commit is contained in:
2024-12-13 16:18:02 -07:00
parent 9269b66aa8
commit 54006c378f
3 changed files with 56 additions and 3 deletions
@@ -338,6 +338,13 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveSonarrBlock> for SeasonDetailsHandler
fn handle_char_key_event(&mut self) { fn handle_char_key_event(&mut self) {
let key = self.key; let key = self.key;
match self.active_sonarr_block { match self.active_sonarr_block {
ActiveSonarrBlock::SeasonDetails if self.key == DEFAULT_KEYBINDINGS.toggle_monitoring.key => {
self.app.data.sonarr_data.prompt_confirm = true;
self.app.data.sonarr_data.prompt_confirm_action =
Some(SonarrEvent::ToggleEpisodeMonitoring(None));
self.app.pop_and_push_navigation_stack(self.active_sonarr_block.into());
}
ActiveSonarrBlock::SeasonDetails ActiveSonarrBlock::SeasonDetails
| ActiveSonarrBlock::SeasonHistory | ActiveSonarrBlock::SeasonHistory
| ActiveSonarrBlock::ManualSeasonSearch => match self.key { | ActiveSonarrBlock::ManualSeasonSearch => match self.key {
@@ -546,6 +546,54 @@ mod tests {
use crate::network::sonarr_network::SonarrEvent; use crate::network::sonarr_network::SonarrEvent;
use pretty_assertions::assert_eq; use pretty_assertions::assert_eq;
#[test]
fn test_toggle_monitoring_key() {
let mut app = App::default();
app.data.sonarr_data = create_test_sonarr_data();
app.push_navigation_stack(ActiveSonarrBlock::SeasonDetails.into());
app.is_routing = false;
SeasonDetailsHandler::with(
DEFAULT_KEYBINDINGS.toggle_monitoring.key,
&mut app,
ActiveSonarrBlock::SeasonDetails,
None,
)
.handle();
assert_eq!(
app.get_current_route(),
ActiveSonarrBlock::SeasonDetails.into()
);
assert!(app.data.sonarr_data.prompt_confirm);
assert!(app.is_routing);
assert_eq!(
app.data.sonarr_data.prompt_confirm_action,
Some(SonarrEvent::ToggleEpisodeMonitoring(None))
);
}
#[test]
fn test_toggle_monitoring_key_no_op_when_not_ready() {
let mut app = App::default();
app.is_loading = true;
app.push_navigation_stack(ActiveSonarrBlock::SeasonDetails.into());
app.is_routing = false;
SeasonDetailsHandler::with(
DEFAULT_KEYBINDINGS.toggle_monitoring.key,
&mut app,
ActiveSonarrBlock::SeasonDetails,
None,
)
.handle();
assert_eq!(app.get_current_route(), ActiveSonarrBlock::SeasonDetails.into());
assert!(!app.data.sonarr_data.prompt_confirm);
assert!(app.data.sonarr_data.prompt_confirm_action.is_none());
assert!(!app.is_routing);
}
#[rstest] #[rstest]
fn test_auto_search_key( fn test_auto_search_key(
#[values( #[values(
@@ -378,9 +378,7 @@ mod tests {
#[test] #[test]
fn test_toggle_monitoring_key() { fn test_toggle_monitoring_key() {
let mut app = App::default(); let mut app = App::default();
let mut series_history = StatefulTable::default(); app.data.sonarr_data = create_test_sonarr_data();
series_history.set_items(vec![SonarrHistoryItem::default()]);
app.data.sonarr_data.series_history = Some(series_history);
app.push_navigation_stack(ActiveSonarrBlock::SeriesDetails.into()); app.push_navigation_stack(ActiveSonarrBlock::SeriesDetails.into());
app.is_routing = false; app.is_routing = false;