feat: Refactor all keybinding tips into a dynamically changing menu that can be invoked via '?' [#32]

This commit is contained in:
Dark-Alex-17 committed 2025-08-12 16:27:34 -06:00
1 parent 1f4870d082
commit 00ab0f27f7
64 files changed
+1627 -903

No files matched your search

+52 -47
View File
@@ -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,