This commit is contained in:
2026-01-07 10:45:49 -07:00
parent 9b4eda6a9d
commit 3c1634d1e3
65 changed files with 2355 additions and 100 deletions
@@ -7,6 +7,7 @@ use crate::{
matches_key,
models::servarr_data::lidarr::lidarr_data::{ActiveLidarrBlock, DELETE_ARTIST_BLOCKS},
};
use crate::models::Route;
#[cfg(test)]
#[path = "delete_artist_handler_tests.rs"]
@@ -143,7 +144,7 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveLidarrBlock> for DeleteArtistHandler<
self.app
}
fn current_route(&self) -> crate::models::Route {
fn current_route(&self) -> Route {
self.app.get_current_route()
}
}
@@ -0,0 +1,455 @@
use crate::app::App;
use crate::event::Key;
use crate::handlers::{KeyEventHandler, handle_prompt_toggle};
use crate::models::{Route, Scrollable};
use crate::models::lidarr_models::EditArtistParams;
use crate::models::servarr_data::lidarr::lidarr_data::{ActiveLidarrBlock, EDIT_ARTIST_BLOCKS};
use crate::models::servarr_data::lidarr::modals::EditArtistModal;
use crate::network::lidarr_network::LidarrEvent;
use crate::{handle_text_box_keys, handle_text_box_left_right_keys, matches_key};
#[cfg(test)]
#[path = "edit_artist_handler_tests.rs"]
mod edit_artist_handler_tests;
pub(in crate::handlers::lidarr_handlers) struct EditArtistHandler<'a, 'b> {
key: Key,
app: &'a mut App<'b>,
active_lidarr_block: ActiveLidarrBlock,
context: Option<ActiveLidarrBlock>,
}
impl EditArtistHandler<'_, '_> {
fn build_edit_artist_params(&mut self) -> EditArtistParams {
let edit_artist_modal = self
.app
.data
.lidarr_data
.edit_artist_modal
.take()
.expect("EditArtistModal is None");
let artist_id = self.app.data.lidarr_data.artists.current_selection().id;
let tags = edit_artist_modal.tags.text;
let EditArtistModal {
monitored,
path,
monitor_list,
quality_profile_list,
metadata_profile_list,
..
} = edit_artist_modal;
let quality_profile = quality_profile_list.current_selection();
let quality_profile_id = *self
.app
.data
.lidarr_data
.quality_profile_map
.iter()
.filter(|(_, value)| *value == quality_profile)
.map(|(key, _)| key)
.next()
.unwrap();
let metadata_profile = metadata_profile_list.current_selection();
let metadata_profile_id = *self
.app
.data
.lidarr_data
.metadata_profile_map
.iter()
.filter(|(_, value)| *value == metadata_profile)
.map(|(key, _)| key)
.next()
.unwrap();
EditArtistParams {
artist_id,
monitored,
monitor_new_items: Some(*monitor_list.current_selection()),
quality_profile_id: Some(quality_profile_id),
metadata_profile_id: Some(metadata_profile_id),
root_folder_path: Some(path.text),
tag_input_string: Some(tags),
..EditArtistParams::default()
}
}
}
impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveLidarrBlock> for EditArtistHandler<'a, 'b> {
fn accepts(active_block: ActiveLidarrBlock) -> bool {
EDIT_ARTIST_BLOCKS.contains(&active_block)
}
fn ignore_special_keys(&self) -> bool {
self.app.ignore_special_keys_for_textbox_input
}
fn new(
key: Key,
app: &'a mut App<'b>,
active_block: ActiveLidarrBlock,
context: Option<ActiveLidarrBlock>,
) -> EditArtistHandler<'a, 'b> {
EditArtistHandler {
key,
app,
active_lidarr_block: active_block,
context,
}
}
fn get_key(&self) -> Key {
self.key
}
fn is_ready(&self) -> bool {
!self.app.is_loading && self.app.data.lidarr_data.edit_artist_modal.is_some()
}
fn handle_scroll_up(&mut self) {
match self.active_lidarr_block {
ActiveLidarrBlock::EditArtistSelectMonitorNewItems => self
.app
.data
.lidarr_data
.edit_artist_modal
.as_mut()
.unwrap()
.monitor_list
.scroll_up(),
ActiveLidarrBlock::EditArtistSelectQualityProfile => self
.app
.data
.lidarr_data
.edit_artist_modal
.as_mut()
.unwrap()
.quality_profile_list
.scroll_up(),
ActiveLidarrBlock::EditArtistSelectMetadataProfile => self
.app
.data
.lidarr_data
.edit_artist_modal
.as_mut()
.unwrap()
.metadata_profile_list
.scroll_up(),
ActiveLidarrBlock::EditArtistPrompt => self.app.data.lidarr_data.selected_block.up(),
_ => (),
}
}
fn handle_scroll_down(&mut self) {
match self.active_lidarr_block {
ActiveLidarrBlock::EditArtistSelectMonitorNewItems => self
.app
.data
.lidarr_data
.edit_artist_modal
.as_mut()
.unwrap()
.monitor_list
.scroll_down(),
ActiveLidarrBlock::EditArtistSelectQualityProfile => self
.app
.data
.lidarr_data
.edit_artist_modal
.as_mut()
.unwrap()
.quality_profile_list
.scroll_down(),
ActiveLidarrBlock::EditArtistSelectMetadataProfile => self
.app
.data
.lidarr_data
.edit_artist_modal
.as_mut()
.unwrap()
.metadata_profile_list
.scroll_down(),
ActiveLidarrBlock::EditArtistPrompt => self.app.data.lidarr_data.selected_block.down(),
_ => (),
}
}
fn handle_home(&mut self) {
match self.active_lidarr_block {
ActiveLidarrBlock::EditArtistSelectMonitorNewItems => self
.app
.data
.lidarr_data
.edit_artist_modal
.as_mut()
.unwrap()
.monitor_list
.scroll_to_top(),
ActiveLidarrBlock::EditArtistSelectQualityProfile => self
.app
.data
.lidarr_data
.edit_artist_modal
.as_mut()
.unwrap()
.quality_profile_list
.scroll_to_top(),
ActiveLidarrBlock::EditArtistSelectMetadataProfile => self
.app
.data
.lidarr_data
.edit_artist_modal
.as_mut()
.unwrap()
.metadata_profile_list
.scroll_to_top(),
ActiveLidarrBlock::EditArtistPathInput => self
.app
.data
.lidarr_data
.edit_artist_modal
.as_mut()
.unwrap()
.path
.scroll_home(),
ActiveLidarrBlock::EditArtistTagsInput => self
.app
.data
.lidarr_data
.edit_artist_modal
.as_mut()
.unwrap()
.tags
.scroll_home(),
_ => (),
}
}
fn handle_end(&mut self) {
match self.active_lidarr_block {
ActiveLidarrBlock::EditArtistSelectMonitorNewItems => self
.app
.data
.lidarr_data
.edit_artist_modal
.as_mut()
.unwrap()
.monitor_list
.scroll_to_bottom(),
ActiveLidarrBlock::EditArtistSelectQualityProfile => self
.app
.data
.lidarr_data
.edit_artist_modal
.as_mut()
.unwrap()
.quality_profile_list
.scroll_to_bottom(),
ActiveLidarrBlock::EditArtistSelectMetadataProfile => self
.app
.data
.lidarr_data
.edit_artist_modal
.as_mut()
.unwrap()
.metadata_profile_list
.scroll_to_bottom(),
ActiveLidarrBlock::EditArtistPathInput => self
.app
.data
.lidarr_data
.edit_artist_modal
.as_mut()
.unwrap()
.path
.reset_offset(),
ActiveLidarrBlock::EditArtistTagsInput => self
.app
.data
.lidarr_data
.edit_artist_modal
.as_mut()
.unwrap()
.tags
.reset_offset(),
_ => (),
}
}
fn handle_delete(&mut self) {}
fn handle_left_right_action(&mut self) {
match self.active_lidarr_block {
ActiveLidarrBlock::EditArtistPrompt => handle_prompt_toggle(self.app, self.key),
ActiveLidarrBlock::EditArtistPathInput => {
handle_text_box_left_right_keys!(
self,
self.key,
self
.app
.data
.lidarr_data
.edit_artist_modal
.as_mut()
.unwrap()
.path
)
}
ActiveLidarrBlock::EditArtistTagsInput => {
handle_text_box_left_right_keys!(
self,
self.key,
self
.app
.data
.lidarr_data
.edit_artist_modal
.as_mut()
.unwrap()
.tags
)
}
_ => (),
}
}
fn handle_submit(&mut self) {
match self.active_lidarr_block {
ActiveLidarrBlock::EditArtistPrompt => {
match self.app.data.lidarr_data.selected_block.get_active_block() {
ActiveLidarrBlock::EditArtistConfirmPrompt => {
if self.app.data.lidarr_data.prompt_confirm {
self.app.data.lidarr_data.prompt_confirm_action =
Some(LidarrEvent::EditArtist(self.build_edit_artist_params()));
self.app.should_refresh = true;
}
self.app.pop_navigation_stack();
}
ActiveLidarrBlock::EditArtistSelectMonitorNewItems
| ActiveLidarrBlock::EditArtistSelectQualityProfile
| ActiveLidarrBlock::EditArtistSelectMetadataProfile => self.app.push_navigation_stack(
(
self.app.data.lidarr_data.selected_block.get_active_block(),
self.context,
)
.into(),
),
ActiveLidarrBlock::EditArtistPathInput | ActiveLidarrBlock::EditArtistTagsInput => {
self.app.push_navigation_stack(
(
self.app.data.lidarr_data.selected_block.get_active_block(),
self.context,
)
.into(),
);
self.app.ignore_special_keys_for_textbox_input = true;
}
ActiveLidarrBlock::EditArtistToggleMonitored => {
self
.app
.data
.lidarr_data
.edit_artist_modal
.as_mut()
.unwrap()
.monitored = Some(
!self
.app
.data
.lidarr_data
.edit_artist_modal
.as_mut()
.unwrap()
.monitored
.unwrap_or_default(),
)
}
_ => (),
}
}
ActiveLidarrBlock::EditArtistSelectMonitorNewItems
| ActiveLidarrBlock::EditArtistSelectQualityProfile
| ActiveLidarrBlock::EditArtistSelectMetadataProfile => self.app.pop_navigation_stack(),
ActiveLidarrBlock::EditArtistPathInput | ActiveLidarrBlock::EditArtistTagsInput => {
self.app.pop_navigation_stack();
self.app.ignore_special_keys_for_textbox_input = false;
}
_ => (),
}
}
fn handle_esc(&mut self) {
match self.active_lidarr_block {
ActiveLidarrBlock::EditArtistTagsInput | ActiveLidarrBlock::EditArtistPathInput => {
self.app.pop_navigation_stack();
self.app.ignore_special_keys_for_textbox_input = false;
}
ActiveLidarrBlock::EditArtistPrompt => {
self.app.pop_navigation_stack();
self.app.data.lidarr_data.edit_artist_modal = None;
self.app.data.lidarr_data.prompt_confirm = false;
}
ActiveLidarrBlock::EditArtistSelectMonitorNewItems
| ActiveLidarrBlock::EditArtistSelectQualityProfile
| ActiveLidarrBlock::EditArtistSelectMetadataProfile => self.app.pop_navigation_stack(),
_ => (),
}
}
fn handle_char_key_event(&mut self) {
let key = self.key;
match self.active_lidarr_block {
ActiveLidarrBlock::EditArtistPathInput => {
handle_text_box_keys!(
self,
key,
self
.app
.data
.lidarr_data
.edit_artist_modal
.as_mut()
.unwrap()
.path
)
}
ActiveLidarrBlock::EditArtistTagsInput => {
handle_text_box_keys!(
self,
key,
self
.app
.data
.lidarr_data
.edit_artist_modal
.as_mut()
.unwrap()
.tags
)
}
ActiveLidarrBlock::EditArtistPrompt => {
if self.app.data.lidarr_data.selected_block.get_active_block()
== ActiveLidarrBlock::EditArtistConfirmPrompt
&& matches_key!(confirm, key)
{
self.app.data.lidarr_data.prompt_confirm = true;
self.app.data.lidarr_data.prompt_confirm_action =
Some(LidarrEvent::EditArtist(self.build_edit_artist_params()));
self.app.should_refresh = true;
self.app.pop_navigation_stack();
}
}
_ => (),
}
}
fn app_mut(&mut self) -> &mut App<'b> {
self.app
}
fn current_route(&self) -> Route {
self.app.get_current_route()
}
}
@@ -0,0 +1,215 @@
#[cfg(test)]
mod tests {
use pretty_assertions::assert_eq;
use strum::IntoEnumIterator;
use crate::app::App;
use crate::app::key_binding::DEFAULT_KEYBINDINGS;
use crate::event::Key;
use crate::handlers::KeyEventHandler;
use crate::handlers::lidarr_handlers::library::edit_artist_handler::EditArtistHandler;
use crate::models::servarr_data::lidarr::lidarr_data::{ActiveLidarrBlock, EDIT_ARTIST_BLOCKS};
use crate::models::servarr_data::lidarr::modals::EditArtistModal;
mod test_handle_scroll_up_and_down {
use pretty_assertions::assert_eq;
use rstest::rstest;
use crate::models::BlockSelectionState;
use crate::models::servarr_data::lidarr::lidarr_data::EDIT_ARTIST_SELECTION_BLOCKS;
use super::*;
#[rstest]
fn test_edit_artist_prompt_scroll(#[values(Key::Up, Key::Down)] key: Key) {
let mut app = App::test_default();
app.data.lidarr_data.edit_artist_modal = Some(EditArtistModal::default());
app.data.lidarr_data.selected_block = BlockSelectionState::new(EDIT_ARTIST_SELECTION_BLOCKS);
app.data.lidarr_data.selected_block.down();
EditArtistHandler::new(key, &mut app, ActiveLidarrBlock::EditArtistPrompt, None).handle();
if key == Key::Up {
assert_eq!(
app.data.lidarr_data.selected_block.get_active_block(),
ActiveLidarrBlock::EditArtistToggleMonitored
);
} else {
assert_eq!(
app.data.lidarr_data.selected_block.get_active_block(),
ActiveLidarrBlock::EditArtistSelectQualityProfile
);
}
}
#[rstest]
fn test_edit_artist_prompt_scroll_no_op_when_not_ready(#[values(Key::Up, Key::Down)] key: Key) {
let mut app = App::test_default();
app.is_loading = true;
app.data.lidarr_data.edit_artist_modal = Some(EditArtistModal::default());
app.data.lidarr_data.selected_block = BlockSelectionState::new(EDIT_ARTIST_SELECTION_BLOCKS);
app.data.lidarr_data.selected_block.down();
EditArtistHandler::new(key, &mut app, ActiveLidarrBlock::EditArtistPrompt, None).handle();
assert_eq!(
app.data.lidarr_data.selected_block.get_active_block(),
ActiveLidarrBlock::EditArtistSelectMonitorNewItems
);
}
}
mod test_handle_left_right_action {
use rstest::rstest;
use super::*;
#[rstest]
fn test_left_right_prompt_toggle(#[values(Key::Left, Key::Right)] key: Key) {
let mut app = App::test_default();
app.data.lidarr_data.edit_artist_modal = Some(EditArtistModal::default());
app.push_navigation_stack(ActiveLidarrBlock::EditArtistPrompt.into());
EditArtistHandler::new(key, &mut app, ActiveLidarrBlock::EditArtistPrompt, None).handle();
assert!(app.data.lidarr_data.prompt_confirm);
EditArtistHandler::new(key, &mut app, ActiveLidarrBlock::EditArtistPrompt, None).handle();
assert!(!app.data.lidarr_data.prompt_confirm);
}
}
mod test_handle_submit {
use crate::models::BlockSelectionState;
use crate::models::servarr_data::lidarr::lidarr_data::EDIT_ARTIST_SELECTION_BLOCKS;
use super::*;
use crate::assert_navigation_popped;
const SUBMIT_KEY: Key = DEFAULT_KEYBINDINGS.submit.key;
#[test]
fn test_edit_artist_prompt_prompt_decline_submit() {
let mut app = App::test_default();
app.data.lidarr_data.edit_artist_modal = Some(EditArtistModal::default());
app.push_navigation_stack(ActiveLidarrBlock::Artists.into());
app.push_navigation_stack(ActiveLidarrBlock::EditArtistPrompt.into());
app.data.lidarr_data.selected_block = BlockSelectionState::new(EDIT_ARTIST_SELECTION_BLOCKS);
// Navigate to the confirm prompt (last selection block)
for _ in 0..EDIT_ARTIST_SELECTION_BLOCKS.len() - 1 {
app.data.lidarr_data.selected_block.down();
}
EditArtistHandler::new(
SUBMIT_KEY,
&mut app,
ActiveLidarrBlock::EditArtistPrompt,
None,
)
.handle();
assert!(app.data.lidarr_data.prompt_confirm_action.is_none());
assert_navigation_popped!(&app, ActiveLidarrBlock::Artists.into());
}
}
mod test_handle_esc {
use super::*;
use crate::assert_navigation_popped;
const ESC_KEY: Key = DEFAULT_KEYBINDINGS.esc.key;
#[test]
fn test_edit_artist_prompt_esc() {
let mut app = App::test_default();
app.data.lidarr_data.edit_artist_modal = Some(EditArtistModal::default());
app.push_navigation_stack(ActiveLidarrBlock::Artists.into());
app.push_navigation_stack(ActiveLidarrBlock::EditArtistPrompt.into());
app.data.lidarr_data.prompt_confirm = true;
EditArtistHandler::new(ESC_KEY, &mut app, ActiveLidarrBlock::EditArtistPrompt, None).handle();
assert_navigation_popped!(&app, ActiveLidarrBlock::Artists.into());
assert!(app.data.lidarr_data.edit_artist_modal.is_none());
assert!(!app.data.lidarr_data.prompt_confirm);
}
#[test]
fn test_edit_artist_select_blocks_esc() {
let mut app = App::test_default();
app.data.lidarr_data.edit_artist_modal = Some(EditArtistModal::default());
app.push_navigation_stack(ActiveLidarrBlock::Artists.into());
app.push_navigation_stack(ActiveLidarrBlock::EditArtistPrompt.into());
app.push_navigation_stack(ActiveLidarrBlock::EditArtistSelectQualityProfile.into());
EditArtistHandler::new(
ESC_KEY,
&mut app,
ActiveLidarrBlock::EditArtistSelectQualityProfile,
None,
)
.handle();
assert_navigation_popped!(&app, ActiveLidarrBlock::EditArtistPrompt.into());
}
}
#[test]
fn test_edit_artist_handler_accepts() {
let mut edit_artist_handler_blocks = Vec::new();
for block in ActiveLidarrBlock::iter() {
if EditArtistHandler::accepts(block) {
edit_artist_handler_blocks.push(block);
}
}
assert_eq!(edit_artist_handler_blocks, EDIT_ARTIST_BLOCKS.to_vec());
}
#[test]
fn test_edit_artist_handler_is_not_ready_when_loading() {
let mut app = App::test_default();
app.is_loading = true;
app.data.lidarr_data.edit_artist_modal = Some(EditArtistModal::default());
let handler = EditArtistHandler::new(
Key::Esc,
&mut app,
ActiveLidarrBlock::EditArtistPrompt,
None,
);
assert!(!handler.is_ready());
}
#[test]
fn test_edit_artist_handler_is_not_ready_when_edit_artist_modal_is_none() {
let mut app = App::test_default();
app.data.lidarr_data.edit_artist_modal = None;
let handler = EditArtistHandler::new(
Key::Esc,
&mut app,
ActiveLidarrBlock::EditArtistPrompt,
None,
);
assert!(!handler.is_ready());
}
#[test]
fn test_edit_artist_handler_is_ready_when_not_loading_and_modal_is_some() {
let mut app = App::test_default();
app.data.lidarr_data.edit_artist_modal = Some(EditArtistModal::default());
let handler = EditArtistHandler::new(
Key::Esc,
&mut app,
ActiveLidarrBlock::EditArtistPrompt,
None,
);
assert!(handler.is_ready());
}
}
@@ -11,19 +11,24 @@ mod tests {
use crate::handlers::KeyEventHandler;
use crate::handlers::lidarr_handlers::library::{LibraryHandler, artists_sorting_options};
use crate::models::lidarr_models::{Artist, ArtistStatistics, ArtistStatus};
use crate::models::servarr_data::lidarr::lidarr_data::{ActiveLidarrBlock, LIBRARY_BLOCKS};
use crate::models::servarr_data::lidarr::lidarr_data::{ActiveLidarrBlock, DELETE_ARTIST_BLOCKS, EDIT_ARTIST_BLOCKS, LIBRARY_BLOCKS};
use crate::network::lidarr_network::LidarrEvent;
use crate::{assert_modal_absent, assert_navigation_popped, assert_navigation_pushed};
#[test]
fn test_library_handler_accepts() {
for lidarr_block in ActiveLidarrBlock::iter() {
if LIBRARY_BLOCKS.contains(&lidarr_block) {
let mut library_handler_blocks = Vec::new();
library_handler_blocks.extend(LIBRARY_BLOCKS);
library_handler_blocks.extend(DELETE_ARTIST_BLOCKS);
library_handler_blocks.extend(EDIT_ARTIST_BLOCKS);
ActiveLidarrBlock::iter().for_each(|lidarr_block| {
if library_handler_blocks.contains(&lidarr_block) {
assert!(LibraryHandler::accepts(lidarr_block));
} else {
assert!(!LibraryHandler::accepts(lidarr_block));
}
}
});
}
#[test]
+31 -6
View File
@@ -7,8 +7,10 @@ use crate::{
BlockSelectionState,
lidarr_models::Artist,
servarr_data::lidarr::lidarr_data::{
ActiveLidarrBlock, DELETE_ARTIST_SELECTION_BLOCKS, LIBRARY_BLOCKS,
ActiveLidarrBlock, DELETE_ARTIST_SELECTION_BLOCKS, EDIT_ARTIST_SELECTION_BLOCKS,
LIBRARY_BLOCKS,
},
servarr_data::lidarr::modals::EditArtistModal,
stateful_table::SortOption,
},
network::lidarr_network::LidarrEvent,
@@ -18,8 +20,11 @@ use super::handle_change_tab_left_right_keys;
use crate::handlers::table_handler::{TableHandlingConfig, handle_table};
mod delete_artist_handler;
mod edit_artist_handler;
pub(in crate::handlers::lidarr_handlers) use delete_artist_handler::DeleteArtistHandler;
pub(in crate::handlers::lidarr_handlers) use edit_artist_handler::EditArtistHandler;
use crate::models::Route;
#[cfg(test)]
#[path = "library_handler_tests.rs"]
@@ -29,7 +34,7 @@ pub(super) struct LibraryHandler<'a, 'b> {
key: Key,
app: &'a mut App<'b>,
active_lidarr_block: ActiveLidarrBlock,
_context: Option<ActiveLidarrBlock>,
context: Option<ActiveLidarrBlock>,
}
impl LibraryHandler<'_, '_> {
@@ -55,12 +60,23 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveLidarrBlock> for LibraryHandler<'a, '
|app| &mut app.data.lidarr_data.artists,
artists_table_handling_config,
) {
self.handle_key_event();
match self.active_lidarr_block {
_ if DeleteArtistHandler::accepts(self.active_lidarr_block) => {
DeleteArtistHandler::new(self.key, self.app, self.active_lidarr_block, self.context)
.handle();
}
_ if EditArtistHandler::accepts(self.active_lidarr_block) => {
EditArtistHandler::new(self.key, self.app, self.active_lidarr_block, self.context).handle();
}
_ => self.handle_key_event(),
}
}
}
fn accepts(active_block: ActiveLidarrBlock) -> bool {
LIBRARY_BLOCKS.contains(&active_block)
DeleteArtistHandler::accepts(active_block)
|| EditArtistHandler::accepts(active_block)
|| LIBRARY_BLOCKS.contains(&active_block)
}
fn ignore_special_keys(&self) -> bool {
@@ -77,7 +93,7 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveLidarrBlock> for LibraryHandler<'a, '
key,
app,
active_lidarr_block: active_block,
_context: context,
context,
}
}
@@ -151,6 +167,15 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveLidarrBlock> for LibraryHandler<'a, '
.app
.pop_and_push_navigation_stack(self.active_lidarr_block.into());
}
_ if matches_key!(edit, key) => {
self.app.data.lidarr_data.edit_artist_modal =
Some((&self.app.data.lidarr_data).into());
self
.app
.push_navigation_stack(ActiveLidarrBlock::EditArtistPrompt.into());
self.app.data.lidarr_data.selected_block =
BlockSelectionState::new(EDIT_ARTIST_SELECTION_BLOCKS);
}
_ if matches_key!(update, key) => {
self
.app
@@ -177,7 +202,7 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveLidarrBlock> for LibraryHandler<'a, '
self.app
}
fn current_route(&self) -> crate::models::Route {
fn current_route(&self) -> Route {
self.app.get_current_route()
}
}