Refactored the key_mappings into files for context_clues for better naming conventions, and added unit tests for the clues and the contents of the ActiveRadarrBlock arrays that are used for chain-of-responsibility delegation in the handlers and UI components.

This commit is contained in:
2023-08-08 10:50:07 -06:00
parent 68aaa21030
commit dd339d1685
13 changed files with 710 additions and 114 deletions
+3 -3
View File
@@ -4,7 +4,7 @@ mod tests {
use pretty_assertions::{assert_eq, assert_str_eq}; use pretty_assertions::{assert_eq, assert_str_eq};
use tokio::sync::mpsc; use tokio::sync::mpsc;
use crate::app::key_binding::{build_keymapping_string, SERVARR_KEYMAPPINGS}; use crate::app::context_clues::{build_context_clue_string, SERVARR_CONTEXT_CLUES};
use crate::app::radarr::{ActiveRadarrBlock, RadarrData}; use crate::app::radarr::{ActiveRadarrBlock, RadarrData};
use crate::app::{App, Data, RadarrConfig, DEFAULT_ROUTE}; use crate::app::{App, Data, RadarrConfig, DEFAULT_ROUTE};
use crate::models::{HorizontallyScrollableText, Route, TabRoute}; use crate::models::{HorizontallyScrollableText, Route, TabRoute};
@@ -29,14 +29,14 @@ mod tests {
route: ActiveRadarrBlock::Movies.into(), route: ActiveRadarrBlock::Movies.into(),
help: format!( help: format!(
"<↑↓> scroll | ←→ change tab | {} ", "<↑↓> scroll | ←→ change tab | {} ",
build_keymapping_string(&SERVARR_KEYMAPPINGS) build_context_clue_string(&SERVARR_CONTEXT_CLUES)
), ),
contextual_help: None, contextual_help: None,
}, },
TabRoute { TabRoute {
title: "Sonarr", title: "Sonarr",
route: Route::Sonarr, route: Route::Sonarr,
help: format!("{} ", build_keymapping_string(&SERVARR_KEYMAPPINGS)), help: format!("{} ", build_context_clue_string(&SERVARR_CONTEXT_CLUES)),
contextual_help: None, contextual_help: None,
}, },
] ]
+23
View File
@@ -0,0 +1,23 @@
use crate::app::key_binding::{KeyBinding, DEFAULT_KEYBINDINGS};
#[cfg(test)]
#[path = "context_clues_tests.rs"]
mod context_clues_tests;
pub(in crate::app) type ContextClue = (KeyBinding, &'static str);
pub fn build_context_clue_string(context_clues: &[(KeyBinding, &str)]) -> String {
context_clues
.iter()
.map(|(key_binding, desc)| format!("{} {}", key_binding.key, desc))
.collect::<Vec<String>>()
.join(" | ")
}
pub static SERVARR_CONTEXT_CLUES: [ContextClue; 2] = [
(DEFAULT_KEYBINDINGS.tab, "change servarr"),
(DEFAULT_KEYBINDINGS.quit, DEFAULT_KEYBINDINGS.quit.desc),
];
pub static BARE_POPUP_CONTEXT_CLUES: [ContextClue; 1] =
[(DEFAULT_KEYBINDINGS.esc, DEFAULT_KEYBINDINGS.esc.desc)];
+47
View File
@@ -0,0 +1,47 @@
#[cfg(test)]
mod test {
use pretty_assertions::{assert_eq, assert_str_eq};
use crate::app::context_clues::{BARE_POPUP_CONTEXT_CLUES, SERVARR_CONTEXT_CLUES};
use crate::app::{context_clues::build_context_clue_string, key_binding::DEFAULT_KEYBINDINGS};
#[test]
fn test_build_context_clue_string() {
let test_context_clues_array = [
(DEFAULT_KEYBINDINGS.add, "add"),
(DEFAULT_KEYBINDINGS.delete, "delete"),
];
assert_str_eq!(
build_context_clue_string(&test_context_clues_array),
"<a> add | <del> delete"
);
}
#[test]
fn test_servarr_context_clues() {
let mut servarr_context_clues_iter = SERVARR_CONTEXT_CLUES.iter();
let (key_binding, description) = servarr_context_clues_iter.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.tab);
assert_str_eq!(*description, "change servarr");
let (key_binding, description) = servarr_context_clues_iter.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.quit);
assert_str_eq!(*description, DEFAULT_KEYBINDINGS.quit.desc);
assert_eq!(servarr_context_clues_iter.next(), None);
}
#[test]
fn test_bare_popup_context_clues() {
let mut bare_popup_context_clues_iter = BARE_POPUP_CONTEXT_CLUES.iter();
let (key_binding, description) = bare_popup_context_clues_iter.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.esc);
assert_str_eq!(*description, DEFAULT_KEYBINDINGS.esc.desc);
assert_eq!(bare_popup_context_clues_iter.next(), None);
}
}
+1 -19
View File
@@ -1,15 +1,5 @@
use crate::event::Key; use crate::event::Key;
pub(in crate::app) type KeyMapping = (KeyBinding, &'static str);
pub fn build_keymapping_string(key_mappings: &[(KeyBinding, &str)]) -> String {
key_mappings
.iter()
.map(|(key_binding, desc)| format!("{} {}", key_binding.key, desc))
.collect::<Vec<String>>()
.join(" | ")
}
macro_rules! generate_keybindings { macro_rules! generate_keybindings {
($($field:ident),+) => { ($($field:ident),+) => {
pub struct KeyBindings { pub struct KeyBindings {
@@ -45,7 +35,7 @@ generate_keybindings! {
esc esc
} }
#[derive(Clone, Copy)] #[derive(Clone, Copy, Eq, PartialEq, Debug)]
pub struct KeyBinding { pub struct KeyBinding {
pub key: Key, pub key: Key,
pub desc: &'static str, pub desc: &'static str,
@@ -149,11 +139,3 @@ pub const DEFAULT_KEYBINDINGS: KeyBindings = KeyBindings {
desc: "close", desc: "close",
}, },
}; };
pub static SERVARR_KEYMAPPINGS: [KeyMapping; 2] = [
(DEFAULT_KEYBINDINGS.tab, "change servarr"),
(DEFAULT_KEYBINDINGS.quit, DEFAULT_KEYBINDINGS.quit.desc),
];
pub static BARE_POPUP_KEY_MAPPINGS: [KeyMapping; 1] =
[(DEFAULT_KEYBINDINGS.esc, DEFAULT_KEYBINDINGS.esc.desc)];
+36 -12
View File
@@ -1,18 +1,42 @@
#[cfg(test)] #[cfg(test)]
mod test { mod test {
use crate::app::key_binding::{build_keymapping_string, DEFAULT_KEYBINDINGS}; use pretty_assertions::{assert_eq, assert_str_eq};
use pretty_assertions::assert_str_eq; use rstest::rstest;
#[test] use crate::app::key_binding::{KeyBinding, DEFAULT_KEYBINDINGS};
fn test_build_keymapping_string() { use crate::event::Key;
let test_keys_array = [
(DEFAULT_KEYBINDINGS.add, "add"),
(DEFAULT_KEYBINDINGS.delete, "delete"),
];
assert_str_eq!( #[rstest]
build_keymapping_string(&test_keys_array), #[case(DEFAULT_KEYBINDINGS.add, Key::Char('a'), "add")]
"<a> add | <del> delete" #[case(DEFAULT_KEYBINDINGS.up, Key::Up, "up")]
); #[case(DEFAULT_KEYBINDINGS.down, Key::Down, "down")]
#[case(DEFAULT_KEYBINDINGS.left, Key::Left, "left")]
#[case(DEFAULT_KEYBINDINGS.right, Key::Right, "right")]
#[case(DEFAULT_KEYBINDINGS.backspace, Key::Backspace, "backspace")]
#[case(DEFAULT_KEYBINDINGS.search, Key::Char('s'), "search")]
#[case(DEFAULT_KEYBINDINGS.settings, Key::Char('s'), "settings")]
#[case(DEFAULT_KEYBINDINGS.filter, Key::Char('f'), "filter")]
#[case(DEFAULT_KEYBINDINGS.sort, Key::Char('o'), "sort")]
#[case(DEFAULT_KEYBINDINGS.edit, Key::Char('e'), "edit")]
#[case(DEFAULT_KEYBINDINGS.events, Key::Char('e'), "events")]
#[case(DEFAULT_KEYBINDINGS.logs, Key::Char('l'), "logs")]
#[case(DEFAULT_KEYBINDINGS.tasks, Key::Char('t'), "tasks")]
#[case(DEFAULT_KEYBINDINGS.restrictions, Key::Char('R'), "restrictions")]
#[case(DEFAULT_KEYBINDINGS.refresh, Key::Ctrl('r'), "refresh")]
#[case(DEFAULT_KEYBINDINGS.update, Key::Char('u'), "update")]
#[case(DEFAULT_KEYBINDINGS.home, Key::Home, "home")]
#[case(DEFAULT_KEYBINDINGS.end, Key::End, "end")]
#[case(DEFAULT_KEYBINDINGS.tab, Key::Tab, "tab")]
#[case(DEFAULT_KEYBINDINGS.delete, Key::Delete, "delete")]
#[case(DEFAULT_KEYBINDINGS.submit, Key::Enter, "submit")]
#[case(DEFAULT_KEYBINDINGS.quit, Key::Char('q'), "quit")]
#[case(DEFAULT_KEYBINDINGS.esc, Key::Esc, "close")]
fn test_default_key_bindings_and_descriptions(
#[case] key_binding: KeyBinding,
#[case] expected_key: Key,
#[case] expected_desc: &str,
) {
assert_eq!(key_binding.key, expected_key);
assert_str_eq!(key_binding.desc, expected_desc);
} }
} }
+4 -4
View File
@@ -5,15 +5,15 @@ use tokio::sync::mpsc::Sender;
use tokio::time::Instant; use tokio::time::Instant;
use tokio_util::sync::CancellationToken; use tokio_util::sync::CancellationToken;
use crate::app::context_clues::{build_context_clue_string, SERVARR_CONTEXT_CLUES};
use crate::app::radarr::{ActiveRadarrBlock, RadarrData}; use crate::app::radarr::{ActiveRadarrBlock, RadarrData};
use crate::models::{HorizontallyScrollableText, Route, TabRoute, TabState}; use crate::models::{HorizontallyScrollableText, Route, TabRoute, TabState};
use crate::network::NetworkEvent; use crate::network::NetworkEvent;
use self::key_binding::{build_keymapping_string, SERVARR_KEYMAPPINGS};
#[cfg(test)] #[cfg(test)]
#[path = "app_tests.rs"] #[path = "app_tests.rs"]
mod app_tests; mod app_tests;
pub mod context_clues;
pub mod key_binding; pub mod key_binding;
mod key_binding_tests; mod key_binding_tests;
pub mod radarr; pub mod radarr;
@@ -142,14 +142,14 @@ impl<'a> Default for App<'a> {
route: ActiveRadarrBlock::Movies.into(), route: ActiveRadarrBlock::Movies.into(),
help: format!( help: format!(
"<↑↓> scroll | ←→ change tab | {} ", "<↑↓> scroll | ←→ change tab | {} ",
build_keymapping_string(&SERVARR_KEYMAPPINGS) build_context_clue_string(&SERVARR_CONTEXT_CLUES)
), ),
contextual_help: None, contextual_help: None,
}, },
TabRoute { TabRoute {
title: "Sonarr", title: "Sonarr",
route: Route::Sonarr, route: Route::Sonarr,
help: format!("{} ", build_keymapping_string(&SERVARR_KEYMAPPINGS)), help: format!("{} ", build_context_clue_string(&SERVARR_CONTEXT_CLUES)),
contextual_help: None, contextual_help: None,
}, },
]), ]),
+22 -21
View File
@@ -15,15 +15,16 @@ use crate::models::{
}; };
use crate::network::radarr_network::RadarrEvent; use crate::network::radarr_network::RadarrEvent;
use self::radarr_key_mappings::{ use super::context_clues::build_context_clue_string;
COLLECTIONS_KEY_MAPPINGS, DOWNLOADS_KEY_MAPPINGS, INDEXERS_KEY_MAPPINGS, LIBRARY_KEY_MAPPINGS,
MANUAL_MOVIE_SEARCH_CONTEXTUAL_KEY_MAPPINGS, MANUAL_MOVIE_SEARCH_KEY_MAPPINGS, use self::radarr_context_clues::{
MOVIE_DETAILS_KEY_MAPPINGS, ROOT_FOLDERS_KEY_MAPPINGS, SYSTEM_KEY_MAPPINGS, COLLECTIONS_CONTEXT_CLUES, DOWNLOADS_CONTEXT_CLUES, INDEXERS_CONTEXT_CLUES,
LIBRARY_CONTEXT_CLUES, MANUAL_MOVIE_SEARCH_CONTEXTUAL_CONTEXT_CLUES,
MANUAL_MOVIE_SEARCH_CONTEXT_CLUES, MOVIE_DETAILS_CONTEXT_CLUES, ROOT_FOLDERS_CONTEXT_CLUES,
SYSTEM_CONTEXT_CLUES,
}; };
use super::key_binding::build_keymapping_string; pub mod radarr_context_clues;
pub mod radarr_key_mappings;
#[cfg(test)] #[cfg(test)]
#[path = "radarr_tests.rs"] #[path = "radarr_tests.rs"]
@@ -313,76 +314,76 @@ impl<'a> Default for RadarrData<'a> {
title: "Library", title: "Library",
route: ActiveRadarrBlock::Movies.into(), route: ActiveRadarrBlock::Movies.into(),
help: String::new(), help: String::new(),
contextual_help: Some(build_keymapping_string(&LIBRARY_KEY_MAPPINGS)), contextual_help: Some(build_context_clue_string(&LIBRARY_CONTEXT_CLUES)),
}, },
TabRoute { TabRoute {
title: "Downloads", title: "Downloads",
route: ActiveRadarrBlock::Downloads.into(), route: ActiveRadarrBlock::Downloads.into(),
help: String::new(), help: String::new(),
contextual_help: Some(build_keymapping_string(&DOWNLOADS_KEY_MAPPINGS)), contextual_help: Some(build_context_clue_string(&DOWNLOADS_CONTEXT_CLUES)),
}, },
TabRoute { TabRoute {
title: "Collections", title: "Collections",
route: ActiveRadarrBlock::Collections.into(), route: ActiveRadarrBlock::Collections.into(),
help: String::new(), help: String::new(),
contextual_help: Some(build_keymapping_string(&COLLECTIONS_KEY_MAPPINGS)), contextual_help: Some(build_context_clue_string(&COLLECTIONS_CONTEXT_CLUES)),
}, },
TabRoute { TabRoute {
title: "Root Folders", title: "Root Folders",
route: ActiveRadarrBlock::RootFolders.into(), route: ActiveRadarrBlock::RootFolders.into(),
help: String::new(), help: String::new(),
contextual_help: Some(build_keymapping_string(&ROOT_FOLDERS_KEY_MAPPINGS)), contextual_help: Some(build_context_clue_string(&ROOT_FOLDERS_CONTEXT_CLUES)),
}, },
TabRoute { TabRoute {
title: "Indexers", title: "Indexers",
route: ActiveRadarrBlock::Indexers.into(), route: ActiveRadarrBlock::Indexers.into(),
help: String::new(), help: String::new(),
contextual_help: Some(build_keymapping_string(&INDEXERS_KEY_MAPPINGS)), contextual_help: Some(build_context_clue_string(&INDEXERS_CONTEXT_CLUES)),
}, },
TabRoute { TabRoute {
title: "System", title: "System",
route: ActiveRadarrBlock::System.into(), route: ActiveRadarrBlock::System.into(),
help: String::new(), help: String::new(),
contextual_help: Some(build_keymapping_string(&SYSTEM_KEY_MAPPINGS)), contextual_help: Some(build_context_clue_string(&SYSTEM_CONTEXT_CLUES)),
}, },
]), ]),
movie_info_tabs: TabState::new(vec![ movie_info_tabs: TabState::new(vec![
TabRoute { TabRoute {
title: "Details", title: "Details",
route: ActiveRadarrBlock::MovieDetails.into(), route: ActiveRadarrBlock::MovieDetails.into(),
help: build_keymapping_string(&MOVIE_DETAILS_KEY_MAPPINGS), help: build_context_clue_string(&MOVIE_DETAILS_CONTEXT_CLUES),
contextual_help: None, contextual_help: None,
}, },
TabRoute { TabRoute {
title: "History", title: "History",
route: ActiveRadarrBlock::MovieHistory.into(), route: ActiveRadarrBlock::MovieHistory.into(),
help: build_keymapping_string(&MOVIE_DETAILS_KEY_MAPPINGS), help: build_context_clue_string(&MOVIE_DETAILS_CONTEXT_CLUES),
contextual_help: None, contextual_help: None,
}, },
TabRoute { TabRoute {
title: "File", title: "File",
route: ActiveRadarrBlock::FileInfo.into(), route: ActiveRadarrBlock::FileInfo.into(),
help: build_keymapping_string(&MOVIE_DETAILS_KEY_MAPPINGS), help: build_context_clue_string(&MOVIE_DETAILS_CONTEXT_CLUES),
contextual_help: None, contextual_help: None,
}, },
TabRoute { TabRoute {
title: "Cast", title: "Cast",
route: ActiveRadarrBlock::Cast.into(), route: ActiveRadarrBlock::Cast.into(),
help: build_keymapping_string(&MOVIE_DETAILS_KEY_MAPPINGS), help: build_context_clue_string(&MOVIE_DETAILS_CONTEXT_CLUES),
contextual_help: None, contextual_help: None,
}, },
TabRoute { TabRoute {
title: "Crew", title: "Crew",
route: ActiveRadarrBlock::Crew.into(), route: ActiveRadarrBlock::Crew.into(),
help: build_keymapping_string(&MOVIE_DETAILS_KEY_MAPPINGS), help: build_context_clue_string(&MOVIE_DETAILS_CONTEXT_CLUES),
contextual_help: None, contextual_help: None,
}, },
TabRoute { TabRoute {
title: "Manual Search", title: "Manual Search",
route: ActiveRadarrBlock::ManualSearch.into(), route: ActiveRadarrBlock::ManualSearch.into(),
help: build_keymapping_string(&MANUAL_MOVIE_SEARCH_KEY_MAPPINGS), help: build_context_clue_string(&MANUAL_MOVIE_SEARCH_CONTEXT_CLUES),
contextual_help: Some(build_keymapping_string( contextual_help: Some(build_context_clue_string(
&MANUAL_MOVIE_SEARCH_CONTEXTUAL_KEY_MAPPINGS, &MANUAL_MOVIE_SEARCH_CONTEXTUAL_CONTEXT_CLUES,
)), )),
}, },
]), ]),
@@ -1,6 +1,11 @@
use crate::app::key_binding::{KeyMapping, DEFAULT_KEYBINDINGS}; use crate::app::context_clues::ContextClue;
use crate::app::key_binding::DEFAULT_KEYBINDINGS;
pub static LIBRARY_KEY_MAPPINGS: [KeyMapping; 9] = [ #[cfg(test)]
#[path = "radarr_context_clues_tests.rs"]
mod radarr_context_clues_tests;
pub static LIBRARY_CONTEXT_CLUES: [ContextClue; 9] = [
(DEFAULT_KEYBINDINGS.add, DEFAULT_KEYBINDINGS.add.desc), (DEFAULT_KEYBINDINGS.add, DEFAULT_KEYBINDINGS.add.desc),
(DEFAULT_KEYBINDINGS.edit, DEFAULT_KEYBINDINGS.edit.desc), (DEFAULT_KEYBINDINGS.edit, DEFAULT_KEYBINDINGS.edit.desc),
(DEFAULT_KEYBINDINGS.delete, DEFAULT_KEYBINDINGS.delete.desc), (DEFAULT_KEYBINDINGS.delete, DEFAULT_KEYBINDINGS.delete.desc),
@@ -15,7 +20,7 @@ pub static LIBRARY_KEY_MAPPINGS: [KeyMapping; 9] = [
(DEFAULT_KEYBINDINGS.esc, "cancel filter"), (DEFAULT_KEYBINDINGS.esc, "cancel filter"),
]; ];
pub static DOWNLOADS_KEY_MAPPINGS: [KeyMapping; 2] = [ pub static DOWNLOADS_CONTEXT_CLUES: [ContextClue; 2] = [
( (
DEFAULT_KEYBINDINGS.refresh, DEFAULT_KEYBINDINGS.refresh,
DEFAULT_KEYBINDINGS.refresh.desc, DEFAULT_KEYBINDINGS.refresh.desc,
@@ -23,7 +28,7 @@ pub static DOWNLOADS_KEY_MAPPINGS: [KeyMapping; 2] = [
(DEFAULT_KEYBINDINGS.delete, DEFAULT_KEYBINDINGS.delete.desc), (DEFAULT_KEYBINDINGS.delete, DEFAULT_KEYBINDINGS.delete.desc),
]; ];
pub static COLLECTIONS_KEY_MAPPINGS: [KeyMapping; 7] = [ pub static COLLECTIONS_CONTEXT_CLUES: [ContextClue; 7] = [
(DEFAULT_KEYBINDINGS.search, DEFAULT_KEYBINDINGS.search.desc), (DEFAULT_KEYBINDINGS.search, DEFAULT_KEYBINDINGS.search.desc),
(DEFAULT_KEYBINDINGS.edit, DEFAULT_KEYBINDINGS.edit.desc), (DEFAULT_KEYBINDINGS.edit, DEFAULT_KEYBINDINGS.edit.desc),
(DEFAULT_KEYBINDINGS.filter, DEFAULT_KEYBINDINGS.filter.desc), (DEFAULT_KEYBINDINGS.filter, DEFAULT_KEYBINDINGS.filter.desc),
@@ -36,7 +41,7 @@ pub static COLLECTIONS_KEY_MAPPINGS: [KeyMapping; 7] = [
(DEFAULT_KEYBINDINGS.esc, "cancel filter"), (DEFAULT_KEYBINDINGS.esc, "cancel filter"),
]; ];
pub static ROOT_FOLDERS_KEY_MAPPINGS: [KeyMapping; 3] = [ pub static ROOT_FOLDERS_CONTEXT_CLUES: [ContextClue; 3] = [
(DEFAULT_KEYBINDINGS.add, DEFAULT_KEYBINDINGS.add.desc), (DEFAULT_KEYBINDINGS.add, DEFAULT_KEYBINDINGS.add.desc),
(DEFAULT_KEYBINDINGS.delete, DEFAULT_KEYBINDINGS.delete.desc), (DEFAULT_KEYBINDINGS.delete, DEFAULT_KEYBINDINGS.delete.desc),
( (
@@ -45,7 +50,7 @@ pub static ROOT_FOLDERS_KEY_MAPPINGS: [KeyMapping; 3] = [
), ),
]; ];
pub static INDEXERS_KEY_MAPPINGS: [KeyMapping; 6] = [ pub static INDEXERS_CONTEXT_CLUES: [ContextClue; 6] = [
(DEFAULT_KEYBINDINGS.add, DEFAULT_KEYBINDINGS.add.desc), (DEFAULT_KEYBINDINGS.add, DEFAULT_KEYBINDINGS.add.desc),
(DEFAULT_KEYBINDINGS.edit, DEFAULT_KEYBINDINGS.edit.desc), (DEFAULT_KEYBINDINGS.edit, DEFAULT_KEYBINDINGS.edit.desc),
( (
@@ -63,7 +68,7 @@ pub static INDEXERS_KEY_MAPPINGS: [KeyMapping; 6] = [
), ),
]; ];
pub static SYSTEM_KEY_MAPPINGS: [KeyMapping; 5] = [ pub static SYSTEM_CONTEXT_CLUES: [ContextClue; 5] = [
(DEFAULT_KEYBINDINGS.tasks, "open tasks"), (DEFAULT_KEYBINDINGS.tasks, "open tasks"),
(DEFAULT_KEYBINDINGS.events, "open events"), (DEFAULT_KEYBINDINGS.events, "open events"),
(DEFAULT_KEYBINDINGS.logs, "open logs"), (DEFAULT_KEYBINDINGS.logs, "open logs"),
@@ -74,7 +79,7 @@ pub static SYSTEM_KEY_MAPPINGS: [KeyMapping; 5] = [
), ),
]; ];
pub static MOVIE_DETAILS_KEY_MAPPINGS: [KeyMapping; 5] = [ pub static MOVIE_DETAILS_CONTEXT_CLUES: [ContextClue; 5] = [
( (
DEFAULT_KEYBINDINGS.refresh, DEFAULT_KEYBINDINGS.refresh,
DEFAULT_KEYBINDINGS.refresh.desc, DEFAULT_KEYBINDINGS.refresh.desc,
@@ -85,7 +90,7 @@ pub static MOVIE_DETAILS_KEY_MAPPINGS: [KeyMapping; 5] = [
(DEFAULT_KEYBINDINGS.esc, DEFAULT_KEYBINDINGS.esc.desc), (DEFAULT_KEYBINDINGS.esc, DEFAULT_KEYBINDINGS.esc.desc),
]; ];
pub static MANUAL_MOVIE_SEARCH_KEY_MAPPINGS: [KeyMapping; 6] = [ pub static MANUAL_MOVIE_SEARCH_CONTEXT_CLUES: [ContextClue; 6] = [
( (
DEFAULT_KEYBINDINGS.refresh, DEFAULT_KEYBINDINGS.refresh,
DEFAULT_KEYBINDINGS.refresh.desc, DEFAULT_KEYBINDINGS.refresh.desc,
@@ -97,20 +102,20 @@ pub static MANUAL_MOVIE_SEARCH_KEY_MAPPINGS: [KeyMapping; 6] = [
(DEFAULT_KEYBINDINGS.esc, DEFAULT_KEYBINDINGS.esc.desc), (DEFAULT_KEYBINDINGS.esc, DEFAULT_KEYBINDINGS.esc.desc),
]; ];
pub static MANUAL_MOVIE_SEARCH_CONTEXTUAL_KEY_MAPPINGS: [KeyMapping; 1] = pub static MANUAL_MOVIE_SEARCH_CONTEXTUAL_CONTEXT_CLUES: [ContextClue; 1] =
[(DEFAULT_KEYBINDINGS.submit, "details")]; [(DEFAULT_KEYBINDINGS.submit, "details")];
pub static ADD_MOVIE_SEARCH_RESULTS_KEY_MAPPINGS: [KeyMapping; 2] = [ pub static ADD_MOVIE_SEARCH_RESULTS_CONTEXT_CLUES: [ContextClue; 2] = [
(DEFAULT_KEYBINDINGS.submit, "details"), (DEFAULT_KEYBINDINGS.submit, "details"),
(DEFAULT_KEYBINDINGS.esc, "edit search"), (DEFAULT_KEYBINDINGS.esc, "edit search"),
]; ];
pub static SYSTEM_TASKS_KEY_MAPPINGS: [KeyMapping; 2] = [ pub static SYSTEM_TASKS_CONTEXT_CLUES: [ContextClue; 2] = [
(DEFAULT_KEYBINDINGS.submit, "start task"), (DEFAULT_KEYBINDINGS.submit, "start task"),
(DEFAULT_KEYBINDINGS.esc, DEFAULT_KEYBINDINGS.esc.desc), (DEFAULT_KEYBINDINGS.esc, DEFAULT_KEYBINDINGS.esc.desc),
]; ];
pub static COLLECTION_DETAILS_KEY_MAPPINGS: [KeyMapping; 2] = [ pub static COLLECTION_DETAILS_CONTEXT_CLUES: [ContextClue; 2] = [
(DEFAULT_KEYBINDINGS.submit, "show overview/add movie"), (DEFAULT_KEYBINDINGS.submit, "show overview/add movie"),
(DEFAULT_KEYBINDINGS.esc, DEFAULT_KEYBINDINGS.esc.desc), (DEFAULT_KEYBINDINGS.esc, DEFAULT_KEYBINDINGS.esc.desc),
]; ];
@@ -0,0 +1,342 @@
#[cfg(test)]
mod tests {
use pretty_assertions::{assert_eq, assert_str_eq};
use crate::app::key_binding::DEFAULT_KEYBINDINGS;
use crate::app::radarr::radarr_context_clues::{
ADD_MOVIE_SEARCH_RESULTS_CONTEXT_CLUES, COLLECTIONS_CONTEXT_CLUES,
COLLECTION_DETAILS_CONTEXT_CLUES, DOWNLOADS_CONTEXT_CLUES, INDEXERS_CONTEXT_CLUES,
LIBRARY_CONTEXT_CLUES, MANUAL_MOVIE_SEARCH_CONTEXTUAL_CONTEXT_CLUES,
MANUAL_MOVIE_SEARCH_CONTEXT_CLUES, MOVIE_DETAILS_CONTEXT_CLUES, ROOT_FOLDERS_CONTEXT_CLUES,
SYSTEM_CONTEXT_CLUES, SYSTEM_TASKS_CONTEXT_CLUES,
};
#[test]
fn test_library_context_clues() {
let mut library_context_clues_iter = LIBRARY_CONTEXT_CLUES.iter();
let (key_binding, description) = library_context_clues_iter.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.add);
assert_str_eq!(*description, DEFAULT_KEYBINDINGS.add.desc);
let (key_binding, description) = library_context_clues_iter.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.edit);
assert_str_eq!(*description, DEFAULT_KEYBINDINGS.edit.desc);
let (key_binding, description) = library_context_clues_iter.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.delete);
assert_str_eq!(*description, DEFAULT_KEYBINDINGS.delete.desc);
let (key_binding, description) = library_context_clues_iter.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.search);
assert_str_eq!(*description, DEFAULT_KEYBINDINGS.search.desc);
let (key_binding, description) = library_context_clues_iter.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.filter);
assert_str_eq!(*description, DEFAULT_KEYBINDINGS.filter.desc);
let (key_binding, description) = library_context_clues_iter.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.refresh);
assert_str_eq!(*description, DEFAULT_KEYBINDINGS.refresh.desc);
let (key_binding, description) = library_context_clues_iter.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.update);
assert_str_eq!(*description, "update all");
let (key_binding, description) = library_context_clues_iter.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.submit);
assert_str_eq!(*description, "details");
let (key_binding, description) = library_context_clues_iter.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.esc);
assert_str_eq!(*description, "cancel filter");
assert_eq!(library_context_clues_iter.next(), None);
}
#[test]
fn test_downloads_context_clues() {
let mut downloads_context_clues_iter = DOWNLOADS_CONTEXT_CLUES.iter();
let (key_binding, description) = downloads_context_clues_iter.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.refresh);
assert_str_eq!(*description, DEFAULT_KEYBINDINGS.refresh.desc);
let (key_binding, description) = downloads_context_clues_iter.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.delete);
assert_str_eq!(*description, DEFAULT_KEYBINDINGS.delete.desc);
assert_eq!(downloads_context_clues_iter.next(), None);
}
#[test]
fn test_collections_context_clues() {
let mut collections_context_clues = COLLECTIONS_CONTEXT_CLUES.iter();
let (key_binding, description) = collections_context_clues.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.search);
assert_str_eq!(*description, DEFAULT_KEYBINDINGS.search.desc);
let (key_binding, description) = collections_context_clues.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.edit);
assert_str_eq!(*description, DEFAULT_KEYBINDINGS.edit.desc);
let (key_binding, description) = collections_context_clues.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.filter);
assert_str_eq!(*description, DEFAULT_KEYBINDINGS.filter.desc);
let (key_binding, description) = collections_context_clues.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.refresh);
assert_str_eq!(*description, DEFAULT_KEYBINDINGS.refresh.desc);
let (key_binding, description) = collections_context_clues.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.update);
assert_str_eq!(*description, "update all");
let (key_binding, description) = collections_context_clues.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.submit);
assert_str_eq!(*description, "details");
let (key_binding, description) = collections_context_clues.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.esc);
assert_str_eq!(*description, "cancel filter");
assert_eq!(collections_context_clues.next(), None);
}
#[test]
fn test_root_folders_context_clues() {
let mut root_folders_context_clues_iter = ROOT_FOLDERS_CONTEXT_CLUES.iter();
let (key_binding, description) = root_folders_context_clues_iter.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.add);
assert_str_eq!(*description, DEFAULT_KEYBINDINGS.add.desc);
let (key_binding, description) = root_folders_context_clues_iter.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.delete);
assert_str_eq!(*description, DEFAULT_KEYBINDINGS.delete.desc);
let (key_binding, description) = root_folders_context_clues_iter.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.refresh);
assert_str_eq!(*description, DEFAULT_KEYBINDINGS.refresh.desc);
assert_eq!(root_folders_context_clues_iter.next(), None);
}
#[test]
fn test_indexers_context_clues() {
let mut indexers_context_clues_iter = INDEXERS_CONTEXT_CLUES.iter();
let (key_binding, description) = indexers_context_clues_iter.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.add);
assert_str_eq!(*description, DEFAULT_KEYBINDINGS.add.desc);
let (key_binding, description) = indexers_context_clues_iter.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.edit);
assert_str_eq!(*description, DEFAULT_KEYBINDINGS.edit.desc);
let (key_binding, description) = indexers_context_clues_iter.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.settings);
assert_str_eq!(*description, DEFAULT_KEYBINDINGS.settings.desc);
let (key_binding, description) = indexers_context_clues_iter.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.restrictions);
assert_str_eq!(*description, DEFAULT_KEYBINDINGS.restrictions.desc);
let (key_binding, description) = indexers_context_clues_iter.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.delete);
assert_str_eq!(*description, DEFAULT_KEYBINDINGS.delete.desc);
let (key_binding, description) = indexers_context_clues_iter.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.refresh);
assert_str_eq!(*description, DEFAULT_KEYBINDINGS.refresh.desc);
assert_eq!(indexers_context_clues_iter.next(), None);
}
#[test]
fn test_system_context_clues() {
let mut system_context_clues_iter = SYSTEM_CONTEXT_CLUES.iter();
let (key_binding, description) = system_context_clues_iter.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.tasks);
assert_str_eq!(*description, "open tasks");
let (key_binding, description) = system_context_clues_iter.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.events);
assert_str_eq!(*description, "open events");
let (key_binding, description) = system_context_clues_iter.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.logs);
assert_str_eq!(*description, "open logs");
let (key_binding, description) = system_context_clues_iter.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.update);
assert_str_eq!(*description, "open updates");
let (key_binding, description) = system_context_clues_iter.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.refresh);
assert_str_eq!(*description, DEFAULT_KEYBINDINGS.refresh.desc);
assert_eq!(system_context_clues_iter.next(), None);
}
#[test]
fn test_movie_details_context_clues() {
let mut movie_details_context_clues_iter = MOVIE_DETAILS_CONTEXT_CLUES.iter();
let (key_binding, description) = movie_details_context_clues_iter.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.refresh);
assert_str_eq!(*description, DEFAULT_KEYBINDINGS.refresh.desc);
let (key_binding, description) = movie_details_context_clues_iter.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.update);
assert_str_eq!(*description, DEFAULT_KEYBINDINGS.update.desc);
let (key_binding, description) = movie_details_context_clues_iter.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.edit);
assert_str_eq!(*description, DEFAULT_KEYBINDINGS.edit.desc);
let (key_binding, description) = movie_details_context_clues_iter.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.search);
assert_str_eq!(*description, "auto search");
let (key_binding, description) = movie_details_context_clues_iter.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.esc);
assert_str_eq!(*description, DEFAULT_KEYBINDINGS.esc.desc);
assert_eq!(movie_details_context_clues_iter.next(), None);
}
#[test]
fn test_manual_movie_search_context_clues() {
let mut manual_movie_search_context_clues_iter = MANUAL_MOVIE_SEARCH_CONTEXT_CLUES.iter();
let (key_binding, description) = manual_movie_search_context_clues_iter.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.refresh);
assert_str_eq!(*description, DEFAULT_KEYBINDINGS.refresh.desc);
let (key_binding, description) = manual_movie_search_context_clues_iter.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.update);
assert_str_eq!(*description, DEFAULT_KEYBINDINGS.update.desc);
let (key_binding, description) = manual_movie_search_context_clues_iter.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.edit);
assert_str_eq!(*description, DEFAULT_KEYBINDINGS.edit.desc);
let (key_binding, description) = manual_movie_search_context_clues_iter.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.sort);
assert_str_eq!(*description, DEFAULT_KEYBINDINGS.sort.desc);
let (key_binding, description) = manual_movie_search_context_clues_iter.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.search);
assert_str_eq!(*description, "auto search");
let (key_binding, description) = manual_movie_search_context_clues_iter.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.esc);
assert_str_eq!(*description, DEFAULT_KEYBINDINGS.esc.desc);
assert_eq!(manual_movie_search_context_clues_iter.next(), None);
}
#[test]
fn test_manual_movie_search_contextual_context_clues() {
let mut manual_movie_search_contextual_context_clues_iter =
MANUAL_MOVIE_SEARCH_CONTEXTUAL_CONTEXT_CLUES.iter();
let (key_binding, description) = manual_movie_search_contextual_context_clues_iter
.next()
.unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.submit);
assert_str_eq!(*description, "details");
assert_eq!(
manual_movie_search_contextual_context_clues_iter.next(),
None
);
}
#[test]
fn test_add_movie_search_results_context_clues() {
let mut add_movie_search_results_context_clues_iter =
ADD_MOVIE_SEARCH_RESULTS_CONTEXT_CLUES.iter();
let (key_binding, description) = add_movie_search_results_context_clues_iter.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.submit);
assert_str_eq!(*description, "details");
let (key_binding, description) = add_movie_search_results_context_clues_iter.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.esc);
assert_str_eq!(*description, "edit search");
assert_eq!(add_movie_search_results_context_clues_iter.next(), None);
}
#[test]
fn test_system_tasks_context_clues() {
let mut system_tasks_context_clues_iter = SYSTEM_TASKS_CONTEXT_CLUES.iter();
let (key_binding, description) = system_tasks_context_clues_iter.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.submit);
assert_str_eq!(*description, "start task");
let (key_binding, description) = system_tasks_context_clues_iter.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.esc);
assert_str_eq!(*description, DEFAULT_KEYBINDINGS.esc.desc);
assert_eq!(system_tasks_context_clues_iter.next(), None);
}
#[test]
fn test_collection_details_context_clues() {
let mut collection_details_context_clues_iter = COLLECTION_DETAILS_CONTEXT_CLUES.iter();
let (key_binding, description) = collection_details_context_clues_iter.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.submit);
assert_str_eq!(*description, "show overview/add movie");
let (key_binding, description) = collection_details_context_clues_iter.next().unwrap();
assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.esc);
assert_str_eq!(*description, DEFAULT_KEYBINDINGS.esc.desc);
assert_eq!(collection_details_context_clues_iter.next(), None);
}
}
+200 -28
View File
@@ -8,12 +8,12 @@ mod tests {
use serde_json::Number; use serde_json::Number;
use strum::IntoEnumIterator; use strum::IntoEnumIterator;
use crate::app::key_binding::build_keymapping_string; use crate::app::context_clues::build_context_clue_string;
use crate::app::radarr::radarr_key_mappings::{ use crate::app::radarr::radarr_context_clues::{
COLLECTIONS_KEY_MAPPINGS, DOWNLOADS_KEY_MAPPINGS, INDEXERS_KEY_MAPPINGS, COLLECTIONS_CONTEXT_CLUES, DOWNLOADS_CONTEXT_CLUES, INDEXERS_CONTEXT_CLUES,
LIBRARY_KEY_MAPPINGS, MANUAL_MOVIE_SEARCH_CONTEXTUAL_KEY_MAPPINGS, LIBRARY_CONTEXT_CLUES, MANUAL_MOVIE_SEARCH_CONTEXTUAL_CONTEXT_CLUES,
MANUAL_MOVIE_SEARCH_KEY_MAPPINGS, MOVIE_DETAILS_KEY_MAPPINGS, ROOT_FOLDERS_KEY_MAPPINGS, MANUAL_MOVIE_SEARCH_CONTEXT_CLUES, MOVIE_DETAILS_CONTEXT_CLUES, ROOT_FOLDERS_CONTEXT_CLUES,
SYSTEM_KEY_MAPPINGS, SYSTEM_CONTEXT_CLUES,
}; };
use crate::app::radarr::radarr_test_utils::utils::create_test_radarr_data; use crate::app::radarr::radarr_test_utils::utils::create_test_radarr_data;
use crate::app::radarr::{ActiveRadarrBlock, RadarrData}; use crate::app::radarr::{ActiveRadarrBlock, RadarrData};
@@ -325,7 +325,7 @@ mod tests {
assert!(radarr_data.main_tabs.tabs[0].help.is_empty()); assert!(radarr_data.main_tabs.tabs[0].help.is_empty());
assert_eq!( assert_eq!(
radarr_data.main_tabs.tabs[0].contextual_help, radarr_data.main_tabs.tabs[0].contextual_help,
Some(build_keymapping_string(&LIBRARY_KEY_MAPPINGS)) Some(build_context_clue_string(&LIBRARY_CONTEXT_CLUES))
); );
assert_str_eq!(radarr_data.main_tabs.tabs[1].title, "Downloads"); assert_str_eq!(radarr_data.main_tabs.tabs[1].title, "Downloads");
@@ -336,7 +336,7 @@ mod tests {
assert!(radarr_data.main_tabs.tabs[1].help.is_empty()); assert!(radarr_data.main_tabs.tabs[1].help.is_empty());
assert_eq!( assert_eq!(
radarr_data.main_tabs.tabs[1].contextual_help, radarr_data.main_tabs.tabs[1].contextual_help,
Some(build_keymapping_string(&DOWNLOADS_KEY_MAPPINGS)) Some(build_context_clue_string(&DOWNLOADS_CONTEXT_CLUES))
); );
assert_str_eq!(radarr_data.main_tabs.tabs[2].title, "Collections"); assert_str_eq!(radarr_data.main_tabs.tabs[2].title, "Collections");
@@ -347,7 +347,7 @@ mod tests {
assert!(radarr_data.main_tabs.tabs[2].help.is_empty()); assert!(radarr_data.main_tabs.tabs[2].help.is_empty());
assert_eq!( assert_eq!(
radarr_data.main_tabs.tabs[2].contextual_help, radarr_data.main_tabs.tabs[2].contextual_help,
Some(build_keymapping_string(&COLLECTIONS_KEY_MAPPINGS)) Some(build_context_clue_string(&COLLECTIONS_CONTEXT_CLUES))
); );
assert_str_eq!(radarr_data.main_tabs.tabs[3].title, "Root Folders"); assert_str_eq!(radarr_data.main_tabs.tabs[3].title, "Root Folders");
@@ -358,7 +358,7 @@ mod tests {
assert!(radarr_data.main_tabs.tabs[3].help.is_empty()); assert!(radarr_data.main_tabs.tabs[3].help.is_empty());
assert_eq!( assert_eq!(
radarr_data.main_tabs.tabs[3].contextual_help, radarr_data.main_tabs.tabs[3].contextual_help,
Some(build_keymapping_string(&ROOT_FOLDERS_KEY_MAPPINGS)) Some(build_context_clue_string(&ROOT_FOLDERS_CONTEXT_CLUES))
); );
assert_str_eq!(radarr_data.main_tabs.tabs[4].title, "Indexers"); assert_str_eq!(radarr_data.main_tabs.tabs[4].title, "Indexers");
@@ -369,7 +369,7 @@ mod tests {
assert!(radarr_data.main_tabs.tabs[4].help.is_empty()); assert!(radarr_data.main_tabs.tabs[4].help.is_empty());
assert_eq!( assert_eq!(
radarr_data.main_tabs.tabs[4].contextual_help, radarr_data.main_tabs.tabs[4].contextual_help,
Some(build_keymapping_string(&INDEXERS_KEY_MAPPINGS)) Some(build_context_clue_string(&INDEXERS_CONTEXT_CLUES))
); );
assert_str_eq!(radarr_data.main_tabs.tabs[5].title, "System"); assert_str_eq!(radarr_data.main_tabs.tabs[5].title, "System");
@@ -380,7 +380,7 @@ mod tests {
assert!(radarr_data.main_tabs.tabs[5].help.is_empty()); assert!(radarr_data.main_tabs.tabs[5].help.is_empty());
assert_eq!( assert_eq!(
radarr_data.main_tabs.tabs[5].contextual_help, radarr_data.main_tabs.tabs[5].contextual_help,
Some(build_keymapping_string(&SYSTEM_KEY_MAPPINGS)) Some(build_context_clue_string(&SYSTEM_CONTEXT_CLUES))
); );
assert_eq!(radarr_data.movie_info_tabs.tabs.len(), 6); assert_eq!(radarr_data.movie_info_tabs.tabs.len(), 6);
@@ -392,7 +392,7 @@ mod tests {
); );
assert_str_eq!( assert_str_eq!(
radarr_data.movie_info_tabs.tabs[0].help, radarr_data.movie_info_tabs.tabs[0].help,
build_keymapping_string(&MOVIE_DETAILS_KEY_MAPPINGS) build_context_clue_string(&MOVIE_DETAILS_CONTEXT_CLUES)
); );
assert!(radarr_data.movie_info_tabs.tabs[0] assert!(radarr_data.movie_info_tabs.tabs[0]
.contextual_help .contextual_help
@@ -405,7 +405,7 @@ mod tests {
); );
assert_str_eq!( assert_str_eq!(
radarr_data.movie_info_tabs.tabs[1].help, radarr_data.movie_info_tabs.tabs[1].help,
build_keymapping_string(&MOVIE_DETAILS_KEY_MAPPINGS) build_context_clue_string(&MOVIE_DETAILS_CONTEXT_CLUES)
); );
assert!(radarr_data.movie_info_tabs.tabs[1] assert!(radarr_data.movie_info_tabs.tabs[1]
.contextual_help .contextual_help
@@ -418,7 +418,7 @@ mod tests {
); );
assert_str_eq!( assert_str_eq!(
radarr_data.movie_info_tabs.tabs[2].help, radarr_data.movie_info_tabs.tabs[2].help,
build_keymapping_string(&MOVIE_DETAILS_KEY_MAPPINGS) build_context_clue_string(&MOVIE_DETAILS_CONTEXT_CLUES)
); );
assert!(radarr_data.movie_info_tabs.tabs[2] assert!(radarr_data.movie_info_tabs.tabs[2]
.contextual_help .contextual_help
@@ -431,7 +431,7 @@ mod tests {
); );
assert_str_eq!( assert_str_eq!(
radarr_data.movie_info_tabs.tabs[3].help, radarr_data.movie_info_tabs.tabs[3].help,
build_keymapping_string(&MOVIE_DETAILS_KEY_MAPPINGS) build_context_clue_string(&MOVIE_DETAILS_CONTEXT_CLUES)
); );
assert!(radarr_data.movie_info_tabs.tabs[3] assert!(radarr_data.movie_info_tabs.tabs[3]
.contextual_help .contextual_help
@@ -444,7 +444,7 @@ mod tests {
); );
assert_str_eq!( assert_str_eq!(
radarr_data.movie_info_tabs.tabs[4].help, radarr_data.movie_info_tabs.tabs[4].help,
build_keymapping_string(&MOVIE_DETAILS_KEY_MAPPINGS) build_context_clue_string(&MOVIE_DETAILS_CONTEXT_CLUES)
); );
assert!(radarr_data.movie_info_tabs.tabs[4] assert!(radarr_data.movie_info_tabs.tabs[4]
.contextual_help .contextual_help
@@ -457,12 +457,12 @@ mod tests {
); );
assert_str_eq!( assert_str_eq!(
radarr_data.movie_info_tabs.tabs[5].help, radarr_data.movie_info_tabs.tabs[5].help,
build_keymapping_string(&MANUAL_MOVIE_SEARCH_KEY_MAPPINGS) build_context_clue_string(&MANUAL_MOVIE_SEARCH_CONTEXT_CLUES)
); );
assert_eq!( assert_eq!(
radarr_data.movie_info_tabs.tabs[5].contextual_help, radarr_data.movie_info_tabs.tabs[5].contextual_help,
Some(build_keymapping_string( Some(build_context_clue_string(
&MANUAL_MOVIE_SEARCH_CONTEXTUAL_KEY_MAPPINGS &MANUAL_MOVIE_SEARCH_CONTEXTUAL_CONTEXT_CLUES
)) ))
); );
} }
@@ -472,13 +472,180 @@ mod tests {
use pretty_assertions::assert_eq; use pretty_assertions::assert_eq;
use crate::app::radarr::{ use crate::app::radarr::{
ActiveRadarrBlock, ADD_MOVIE_SELECTION_BLOCKS, DELETE_MOVIE_SELECTION_BLOCKS, ActiveRadarrBlock, ADD_MOVIE_BLOCKS, ADD_MOVIE_SELECTION_BLOCKS, COLLECTIONS_BLOCKS,
EDIT_COLLECTION_SELECTION_BLOCKS, EDIT_MOVIE_SELECTION_BLOCKS, COLLECTION_DETAILS_BLOCKS, DELETE_MOVIE_BLOCKS, DELETE_MOVIE_SELECTION_BLOCKS,
INDEXER_SETTINGS_SELECTION_BLOCKS, DOWNLOADS_BLOCKS, EDIT_COLLECTION_BLOCKS, EDIT_COLLECTION_SELECTION_BLOCKS,
EDIT_MOVIE_BLOCKS, EDIT_MOVIE_SELECTION_BLOCKS, FILTER_BLOCKS, INDEXERS_BLOCKS,
INDEXER_SETTINGS_BLOCKS, INDEXER_SETTINGS_SELECTION_BLOCKS, LIBRARY_BLOCKS,
MOVIE_DETAILS_BLOCKS, ROOT_FOLDERS_BLOCKS, SEARCH_BLOCKS, SYSTEM_DETAILS_BLOCKS,
}; };
#[test] #[test]
fn test_add_movie_prompt_block_order() { fn test_library_blocks_contents() {
assert_eq!(LIBRARY_BLOCKS.len(), 4);
assert!(LIBRARY_BLOCKS.contains(&ActiveRadarrBlock::Movies));
assert!(LIBRARY_BLOCKS.contains(&ActiveRadarrBlock::SearchMovie));
assert!(LIBRARY_BLOCKS.contains(&ActiveRadarrBlock::FilterMovies));
assert!(LIBRARY_BLOCKS.contains(&ActiveRadarrBlock::UpdateAllMoviesPrompt));
}
#[test]
fn test_collections_blocks_contents() {
assert_eq!(COLLECTIONS_BLOCKS.len(), 4);
assert!(COLLECTIONS_BLOCKS.contains(&ActiveRadarrBlock::Collections));
assert!(COLLECTIONS_BLOCKS.contains(&ActiveRadarrBlock::SearchCollection));
assert!(COLLECTIONS_BLOCKS.contains(&ActiveRadarrBlock::FilterCollections));
assert!(COLLECTIONS_BLOCKS.contains(&ActiveRadarrBlock::UpdateAllCollectionsPrompt));
}
#[test]
fn test_indexers_blocks_contents() {
assert_eq!(INDEXERS_BLOCKS.len(), 4);
assert!(INDEXERS_BLOCKS.contains(&ActiveRadarrBlock::AddIndexer));
assert!(INDEXERS_BLOCKS.contains(&ActiveRadarrBlock::EditIndexer));
assert!(INDEXERS_BLOCKS.contains(&ActiveRadarrBlock::DeleteIndexerPrompt));
assert!(INDEXERS_BLOCKS.contains(&ActiveRadarrBlock::Indexers));
}
#[test]
fn test_root_folders_blocks_contents() {
assert_eq!(ROOT_FOLDERS_BLOCKS.len(), 3);
assert!(ROOT_FOLDERS_BLOCKS.contains(&ActiveRadarrBlock::RootFolders));
assert!(ROOT_FOLDERS_BLOCKS.contains(&ActiveRadarrBlock::AddRootFolderPrompt));
assert!(ROOT_FOLDERS_BLOCKS.contains(&ActiveRadarrBlock::DeleteRootFolderPrompt));
}
#[test]
fn test_add_movie_blocks_contents() {
assert_eq!(ADD_MOVIE_BLOCKS.len(), 10);
assert!(ADD_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::AddMovieSearchInput));
assert!(ADD_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::AddMovieSearchResults));
assert!(ADD_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::AddMovieEmptySearchResults));
assert!(ADD_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::AddMoviePrompt));
assert!(ADD_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::AddMovieSelectMinimumAvailability));
assert!(ADD_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::AddMovieSelectMonitor));
assert!(ADD_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::AddMovieSelectQualityProfile));
assert!(ADD_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::AddMovieSelectRootFolder));
assert!(ADD_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::AddMovieAlreadyInLibrary));
assert!(ADD_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::AddMovieTagsInput));
}
#[test]
fn test_edit_collection_blocks_contents() {
assert_eq!(EDIT_COLLECTION_BLOCKS.len(), 7);
assert!(EDIT_COLLECTION_BLOCKS.contains(&ActiveRadarrBlock::EditCollectionPrompt));
assert!(EDIT_COLLECTION_BLOCKS.contains(&ActiveRadarrBlock::EditCollectionConfirmPrompt));
assert!(
EDIT_COLLECTION_BLOCKS.contains(&ActiveRadarrBlock::EditCollectionRootFolderPathInput)
);
assert!(EDIT_COLLECTION_BLOCKS
.contains(&ActiveRadarrBlock::EditCollectionSelectMinimumAvailability));
assert!(
EDIT_COLLECTION_BLOCKS.contains(&ActiveRadarrBlock::EditCollectionSelectQualityProfile)
);
assert!(EDIT_COLLECTION_BLOCKS.contains(&ActiveRadarrBlock::EditCollectionToggleSearchOnAdd));
assert!(EDIT_COLLECTION_BLOCKS.contains(&ActiveRadarrBlock::EditCollectionToggleMonitored));
}
#[test]
fn test_edit_movie_blocks_contents() {
assert_eq!(EDIT_MOVIE_BLOCKS.len(), 7);
assert!(EDIT_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::EditMoviePrompt));
assert!(EDIT_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::EditMovieConfirmPrompt));
assert!(EDIT_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::EditMoviePathInput));
assert!(EDIT_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::EditMovieSelectMinimumAvailability));
assert!(EDIT_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::EditMovieSelectQualityProfile));
assert!(EDIT_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::EditMovieTagsInput));
assert!(EDIT_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::EditMovieToggleMonitored));
}
#[test]
fn test_downloads_blocks_contents() {
assert_eq!(DOWNLOADS_BLOCKS.len(), 3);
assert!(DOWNLOADS_BLOCKS.contains(&ActiveRadarrBlock::Downloads));
assert!(DOWNLOADS_BLOCKS.contains(&ActiveRadarrBlock::DeleteDownloadPrompt));
assert!(DOWNLOADS_BLOCKS.contains(&ActiveRadarrBlock::UpdateDownloadsPrompt));
}
#[test]
fn test_movie_details_blocks_contents() {
assert_eq!(MOVIE_DETAILS_BLOCKS.len(), 10);
assert!(MOVIE_DETAILS_BLOCKS.contains(&ActiveRadarrBlock::MovieDetails));
assert!(MOVIE_DETAILS_BLOCKS.contains(&ActiveRadarrBlock::MovieHistory));
assert!(MOVIE_DETAILS_BLOCKS.contains(&ActiveRadarrBlock::FileInfo));
assert!(MOVIE_DETAILS_BLOCKS.contains(&ActiveRadarrBlock::Cast));
assert!(MOVIE_DETAILS_BLOCKS.contains(&ActiveRadarrBlock::Crew));
assert!(MOVIE_DETAILS_BLOCKS.contains(&ActiveRadarrBlock::AutomaticallySearchMoviePrompt));
assert!(MOVIE_DETAILS_BLOCKS.contains(&ActiveRadarrBlock::UpdateAndScanPrompt));
assert!(MOVIE_DETAILS_BLOCKS.contains(&ActiveRadarrBlock::ManualSearch));
assert!(MOVIE_DETAILS_BLOCKS.contains(&ActiveRadarrBlock::ManualSearchSortPrompt));
assert!(MOVIE_DETAILS_BLOCKS.contains(&ActiveRadarrBlock::ManualSearchConfirmPrompt));
}
#[test]
fn test_collection_details_blocks_contents() {
assert_eq!(COLLECTION_DETAILS_BLOCKS.len(), 2);
assert!(COLLECTION_DETAILS_BLOCKS.contains(&ActiveRadarrBlock::CollectionDetails));
assert!(COLLECTION_DETAILS_BLOCKS.contains(&ActiveRadarrBlock::ViewMovieOverview));
}
#[test]
fn test_search_blocks_contents() {
assert_eq!(SEARCH_BLOCKS.len(), 2);
assert!(SEARCH_BLOCKS.contains(&ActiveRadarrBlock::SearchMovie));
assert!(SEARCH_BLOCKS.contains(&ActiveRadarrBlock::SearchCollection));
}
#[test]
fn test_filter_blocks_contents() {
assert_eq!(FILTER_BLOCKS.len(), 2);
assert!(FILTER_BLOCKS.contains(&ActiveRadarrBlock::FilterMovies));
assert!(FILTER_BLOCKS.contains(&ActiveRadarrBlock::FilterCollections));
}
#[test]
fn test_delete_movie_blocks_contents() {
assert_eq!(DELETE_MOVIE_BLOCKS.len(), 4);
assert!(DELETE_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::DeleteMoviePrompt));
assert!(DELETE_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::DeleteMovieConfirmPrompt));
assert!(DELETE_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::DeleteMovieToggleDeleteFile));
assert!(DELETE_MOVIE_BLOCKS.contains(&ActiveRadarrBlock::DeleteMovieToggleAddListExclusion));
}
#[test]
fn test_indexer_settings_blocks_contents() {
assert_eq!(INDEXER_SETTINGS_BLOCKS.len(), 10);
assert!(INDEXER_SETTINGS_BLOCKS.contains(&ActiveRadarrBlock::IndexerSettingsPrompt));
assert!(
INDEXER_SETTINGS_BLOCKS.contains(&ActiveRadarrBlock::IndexerSettingsAvailabilityDelayInput)
);
assert!(INDEXER_SETTINGS_BLOCKS.contains(&ActiveRadarrBlock::IndexerSettingsConfirmPrompt));
assert!(INDEXER_SETTINGS_BLOCKS.contains(&ActiveRadarrBlock::IndexerSettingsMaximumSizeInput));
assert!(INDEXER_SETTINGS_BLOCKS.contains(&ActiveRadarrBlock::IndexerSettingsMinimumAgeInput));
assert!(INDEXER_SETTINGS_BLOCKS.contains(&ActiveRadarrBlock::IndexerSettingsRetentionInput));
assert!(
INDEXER_SETTINGS_BLOCKS.contains(&ActiveRadarrBlock::IndexerSettingsRssSyncIntervalInput)
);
assert!(INDEXER_SETTINGS_BLOCKS
.contains(&ActiveRadarrBlock::IndexerSettingsToggleAllowHardcodedSubs));
assert!(INDEXER_SETTINGS_BLOCKS
.contains(&ActiveRadarrBlock::IndexerSettingsTogglePreferIndexerFlags));
assert!(INDEXER_SETTINGS_BLOCKS
.contains(&ActiveRadarrBlock::IndexerSettingsWhitelistedSubtitleTagsInput));
}
#[test]
fn test_system_details_blocks_contents() {
assert_eq!(SYSTEM_DETAILS_BLOCKS.len(), 5);
assert!(SYSTEM_DETAILS_BLOCKS.contains(&ActiveRadarrBlock::SystemLogs));
assert!(SYSTEM_DETAILS_BLOCKS.contains(&ActiveRadarrBlock::SystemQueuedEvents));
assert!(SYSTEM_DETAILS_BLOCKS.contains(&ActiveRadarrBlock::SystemTasks));
assert!(SYSTEM_DETAILS_BLOCKS.contains(&ActiveRadarrBlock::SystemTaskStartConfirmPrompt));
assert!(SYSTEM_DETAILS_BLOCKS.contains(&ActiveRadarrBlock::SystemUpdates));
}
#[test]
fn test_add_movie_selection_blocks_ordering() {
let mut add_movie_block_iter = ADD_MOVIE_SELECTION_BLOCKS.iter(); let mut add_movie_block_iter = ADD_MOVIE_SELECTION_BLOCKS.iter();
assert_eq!( assert_eq!(
@@ -505,10 +672,11 @@ mod tests {
add_movie_block_iter.next().unwrap(), add_movie_block_iter.next().unwrap(),
&ActiveRadarrBlock::AddMovieConfirmPrompt &ActiveRadarrBlock::AddMovieConfirmPrompt
); );
assert_eq!(add_movie_block_iter.next(), None);
} }
#[test] #[test]
fn test_edit_movie_prompt_block_order() { fn test_edit_movie_selection_blocks_ordering() {
let mut edit_movie_block_iter = EDIT_MOVIE_SELECTION_BLOCKS.iter(); let mut edit_movie_block_iter = EDIT_MOVIE_SELECTION_BLOCKS.iter();
assert_eq!( assert_eq!(
@@ -535,10 +703,11 @@ mod tests {
edit_movie_block_iter.next().unwrap(), edit_movie_block_iter.next().unwrap(),
&ActiveRadarrBlock::EditMovieConfirmPrompt &ActiveRadarrBlock::EditMovieConfirmPrompt
); );
assert_eq!(edit_movie_block_iter.next(), None);
} }
#[test] #[test]
fn test_edit_collection_prompt_block_order() { fn test_edit_collection_selection_blocks_ordering() {
let mut edit_collection_block_iter = EDIT_COLLECTION_SELECTION_BLOCKS.iter(); let mut edit_collection_block_iter = EDIT_COLLECTION_SELECTION_BLOCKS.iter();
assert_eq!( assert_eq!(
@@ -565,10 +734,11 @@ mod tests {
edit_collection_block_iter.next().unwrap(), edit_collection_block_iter.next().unwrap(),
&ActiveRadarrBlock::EditCollectionConfirmPrompt &ActiveRadarrBlock::EditCollectionConfirmPrompt
); );
assert_eq!(edit_collection_block_iter.next(), None);
} }
#[test] #[test]
fn test_delete_movie_prompt_block_order() { fn test_delete_movie_selection_blocks_ordering() {
let mut delete_movie_block_iter = DELETE_MOVIE_SELECTION_BLOCKS.iter(); let mut delete_movie_block_iter = DELETE_MOVIE_SELECTION_BLOCKS.iter();
assert_eq!( assert_eq!(
@@ -583,10 +753,11 @@ mod tests {
delete_movie_block_iter.next().unwrap(), delete_movie_block_iter.next().unwrap(),
&ActiveRadarrBlock::DeleteMovieConfirmPrompt &ActiveRadarrBlock::DeleteMovieConfirmPrompt
); );
assert_eq!(delete_movie_block_iter.next(), None);
} }
#[test] #[test]
fn test_indexer_settings_prompt_block_order() { fn test_indexer_settings_selection_blocks_ordering() {
let mut indexer_settings_block_iter = INDEXER_SETTINGS_SELECTION_BLOCKS.iter(); let mut indexer_settings_block_iter = INDEXER_SETTINGS_SELECTION_BLOCKS.iter();
assert_eq!( assert_eq!(
@@ -625,6 +796,7 @@ mod tests {
indexer_settings_block_iter.next().unwrap(), indexer_settings_block_iter.next().unwrap(),
&ActiveRadarrBlock::IndexerSettingsConfirmPrompt &ActiveRadarrBlock::IndexerSettingsConfirmPrompt
); );
assert_eq!(indexer_settings_block_iter.next(), None);
} }
} }
@@ -4,8 +4,8 @@ use tui::text::Text;
use tui::widgets::{Cell, Paragraph, Row, Wrap}; use tui::widgets::{Cell, Paragraph, Row, Wrap};
use tui::Frame; use tui::Frame;
use crate::app::key_binding::{build_keymapping_string, BARE_POPUP_KEY_MAPPINGS}; use crate::app::context_clues::{build_context_clue_string, BARE_POPUP_CONTEXT_CLUES};
use crate::app::radarr::radarr_key_mappings::COLLECTION_DETAILS_KEY_MAPPINGS; use crate::app::radarr::radarr_context_clues::COLLECTION_DETAILS_CONTEXT_CLUES;
use crate::app::radarr::{ActiveRadarrBlock, COLLECTION_DETAILS_BLOCKS}; use crate::app::radarr::{ActiveRadarrBlock, COLLECTION_DETAILS_BLOCKS};
use crate::app::App; use crate::app::App;
use crate::models::radarr_models::CollectionMovie; use crate::models::radarr_models::CollectionMovie;
@@ -106,7 +106,7 @@ pub fn draw_collection_details<B: Backend>(
}; };
let mut help_text = Text::from(format!( let mut help_text = Text::from(format!(
"<↑↓> scroll table | {}", "<↑↓> scroll table | {}",
build_keymapping_string(&COLLECTION_DETAILS_KEY_MAPPINGS) build_context_clue_string(&COLLECTION_DETAILS_CONTEXT_CLUES)
)); ));
help_text.patch_style(style_help()); help_text.patch_style(style_help());
let monitored = if collection_selection.monitored { let monitored = if collection_selection.monitored {
@@ -261,7 +261,7 @@ fn draw_movie_overview<B: Backend>(f: &mut Frame<'_, B>, app: &mut App<'_>, cont
.overview, .overview,
); );
overview.patch_style(style_default()); overview.patch_style(style_default());
let mut help_text = Text::from(build_keymapping_string(&BARE_POPUP_KEY_MAPPINGS)); let mut help_text = Text::from(build_context_clue_string(&BARE_POPUP_CONTEXT_CLUES));
help_text.patch_style(style_help()); help_text.patch_style(style_help());
let paragraph = Paragraph::new(overview) let paragraph = Paragraph::new(overview)
+5 -5
View File
@@ -4,8 +4,8 @@ use tui::text::Text;
use tui::widgets::{Cell, ListItem, Paragraph, Row}; use tui::widgets::{Cell, ListItem, Paragraph, Row};
use tui::Frame; use tui::Frame;
use crate::app::key_binding::{build_keymapping_string, BARE_POPUP_KEY_MAPPINGS}; use crate::app::context_clues::{build_context_clue_string, BARE_POPUP_CONTEXT_CLUES};
use crate::app::radarr::radarr_key_mappings::ADD_MOVIE_SEARCH_RESULTS_KEY_MAPPINGS; use crate::app::radarr::radarr_context_clues::ADD_MOVIE_SEARCH_RESULTS_CONTEXT_CLUES;
use crate::app::radarr::{ActiveRadarrBlock, ADD_MOVIE_BLOCKS}; use crate::app::radarr::{ActiveRadarrBlock, ADD_MOVIE_BLOCKS};
use crate::models::radarr_models::AddMovieSearchResult; use crate::models::radarr_models::AddMovieSearchResult;
use crate::models::Route; use crate::models::Route;
@@ -144,7 +144,7 @@ fn draw_add_movie_search<B: Backend>(f: &mut Frame<'_, B>, app: &mut App<'_>, ar
); );
f.render_widget(layout_block(), chunks[1]); f.render_widget(layout_block(), chunks[1]);
let mut help_text = Text::from(build_keymapping_string(&BARE_POPUP_KEY_MAPPINGS)); let mut help_text = Text::from(build_context_clue_string(&BARE_POPUP_CONTEXT_CLUES));
help_text.patch_style(style_help()); help_text.patch_style(style_help());
let help_paragraph = Paragraph::new(help_text) let help_paragraph = Paragraph::new(help_text)
.block(borderless_block()) .block(borderless_block())
@@ -163,8 +163,8 @@ fn draw_add_movie_search<B: Backend>(f: &mut Frame<'_, B>, app: &mut App<'_>, ar
| ActiveRadarrBlock::AddMovieSelectRootFolder | ActiveRadarrBlock::AddMovieSelectRootFolder
| ActiveRadarrBlock::AddMovieAlreadyInLibrary | ActiveRadarrBlock::AddMovieAlreadyInLibrary
| ActiveRadarrBlock::AddMovieTagsInput => { | ActiveRadarrBlock::AddMovieTagsInput => {
let mut help_text = Text::from(build_keymapping_string( let mut help_text = Text::from(build_context_clue_string(
&ADD_MOVIE_SEARCH_RESULTS_KEY_MAPPINGS, &ADD_MOVIE_SEARCH_RESULTS_CONTEXT_CLUES,
)); ));
help_text.patch_style(style_help()); help_text.patch_style(style_help());
let help_paragraph = Paragraph::new(help_text) let help_paragraph = Paragraph::new(help_text)
+5 -5
View File
@@ -4,8 +4,8 @@ use tui::text::{Span, Text};
use tui::widgets::{Cell, ListItem, Paragraph, Row}; use tui::widgets::{Cell, ListItem, Paragraph, Row};
use tui::Frame; use tui::Frame;
use crate::app::key_binding::{build_keymapping_string, BARE_POPUP_KEY_MAPPINGS}; use crate::app::context_clues::{build_context_clue_string, BARE_POPUP_CONTEXT_CLUES};
use crate::app::radarr::radarr_key_mappings::SYSTEM_TASKS_KEY_MAPPINGS; use crate::app::radarr::radarr_context_clues::SYSTEM_TASKS_CONTEXT_CLUES;
use crate::app::radarr::{ActiveRadarrBlock, SYSTEM_DETAILS_BLOCKS}; use crate::app::radarr::{ActiveRadarrBlock, SYSTEM_DETAILS_BLOCKS};
use crate::app::App; use crate::app::App;
use crate::models::Route; use crate::models::Route;
@@ -88,7 +88,7 @@ fn draw_logs_popup<B: Backend>(f: &mut Frame<'_, B>, app: &mut App<'_>, area: Re
is_popup: true, is_popup: true,
help: Some(format!( help: Some(format!(
"<↑↓←→> scroll | {}", "<↑↓←→> scroll | {}",
build_keymapping_string(&BARE_POPUP_KEY_MAPPINGS) build_context_clue_string(&BARE_POPUP_CONTEXT_CLUES)
)), )),
}, },
); );
@@ -101,7 +101,7 @@ fn draw_tasks_popup<B: Backend>(f: &mut Frame<'_, B>, app: &mut App<'_>, area: R
let context_area = draw_help_and_get_content_rect( let context_area = draw_help_and_get_content_rect(
f, f,
area, area,
Some(build_keymapping_string(&SYSTEM_TASKS_KEY_MAPPINGS)), Some(build_context_clue_string(&SYSTEM_TASKS_CONTEXT_CLUES)),
); );
draw_table( draw_table(
@@ -163,7 +163,7 @@ fn draw_updates_popup<B: Backend>(f: &mut Frame<'_, B>, app: &mut App<'_>, area:
area, area,
Some(format!( Some(format!(
"<↑↓> scroll | {}", "<↑↓> scroll | {}",
build_keymapping_string(&BARE_POPUP_KEY_MAPPINGS) build_context_clue_string(&BARE_POPUP_CONTEXT_CLUES)
)), )),
); );
let updates = app.data.radarr_data.updates.get_text(); let updates = app.data.radarr_data.updates.get_text();