feat(handler): Support for toggling the monitoring status of a specified episode in the Sonarr UI
This commit is contained in:
@@ -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;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user