fix(style): Addressed linter complaints on formatting

This commit is contained in:
2024-12-13 19:48:22 -07:00
parent 682bc91855
commit 412cb2408e
51 changed files with 343 additions and 259 deletions
+8 -2
View File
@@ -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,
+8 -5
View File
@@ -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)?
}
+20 -17
View File
@@ -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());
}
+75 -24
View File
@@ -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,
) {
+2 -2
View File
@@ -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);
+1 -1
View File
@@ -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
+9 -9
View File
@@ -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()
));
}
}
+1 -6
View File
@@ -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);
}
}
+6 -1
View File
@@ -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)
+2 -7
View File
@@ -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(
+5 -7
View File
@@ -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;
+3 -6
View File
@@ -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{}?",
+5 -14
View File
@@ -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);
}
+1 -6
View File
@@ -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);
}
}
+8 -3
View File
@@ -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);
}
}
+14 -15
View File
@@ -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;
+3 -6
View File
@@ -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{}?",
+5 -14
View File
@@ -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);
}
+1 -4
View File
@@ -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]
+6 -1
View File
@@ -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 -1
View File
@@ -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;
+1 -1
View File
@@ -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"]
+4 -4
View File
@@ -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"]
+1 -1
View File
@@ -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;