Implemented the ability to view indexers

This commit is contained in:
2023-08-08 10:50:07 -06:00
parent d32f2b538d
commit 72194fe668
9 changed files with 1362 additions and 1003 deletions
+15 -1
View File
@@ -4,7 +4,7 @@ use strum::IntoEnumIterator;
use crate::app::{App, Route};
use crate::models::radarr_models::{
AddMovieSearchResult, Collection, CollectionMovie, Credit, DiskSpace, DownloadRecord,
AddMovieSearchResult, Collection, CollectionMovie, Credit, DiskSpace, DownloadRecord, Indexer,
MinimumAvailability, Monitor, Movie, MovieHistoryItem, QueueEvent, Release, ReleaseField,
RootFolder, Task,
};
@@ -36,6 +36,7 @@ pub struct RadarrData<'a> {
pub root_folder_list: StatefulList<RootFolder>,
pub selected_block: BlockSelectionState<'a, ActiveRadarrBlock>,
pub downloads: StatefulTable<DownloadRecord>,
pub indexers: StatefulTable<Indexer>,
pub quality_profile_map: BiMap<u64, String>,
pub tags_map: BiMap<u64, String>,
pub movie_details: ScrollableText,
@@ -261,6 +262,7 @@ impl<'a> Default for RadarrData<'a> {
selected_block: BlockSelectionState::default(),
filtered_movies: StatefulTable::default(),
downloads: StatefulTable::default(),
indexers: StatefulTable::default(),
quality_profile_map: BiMap::default(),
tags_map: BiMap::default(),
file_details: String::default(),
@@ -318,6 +320,12 @@ impl<'a> Default for RadarrData<'a> {
help: "",
contextual_help: Some("<a> add | <del> delete | <r> refresh"),
},
TabRoute {
title: "Indexers",
route: ActiveRadarrBlock::Indexers.into(),
help: "",
contextual_help: Some("<r> refresh"),
},
TabRoute {
title: "System",
route: ActiveRadarrBlock::System.into(),
@@ -410,6 +418,7 @@ pub enum ActiveRadarrBlock {
FileInfo,
FilterCollections,
FilterMovies,
Indexers,
ManualSearch,
ManualSearchSortPrompt,
ManualSearchConfirmPrompt,
@@ -573,6 +582,11 @@ impl<'a> App<'a> {
.dispatch_network_event(RadarrEvent::GetDownloads.into())
.await;
}
ActiveRadarrBlock::Indexers => {
self
.dispatch_network_event(RadarrEvent::GetIndexers.into())
.await;
}
ActiveRadarrBlock::System => {
self
.dispatch_network_event(RadarrEvent::GetTasks.into())
+32 -3
View File
@@ -273,6 +273,7 @@ mod tests {
assert_eq!(radarr_data.selected_block, BlockSelectionState::default());
assert!(radarr_data.filtered_movies.items.is_empty());
assert!(radarr_data.downloads.items.is_empty());
assert!(radarr_data.indexers.items.is_empty());
assert!(radarr_data.quality_profile_map.is_empty());
assert!(radarr_data.tags_map.is_empty());
assert!(radarr_data.file_details.is_empty());
@@ -306,7 +307,7 @@ mod tests {
assert!(!radarr_data.delete_movie_files);
assert!(!radarr_data.add_list_exclusion);
assert_eq!(radarr_data.main_tabs.tabs.len(), 5);
assert_eq!(radarr_data.main_tabs.tabs.len(), 6);
assert_str_eq!(radarr_data.main_tabs.tabs[0].title, "Library");
assert_eq!(
@@ -348,14 +349,25 @@ mod tests {
Some("<a> add | <del> delete | <r> refresh")
);
assert_str_eq!(radarr_data.main_tabs.tabs[4].title, "System");
assert_str_eq!(radarr_data.main_tabs.tabs[4].title, "Indexers");
assert_eq!(
radarr_data.main_tabs.tabs[4].route,
ActiveRadarrBlock::System.into()
ActiveRadarrBlock::Indexers.into()
);
assert!(radarr_data.main_tabs.tabs[4].help.is_empty());
assert_eq!(
radarr_data.main_tabs.tabs[4].contextual_help,
Some("<r> refresh")
);
assert_str_eq!(radarr_data.main_tabs.tabs[5].title, "System");
assert_eq!(
radarr_data.main_tabs.tabs[5].route,
ActiveRadarrBlock::System.into()
);
assert!(radarr_data.main_tabs.tabs[5].help.is_empty());
assert_eq!(
radarr_data.main_tabs.tabs[5].contextual_help,
Some("<t> open tasks | <z> open queue | <l> open logs | <u> open updates | <r> refresh")
);
@@ -684,6 +696,23 @@ mod tests {
assert_eq!(app.tick_count, 0);
}
#[tokio::test]
async fn test_dispatch_by_indexers_block() {
let (mut app, mut sync_network_rx) = construct_app_unit();
app
.dispatch_by_radarr_block(&ActiveRadarrBlock::Indexers)
.await;
assert!(app.is_loading);
assert_eq!(
sync_network_rx.recv().await.unwrap(),
RadarrEvent::GetIndexers.into()
);
assert!(!app.data.radarr_data.prompt_confirm);
assert_eq!(app.tick_count, 0);
}
#[tokio::test]
async fn test_dispatch_by_system_block() {
let (mut app, mut sync_network_rx) = construct_app_unit();