fix(style): Addressed linter complaints on formatting
This commit is contained in:
@@ -31,7 +31,10 @@ pub static SERIES_DETAILS_CONTEXT_CLUES: [ContextClue; 8] = [
|
||||
DEFAULT_KEYBINDINGS.refresh.desc,
|
||||
),
|
||||
(DEFAULT_KEYBINDINGS.edit, DEFAULT_KEYBINDINGS.edit.desc),
|
||||
(DEFAULT_KEYBINDINGS.toggle_monitoring, DEFAULT_KEYBINDINGS.toggle_monitoring.desc),
|
||||
(
|
||||
DEFAULT_KEYBINDINGS.toggle_monitoring,
|
||||
DEFAULT_KEYBINDINGS.toggle_monitoring.desc,
|
||||
),
|
||||
(DEFAULT_KEYBINDINGS.submit, "season details"),
|
||||
(DEFAULT_KEYBINDINGS.search, DEFAULT_KEYBINDINGS.search.desc),
|
||||
(DEFAULT_KEYBINDINGS.update, DEFAULT_KEYBINDINGS.update.desc),
|
||||
@@ -82,7 +85,10 @@ pub static SEASON_DETAILS_CONTEXT_CLUES: [ContextClue; 5] = [
|
||||
DEFAULT_KEYBINDINGS.refresh,
|
||||
DEFAULT_KEYBINDINGS.refresh.desc,
|
||||
),
|
||||
(DEFAULT_KEYBINDINGS.toggle_monitoring, DEFAULT_KEYBINDINGS.toggle_monitoring.desc),
|
||||
(
|
||||
DEFAULT_KEYBINDINGS.toggle_monitoring,
|
||||
DEFAULT_KEYBINDINGS.toggle_monitoring.desc,
|
||||
),
|
||||
(DEFAULT_KEYBINDINGS.search, DEFAULT_KEYBINDINGS.search.desc),
|
||||
(
|
||||
DEFAULT_KEYBINDINGS.auto_search,
|
||||
|
||||
@@ -120,9 +120,7 @@ pub enum SonarrCommand {
|
||||
},
|
||||
#[command(about = "Test all Sonarr indexers")]
|
||||
TestAllIndexers,
|
||||
#[command(
|
||||
about = "Toggle monitoring for the specified episode"
|
||||
)]
|
||||
#[command(about = "Toggle monitoring for the specified episode")]
|
||||
ToggleEpisodeMonitoring {
|
||||
#[arg(
|
||||
long,
|
||||
@@ -280,10 +278,15 @@ impl<'a, 'b> CliCommandHandler<'a, 'b, SonarrCommand> for SonarrCliHandler<'a, '
|
||||
.await?;
|
||||
serde_json::to_string_pretty(&resp)?
|
||||
}
|
||||
SonarrCommand::ToggleSeasonMonitoring {series_id, season_number } => {
|
||||
SonarrCommand::ToggleSeasonMonitoring {
|
||||
series_id,
|
||||
season_number,
|
||||
} => {
|
||||
let resp = self
|
||||
.network
|
||||
.handle_network_event(SonarrEvent::ToggleSeasonMonitoring(Some((series_id, season_number))).into())
|
||||
.handle_network_event(
|
||||
SonarrEvent::ToggleSeasonMonitoring(Some((series_id, season_number))).into(),
|
||||
)
|
||||
.await?;
|
||||
serde_json::to_string_pretty(&resp)?
|
||||
}
|
||||
|
||||
@@ -145,11 +145,8 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn test_toggle_episode_monitoring_requires_episode_id() {
|
||||
let result = Cli::command().try_get_matches_from([
|
||||
"managarr",
|
||||
"sonarr",
|
||||
"toggle-episode-monitoring",
|
||||
]);
|
||||
let result =
|
||||
Cli::command().try_get_matches_from(["managarr", "sonarr", "toggle-episode-monitoring"]);
|
||||
|
||||
assert!(result.is_err());
|
||||
assert_eq!(
|
||||
@@ -710,14 +707,16 @@ mod tests {
|
||||
)))
|
||||
});
|
||||
let app_arc = Arc::new(Mutex::new(App::default()));
|
||||
let toggle_episode_monitoring_command = SonarrCommand::ToggleEpisodeMonitoring {
|
||||
episode_id: 1,
|
||||
};
|
||||
let toggle_episode_monitoring_command =
|
||||
SonarrCommand::ToggleEpisodeMonitoring { episode_id: 1 };
|
||||
|
||||
let result =
|
||||
SonarrCliHandler::with(&app_arc, toggle_episode_monitoring_command, &mut mock_network)
|
||||
.handle()
|
||||
.await;
|
||||
let result = SonarrCliHandler::with(
|
||||
&app_arc,
|
||||
toggle_episode_monitoring_command,
|
||||
&mut mock_network,
|
||||
)
|
||||
.handle()
|
||||
.await;
|
||||
|
||||
assert!(result.is_ok());
|
||||
}
|
||||
@@ -730,7 +729,8 @@ mod tests {
|
||||
mock_network
|
||||
.expect_handle_network_event()
|
||||
.with(eq::<NetworkEvent>(
|
||||
SonarrEvent::ToggleSeasonMonitoring(Some((expected_series_id, expected_season_number))).into(),
|
||||
SonarrEvent::ToggleSeasonMonitoring(Some((expected_series_id, expected_season_number)))
|
||||
.into(),
|
||||
))
|
||||
.times(1)
|
||||
.returning(|_| {
|
||||
@@ -744,10 +744,13 @@ mod tests {
|
||||
season_number: 1,
|
||||
};
|
||||
|
||||
let result =
|
||||
SonarrCliHandler::with(&app_arc, toggle_season_monitoring_command, &mut mock_network)
|
||||
.handle()
|
||||
.await;
|
||||
let result = SonarrCliHandler::with(
|
||||
&app_arc,
|
||||
toggle_season_monitoring_command,
|
||||
&mut mock_network,
|
||||
)
|
||||
.handle()
|
||||
.await;
|
||||
|
||||
assert!(result.is_ok());
|
||||
}
|
||||
|
||||
@@ -331,38 +331,89 @@ mod test_utils {
|
||||
macro_rules! test_handler_delegation {
|
||||
($handler:ident, $base:expr, $active_block:expr) => {
|
||||
let mut app = App::default();
|
||||
app.data.sonarr_data.history.set_items(vec![$crate::models::sonarr_models::SonarrHistoryItem::default()]);
|
||||
app.data.sonarr_data.root_folders.set_items(vec![$crate::models::servarr_models::RootFolder::default()]);
|
||||
app.data.sonarr_data.indexers.set_items(vec![$crate::models::servarr_models::Indexer::default()]);
|
||||
app.data.sonarr_data.blocklist.set_items(vec![$crate::models::sonarr_models::BlocklistItem::default()]);
|
||||
app.data.sonarr_data.add_searched_series = Some($crate::models::stateful_table::StatefulTable::default());
|
||||
app.data.radarr_data.movies.set_items(vec![$crate::models::radarr_models::Movie::default()]);
|
||||
app.data.radarr_data.collections.set_items(vec![$crate::models::radarr_models::Collection::default()]);
|
||||
app.data.radarr_data.collection_movies.set_items(vec![$crate::models::radarr_models::CollectionMovie::default()]);
|
||||
app.data.radarr_data.indexers.set_items(vec![$crate::models::servarr_models::Indexer::default()]);
|
||||
app.data.radarr_data.root_folders.set_items(vec![$crate::models::servarr_models::RootFolder::default()]);
|
||||
app.data.radarr_data.blocklist.set_items(vec![$crate::models::radarr_models::BlocklistItem::default()]);
|
||||
app.data.radarr_data.add_searched_movies = Some($crate::models::stateful_table::StatefulTable::default());
|
||||
let mut movie_details_modal = $crate::models::servarr_data::radarr::modals::MovieDetailsModal::default();
|
||||
app.data.sonarr_data.history.set_items(vec![
|
||||
$crate::models::sonarr_models::SonarrHistoryItem::default(),
|
||||
]);
|
||||
app
|
||||
.data
|
||||
.sonarr_data
|
||||
.root_folders
|
||||
.set_items(vec![$crate::models::servarr_models::RootFolder::default()]);
|
||||
app
|
||||
.data
|
||||
.sonarr_data
|
||||
.indexers
|
||||
.set_items(vec![$crate::models::servarr_models::Indexer::default()]);
|
||||
app
|
||||
.data
|
||||
.sonarr_data
|
||||
.blocklist
|
||||
.set_items(vec![$crate::models::sonarr_models::BlocklistItem::default()]);
|
||||
app.data.sonarr_data.add_searched_series =
|
||||
Some($crate::models::stateful_table::StatefulTable::default());
|
||||
app
|
||||
.data
|
||||
.radarr_data
|
||||
.movies
|
||||
.set_items(vec![$crate::models::radarr_models::Movie::default()]);
|
||||
app
|
||||
.data
|
||||
.radarr_data
|
||||
.collections
|
||||
.set_items(vec![$crate::models::radarr_models::Collection::default()]);
|
||||
app.data.radarr_data.collection_movies.set_items(vec![
|
||||
$crate::models::radarr_models::CollectionMovie::default(),
|
||||
]);
|
||||
app
|
||||
.data
|
||||
.radarr_data
|
||||
.indexers
|
||||
.set_items(vec![$crate::models::servarr_models::Indexer::default()]);
|
||||
app
|
||||
.data
|
||||
.radarr_data
|
||||
.root_folders
|
||||
.set_items(vec![$crate::models::servarr_models::RootFolder::default()]);
|
||||
app
|
||||
.data
|
||||
.radarr_data
|
||||
.blocklist
|
||||
.set_items(vec![$crate::models::radarr_models::BlocklistItem::default()]);
|
||||
app.data.radarr_data.add_searched_movies =
|
||||
Some($crate::models::stateful_table::StatefulTable::default());
|
||||
let mut movie_details_modal =
|
||||
$crate::models::servarr_data::radarr::modals::MovieDetailsModal::default();
|
||||
movie_details_modal.movie_history.set_items(vec![
|
||||
$crate::models::radarr_models::MovieHistoryItem::default(),
|
||||
]);
|
||||
movie_details_modal
|
||||
.movie_history
|
||||
.set_items(vec![$crate::models::radarr_models::MovieHistoryItem::default()]);
|
||||
movie_details_modal.movie_cast.set_items(vec![$crate::models::radarr_models::Credit::default()]);
|
||||
movie_details_modal.movie_crew.set_items(vec![$crate::models::radarr_models::Credit::default()]);
|
||||
movie_details_modal.movie_releases.set_items(vec![$crate::models::radarr_models::RadarrRelease::default()]);
|
||||
.movie_cast
|
||||
.set_items(vec![$crate::models::radarr_models::Credit::default()]);
|
||||
movie_details_modal
|
||||
.movie_crew
|
||||
.set_items(vec![$crate::models::radarr_models::Credit::default()]);
|
||||
movie_details_modal
|
||||
.movie_releases
|
||||
.set_items(vec![$crate::models::radarr_models::RadarrRelease::default()]);
|
||||
app.data.radarr_data.movie_details_modal = Some(movie_details_modal);
|
||||
let mut season_details_modal = $crate::models::servarr_data::sonarr::modals::SeasonDetailsModal::default();
|
||||
season_details_modal.season_history.set_items(vec![$crate::models::sonarr_models::SonarrHistoryItem::default()]);
|
||||
season_details_modal.episode_details_modal = Some($crate::models::servarr_data::sonarr::modals::EpisodeDetailsModal::default());
|
||||
let mut season_details_modal =
|
||||
$crate::models::servarr_data::sonarr::modals::SeasonDetailsModal::default();
|
||||
season_details_modal.season_history.set_items(vec![
|
||||
$crate::models::sonarr_models::SonarrHistoryItem::default(),
|
||||
]);
|
||||
season_details_modal.episode_details_modal =
|
||||
Some($crate::models::servarr_data::sonarr::modals::EpisodeDetailsModal::default());
|
||||
app.data.sonarr_data.season_details_modal = Some(season_details_modal);
|
||||
let mut series_history = $crate::models::stateful_table::StatefulTable::default();
|
||||
series_history.set_items(vec![
|
||||
$crate::models::sonarr_models::SonarrHistoryItem::default(),
|
||||
]);
|
||||
app.data.sonarr_data.series_history = Some(series_history);
|
||||
app.data.sonarr_data.series.set_items(vec![
|
||||
$crate::models::sonarr_models::Series::default(),
|
||||
]);
|
||||
app
|
||||
.data
|
||||
.sonarr_data
|
||||
.series
|
||||
.set_items(vec![$crate::models::sonarr_models::Series::default()]);
|
||||
app.push_navigation_stack($base.into());
|
||||
app.push_navigation_stack($active_block.into());
|
||||
|
||||
|
||||
@@ -577,7 +577,7 @@ mod tests {
|
||||
ActiveSonarrBlock::ManualEpisodeSearchConfirmPrompt,
|
||||
None,
|
||||
)
|
||||
.handle();
|
||||
.handle();
|
||||
|
||||
assert!(app.data.sonarr_data.prompt_confirm);
|
||||
assert_eq!(
|
||||
|
||||
@@ -10,7 +10,10 @@ mod tests {
|
||||
use crate::event::Key;
|
||||
use crate::handlers::sonarr_handlers::library::{series_sorting_options, LibraryHandler};
|
||||
use crate::handlers::KeyEventHandler;
|
||||
use crate::models::servarr_data::sonarr::sonarr_data::{ActiveSonarrBlock, ADD_SERIES_BLOCKS, DELETE_SERIES_BLOCKS, EDIT_SERIES_BLOCKS, EPISODE_DETAILS_BLOCKS, LIBRARY_BLOCKS, SEASON_DETAILS_BLOCKS, SERIES_DETAILS_BLOCKS};
|
||||
use crate::models::servarr_data::sonarr::sonarr_data::{
|
||||
ActiveSonarrBlock, ADD_SERIES_BLOCKS, DELETE_SERIES_BLOCKS, EDIT_SERIES_BLOCKS,
|
||||
EPISODE_DETAILS_BLOCKS, LIBRARY_BLOCKS, SEASON_DETAILS_BLOCKS, SERIES_DETAILS_BLOCKS,
|
||||
};
|
||||
use crate::models::sonarr_models::{Series, SeriesStatus, SeriesType};
|
||||
use crate::test_handler_delegation;
|
||||
|
||||
@@ -556,7 +559,7 @@ mod tests {
|
||||
ActiveSonarrBlock::SeasonHistoryDetails,
|
||||
ActiveSonarrBlock::ManualSeasonSearch,
|
||||
ActiveSonarrBlock::ManualSeasonSearchSortPrompt,
|
||||
ActiveSonarrBlock::DeleteEpisodeFilePrompt,
|
||||
ActiveSonarrBlock::DeleteEpisodeFilePrompt
|
||||
)]
|
||||
active_sonarr_block: ActiveSonarrBlock,
|
||||
) {
|
||||
@@ -576,7 +579,7 @@ mod tests {
|
||||
ActiveSonarrBlock::EpisodeHistoryDetails,
|
||||
ActiveSonarrBlock::ManualEpisodeSearch,
|
||||
ActiveSonarrBlock::ManualEpisodeSearchSortPrompt,
|
||||
ActiveSonarrBlock::DeleteEpisodeFilePrompt,
|
||||
ActiveSonarrBlock::DeleteEpisodeFilePrompt
|
||||
)]
|
||||
active_sonarr_block: ActiveSonarrBlock,
|
||||
) {
|
||||
|
||||
@@ -30,12 +30,12 @@ use crate::handlers::table_handler::TableHandlingConfig;
|
||||
mod add_series_handler;
|
||||
mod delete_series_handler;
|
||||
|
||||
mod episode_details_handler;
|
||||
#[cfg(test)]
|
||||
#[path = "library_handler_tests.rs"]
|
||||
mod library_handler_tests;
|
||||
mod series_details_handler;
|
||||
mod season_details_handler;
|
||||
mod episode_details_handler;
|
||||
mod series_details_handler;
|
||||
|
||||
pub(super) struct LibraryHandler<'a, 'b> {
|
||||
key: Key,
|
||||
|
||||
@@ -343,7 +343,9 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveSonarrBlock> for SeasonDetailsHandler
|
||||
self.app.data.sonarr_data.prompt_confirm_action =
|
||||
Some(SonarrEvent::ToggleEpisodeMonitoring(None));
|
||||
|
||||
self.app.pop_and_push_navigation_stack(self.active_sonarr_block.into());
|
||||
self
|
||||
.app
|
||||
.pop_and_push_navigation_stack(self.active_sonarr_block.into());
|
||||
}
|
||||
ActiveSonarrBlock::SeasonDetails
|
||||
| ActiveSonarrBlock::SeasonHistory
|
||||
@@ -416,7 +418,8 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveSonarrBlock> for SeasonDetailsHandler
|
||||
}
|
||||
}
|
||||
|
||||
pub(in crate::handlers::sonarr_handlers::library) fn releases_sorting_options() -> Vec<SortOption<SonarrRelease>> {
|
||||
pub(in crate::handlers::sonarr_handlers::library) fn releases_sorting_options(
|
||||
) -> Vec<SortOption<SonarrRelease>> {
|
||||
vec![
|
||||
SortOption {
|
||||
name: "Source",
|
||||
|
||||
@@ -559,7 +559,7 @@ mod tests {
|
||||
ActiveSonarrBlock::SeasonDetails,
|
||||
None,
|
||||
)
|
||||
.handle();
|
||||
.handle();
|
||||
|
||||
assert_eq!(
|
||||
app.get_current_route(),
|
||||
@@ -586,9 +586,12 @@ mod tests {
|
||||
ActiveSonarrBlock::SeasonDetails,
|
||||
None,
|
||||
)
|
||||
.handle();
|
||||
.handle();
|
||||
|
||||
assert_eq!(app.get_current_route(), ActiveSonarrBlock::SeasonDetails.into());
|
||||
assert_eq!(
|
||||
app.get_current_route(),
|
||||
ActiveSonarrBlock::SeasonDetails.into()
|
||||
);
|
||||
assert!(!app.data.sonarr_data.prompt_confirm);
|
||||
assert!(app.data.sonarr_data.prompt_confirm_action.is_none());
|
||||
assert!(!app.is_routing);
|
||||
|
||||
@@ -262,7 +262,9 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveSonarrBlock> for SeriesDetailsHandler
|
||||
self.app.data.sonarr_data.prompt_confirm_action =
|
||||
Some(SonarrEvent::ToggleSeasonMonitoring(None));
|
||||
|
||||
self.app.pop_and_push_navigation_stack(self.active_sonarr_block.into());
|
||||
self
|
||||
.app
|
||||
.pop_and_push_navigation_stack(self.active_sonarr_block.into());
|
||||
}
|
||||
_ => (),
|
||||
},
|
||||
|
||||
@@ -388,7 +388,7 @@ mod tests {
|
||||
ActiveSonarrBlock::SeriesDetails,
|
||||
None,
|
||||
)
|
||||
.handle();
|
||||
.handle();
|
||||
|
||||
assert_eq!(
|
||||
app.get_current_route(),
|
||||
@@ -415,9 +415,12 @@ mod tests {
|
||||
ActiveSonarrBlock::SeriesDetails,
|
||||
None,
|
||||
)
|
||||
.handle();
|
||||
.handle();
|
||||
|
||||
assert_eq!(app.get_current_route(), ActiveSonarrBlock::SeriesDetails.into());
|
||||
assert_eq!(
|
||||
app.get_current_route(),
|
||||
ActiveSonarrBlock::SeriesDetails.into()
|
||||
);
|
||||
assert!(!app.data.sonarr_data.prompt_confirm);
|
||||
assert!(app.data.sonarr_data.prompt_confirm_action.is_none());
|
||||
assert!(!app.is_routing);
|
||||
|
||||
@@ -40,7 +40,7 @@ mod tests {
|
||||
}
|
||||
_ => {
|
||||
self.handle_movies_table_events(movie_table_handling_config);
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,11 +1,14 @@
|
||||
#[cfg(test)]
|
||||
pub mod utils {
|
||||
use crate::models::radarr_models::{AddMovieSearchResult, BlocklistItem, Collection, CollectionMovie, Credit, DownloadRecord, Movie, MovieHistoryItem, RadarrRelease};
|
||||
use crate::models::radarr_models::{
|
||||
AddMovieSearchResult, BlocklistItem, Collection, CollectionMovie, Credit, DownloadRecord,
|
||||
Movie, MovieHistoryItem, RadarrRelease,
|
||||
};
|
||||
use crate::models::servarr_data::radarr::modals::MovieDetailsModal;
|
||||
use crate::models::servarr_data::radarr::radarr_data::RadarrData;
|
||||
use crate::models::servarr_models::{Indexer, RootFolder};
|
||||
use crate::models::stateful_table::StatefulTable;
|
||||
use crate::models::{HorizontallyScrollableText, ScrollableText};
|
||||
use crate::models::servarr_models::{Indexer, RootFolder};
|
||||
|
||||
pub fn create_test_radarr_data<'a>() -> RadarrData<'a> {
|
||||
let mut movie_details_modal = MovieDetailsModal {
|
||||
@@ -35,11 +38,21 @@ pub mod utils {
|
||||
..RadarrData::default()
|
||||
};
|
||||
radarr_data.movies.set_items(vec![Movie::default()]);
|
||||
radarr_data.collection_movies.set_items(vec![CollectionMovie::default()]);
|
||||
radarr_data.collections.set_items(vec![Collection::default()]);
|
||||
radarr_data.downloads.set_items(vec![DownloadRecord::default()]);
|
||||
radarr_data.blocklist.set_items(vec![BlocklistItem::default()]);
|
||||
radarr_data.root_folders.set_items(vec![RootFolder::default()]);
|
||||
radarr_data
|
||||
.collection_movies
|
||||
.set_items(vec![CollectionMovie::default()]);
|
||||
radarr_data
|
||||
.collections
|
||||
.set_items(vec![Collection::default()]);
|
||||
radarr_data
|
||||
.downloads
|
||||
.set_items(vec![DownloadRecord::default()]);
|
||||
radarr_data
|
||||
.blocklist
|
||||
.set_items(vec![BlocklistItem::default()]);
|
||||
radarr_data
|
||||
.root_folders
|
||||
.set_items(vec![RootFolder::default()]);
|
||||
radarr_data.indexers.set_items(vec![Indexer::default()]);
|
||||
radarr_data.movie_info_tabs.index = 1;
|
||||
radarr_data
|
||||
|
||||
@@ -1,13 +1,15 @@
|
||||
use strum::IntoEnumIterator;
|
||||
|
||||
use super::sonarr_data::{ActiveSonarrBlock, SonarrData};
|
||||
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,
|
||||
MANUAL_EPISODE_SEARCH_CONTEXT_CLUES, MANUAL_SEASON_SEARCH_CONTEXT_CLUES,
|
||||
SEASON_DETAILS_CONTEXTUAL_CONTEXT_CLUES, SEASON_DETAILS_CONTEXT_CLUES,
|
||||
SEASON_HISTORY_CONTEXT_CLUES,
|
||||
},
|
||||
},
|
||||
models::{
|
||||
@@ -19,8 +21,6 @@ use crate::{
|
||||
HorizontallyScrollableText, ScrollableText, TabRoute, TabState,
|
||||
},
|
||||
};
|
||||
use crate::models::sonarr_models::EpisodeFile;
|
||||
use super::sonarr_data::{ActiveSonarrBlock, SonarrData};
|
||||
|
||||
#[cfg(test)]
|
||||
#[path = "modals_tests.rs"]
|
||||
@@ -330,7 +330,9 @@ impl Default for SeasonDetailsModal {
|
||||
title: "Episodes",
|
||||
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(build_context_clue_string(
|
||||
&SEASON_DETAILS_CONTEXTUAL_CONTEXT_CLUES,
|
||||
)),
|
||||
},
|
||||
TabRoute {
|
||||
title: "History",
|
||||
@@ -341,9 +343,7 @@ impl Default for SeasonDetailsModal {
|
||||
TabRoute {
|
||||
title: "Manual Search",
|
||||
route: ActiveSonarrBlock::ManualSeasonSearch.into(),
|
||||
help: build_context_clue_string(
|
||||
&MANUAL_SEASON_SEARCH_CONTEXT_CLUES,
|
||||
),
|
||||
help: build_context_clue_string(&MANUAL_SEASON_SEARCH_CONTEXT_CLUES),
|
||||
contextual_help: Some(build_context_clue_string(&DETAILS_CONTEXTUAL_CONTEXT_CLUES)),
|
||||
},
|
||||
]),
|
||||
|
||||
@@ -342,7 +342,9 @@ mod tests {
|
||||
);
|
||||
assert_eq!(
|
||||
season_details_modal.season_details_tabs.tabs[0].contextual_help,
|
||||
Some(build_context_clue_string(&SEASON_DETAILS_CONTEXTUAL_CONTEXT_CLUES))
|
||||
Some(build_context_clue_string(
|
||||
&SEASON_DETAILS_CONTEXTUAL_CONTEXT_CLUES
|
||||
))
|
||||
);
|
||||
|
||||
assert_str_eq!(
|
||||
@@ -376,9 +378,7 @@ mod tests {
|
||||
);
|
||||
assert_eq!(
|
||||
season_details_modal.season_details_tabs.tabs[2].contextual_help,
|
||||
Some(build_context_clue_string(
|
||||
&DETAILS_CONTEXTUAL_CONTEXT_CLUES
|
||||
))
|
||||
Some(build_context_clue_string(&DETAILS_CONTEXTUAL_CONTEXT_CLUES))
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -222,7 +222,14 @@ mod tests {
|
||||
}
|
||||
|
||||
mod active_sonarr_block_tests {
|
||||
use crate::models::servarr_data::sonarr::sonarr_data::{ActiveSonarrBlock, ADD_SERIES_BLOCKS, ADD_SERIES_SELECTION_BLOCKS, BLOCKLIST_BLOCKS, DELETE_SERIES_BLOCKS, DELETE_SERIES_SELECTION_BLOCKS, DOWNLOADS_BLOCKS, EDIT_INDEXER_BLOCKS, EDIT_INDEXER_NZB_SELECTION_BLOCKS, EDIT_INDEXER_TORRENT_SELECTION_BLOCKS, EDIT_SERIES_BLOCKS, EDIT_SERIES_SELECTION_BLOCKS, EPISODE_DETAILS_BLOCKS, HISTORY_BLOCKS, INDEXERS_BLOCKS, INDEXER_SETTINGS_BLOCKS, INDEXER_SETTINGS_SELECTION_BLOCKS, LIBRARY_BLOCKS, ROOT_FOLDERS_BLOCKS, SEASON_DETAILS_BLOCKS, SERIES_DETAILS_BLOCKS, SYSTEM_DETAILS_BLOCKS};
|
||||
use crate::models::servarr_data::sonarr::sonarr_data::{
|
||||
ActiveSonarrBlock, ADD_SERIES_BLOCKS, ADD_SERIES_SELECTION_BLOCKS, BLOCKLIST_BLOCKS,
|
||||
DELETE_SERIES_BLOCKS, DELETE_SERIES_SELECTION_BLOCKS, DOWNLOADS_BLOCKS, EDIT_INDEXER_BLOCKS,
|
||||
EDIT_INDEXER_NZB_SELECTION_BLOCKS, EDIT_INDEXER_TORRENT_SELECTION_BLOCKS, EDIT_SERIES_BLOCKS,
|
||||
EDIT_SERIES_SELECTION_BLOCKS, EPISODE_DETAILS_BLOCKS, HISTORY_BLOCKS, INDEXERS_BLOCKS,
|
||||
INDEXER_SETTINGS_BLOCKS, INDEXER_SETTINGS_SELECTION_BLOCKS, LIBRARY_BLOCKS,
|
||||
ROOT_FOLDERS_BLOCKS, SEASON_DETAILS_BLOCKS, SERIES_DETAILS_BLOCKS, SYSTEM_DETAILS_BLOCKS,
|
||||
};
|
||||
|
||||
#[test]
|
||||
fn test_library_blocks_contents() {
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
#[cfg(test)]
|
||||
pub mod utils {
|
||||
use crate::models::servarr_models::{Indexer, RootFolder};
|
||||
use crate::models::sonarr_models::{BlocklistItem, Series};
|
||||
use crate::models::{
|
||||
servarr_data::sonarr::{
|
||||
modals::{EpisodeDetailsModal, SeasonDetailsModal},
|
||||
@@ -9,8 +11,6 @@ pub mod utils {
|
||||
stateful_table::StatefulTable,
|
||||
HorizontallyScrollableText, ScrollableText,
|
||||
};
|
||||
use crate::models::servarr_models::{Indexer, RootFolder};
|
||||
use crate::models::sonarr_models::{BlocklistItem, Series};
|
||||
|
||||
pub fn create_test_sonarr_data<'a>() -> SonarrData<'a> {
|
||||
let mut episode_details_modal = EpisodeDetailsModal {
|
||||
@@ -27,7 +27,9 @@ pub mod utils {
|
||||
season_details_modal
|
||||
.episodes
|
||||
.set_items(vec![Episode::default()]);
|
||||
season_details_modal.season_history.set_items(vec![SonarrHistoryItem::default()]);
|
||||
season_details_modal
|
||||
.season_history
|
||||
.set_items(vec![SonarrHistoryItem::default()]);
|
||||
season_details_modal
|
||||
.season_releases
|
||||
.set_items(vec![SonarrRelease::default()]);
|
||||
@@ -50,9 +52,15 @@ pub mod utils {
|
||||
..SonarrData::default()
|
||||
};
|
||||
sonarr_data.series.set_items(vec![Series::default()]);
|
||||
sonarr_data.history.set_items(vec![SonarrHistoryItem::default()]);
|
||||
sonarr_data.blocklist.set_items(vec![BlocklistItem::default()]);
|
||||
sonarr_data.root_folders.set_items(vec![RootFolder::default()]);
|
||||
sonarr_data
|
||||
.history
|
||||
.set_items(vec![SonarrHistoryItem::default()]);
|
||||
sonarr_data
|
||||
.blocklist
|
||||
.set_items(vec![BlocklistItem::default()]);
|
||||
sonarr_data
|
||||
.root_folders
|
||||
.set_items(vec![RootFolder::default()]);
|
||||
sonarr_data.indexers.set_items(vec![Indexer::default()]);
|
||||
sonarr_data.series_info_tabs.index = 1;
|
||||
sonarr_data
|
||||
|
||||
@@ -18,6 +18,12 @@ mod tests {
|
||||
}
|
||||
});
|
||||
|
||||
assert!(CollectionDetailsUi::accepts((ActiveRadarrBlock::CollectionDetails, Some(ActiveRadarrBlock::CollectionDetails)).into()));
|
||||
assert!(CollectionDetailsUi::accepts(
|
||||
(
|
||||
ActiveRadarrBlock::CollectionDetails,
|
||||
Some(ActiveRadarrBlock::CollectionDetails)
|
||||
)
|
||||
.into()
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,6 +18,12 @@ mod tests {
|
||||
}
|
||||
});
|
||||
|
||||
assert!(EditCollectionUi::accepts((ActiveRadarrBlock::EditCollectionPrompt, Some(ActiveRadarrBlock::CollectionDetails)).into()));
|
||||
assert!(EditCollectionUi::accepts(
|
||||
(
|
||||
ActiveRadarrBlock::EditCollectionPrompt,
|
||||
Some(ActiveRadarrBlock::CollectionDetails)
|
||||
)
|
||||
.into()
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,12 +34,7 @@ impl DrawUi for EditIndexerUi {
|
||||
}
|
||||
|
||||
fn draw(f: &mut Frame<'_>, app: &mut App<'_>, _area: Rect) {
|
||||
draw_popup(
|
||||
f,
|
||||
app,
|
||||
draw_edit_indexer_prompt,
|
||||
Size::WideLargePrompt,
|
||||
);
|
||||
draw_popup(f, app, draw_edit_indexer_prompt, Size::WideLargePrompt);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -61,7 +61,12 @@ impl DrawUi for IndexersUi {
|
||||
f.render_widget(loading_popup, f.area());
|
||||
} else {
|
||||
let popup = {
|
||||
let result = app.data.radarr_data.indexer_test_errors.as_ref().expect("Test result is unpopulated");
|
||||
let result = app
|
||||
.data
|
||||
.radarr_data
|
||||
.indexer_test_errors
|
||||
.as_ref()
|
||||
.expect("Test result is unpopulated");
|
||||
|
||||
if !result.is_empty() {
|
||||
Popup::new(Message::new(result.clone())).size(Size::LargeMessage)
|
||||
|
||||
@@ -13,6 +13,7 @@ use crate::models::radarr_models::AddMovieSearchResult;
|
||||
use crate::models::servarr_data::radarr::modals::AddMovieModal;
|
||||
use crate::models::servarr_data::radarr::radarr_data::{ActiveRadarrBlock, ADD_MOVIE_BLOCKS};
|
||||
use crate::models::{EnumDisplayStyle, Route};
|
||||
use crate::ui::radarr_ui::collections::CollectionsUi;
|
||||
use crate::ui::styles::ManagarrStyle;
|
||||
use crate::ui::utils::{
|
||||
borderless_block, get_width_from_percentage, layout_block, layout_paragraph_borderless,
|
||||
@@ -27,7 +28,6 @@ use crate::ui::widgets::selectable_list::SelectableList;
|
||||
use crate::ui::{draw_popup, DrawUi};
|
||||
use crate::utils::convert_runtime;
|
||||
use crate::{render_selectable_input_box, App};
|
||||
use crate::ui::radarr_ui::collections::CollectionsUi;
|
||||
|
||||
#[cfg(test)]
|
||||
#[path = "add_movie_ui_tests.rs"]
|
||||
@@ -59,12 +59,7 @@ impl DrawUi for AddMovieUi {
|
||||
| ActiveRadarrBlock::AddMovieSelectQualityProfile
|
||||
| ActiveRadarrBlock::AddMovieSelectRootFolder
|
||||
| ActiveRadarrBlock::AddMovieTagsInput => {
|
||||
draw_popup(
|
||||
f,
|
||||
app,
|
||||
draw_confirmation_popup,
|
||||
Size::Medium,
|
||||
);
|
||||
draw_popup(f, app, draw_confirmation_popup, Size::Medium);
|
||||
}
|
||||
ActiveRadarrBlock::AddMovieAlreadyInLibrary => {
|
||||
f.render_widget(
|
||||
|
||||
@@ -12,7 +12,10 @@ use crate::models::servarr_data::radarr::modals::MovieDetailsModal;
|
||||
use crate::models::servarr_data::radarr::radarr_data::{ActiveRadarrBlock, MOVIE_DETAILS_BLOCKS};
|
||||
use crate::models::Route;
|
||||
use crate::ui::styles::ManagarrStyle;
|
||||
use crate::ui::utils::{borderless_block, decorate_peer_style, get_width_from_percentage, layout_block_bottom_border, layout_block_top_border};
|
||||
use crate::ui::utils::{
|
||||
borderless_block, decorate_peer_style, get_width_from_percentage, layout_block_bottom_border,
|
||||
layout_block_top_border,
|
||||
};
|
||||
use crate::ui::widgets::confirmation_prompt::ConfirmationPrompt;
|
||||
use crate::ui::widgets::loading_block::LoadingBlock;
|
||||
use crate::ui::widgets::managarr_table::ManagarrTable;
|
||||
@@ -84,12 +87,7 @@ impl DrawUi for MovieDetailsUi {
|
||||
}
|
||||
};
|
||||
|
||||
draw_popup(
|
||||
f,
|
||||
app,
|
||||
draw_movie_info_popup,
|
||||
Size::Large,
|
||||
);
|
||||
draw_popup(f, app, draw_movie_info_popup, Size::Large);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,7 +6,8 @@ mod tests {
|
||||
use strum::IntoEnumIterator;
|
||||
|
||||
use crate::models::servarr_data::radarr::radarr_data::{ActiveRadarrBlock, MOVIE_DETAILS_BLOCKS};
|
||||
use crate::ui::radarr_ui::library::movie_details_ui::{style_from_download_status, MovieDetailsUi,
|
||||
use crate::ui::radarr_ui::library::movie_details_ui::{
|
||||
style_from_download_status, MovieDetailsUi,
|
||||
};
|
||||
use crate::ui::styles::ManagarrStyle;
|
||||
use crate::ui::DrawUi;
|
||||
|
||||
@@ -34,12 +34,9 @@ impl DrawUi for RootFoldersUi {
|
||||
draw_root_folders(f, app, area);
|
||||
|
||||
match active_radarr_block {
|
||||
ActiveRadarrBlock::AddRootFolderPrompt => draw_popup(
|
||||
f,
|
||||
app,
|
||||
draw_add_root_folder_prompt_box,
|
||||
Size::InputBox,
|
||||
),
|
||||
ActiveRadarrBlock::AddRootFolderPrompt => {
|
||||
draw_popup(f, app, draw_add_root_folder_prompt_box, Size::InputBox)
|
||||
}
|
||||
ActiveRadarrBlock::DeleteRootFolderPrompt => {
|
||||
let prompt = format!(
|
||||
"Do you really want to delete this root folder: \n{}?",
|
||||
|
||||
@@ -10,8 +10,7 @@ use crate::models::radarr_models::RadarrTask;
|
||||
use crate::models::servarr_data::radarr::radarr_data::{ActiveRadarrBlock, SYSTEM_DETAILS_BLOCKS};
|
||||
use crate::models::Route;
|
||||
use crate::ui::radarr_ui::system::{
|
||||
draw_queued_events, extract_task_props, TASK_TABLE_CONSTRAINTS,
|
||||
TASK_TABLE_HEADERS,
|
||||
draw_queued_events, extract_task_props, TASK_TABLE_CONSTRAINTS, TASK_TABLE_HEADERS,
|
||||
};
|
||||
use crate::ui::styles::ManagarrStyle;
|
||||
use crate::ui::utils::{borderless_block, style_log_list_item, title_block};
|
||||
@@ -44,19 +43,11 @@ impl DrawUi for SystemDetailsUi {
|
||||
draw_logs_popup(f, app);
|
||||
}
|
||||
ActiveRadarrBlock::SystemTasks | ActiveRadarrBlock::SystemTaskStartConfirmPrompt => {
|
||||
draw_popup(
|
||||
f,
|
||||
app,
|
||||
draw_tasks_popup,
|
||||
Size::Large,
|
||||
)
|
||||
draw_popup(f, app, draw_tasks_popup, Size::Large)
|
||||
}
|
||||
ActiveRadarrBlock::SystemQueuedEvents => {
|
||||
draw_popup(f, app, draw_queued_events, Size::Medium)
|
||||
}
|
||||
ActiveRadarrBlock::SystemQueuedEvents => draw_popup(
|
||||
f,
|
||||
app,
|
||||
draw_queued_events,
|
||||
Size::Medium,
|
||||
),
|
||||
ActiveRadarrBlock::SystemUpdates => {
|
||||
draw_updates_popup(f, app);
|
||||
}
|
||||
|
||||
@@ -34,12 +34,7 @@ impl DrawUi for EditIndexerUi {
|
||||
}
|
||||
|
||||
fn draw(f: &mut Frame<'_>, app: &mut App<'_>, _area: Rect) {
|
||||
draw_popup(
|
||||
f,
|
||||
app,
|
||||
draw_edit_indexer_prompt,
|
||||
Size::WideLargePrompt,
|
||||
);
|
||||
draw_popup(f, app, draw_edit_indexer_prompt, Size::WideLargePrompt);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -34,12 +34,7 @@ impl DrawUi for IndexerSettingsUi {
|
||||
}
|
||||
|
||||
fn draw(f: &mut Frame<'_>, app: &mut App<'_>, _area: Rect) {
|
||||
draw_popup(
|
||||
f,
|
||||
app,
|
||||
draw_edit_indexer_settings_prompt,
|
||||
Size::LargePrompt,
|
||||
);
|
||||
draw_popup(f, app, draw_edit_indexer_settings_prompt, Size::LargePrompt);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -57,11 +57,16 @@ impl DrawUi for IndexersUi {
|
||||
app.is_loading || app.data.sonarr_data.indexer_test_errors.is_none(),
|
||||
title_block("Testing Indexer"),
|
||||
))
|
||||
.size(Size::LargeMessage);
|
||||
.size(Size::LargeMessage);
|
||||
f.render_widget(loading_popup, f.area());
|
||||
} else {
|
||||
let popup = {
|
||||
let result = app.data.sonarr_data.indexer_test_errors.as_ref().expect("Test result is unpopulated");
|
||||
let result = app
|
||||
.data
|
||||
.sonarr_data
|
||||
.indexer_test_errors
|
||||
.as_ref()
|
||||
.expect("Test result is unpopulated");
|
||||
|
||||
if !result.is_empty() {
|
||||
Popup::new(Message::new(result.clone())).size(Size::LargeMessage)
|
||||
@@ -99,7 +104,7 @@ impl DrawUi for IndexersUi {
|
||||
);
|
||||
}
|
||||
_ => (),
|
||||
}
|
||||
},
|
||||
_ => (),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,12 +28,7 @@ impl DrawUi for TestAllIndexersUi {
|
||||
}
|
||||
|
||||
fn draw(f: &mut Frame<'_>, app: &mut App<'_>, _area: Rect) {
|
||||
draw_popup(
|
||||
f,
|
||||
app,
|
||||
draw_test_all_indexers_test_results,
|
||||
Size::Large,
|
||||
);
|
||||
draw_popup(f, app, draw_test_all_indexers_test_results, Size::Large);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -49,23 +49,22 @@ impl DrawUi for EditSeriesUi {
|
||||
}
|
||||
}
|
||||
|
||||
let draw_edit_series_prompt =
|
||||
|f: &mut Frame<'_>, app: &mut App<'_>, prompt_area: Rect| {
|
||||
draw_edit_series_confirmation_prompt(f, app, prompt_area);
|
||||
let draw_edit_series_prompt = |f: &mut Frame<'_>, app: &mut App<'_>, prompt_area: Rect| {
|
||||
draw_edit_series_confirmation_prompt(f, app, prompt_area);
|
||||
|
||||
match active_sonarr_block {
|
||||
ActiveSonarrBlock::EditSeriesSelectSeriesType => {
|
||||
draw_edit_series_select_series_type_popup(f, app);
|
||||
}
|
||||
ActiveSonarrBlock::EditSeriesSelectQualityProfile => {
|
||||
draw_edit_series_select_quality_profile_popup(f, app);
|
||||
}
|
||||
ActiveSonarrBlock::EditSeriesSelectLanguageProfile => {
|
||||
draw_edit_series_select_language_profile_popup(f, app);
|
||||
}
|
||||
_ => (),
|
||||
match active_sonarr_block {
|
||||
ActiveSonarrBlock::EditSeriesSelectSeriesType => {
|
||||
draw_edit_series_select_series_type_popup(f, app);
|
||||
}
|
||||
};
|
||||
ActiveSonarrBlock::EditSeriesSelectQualityProfile => {
|
||||
draw_edit_series_select_quality_profile_popup(f, app);
|
||||
}
|
||||
ActiveSonarrBlock::EditSeriesSelectLanguageProfile => {
|
||||
draw_edit_series_select_language_profile_popup(f, app);
|
||||
}
|
||||
_ => (),
|
||||
}
|
||||
};
|
||||
|
||||
draw_popup(f, app, draw_edit_series_prompt, Size::Long);
|
||||
}
|
||||
|
||||
@@ -1,18 +1,20 @@
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use crate::models::servarr_data::sonarr::sonarr_data::{ActiveSonarrBlock, EPISODE_DETAILS_BLOCKS};
|
||||
use crate::ui::sonarr_ui::library::episode_details_ui::EpisodeDetailsUi;
|
||||
use crate::ui::DrawUi;
|
||||
use strum::IntoEnumIterator;
|
||||
use crate::models::servarr_data::sonarr::sonarr_data::{
|
||||
ActiveSonarrBlock, EPISODE_DETAILS_BLOCKS,
|
||||
};
|
||||
use crate::ui::sonarr_ui::library::episode_details_ui::EpisodeDetailsUi;
|
||||
use crate::ui::DrawUi;
|
||||
use strum::IntoEnumIterator;
|
||||
|
||||
#[test]
|
||||
fn test_episode_details_ui_accepts() {
|
||||
ActiveSonarrBlock::iter().for_each(|active_sonarr_block| {
|
||||
if EPISODE_DETAILS_BLOCKS.contains(&active_sonarr_block) {
|
||||
assert!(EpisodeDetailsUi::accepts(active_sonarr_block.into()));
|
||||
} else {
|
||||
assert!(!EpisodeDetailsUi::accepts(active_sonarr_block.into()));
|
||||
}
|
||||
});
|
||||
}
|
||||
#[test]
|
||||
fn test_episode_details_ui_accepts() {
|
||||
ActiveSonarrBlock::iter().for_each(|active_sonarr_block| {
|
||||
if EPISODE_DETAILS_BLOCKS.contains(&active_sonarr_block) {
|
||||
assert!(EpisodeDetailsUi::accepts(active_sonarr_block.into()));
|
||||
} else {
|
||||
assert!(!EpisodeDetailsUi::accepts(active_sonarr_block.into()));
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -1,22 +1,24 @@
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use strum::IntoEnumIterator;
|
||||
use strum::IntoEnumIterator;
|
||||
|
||||
use crate::models::servarr_data::sonarr::sonarr_data::{ActiveSonarrBlock, EPISODE_DETAILS_BLOCKS, SEASON_DETAILS_BLOCKS};
|
||||
use crate::ui::sonarr_ui::library::season_details_ui::SeasonDetailsUi;
|
||||
use crate::ui::DrawUi;
|
||||
use crate::models::servarr_data::sonarr::sonarr_data::{
|
||||
ActiveSonarrBlock, EPISODE_DETAILS_BLOCKS, SEASON_DETAILS_BLOCKS,
|
||||
};
|
||||
use crate::ui::sonarr_ui::library::season_details_ui::SeasonDetailsUi;
|
||||
use crate::ui::DrawUi;
|
||||
|
||||
#[test]
|
||||
fn test_season_details_ui_accepts() {
|
||||
let mut blocks = SEASON_DETAILS_BLOCKS.clone().to_vec();
|
||||
blocks.extend(EPISODE_DETAILS_BLOCKS);
|
||||
#[test]
|
||||
fn test_season_details_ui_accepts() {
|
||||
let mut blocks = SEASON_DETAILS_BLOCKS.clone().to_vec();
|
||||
blocks.extend(EPISODE_DETAILS_BLOCKS);
|
||||
|
||||
ActiveSonarrBlock::iter().for_each(|active_sonarr_block| {
|
||||
if blocks.contains(&active_sonarr_block) {
|
||||
assert!(SeasonDetailsUi::accepts(active_sonarr_block.into()));
|
||||
} else {
|
||||
assert!(!SeasonDetailsUi::accepts(active_sonarr_block.into()));
|
||||
}
|
||||
});
|
||||
}
|
||||
ActiveSonarrBlock::iter().for_each(|active_sonarr_block| {
|
||||
if blocks.contains(&active_sonarr_block) {
|
||||
assert!(SeasonDetailsUi::accepts(active_sonarr_block.into()));
|
||||
} else {
|
||||
assert!(!SeasonDetailsUi::accepts(active_sonarr_block.into()));
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,9 @@
|
||||
mod tests {
|
||||
use strum::IntoEnumIterator;
|
||||
|
||||
use crate::models::servarr_data::sonarr::sonarr_data::{ActiveSonarrBlock, EPISODE_DETAILS_BLOCKS, SEASON_DETAILS_BLOCKS, SERIES_DETAILS_BLOCKS};
|
||||
use crate::models::servarr_data::sonarr::sonarr_data::{
|
||||
ActiveSonarrBlock, EPISODE_DETAILS_BLOCKS, SEASON_DETAILS_BLOCKS, SERIES_DETAILS_BLOCKS,
|
||||
};
|
||||
use crate::ui::sonarr_ui::library::series_details_ui::SeriesDetailsUi;
|
||||
use crate::ui::DrawUi;
|
||||
|
||||
|
||||
@@ -34,12 +34,9 @@ impl DrawUi for RootFoldersUi {
|
||||
draw_root_folders(f, app, area);
|
||||
|
||||
match active_sonarr_block {
|
||||
ActiveSonarrBlock::AddRootFolderPrompt => draw_popup(
|
||||
f,
|
||||
app,
|
||||
draw_add_root_folder_prompt_box,
|
||||
Size::InputBox,
|
||||
),
|
||||
ActiveSonarrBlock::AddRootFolderPrompt => {
|
||||
draw_popup(f, app, draw_add_root_folder_prompt_box, Size::InputBox)
|
||||
}
|
||||
ActiveSonarrBlock::DeleteRootFolderPrompt => {
|
||||
let prompt = format!(
|
||||
"Do you really want to delete this root folder: \n{}?",
|
||||
|
||||
@@ -10,8 +10,7 @@ use crate::models::servarr_data::sonarr::sonarr_data::{ActiveSonarrBlock, SYSTEM
|
||||
use crate::models::sonarr_models::SonarrTask;
|
||||
use crate::models::Route;
|
||||
use crate::ui::sonarr_ui::system::{
|
||||
draw_queued_events, extract_task_props, TASK_TABLE_CONSTRAINTS,
|
||||
TASK_TABLE_HEADERS,
|
||||
draw_queued_events, extract_task_props, TASK_TABLE_CONSTRAINTS, TASK_TABLE_HEADERS,
|
||||
};
|
||||
use crate::ui::styles::ManagarrStyle;
|
||||
use crate::ui::utils::{borderless_block, style_log_list_item, title_block};
|
||||
@@ -44,19 +43,11 @@ impl DrawUi for SystemDetailsUi {
|
||||
draw_logs_popup(f, app);
|
||||
}
|
||||
ActiveSonarrBlock::SystemTasks | ActiveSonarrBlock::SystemTaskStartConfirmPrompt => {
|
||||
draw_popup(
|
||||
f,
|
||||
app,
|
||||
draw_tasks_popup,
|
||||
Size::Large,
|
||||
)
|
||||
draw_popup(f, app, draw_tasks_popup, Size::Large)
|
||||
}
|
||||
ActiveSonarrBlock::SystemQueuedEvents => {
|
||||
draw_popup(f, app, draw_queued_events, Size::Medium)
|
||||
}
|
||||
ActiveSonarrBlock::SystemQueuedEvents => draw_popup(
|
||||
f,
|
||||
app,
|
||||
draw_queued_events,
|
||||
Size::Medium,
|
||||
),
|
||||
ActiveSonarrBlock::SystemUpdates => {
|
||||
draw_updates_popup(f, app);
|
||||
}
|
||||
|
||||
@@ -20,10 +20,7 @@ mod test {
|
||||
|
||||
#[test]
|
||||
fn test_style_indeterminate() {
|
||||
assert_eq!(
|
||||
Style::new().indeterminate(),
|
||||
Style::new().fg(COLOR_ORANGE)
|
||||
);
|
||||
assert_eq!(Style::new().indeterminate(), Style::new().fg(COLOR_ORANGE));
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
@@ -1,12 +1,17 @@
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use crate::ui::utils::{
|
||||
borderless_block, centered_rect, convert_to_minutes_hours_days, decorate_peer_style,
|
||||
get_width_from_percentage, layout_block, layout_block_bottom_border, layout_block_top_border,
|
||||
layout_block_top_border_with_title, layout_block_with_title, logo_block, style_block_highlight,
|
||||
style_log_list_item, title_block, title_block_centered, title_style,
|
||||
};
|
||||
use pretty_assertions::{assert_eq, assert_str_eq};
|
||||
use ratatui::layout::{Alignment, Rect};
|
||||
use ratatui::style::{Color, Modifier, Style, Stylize};
|
||||
use ratatui::text::{Span, Text};
|
||||
use ratatui::widgets::{Block, BorderType, Borders, ListItem};
|
||||
use rstest::rstest;
|
||||
use crate::ui::utils::{borderless_block, centered_rect, convert_to_minutes_hours_days, decorate_peer_style, get_width_from_percentage, layout_block, layout_block_bottom_border, layout_block_top_border, layout_block_top_border_with_title, layout_block_with_title, logo_block, style_block_highlight, style_log_list_item, title_block, title_block_centered, title_style};
|
||||
|
||||
#[test]
|
||||
fn test_layout_block() {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
use derive_setters::Setters;
|
||||
use crate::ui::styles::ManagarrStyle;
|
||||
use crate::ui::utils::{borderless_block, layout_block, style_block_highlight};
|
||||
use derive_setters::Setters;
|
||||
use ratatui::buffer::Buffer;
|
||||
use ratatui::layout::{Constraint, Layout, Rect};
|
||||
use ratatui::prelude::Text;
|
||||
|
||||
@@ -3,12 +3,12 @@ use crate::ui::styles::ManagarrStyle;
|
||||
use crate::ui::utils::{layout_paragraph_borderless, title_block_centered};
|
||||
use crate::ui::widgets::button::Button;
|
||||
use crate::ui::widgets::checkbox::Checkbox;
|
||||
use derive_setters::Setters;
|
||||
use ratatui::buffer::Buffer;
|
||||
use ratatui::layout::{Constraint, Flex, Layout, Rect};
|
||||
use ratatui::text::Text;
|
||||
use ratatui::widgets::{Paragraph, Widget};
|
||||
use std::iter;
|
||||
use derive_setters::Setters;
|
||||
|
||||
#[cfg(test)]
|
||||
#[path = "confirmation_prompt_tests.rs"]
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
use super::input_box_popup::InputBoxPopup;
|
||||
use super::message::Message;
|
||||
use super::popup::Size;
|
||||
use crate::models::stateful_table::StatefulTable;
|
||||
use crate::ui::styles::ManagarrStyle;
|
||||
use crate::ui::utils::{centered_rect, layout_block_top_border, title_block_centered};
|
||||
@@ -5,6 +8,7 @@ use crate::ui::widgets::loading_block::LoadingBlock;
|
||||
use crate::ui::widgets::popup::Popup;
|
||||
use crate::ui::widgets::selectable_list::SelectableList;
|
||||
use crate::ui::HIGHLIGHT_SYMBOL;
|
||||
use derive_setters::Setters;
|
||||
use ratatui::buffer::Buffer;
|
||||
use ratatui::layout::{Alignment, Constraint, Layout, Position, Rect};
|
||||
use ratatui::prelude::{Style, Stylize, Text};
|
||||
@@ -12,10 +16,6 @@ use ratatui::widgets::{Block, ListItem, Paragraph, Row, StatefulWidget, Table, W
|
||||
use ratatui::Frame;
|
||||
use std::fmt::Debug;
|
||||
use std::sync::atomic::Ordering;
|
||||
use derive_setters::Setters;
|
||||
use super::input_box_popup::InputBoxPopup;
|
||||
use super::message::Message;
|
||||
use super::popup::Size;
|
||||
|
||||
#[cfg(test)]
|
||||
#[path = "managarr_table_tests.rs"]
|
||||
|
||||
@@ -2,9 +2,9 @@ pub(super) mod button;
|
||||
pub(super) mod checkbox;
|
||||
pub(super) mod confirmation_prompt;
|
||||
pub(super) mod input_box;
|
||||
mod input_box_popup;
|
||||
pub(super) mod loading_block;
|
||||
pub(super) mod managarr_table;
|
||||
pub(super) mod message;
|
||||
pub(super) mod popup;
|
||||
pub(super) mod selectable_list;
|
||||
mod input_box_popup;
|
||||
|
||||
Reference in New Issue
Block a user