feat: Refactor all keybinding tips into a dynamically changing menu that can be invoked via '?' [#32]
This commit is contained in:
+7
-9
@@ -1,6 +1,7 @@
|
||||
use std::fmt::{Debug, Display, Formatter};
|
||||
use std::sync::atomic::{AtomicUsize, Ordering};
|
||||
|
||||
use crate::app::context_clues::ContextClue;
|
||||
use crate::app::ServarrConfig;
|
||||
use crate::models::servarr_data::radarr::radarr_data::ActiveRadarrBlock;
|
||||
use radarr_models::RadarrSerdeable;
|
||||
@@ -9,6 +10,7 @@ use serde::{de, Deserialize, Deserializer, Serialize, Serializer};
|
||||
use serde_json::Number;
|
||||
use servarr_data::sonarr::sonarr_data::ActiveSonarrBlock;
|
||||
use sonarr_models::SonarrSerdeable;
|
||||
|
||||
pub mod radarr_models;
|
||||
pub mod servarr_data;
|
||||
pub mod servarr_models;
|
||||
@@ -33,6 +35,7 @@ pub enum Route {
|
||||
Bazarr,
|
||||
Prowlarr,
|
||||
Tautulli,
|
||||
Keybindings,
|
||||
}
|
||||
|
||||
#[derive(Clone, Serialize, Deserialize, Debug, PartialEq, Eq)]
|
||||
@@ -271,8 +274,7 @@ impl HorizontallyScrollableText {
|
||||
pub struct TabRoute {
|
||||
pub title: String,
|
||||
pub route: Route,
|
||||
pub help: String,
|
||||
pub contextual_help: Option<String>,
|
||||
pub contextual_help: Option<&'static [ContextClue]>,
|
||||
pub config: Option<ServarrConfig>,
|
||||
}
|
||||
|
||||
@@ -286,7 +288,7 @@ impl TabState {
|
||||
TabState { tabs, index: 0 }
|
||||
}
|
||||
|
||||
// Allowing this code for now since we'll eventually be implementing additional Servarr support and we'll need it then
|
||||
// Allowing this code for now since we'll eventually be implementing additional Servarr support, and we'll need it then
|
||||
#[allow(dead_code)]
|
||||
pub fn set_index(&mut self, index: usize) -> &TabRoute {
|
||||
self.index = index;
|
||||
@@ -337,12 +339,8 @@ impl TabState {
|
||||
false
|
||||
}
|
||||
|
||||
pub fn get_active_tab_help(&self) -> &str {
|
||||
&self.tabs[self.index].help
|
||||
}
|
||||
|
||||
pub fn get_active_tab_contextual_help(&self) -> Option<String> {
|
||||
self.tabs[self.index].contextual_help.clone()
|
||||
pub fn get_active_route_contextual_help(&self) -> Option<&'static [ContextClue]> {
|
||||
self.tabs[self.index].contextual_help
|
||||
}
|
||||
|
||||
pub fn next(&mut self) {
|
||||
|
||||
+13
-20
@@ -3,6 +3,8 @@ mod tests {
|
||||
use std::sync::atomic::AtomicUsize;
|
||||
use std::sync::atomic::Ordering;
|
||||
|
||||
use crate::app::context_clues::ContextClue;
|
||||
use crate::app::key_binding::DEFAULT_KEYBINDINGS;
|
||||
use crate::app::ServarrConfig;
|
||||
use crate::models::from_f64;
|
||||
use crate::models::servarr_data::radarr::radarr_data::ActiveRadarrBlock;
|
||||
@@ -18,6 +20,10 @@ mod tests {
|
||||
use serde_json::to_string;
|
||||
|
||||
const BLOCKS: &[&[i32]] = &[&[11, 12], &[21, 22], &[31, 32]];
|
||||
static HELP_KEYBINDINGS: [ContextClue; 1] =
|
||||
[(DEFAULT_KEYBINDINGS.help, DEFAULT_KEYBINDINGS.help.desc)];
|
||||
static ESC_KEYBINDINGS: [ContextClue; 1] =
|
||||
[(DEFAULT_KEYBINDINGS.esc, DEFAULT_KEYBINDINGS.esc.desc)];
|
||||
|
||||
#[test]
|
||||
fn test_scrollable_text_with_string() {
|
||||
@@ -617,26 +623,15 @@ mod tests {
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_tab_state_get_active_tab_help() {
|
||||
fn test_tab_state_get_active_route_contextual_help() {
|
||||
let tabs = create_test_tab_routes();
|
||||
let second_tab_help = tabs[1].help.clone();
|
||||
let second_tab_help = tabs[1].contextual_help;
|
||||
let tab_state = TabState { tabs, index: 1 };
|
||||
|
||||
let tab_help = tab_state.get_active_tab_help();
|
||||
let tab_help = tab_state.get_active_route_contextual_help();
|
||||
|
||||
assert_str_eq!(tab_help, second_tab_help);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_tab_state_get_active_tab_contextual_help() {
|
||||
let tabs = create_test_tab_routes();
|
||||
let second_tab_contextual_help = tabs[1].contextual_help.clone().unwrap();
|
||||
let tab_state = TabState { tabs, index: 1 };
|
||||
|
||||
let tab_contextual_help = tab_state.get_active_tab_contextual_help();
|
||||
|
||||
assert!(tab_contextual_help.is_some());
|
||||
assert_str_eq!(tab_contextual_help.unwrap(), second_tab_contextual_help);
|
||||
assert!(tab_help.is_some());
|
||||
assert_eq!(tab_help.unwrap(), second_tab_help.unwrap());
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -823,15 +818,13 @@ mod tests {
|
||||
TabRoute {
|
||||
title: "Test 1".to_owned(),
|
||||
route: ActiveRadarrBlock::Movies.into(),
|
||||
help: "Help for Test 1".to_owned(),
|
||||
contextual_help: Some("Contextual Help for Test 1".to_owned()),
|
||||
contextual_help: Some(&HELP_KEYBINDINGS),
|
||||
config: None,
|
||||
},
|
||||
TabRoute {
|
||||
title: "Test 2".to_owned(),
|
||||
route: ActiveRadarrBlock::Collections.into(),
|
||||
help: "Help for Test 2".to_owned(),
|
||||
contextual_help: Some("Contextual Help for Test 2".to_owned()),
|
||||
contextual_help: Some(&ESC_KEYBINDINGS),
|
||||
config: None,
|
||||
},
|
||||
]
|
||||
|
||||
@@ -1,3 +1,21 @@
|
||||
use crate::models::Route;
|
||||
|
||||
pub mod modals;
|
||||
pub mod radarr;
|
||||
pub mod sonarr;
|
||||
|
||||
#[cfg(test)]
|
||||
#[path = "servarr_data_tests.rs"]
|
||||
mod servarr_data_tests;
|
||||
|
||||
#[derive(Clone, Copy, PartialEq, Eq, Debug, Default)]
|
||||
pub enum ActiveKeybindingBlock {
|
||||
#[default]
|
||||
Help,
|
||||
}
|
||||
|
||||
impl From<ActiveKeybindingBlock> for Route {
|
||||
fn from(_active_keybinding_block: ActiveKeybindingBlock) -> Route {
|
||||
Route::Keybindings
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
use crate::app::context_clues::{
|
||||
build_context_clue_string, BLOCKLIST_CONTEXT_CLUES, DOWNLOADS_CONTEXT_CLUES,
|
||||
INDEXERS_CONTEXT_CLUES, ROOT_FOLDERS_CONTEXT_CLUES, SYSTEM_CONTEXT_CLUES,
|
||||
BLOCKLIST_CONTEXT_CLUES, DOWNLOADS_CONTEXT_CLUES, INDEXERS_CONTEXT_CLUES,
|
||||
ROOT_FOLDERS_CONTEXT_CLUES, SYSTEM_CONTEXT_CLUES,
|
||||
};
|
||||
use crate::app::radarr::radarr_context_clues::{
|
||||
COLLECTIONS_CONTEXT_CLUES, LIBRARY_CONTEXT_CLUES, MANUAL_MOVIE_SEARCH_CONTEXTUAL_CONTEXT_CLUES,
|
||||
MANUAL_MOVIE_SEARCH_CONTEXT_CLUES, MOVIE_DETAILS_CONTEXT_CLUES,
|
||||
COLLECTIONS_CONTEXT_CLUES, LIBRARY_CONTEXT_CLUES, MANUAL_MOVIE_SEARCH_CONTEXT_CLUES,
|
||||
MOVIE_DETAILS_CONTEXT_CLUES,
|
||||
};
|
||||
use crate::models::radarr_models::{
|
||||
AddMovieSearchResult, BlocklistItem, Collection, CollectionMovie, DownloadRecord,
|
||||
@@ -123,50 +123,43 @@ impl<'a> Default for RadarrData<'a> {
|
||||
TabRoute {
|
||||
title: "Library".to_string(),
|
||||
route: ActiveRadarrBlock::Movies.into(),
|
||||
help: String::new(),
|
||||
contextual_help: Some(build_context_clue_string(&LIBRARY_CONTEXT_CLUES)),
|
||||
contextual_help: Some(&LIBRARY_CONTEXT_CLUES),
|
||||
config: None,
|
||||
},
|
||||
TabRoute {
|
||||
title: "Collections".to_string(),
|
||||
route: ActiveRadarrBlock::Collections.into(),
|
||||
help: String::new(),
|
||||
contextual_help: Some(build_context_clue_string(&COLLECTIONS_CONTEXT_CLUES)),
|
||||
contextual_help: Some(&COLLECTIONS_CONTEXT_CLUES),
|
||||
config: None,
|
||||
},
|
||||
TabRoute {
|
||||
title: "Downloads".to_string(),
|
||||
route: ActiveRadarrBlock::Downloads.into(),
|
||||
help: String::new(),
|
||||
contextual_help: Some(build_context_clue_string(&DOWNLOADS_CONTEXT_CLUES)),
|
||||
contextual_help: Some(&DOWNLOADS_CONTEXT_CLUES),
|
||||
config: None,
|
||||
},
|
||||
TabRoute {
|
||||
title: "Blocklist".to_string(),
|
||||
route: ActiveRadarrBlock::Blocklist.into(),
|
||||
help: String::new(),
|
||||
contextual_help: Some(build_context_clue_string(&BLOCKLIST_CONTEXT_CLUES)),
|
||||
contextual_help: Some(&BLOCKLIST_CONTEXT_CLUES),
|
||||
config: None,
|
||||
},
|
||||
TabRoute {
|
||||
title: "Root Folders".to_string(),
|
||||
route: ActiveRadarrBlock::RootFolders.into(),
|
||||
help: String::new(),
|
||||
contextual_help: Some(build_context_clue_string(&ROOT_FOLDERS_CONTEXT_CLUES)),
|
||||
contextual_help: Some(&ROOT_FOLDERS_CONTEXT_CLUES),
|
||||
config: None,
|
||||
},
|
||||
TabRoute {
|
||||
title: "Indexers".to_string(),
|
||||
route: ActiveRadarrBlock::Indexers.into(),
|
||||
help: String::new(),
|
||||
contextual_help: Some(build_context_clue_string(&INDEXERS_CONTEXT_CLUES)),
|
||||
contextual_help: Some(&INDEXERS_CONTEXT_CLUES),
|
||||
config: None,
|
||||
},
|
||||
TabRoute {
|
||||
title: "System".to_string(),
|
||||
route: ActiveRadarrBlock::System.into(),
|
||||
help: String::new(),
|
||||
contextual_help: Some(build_context_clue_string(&SYSTEM_CONTEXT_CLUES)),
|
||||
contextual_help: Some(&SYSTEM_CONTEXT_CLUES),
|
||||
config: None,
|
||||
},
|
||||
]),
|
||||
@@ -174,45 +167,37 @@ impl<'a> Default for RadarrData<'a> {
|
||||
TabRoute {
|
||||
title: "Details".to_string(),
|
||||
route: ActiveRadarrBlock::MovieDetails.into(),
|
||||
help: build_context_clue_string(&MOVIE_DETAILS_CONTEXT_CLUES),
|
||||
contextual_help: None,
|
||||
contextual_help: Some(&MOVIE_DETAILS_CONTEXT_CLUES),
|
||||
config: None,
|
||||
},
|
||||
TabRoute {
|
||||
title: "History".to_string(),
|
||||
route: ActiveRadarrBlock::MovieHistory.into(),
|
||||
help: build_context_clue_string(&MOVIE_DETAILS_CONTEXT_CLUES),
|
||||
contextual_help: None,
|
||||
contextual_help: Some(&MOVIE_DETAILS_CONTEXT_CLUES),
|
||||
config: None,
|
||||
},
|
||||
TabRoute {
|
||||
title: "File".to_string(),
|
||||
route: ActiveRadarrBlock::FileInfo.into(),
|
||||
help: build_context_clue_string(&MOVIE_DETAILS_CONTEXT_CLUES),
|
||||
contextual_help: None,
|
||||
contextual_help: Some(&MOVIE_DETAILS_CONTEXT_CLUES),
|
||||
config: None,
|
||||
},
|
||||
TabRoute {
|
||||
title: "Cast".to_string(),
|
||||
route: ActiveRadarrBlock::Cast.into(),
|
||||
help: build_context_clue_string(&MOVIE_DETAILS_CONTEXT_CLUES),
|
||||
contextual_help: None,
|
||||
contextual_help: Some(&MOVIE_DETAILS_CONTEXT_CLUES),
|
||||
config: None,
|
||||
},
|
||||
TabRoute {
|
||||
title: "Crew".to_string(),
|
||||
route: ActiveRadarrBlock::Crew.into(),
|
||||
help: build_context_clue_string(&MOVIE_DETAILS_CONTEXT_CLUES),
|
||||
contextual_help: None,
|
||||
contextual_help: Some(&MOVIE_DETAILS_CONTEXT_CLUES),
|
||||
config: None,
|
||||
},
|
||||
TabRoute {
|
||||
title: "Manual Search".to_string(),
|
||||
route: ActiveRadarrBlock::ManualSearch.into(),
|
||||
help: build_context_clue_string(&MANUAL_MOVIE_SEARCH_CONTEXT_CLUES),
|
||||
contextual_help: Some(build_context_clue_string(
|
||||
&MANUAL_MOVIE_SEARCH_CONTEXTUAL_CONTEXT_CLUES,
|
||||
)),
|
||||
contextual_help: Some(&MANUAL_MOVIE_SEARCH_CONTEXT_CLUES),
|
||||
config: None,
|
||||
},
|
||||
]),
|
||||
|
||||
@@ -5,12 +5,11 @@ mod tests {
|
||||
use pretty_assertions::{assert_eq, assert_str_eq};
|
||||
|
||||
use crate::app::context_clues::{
|
||||
build_context_clue_string, BLOCKLIST_CONTEXT_CLUES, DOWNLOADS_CONTEXT_CLUES,
|
||||
INDEXERS_CONTEXT_CLUES, ROOT_FOLDERS_CONTEXT_CLUES, SYSTEM_CONTEXT_CLUES,
|
||||
BLOCKLIST_CONTEXT_CLUES, DOWNLOADS_CONTEXT_CLUES, INDEXERS_CONTEXT_CLUES,
|
||||
ROOT_FOLDERS_CONTEXT_CLUES, SYSTEM_CONTEXT_CLUES,
|
||||
};
|
||||
use crate::app::radarr::radarr_context_clues::{
|
||||
COLLECTIONS_CONTEXT_CLUES, LIBRARY_CONTEXT_CLUES,
|
||||
MANUAL_MOVIE_SEARCH_CONTEXTUAL_CONTEXT_CLUES, MANUAL_MOVIE_SEARCH_CONTEXT_CLUES,
|
||||
COLLECTIONS_CONTEXT_CLUES, LIBRARY_CONTEXT_CLUES, MANUAL_MOVIE_SEARCH_CONTEXT_CLUES,
|
||||
MOVIE_DETAILS_CONTEXT_CLUES,
|
||||
};
|
||||
|
||||
@@ -107,10 +106,10 @@ mod tests {
|
||||
radarr_data.main_tabs.tabs[0].route,
|
||||
ActiveRadarrBlock::Movies.into()
|
||||
);
|
||||
assert!(radarr_data.main_tabs.tabs[0].help.is_empty());
|
||||
assert!(radarr_data.main_tabs.tabs[0].contextual_help.is_some());
|
||||
assert_eq!(
|
||||
radarr_data.main_tabs.tabs[0].contextual_help,
|
||||
Some(build_context_clue_string(&LIBRARY_CONTEXT_CLUES))
|
||||
radarr_data.main_tabs.tabs[0].contextual_help.unwrap(),
|
||||
&LIBRARY_CONTEXT_CLUES
|
||||
);
|
||||
assert_eq!(radarr_data.main_tabs.tabs[0].config, None);
|
||||
|
||||
@@ -119,10 +118,10 @@ mod tests {
|
||||
radarr_data.main_tabs.tabs[1].route,
|
||||
ActiveRadarrBlock::Collections.into()
|
||||
);
|
||||
assert!(radarr_data.main_tabs.tabs[1].help.is_empty());
|
||||
assert!(radarr_data.main_tabs.tabs[1].contextual_help.is_some());
|
||||
assert_eq!(
|
||||
radarr_data.main_tabs.tabs[1].contextual_help,
|
||||
Some(build_context_clue_string(&COLLECTIONS_CONTEXT_CLUES))
|
||||
radarr_data.main_tabs.tabs[1].contextual_help.unwrap(),
|
||||
&COLLECTIONS_CONTEXT_CLUES
|
||||
);
|
||||
assert_eq!(radarr_data.main_tabs.tabs[1].config, None);
|
||||
|
||||
@@ -131,10 +130,10 @@ mod tests {
|
||||
radarr_data.main_tabs.tabs[2].route,
|
||||
ActiveRadarrBlock::Downloads.into()
|
||||
);
|
||||
assert!(radarr_data.main_tabs.tabs[2].help.is_empty());
|
||||
assert!(radarr_data.main_tabs.tabs[2].contextual_help.is_some());
|
||||
assert_eq!(
|
||||
radarr_data.main_tabs.tabs[2].contextual_help,
|
||||
Some(build_context_clue_string(&DOWNLOADS_CONTEXT_CLUES))
|
||||
radarr_data.main_tabs.tabs[2].contextual_help.unwrap(),
|
||||
&DOWNLOADS_CONTEXT_CLUES
|
||||
);
|
||||
assert_eq!(radarr_data.main_tabs.tabs[2].config, None);
|
||||
|
||||
@@ -143,10 +142,10 @@ mod tests {
|
||||
radarr_data.main_tabs.tabs[3].route,
|
||||
ActiveRadarrBlock::Blocklist.into()
|
||||
);
|
||||
assert!(radarr_data.main_tabs.tabs[3].help.is_empty());
|
||||
assert!(radarr_data.main_tabs.tabs[3].contextual_help.is_some());
|
||||
assert_eq!(
|
||||
radarr_data.main_tabs.tabs[3].contextual_help,
|
||||
Some(build_context_clue_string(&BLOCKLIST_CONTEXT_CLUES))
|
||||
radarr_data.main_tabs.tabs[3].contextual_help.unwrap(),
|
||||
&BLOCKLIST_CONTEXT_CLUES
|
||||
);
|
||||
assert_eq!(radarr_data.main_tabs.tabs[3].config, None);
|
||||
|
||||
@@ -155,10 +154,10 @@ mod tests {
|
||||
radarr_data.main_tabs.tabs[4].route,
|
||||
ActiveRadarrBlock::RootFolders.into()
|
||||
);
|
||||
assert!(radarr_data.main_tabs.tabs[4].help.is_empty());
|
||||
assert!(radarr_data.main_tabs.tabs[4].contextual_help.is_some());
|
||||
assert_eq!(
|
||||
radarr_data.main_tabs.tabs[4].contextual_help,
|
||||
Some(build_context_clue_string(&ROOT_FOLDERS_CONTEXT_CLUES))
|
||||
radarr_data.main_tabs.tabs[4].contextual_help.unwrap(),
|
||||
&ROOT_FOLDERS_CONTEXT_CLUES
|
||||
);
|
||||
assert_eq!(radarr_data.main_tabs.tabs[4].config, None);
|
||||
|
||||
@@ -167,10 +166,10 @@ mod tests {
|
||||
radarr_data.main_tabs.tabs[5].route,
|
||||
ActiveRadarrBlock::Indexers.into()
|
||||
);
|
||||
assert!(radarr_data.main_tabs.tabs[5].help.is_empty());
|
||||
assert!(radarr_data.main_tabs.tabs[5].contextual_help.is_some());
|
||||
assert_eq!(
|
||||
radarr_data.main_tabs.tabs[5].contextual_help,
|
||||
Some(build_context_clue_string(&INDEXERS_CONTEXT_CLUES))
|
||||
radarr_data.main_tabs.tabs[5].contextual_help.unwrap(),
|
||||
&INDEXERS_CONTEXT_CLUES
|
||||
);
|
||||
assert_eq!(radarr_data.main_tabs.tabs[5].config, None);
|
||||
|
||||
@@ -179,10 +178,10 @@ mod tests {
|
||||
radarr_data.main_tabs.tabs[6].route,
|
||||
ActiveRadarrBlock::System.into()
|
||||
);
|
||||
assert!(radarr_data.main_tabs.tabs[6].help.is_empty());
|
||||
assert!(radarr_data.main_tabs.tabs[6].contextual_help.is_some());
|
||||
assert_eq!(
|
||||
radarr_data.main_tabs.tabs[6].contextual_help,
|
||||
Some(build_context_clue_string(&SYSTEM_CONTEXT_CLUES))
|
||||
radarr_data.main_tabs.tabs[6].contextual_help.unwrap(),
|
||||
&SYSTEM_CONTEXT_CLUES
|
||||
);
|
||||
assert_eq!(radarr_data.main_tabs.tabs[6].config, None);
|
||||
|
||||
@@ -193,13 +192,13 @@ mod tests {
|
||||
radarr_data.movie_info_tabs.tabs[0].route,
|
||||
ActiveRadarrBlock::MovieDetails.into()
|
||||
);
|
||||
assert_str_eq!(
|
||||
radarr_data.movie_info_tabs.tabs[0].help,
|
||||
build_context_clue_string(&MOVIE_DETAILS_CONTEXT_CLUES)
|
||||
);
|
||||
assert!(radarr_data.movie_info_tabs.tabs[0]
|
||||
.contextual_help
|
||||
.is_none());
|
||||
.is_some());
|
||||
assert_eq!(
|
||||
radarr_data.movie_info_tabs.tabs[0].contextual_help.unwrap(),
|
||||
&MOVIE_DETAILS_CONTEXT_CLUES
|
||||
);
|
||||
assert_eq!(radarr_data.movie_info_tabs.tabs[0].config, None);
|
||||
|
||||
assert_str_eq!(radarr_data.movie_info_tabs.tabs[1].title, "History");
|
||||
@@ -207,13 +206,13 @@ mod tests {
|
||||
radarr_data.movie_info_tabs.tabs[1].route,
|
||||
ActiveRadarrBlock::MovieHistory.into()
|
||||
);
|
||||
assert_str_eq!(
|
||||
radarr_data.movie_info_tabs.tabs[1].help,
|
||||
build_context_clue_string(&MOVIE_DETAILS_CONTEXT_CLUES)
|
||||
);
|
||||
assert!(radarr_data.movie_info_tabs.tabs[1]
|
||||
.contextual_help
|
||||
.is_none());
|
||||
.is_some());
|
||||
assert_eq!(
|
||||
radarr_data.movie_info_tabs.tabs[1].contextual_help.unwrap(),
|
||||
&MOVIE_DETAILS_CONTEXT_CLUES
|
||||
);
|
||||
assert_eq!(radarr_data.movie_info_tabs.tabs[1].config, None);
|
||||
|
||||
assert_str_eq!(radarr_data.movie_info_tabs.tabs[2].title, "File");
|
||||
@@ -221,13 +220,13 @@ mod tests {
|
||||
radarr_data.movie_info_tabs.tabs[2].route,
|
||||
ActiveRadarrBlock::FileInfo.into()
|
||||
);
|
||||
assert_str_eq!(
|
||||
radarr_data.movie_info_tabs.tabs[2].help,
|
||||
build_context_clue_string(&MOVIE_DETAILS_CONTEXT_CLUES)
|
||||
);
|
||||
assert!(radarr_data.movie_info_tabs.tabs[2]
|
||||
.contextual_help
|
||||
.is_none());
|
||||
.is_some());
|
||||
assert_eq!(
|
||||
radarr_data.movie_info_tabs.tabs[2].contextual_help.unwrap(),
|
||||
&MOVIE_DETAILS_CONTEXT_CLUES
|
||||
);
|
||||
assert_eq!(radarr_data.movie_info_tabs.tabs[2].config, None);
|
||||
|
||||
assert_str_eq!(radarr_data.movie_info_tabs.tabs[3].title, "Cast");
|
||||
@@ -235,13 +234,13 @@ mod tests {
|
||||
radarr_data.movie_info_tabs.tabs[3].route,
|
||||
ActiveRadarrBlock::Cast.into()
|
||||
);
|
||||
assert_str_eq!(
|
||||
radarr_data.movie_info_tabs.tabs[3].help,
|
||||
build_context_clue_string(&MOVIE_DETAILS_CONTEXT_CLUES)
|
||||
);
|
||||
assert!(radarr_data.movie_info_tabs.tabs[3]
|
||||
.contextual_help
|
||||
.is_none());
|
||||
.is_some());
|
||||
assert_eq!(
|
||||
radarr_data.movie_info_tabs.tabs[3].contextual_help.unwrap(),
|
||||
&MOVIE_DETAILS_CONTEXT_CLUES
|
||||
);
|
||||
assert_eq!(radarr_data.movie_info_tabs.tabs[3].config, None);
|
||||
|
||||
assert_str_eq!(radarr_data.movie_info_tabs.tabs[4].title, "Crew");
|
||||
@@ -249,13 +248,13 @@ mod tests {
|
||||
radarr_data.movie_info_tabs.tabs[4].route,
|
||||
ActiveRadarrBlock::Crew.into()
|
||||
);
|
||||
assert_str_eq!(
|
||||
radarr_data.movie_info_tabs.tabs[4].help,
|
||||
build_context_clue_string(&MOVIE_DETAILS_CONTEXT_CLUES)
|
||||
);
|
||||
assert!(radarr_data.movie_info_tabs.tabs[4]
|
||||
.contextual_help
|
||||
.is_none());
|
||||
.is_some());
|
||||
assert_eq!(
|
||||
radarr_data.movie_info_tabs.tabs[4].contextual_help.unwrap(),
|
||||
&MOVIE_DETAILS_CONTEXT_CLUES
|
||||
);
|
||||
assert_eq!(radarr_data.movie_info_tabs.tabs[4].config, None);
|
||||
|
||||
assert_str_eq!(radarr_data.movie_info_tabs.tabs[5].title, "Manual Search");
|
||||
@@ -263,15 +262,12 @@ mod tests {
|
||||
radarr_data.movie_info_tabs.tabs[5].route,
|
||||
ActiveRadarrBlock::ManualSearch.into()
|
||||
);
|
||||
assert_str_eq!(
|
||||
radarr_data.movie_info_tabs.tabs[5].help,
|
||||
build_context_clue_string(&MANUAL_MOVIE_SEARCH_CONTEXT_CLUES)
|
||||
);
|
||||
assert!(radarr_data.movie_info_tabs.tabs[5]
|
||||
.contextual_help
|
||||
.is_some());
|
||||
assert_eq!(
|
||||
radarr_data.movie_info_tabs.tabs[5].contextual_help,
|
||||
Some(build_context_clue_string(
|
||||
&MANUAL_MOVIE_SEARCH_CONTEXTUAL_CONTEXT_CLUES
|
||||
))
|
||||
radarr_data.movie_info_tabs.tabs[5].contextual_help.unwrap(),
|
||||
&MANUAL_MOVIE_SEARCH_CONTEXT_CLUES
|
||||
);
|
||||
assert_eq!(radarr_data.movie_info_tabs.tabs[5].config, None);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use crate::models::servarr_data::ActiveKeybindingBlock;
|
||||
use crate::models::Route;
|
||||
use pretty_assertions::assert_eq;
|
||||
|
||||
#[test]
|
||||
fn test_from_active_keybinding_block_to_route() {
|
||||
assert_eq!(Route::from(ActiveKeybindingBlock::Help), Route::Keybindings);
|
||||
}
|
||||
}
|
||||
@@ -1,16 +1,12 @@
|
||||
use strum::IntoEnumIterator;
|
||||
|
||||
use super::sonarr_data::{ActiveSonarrBlock, SonarrData};
|
||||
use crate::app::sonarr::sonarr_context_clues::SELECTABLE_EPISODE_DETAILS_CONTEXT_CLUES;
|
||||
use crate::models::sonarr_models::EpisodeFile;
|
||||
use crate::{
|
||||
app::{
|
||||
context_clues::build_context_clue_string,
|
||||
sonarr::sonarr_context_clues::{
|
||||
DETAILS_CONTEXTUAL_CONTEXT_CLUES, EPISODE_DETAILS_CONTEXT_CLUES,
|
||||
MANUAL_EPISODE_SEARCH_CONTEXT_CLUES, MANUAL_SEASON_SEARCH_CONTEXT_CLUES,
|
||||
SEASON_DETAILS_CONTEXTUAL_CONTEXT_CLUES, SEASON_DETAILS_CONTEXT_CLUES,
|
||||
SEASON_HISTORY_CONTEXT_CLUES,
|
||||
},
|
||||
app::sonarr::sonarr_context_clues::{
|
||||
EPISODE_DETAILS_CONTEXT_CLUES, MANUAL_EPISODE_SEARCH_CONTEXT_CLUES,
|
||||
MANUAL_SEASON_SEARCH_CONTEXT_CLUES, SEASON_DETAILS_CONTEXT_CLUES, SEASON_HISTORY_CONTEXT_CLUES,
|
||||
},
|
||||
models::{
|
||||
servarr_data::modals::EditIndexerModal,
|
||||
@@ -282,29 +278,25 @@ impl Default for EpisodeDetailsModal {
|
||||
TabRoute {
|
||||
title: "Details".to_string(),
|
||||
route: ActiveSonarrBlock::EpisodeDetails.into(),
|
||||
help: build_context_clue_string(&EPISODE_DETAILS_CONTEXT_CLUES),
|
||||
contextual_help: None,
|
||||
contextual_help: Some(&EPISODE_DETAILS_CONTEXT_CLUES),
|
||||
config: None,
|
||||
},
|
||||
TabRoute {
|
||||
title: "History".to_string(),
|
||||
route: ActiveSonarrBlock::EpisodeHistory.into(),
|
||||
help: build_context_clue_string(&EPISODE_DETAILS_CONTEXT_CLUES),
|
||||
contextual_help: Some(build_context_clue_string(&DETAILS_CONTEXTUAL_CONTEXT_CLUES)),
|
||||
contextual_help: Some(&SELECTABLE_EPISODE_DETAILS_CONTEXT_CLUES),
|
||||
config: None,
|
||||
},
|
||||
TabRoute {
|
||||
title: "File".to_string(),
|
||||
route: ActiveSonarrBlock::EpisodeFile.into(),
|
||||
help: build_context_clue_string(&EPISODE_DETAILS_CONTEXT_CLUES),
|
||||
contextual_help: None,
|
||||
contextual_help: Some(&EPISODE_DETAILS_CONTEXT_CLUES),
|
||||
config: None,
|
||||
},
|
||||
TabRoute {
|
||||
title: "Manual Search".to_string(),
|
||||
route: ActiveSonarrBlock::ManualEpisodeSearch.into(),
|
||||
help: build_context_clue_string(&MANUAL_EPISODE_SEARCH_CONTEXT_CLUES),
|
||||
contextual_help: Some(build_context_clue_string(&DETAILS_CONTEXTUAL_CONTEXT_CLUES)),
|
||||
contextual_help: Some(&MANUAL_EPISODE_SEARCH_CONTEXT_CLUES),
|
||||
config: None,
|
||||
},
|
||||
]),
|
||||
@@ -333,24 +325,19 @@ impl Default for SeasonDetailsModal {
|
||||
TabRoute {
|
||||
title: "Episodes".to_string(),
|
||||
route: ActiveSonarrBlock::SeasonDetails.into(),
|
||||
help: build_context_clue_string(&SEASON_DETAILS_CONTEXT_CLUES),
|
||||
contextual_help: Some(build_context_clue_string(
|
||||
&SEASON_DETAILS_CONTEXTUAL_CONTEXT_CLUES,
|
||||
)),
|
||||
contextual_help: Some(&SEASON_DETAILS_CONTEXT_CLUES),
|
||||
config: None,
|
||||
},
|
||||
TabRoute {
|
||||
title: "History".to_string(),
|
||||
route: ActiveSonarrBlock::SeasonHistory.into(),
|
||||
help: build_context_clue_string(&SEASON_HISTORY_CONTEXT_CLUES),
|
||||
contextual_help: Some(build_context_clue_string(&DETAILS_CONTEXTUAL_CONTEXT_CLUES)),
|
||||
contextual_help: Some(&SEASON_HISTORY_CONTEXT_CLUES),
|
||||
config: None,
|
||||
},
|
||||
TabRoute {
|
||||
title: "Manual Search".to_string(),
|
||||
route: ActiveSonarrBlock::ManualSeasonSearch.into(),
|
||||
help: build_context_clue_string(&MANUAL_SEASON_SEARCH_CONTEXT_CLUES),
|
||||
contextual_help: Some(build_context_clue_string(&DETAILS_CONTEXTUAL_CONTEXT_CLUES)),
|
||||
contextual_help: Some(&MANUAL_SEASON_SEARCH_CONTEXT_CLUES),
|
||||
config: None,
|
||||
},
|
||||
]),
|
||||
|
||||
@@ -5,12 +5,10 @@ mod tests {
|
||||
use rstest::rstest;
|
||||
use strum::IntoEnumIterator;
|
||||
|
||||
use crate::app::context_clues::build_context_clue_string;
|
||||
use crate::app::sonarr::sonarr_context_clues::{
|
||||
DETAILS_CONTEXTUAL_CONTEXT_CLUES, EPISODE_DETAILS_CONTEXT_CLUES,
|
||||
MANUAL_EPISODE_SEARCH_CONTEXT_CLUES, MANUAL_SEASON_SEARCH_CONTEXT_CLUES,
|
||||
SEASON_DETAILS_CONTEXTUAL_CONTEXT_CLUES, SEASON_DETAILS_CONTEXT_CLUES,
|
||||
SEASON_HISTORY_CONTEXT_CLUES,
|
||||
EPISODE_DETAILS_CONTEXT_CLUES, MANUAL_EPISODE_SEARCH_CONTEXT_CLUES,
|
||||
MANUAL_SEASON_SEARCH_CONTEXT_CLUES, SEASON_DETAILS_CONTEXT_CLUES, SEASON_HISTORY_CONTEXT_CLUES,
|
||||
SELECTABLE_EPISODE_DETAILS_CONTEXT_CLUES,
|
||||
};
|
||||
use crate::models::servarr_data::sonarr::modals::{
|
||||
EditSeriesModal, EpisodeDetailsModal, SeasonDetailsModal,
|
||||
@@ -257,13 +255,15 @@ mod tests {
|
||||
episode_details_modal.episode_details_tabs.tabs[0].route,
|
||||
ActiveSonarrBlock::EpisodeDetails.into()
|
||||
);
|
||||
assert_str_eq!(
|
||||
episode_details_modal.episode_details_tabs.tabs[0].help,
|
||||
build_context_clue_string(&EPISODE_DETAILS_CONTEXT_CLUES)
|
||||
);
|
||||
assert!(episode_details_modal.episode_details_tabs.tabs[0]
|
||||
.contextual_help
|
||||
.is_none());
|
||||
.is_some());
|
||||
assert_eq!(
|
||||
episode_details_modal.episode_details_tabs.tabs[0]
|
||||
.contextual_help
|
||||
.unwrap(),
|
||||
&EPISODE_DETAILS_CONTEXT_CLUES
|
||||
);
|
||||
assert_eq!(
|
||||
episode_details_modal.episode_details_tabs.tabs[0].config,
|
||||
None
|
||||
@@ -277,13 +277,14 @@ mod tests {
|
||||
episode_details_modal.episode_details_tabs.tabs[1].route,
|
||||
ActiveSonarrBlock::EpisodeHistory.into()
|
||||
);
|
||||
assert_str_eq!(
|
||||
episode_details_modal.episode_details_tabs.tabs[1].help,
|
||||
build_context_clue_string(&EPISODE_DETAILS_CONTEXT_CLUES)
|
||||
);
|
||||
assert!(episode_details_modal.episode_details_tabs.tabs[1]
|
||||
.contextual_help
|
||||
.is_some());
|
||||
assert_eq!(
|
||||
episode_details_modal.episode_details_tabs.tabs[1].contextual_help,
|
||||
Some(build_context_clue_string(&DETAILS_CONTEXTUAL_CONTEXT_CLUES))
|
||||
episode_details_modal.episode_details_tabs.tabs[1]
|
||||
.contextual_help
|
||||
.unwrap(),
|
||||
&SELECTABLE_EPISODE_DETAILS_CONTEXT_CLUES
|
||||
);
|
||||
assert_eq!(
|
||||
episode_details_modal.episode_details_tabs.tabs[1].config,
|
||||
@@ -298,13 +299,15 @@ mod tests {
|
||||
episode_details_modal.episode_details_tabs.tabs[2].route,
|
||||
ActiveSonarrBlock::EpisodeFile.into()
|
||||
);
|
||||
assert_str_eq!(
|
||||
episode_details_modal.episode_details_tabs.tabs[2].help,
|
||||
build_context_clue_string(&EPISODE_DETAILS_CONTEXT_CLUES)
|
||||
);
|
||||
assert!(episode_details_modal.episode_details_tabs.tabs[2]
|
||||
.contextual_help
|
||||
.is_none());
|
||||
.is_some());
|
||||
assert_eq!(
|
||||
episode_details_modal.episode_details_tabs.tabs[2]
|
||||
.contextual_help
|
||||
.unwrap(),
|
||||
&EPISODE_DETAILS_CONTEXT_CLUES
|
||||
);
|
||||
assert_eq!(
|
||||
episode_details_modal.episode_details_tabs.tabs[2].config,
|
||||
None
|
||||
@@ -318,13 +321,14 @@ mod tests {
|
||||
episode_details_modal.episode_details_tabs.tabs[3].route,
|
||||
ActiveSonarrBlock::ManualEpisodeSearch.into()
|
||||
);
|
||||
assert_str_eq!(
|
||||
episode_details_modal.episode_details_tabs.tabs[3].help,
|
||||
build_context_clue_string(&MANUAL_EPISODE_SEARCH_CONTEXT_CLUES)
|
||||
);
|
||||
assert!(episode_details_modal.episode_details_tabs.tabs[3]
|
||||
.contextual_help
|
||||
.is_some());
|
||||
assert_eq!(
|
||||
episode_details_modal.episode_details_tabs.tabs[3].contextual_help,
|
||||
Some(build_context_clue_string(&DETAILS_CONTEXTUAL_CONTEXT_CLUES))
|
||||
episode_details_modal.episode_details_tabs.tabs[3]
|
||||
.contextual_help
|
||||
.unwrap(),
|
||||
&MANUAL_EPISODE_SEARCH_CONTEXT_CLUES
|
||||
);
|
||||
assert_eq!(
|
||||
episode_details_modal.episode_details_tabs.tabs[3].config,
|
||||
@@ -352,15 +356,14 @@ mod tests {
|
||||
season_details_modal.season_details_tabs.tabs[0].route,
|
||||
ActiveSonarrBlock::SeasonDetails.into()
|
||||
);
|
||||
assert_str_eq!(
|
||||
season_details_modal.season_details_tabs.tabs[0].help,
|
||||
build_context_clue_string(&SEASON_DETAILS_CONTEXT_CLUES)
|
||||
);
|
||||
assert!(season_details_modal.season_details_tabs.tabs[0]
|
||||
.contextual_help
|
||||
.is_some());
|
||||
assert_eq!(
|
||||
season_details_modal.season_details_tabs.tabs[0].contextual_help,
|
||||
Some(build_context_clue_string(
|
||||
&SEASON_DETAILS_CONTEXTUAL_CONTEXT_CLUES
|
||||
))
|
||||
season_details_modal.season_details_tabs.tabs[0]
|
||||
.contextual_help
|
||||
.unwrap(),
|
||||
&SEASON_DETAILS_CONTEXT_CLUES
|
||||
);
|
||||
assert_eq!(
|
||||
season_details_modal.season_details_tabs.tabs[0].config,
|
||||
@@ -375,13 +378,14 @@ mod tests {
|
||||
season_details_modal.season_details_tabs.tabs[1].route,
|
||||
ActiveSonarrBlock::SeasonHistory.into()
|
||||
);
|
||||
assert_str_eq!(
|
||||
season_details_modal.season_details_tabs.tabs[1].help,
|
||||
build_context_clue_string(&SEASON_HISTORY_CONTEXT_CLUES)
|
||||
);
|
||||
assert!(season_details_modal.season_details_tabs.tabs[1]
|
||||
.contextual_help
|
||||
.is_some());
|
||||
assert_eq!(
|
||||
season_details_modal.season_details_tabs.tabs[1].contextual_help,
|
||||
Some(build_context_clue_string(&DETAILS_CONTEXTUAL_CONTEXT_CLUES))
|
||||
season_details_modal.season_details_tabs.tabs[1]
|
||||
.contextual_help
|
||||
.unwrap(),
|
||||
&SEASON_HISTORY_CONTEXT_CLUES
|
||||
);
|
||||
assert_eq!(
|
||||
season_details_modal.season_details_tabs.tabs[1].config,
|
||||
@@ -396,13 +400,14 @@ mod tests {
|
||||
season_details_modal.season_details_tabs.tabs[2].route,
|
||||
ActiveSonarrBlock::ManualSeasonSearch.into()
|
||||
);
|
||||
assert_str_eq!(
|
||||
season_details_modal.season_details_tabs.tabs[2].help,
|
||||
build_context_clue_string(&MANUAL_SEASON_SEARCH_CONTEXT_CLUES)
|
||||
);
|
||||
assert!(season_details_modal.season_details_tabs.tabs[2]
|
||||
.contextual_help
|
||||
.is_some());
|
||||
assert_eq!(
|
||||
season_details_modal.season_details_tabs.tabs[2].contextual_help,
|
||||
Some(build_context_clue_string(&DETAILS_CONTEXTUAL_CONTEXT_CLUES))
|
||||
season_details_modal.season_details_tabs.tabs[2]
|
||||
.contextual_help
|
||||
.unwrap(),
|
||||
&MANUAL_SEASON_SEARCH_CONTEXT_CLUES
|
||||
);
|
||||
assert_eq!(
|
||||
season_details_modal.season_details_tabs.tabs[2].config,
|
||||
|
||||
@@ -5,8 +5,8 @@ use strum::EnumIter;
|
||||
use crate::{
|
||||
app::{
|
||||
context_clues::{
|
||||
build_context_clue_string, BLOCKLIST_CONTEXT_CLUES, DOWNLOADS_CONTEXT_CLUES,
|
||||
INDEXERS_CONTEXT_CLUES, ROOT_FOLDERS_CONTEXT_CLUES, SYSTEM_CONTEXT_CLUES,
|
||||
BLOCKLIST_CONTEXT_CLUES, DOWNLOADS_CONTEXT_CLUES, INDEXERS_CONTEXT_CLUES,
|
||||
ROOT_FOLDERS_CONTEXT_CLUES, SYSTEM_CONTEXT_CLUES,
|
||||
},
|
||||
sonarr::sonarr_context_clues::{
|
||||
HISTORY_CONTEXT_CLUES, SERIES_CONTEXT_CLUES, SERIES_DETAILS_CONTEXT_CLUES,
|
||||
@@ -130,50 +130,43 @@ impl<'a> Default for SonarrData<'a> {
|
||||
TabRoute {
|
||||
title: "Library".to_string(),
|
||||
route: ActiveSonarrBlock::Series.into(),
|
||||
help: String::new(),
|
||||
contextual_help: Some(build_context_clue_string(&SERIES_CONTEXT_CLUES)),
|
||||
contextual_help: Some(&SERIES_CONTEXT_CLUES),
|
||||
config: None,
|
||||
},
|
||||
TabRoute {
|
||||
title: "Downloads".to_string(),
|
||||
route: ActiveSonarrBlock::Downloads.into(),
|
||||
help: String::new(),
|
||||
contextual_help: Some(build_context_clue_string(&DOWNLOADS_CONTEXT_CLUES)),
|
||||
contextual_help: Some(&DOWNLOADS_CONTEXT_CLUES),
|
||||
config: None,
|
||||
},
|
||||
TabRoute {
|
||||
title: "Blocklist".to_string(),
|
||||
route: ActiveSonarrBlock::Blocklist.into(),
|
||||
help: String::new(),
|
||||
contextual_help: Some(build_context_clue_string(&BLOCKLIST_CONTEXT_CLUES)),
|
||||
contextual_help: Some(&BLOCKLIST_CONTEXT_CLUES),
|
||||
config: None,
|
||||
},
|
||||
TabRoute {
|
||||
title: "History".to_string(),
|
||||
route: ActiveSonarrBlock::History.into(),
|
||||
help: String::new(),
|
||||
contextual_help: Some(build_context_clue_string(&HISTORY_CONTEXT_CLUES)),
|
||||
contextual_help: Some(&HISTORY_CONTEXT_CLUES),
|
||||
config: None,
|
||||
},
|
||||
TabRoute {
|
||||
title: "Root Folders".to_string(),
|
||||
route: ActiveSonarrBlock::RootFolders.into(),
|
||||
help: String::new(),
|
||||
contextual_help: Some(build_context_clue_string(&ROOT_FOLDERS_CONTEXT_CLUES)),
|
||||
contextual_help: Some(&ROOT_FOLDERS_CONTEXT_CLUES),
|
||||
config: None,
|
||||
},
|
||||
TabRoute {
|
||||
title: "Indexers".to_string(),
|
||||
route: ActiveSonarrBlock::Indexers.into(),
|
||||
help: String::new(),
|
||||
contextual_help: Some(build_context_clue_string(&INDEXERS_CONTEXT_CLUES)),
|
||||
contextual_help: Some(&INDEXERS_CONTEXT_CLUES),
|
||||
config: None,
|
||||
},
|
||||
TabRoute {
|
||||
title: "System".to_string(),
|
||||
route: ActiveSonarrBlock::System.into(),
|
||||
help: String::new(),
|
||||
contextual_help: Some(build_context_clue_string(&SYSTEM_CONTEXT_CLUES)),
|
||||
contextual_help: Some(&SYSTEM_CONTEXT_CLUES),
|
||||
config: None,
|
||||
},
|
||||
]),
|
||||
@@ -181,15 +174,13 @@ impl<'a> Default for SonarrData<'a> {
|
||||
TabRoute {
|
||||
title: "Seasons".to_string(),
|
||||
route: ActiveSonarrBlock::SeriesDetails.into(),
|
||||
help: String::new(),
|
||||
contextual_help: Some(build_context_clue_string(&SERIES_DETAILS_CONTEXT_CLUES)),
|
||||
contextual_help: Some(&SERIES_DETAILS_CONTEXT_CLUES),
|
||||
config: None,
|
||||
},
|
||||
TabRoute {
|
||||
title: "History".to_string(),
|
||||
route: ActiveSonarrBlock::SeriesHistory.into(),
|
||||
help: String::new(),
|
||||
contextual_help: Some(build_context_clue_string(&SERIES_HISTORY_CONTEXT_CLUES)),
|
||||
contextual_help: Some(&SERIES_HISTORY_CONTEXT_CLUES),
|
||||
config: None,
|
||||
},
|
||||
]),
|
||||
|
||||
@@ -10,8 +10,8 @@ mod tests {
|
||||
use crate::{
|
||||
app::{
|
||||
context_clues::{
|
||||
build_context_clue_string, BLOCKLIST_CONTEXT_CLUES, DOWNLOADS_CONTEXT_CLUES,
|
||||
INDEXERS_CONTEXT_CLUES, ROOT_FOLDERS_CONTEXT_CLUES, SYSTEM_CONTEXT_CLUES,
|
||||
BLOCKLIST_CONTEXT_CLUES, DOWNLOADS_CONTEXT_CLUES, INDEXERS_CONTEXT_CLUES,
|
||||
ROOT_FOLDERS_CONTEXT_CLUES, SYSTEM_CONTEXT_CLUES,
|
||||
},
|
||||
sonarr::sonarr_context_clues::{
|
||||
HISTORY_CONTEXT_CLUES, SERIES_CONTEXT_CLUES, SERIES_DETAILS_CONTEXT_CLUES,
|
||||
@@ -123,10 +123,10 @@ mod tests {
|
||||
sonarr_data.main_tabs.tabs[0].route,
|
||||
ActiveSonarrBlock::Series.into()
|
||||
);
|
||||
assert!(sonarr_data.main_tabs.tabs[0].help.is_empty());
|
||||
assert!(sonarr_data.main_tabs.tabs[0].contextual_help.is_some());
|
||||
assert_eq!(
|
||||
sonarr_data.main_tabs.tabs[0].contextual_help,
|
||||
Some(build_context_clue_string(&SERIES_CONTEXT_CLUES))
|
||||
sonarr_data.main_tabs.tabs[0].contextual_help.unwrap(),
|
||||
&SERIES_CONTEXT_CLUES
|
||||
);
|
||||
assert_eq!(sonarr_data.main_tabs.tabs[0].config, None);
|
||||
|
||||
@@ -135,10 +135,10 @@ mod tests {
|
||||
sonarr_data.main_tabs.tabs[1].route,
|
||||
ActiveSonarrBlock::Downloads.into()
|
||||
);
|
||||
assert!(sonarr_data.main_tabs.tabs[1].help.is_empty());
|
||||
assert!(sonarr_data.main_tabs.tabs[1].contextual_help.is_some());
|
||||
assert_eq!(
|
||||
sonarr_data.main_tabs.tabs[1].contextual_help,
|
||||
Some(build_context_clue_string(&DOWNLOADS_CONTEXT_CLUES))
|
||||
sonarr_data.main_tabs.tabs[1].contextual_help.unwrap(),
|
||||
&DOWNLOADS_CONTEXT_CLUES
|
||||
);
|
||||
assert_eq!(sonarr_data.main_tabs.tabs[1].config, None);
|
||||
|
||||
@@ -147,10 +147,10 @@ mod tests {
|
||||
sonarr_data.main_tabs.tabs[2].route,
|
||||
ActiveSonarrBlock::Blocklist.into()
|
||||
);
|
||||
assert!(sonarr_data.main_tabs.tabs[2].help.is_empty());
|
||||
assert!(sonarr_data.main_tabs.tabs[2].contextual_help.is_some());
|
||||
assert_eq!(
|
||||
sonarr_data.main_tabs.tabs[2].contextual_help,
|
||||
Some(build_context_clue_string(&BLOCKLIST_CONTEXT_CLUES))
|
||||
sonarr_data.main_tabs.tabs[2].contextual_help.unwrap(),
|
||||
&BLOCKLIST_CONTEXT_CLUES
|
||||
);
|
||||
assert_eq!(sonarr_data.main_tabs.tabs[2].config, None);
|
||||
|
||||
@@ -159,10 +159,10 @@ mod tests {
|
||||
sonarr_data.main_tabs.tabs[3].route,
|
||||
ActiveSonarrBlock::History.into()
|
||||
);
|
||||
assert!(sonarr_data.main_tabs.tabs[3].help.is_empty());
|
||||
assert!(sonarr_data.main_tabs.tabs[3].contextual_help.is_some());
|
||||
assert_eq!(
|
||||
sonarr_data.main_tabs.tabs[3].contextual_help,
|
||||
Some(build_context_clue_string(&HISTORY_CONTEXT_CLUES))
|
||||
sonarr_data.main_tabs.tabs[3].contextual_help.unwrap(),
|
||||
&HISTORY_CONTEXT_CLUES
|
||||
);
|
||||
assert_eq!(sonarr_data.main_tabs.tabs[3].config, None);
|
||||
|
||||
@@ -171,10 +171,10 @@ mod tests {
|
||||
sonarr_data.main_tabs.tabs[4].route,
|
||||
ActiveSonarrBlock::RootFolders.into()
|
||||
);
|
||||
assert!(sonarr_data.main_tabs.tabs[4].help.is_empty());
|
||||
assert!(sonarr_data.main_tabs.tabs[4].contextual_help.is_some());
|
||||
assert_eq!(
|
||||
sonarr_data.main_tabs.tabs[4].contextual_help,
|
||||
Some(build_context_clue_string(&ROOT_FOLDERS_CONTEXT_CLUES))
|
||||
sonarr_data.main_tabs.tabs[4].contextual_help.unwrap(),
|
||||
&ROOT_FOLDERS_CONTEXT_CLUES
|
||||
);
|
||||
assert_eq!(sonarr_data.main_tabs.tabs[4].config, None);
|
||||
|
||||
@@ -183,10 +183,10 @@ mod tests {
|
||||
sonarr_data.main_tabs.tabs[5].route,
|
||||
ActiveSonarrBlock::Indexers.into()
|
||||
);
|
||||
assert!(sonarr_data.main_tabs.tabs[5].help.is_empty());
|
||||
assert!(sonarr_data.main_tabs.tabs[5].contextual_help.is_some());
|
||||
assert_eq!(
|
||||
sonarr_data.main_tabs.tabs[5].contextual_help,
|
||||
Some(build_context_clue_string(&INDEXERS_CONTEXT_CLUES))
|
||||
sonarr_data.main_tabs.tabs[5].contextual_help.unwrap(),
|
||||
&INDEXERS_CONTEXT_CLUES
|
||||
);
|
||||
assert_eq!(sonarr_data.main_tabs.tabs[5].config, None);
|
||||
|
||||
@@ -195,10 +195,10 @@ mod tests {
|
||||
sonarr_data.main_tabs.tabs[6].route,
|
||||
ActiveSonarrBlock::System.into()
|
||||
);
|
||||
assert!(sonarr_data.main_tabs.tabs[6].help.is_empty());
|
||||
assert!(sonarr_data.main_tabs.tabs[6].contextual_help.is_some());
|
||||
assert_eq!(
|
||||
sonarr_data.main_tabs.tabs[6].contextual_help,
|
||||
Some(build_context_clue_string(&SYSTEM_CONTEXT_CLUES))
|
||||
sonarr_data.main_tabs.tabs[6].contextual_help.unwrap(),
|
||||
&SYSTEM_CONTEXT_CLUES
|
||||
);
|
||||
assert_eq!(sonarr_data.main_tabs.tabs[6].config, None);
|
||||
|
||||
@@ -209,10 +209,14 @@ mod tests {
|
||||
sonarr_data.series_info_tabs.tabs[0].route,
|
||||
ActiveSonarrBlock::SeriesDetails.into()
|
||||
);
|
||||
assert!(sonarr_data.series_info_tabs.tabs[0].help.is_empty());
|
||||
assert!(sonarr_data.series_info_tabs.tabs[0]
|
||||
.contextual_help
|
||||
.is_some());
|
||||
assert_eq!(
|
||||
sonarr_data.series_info_tabs.tabs[0].contextual_help,
|
||||
Some(build_context_clue_string(&SERIES_DETAILS_CONTEXT_CLUES))
|
||||
sonarr_data.series_info_tabs.tabs[0]
|
||||
.contextual_help
|
||||
.unwrap(),
|
||||
&SERIES_DETAILS_CONTEXT_CLUES
|
||||
);
|
||||
assert_eq!(sonarr_data.series_info_tabs.tabs[0].config, None);
|
||||
|
||||
@@ -221,10 +225,14 @@ mod tests {
|
||||
sonarr_data.series_info_tabs.tabs[1].route,
|
||||
ActiveSonarrBlock::SeriesHistory.into()
|
||||
);
|
||||
assert!(sonarr_data.series_info_tabs.tabs[1].help.is_empty());
|
||||
assert!(sonarr_data.series_info_tabs.tabs[1]
|
||||
.contextual_help
|
||||
.is_some());
|
||||
assert_eq!(
|
||||
sonarr_data.series_info_tabs.tabs[1].contextual_help,
|
||||
Some(build_context_clue_string(&SERIES_HISTORY_CONTEXT_CLUES))
|
||||
sonarr_data.series_info_tabs.tabs[1]
|
||||
.contextual_help
|
||||
.unwrap(),
|
||||
&SERIES_HISTORY_CONTEXT_CLUES
|
||||
);
|
||||
assert_eq!(sonarr_data.series_info_tabs.tabs[1].config, None);
|
||||
}
|
||||
|
||||
@@ -107,6 +107,13 @@ pub struct EditIndexerParams {
|
||||
pub clear_tags: bool,
|
||||
}
|
||||
|
||||
#[derive(Default, Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
|
||||
pub struct KeybindingItem {
|
||||
pub key: String,
|
||||
pub alt_key: String,
|
||||
pub desc: String,
|
||||
}
|
||||
|
||||
#[derive(Default, Deserialize, Serialize, Debug, Clone, Eq, PartialEq)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct HostConfig {
|
||||
|
||||
Reference in New Issue
Block a user