feat(network): Support for listing disk space on a Sonarr instance
This commit is contained in:
@@ -8,7 +8,7 @@ use urlencoding::encode;
|
||||
|
||||
use crate::models::radarr_models::{
|
||||
AddMovieBody, AddMovieSearchResult, AddOptions, BlocklistResponse, Collection, CollectionMovie,
|
||||
CommandBody, Credit, CreditType, DeleteMovieParams, DiskSpace, DownloadRecord, DownloadsResponse,
|
||||
CommandBody, Credit, CreditType, DeleteMovieParams, DownloadRecord, DownloadsResponse,
|
||||
EditCollectionParams, EditIndexerParams, EditMovieParams, IndexerSettings, IndexerTestResult,
|
||||
Movie, MovieCommandBody, MovieHistoryItem, RadarrSerdeable, ReleaseDownloadBody, SystemStatus,
|
||||
Task, TaskName, Update,
|
||||
@@ -19,8 +19,8 @@ use crate::models::servarr_data::radarr::modals::{
|
||||
};
|
||||
use crate::models::servarr_data::radarr::radarr_data::ActiveRadarrBlock;
|
||||
use crate::models::servarr_models::{
|
||||
AddRootFolderBody, HostConfig, Indexer, LogResponse, QualityProfile, QueueEvent, Release,
|
||||
RootFolder, SecurityConfig, Tag,
|
||||
AddRootFolderBody, DiskSpace, HostConfig, Indexer, LogResponse, QualityProfile, QueueEvent,
|
||||
Release, RootFolder, SecurityConfig, Tag,
|
||||
};
|
||||
use crate::models::stateful_table::StatefulTable;
|
||||
use crate::models::{HorizontallyScrollableText, Route, Scrollable, ScrollableText};
|
||||
@@ -61,7 +61,7 @@ pub enum RadarrEvent {
|
||||
GetMovieDetails(Option<i64>),
|
||||
GetMovieHistory(Option<i64>),
|
||||
GetMovies,
|
||||
GetOverview,
|
||||
GetDiskSpace,
|
||||
GetQualityProfiles,
|
||||
GetQueuedEvents,
|
||||
GetReleases(Option<i64>),
|
||||
@@ -107,7 +107,7 @@ impl NetworkResource for RadarrEvent {
|
||||
RadarrEvent::SearchNewMovie(_) => "/movie/lookup",
|
||||
RadarrEvent::GetMovieCredits(_) => "/credit",
|
||||
RadarrEvent::GetMovieHistory(_) => "/history/movie",
|
||||
RadarrEvent::GetOverview => "/diskspace",
|
||||
RadarrEvent::GetDiskSpace => "/diskspace",
|
||||
RadarrEvent::GetQualityProfiles => "/qualityprofile",
|
||||
RadarrEvent::GetReleases(_) | RadarrEvent::DownloadRelease(_) => "/release",
|
||||
RadarrEvent::AddRootFolder(_)
|
||||
@@ -220,7 +220,7 @@ impl<'a, 'b> Network<'a, 'b> {
|
||||
.await
|
||||
.map(RadarrSerdeable::from),
|
||||
RadarrEvent::GetMovies => self.get_movies().await.map(RadarrSerdeable::from),
|
||||
RadarrEvent::GetOverview => self.get_diskspace().await.map(RadarrSerdeable::from),
|
||||
RadarrEvent::GetDiskSpace => self.get_radarr_diskspace().await.map(RadarrSerdeable::from),
|
||||
RadarrEvent::GetQualityProfiles => self
|
||||
.get_radarr_quality_profiles()
|
||||
.await
|
||||
@@ -1368,9 +1368,9 @@ impl<'a, 'b> Network<'a, 'b> {
|
||||
.await
|
||||
}
|
||||
|
||||
async fn get_diskspace(&mut self) -> Result<Vec<DiskSpace>> {
|
||||
async fn get_radarr_diskspace(&mut self) -> Result<Vec<DiskSpace>> {
|
||||
info!("Fetching Radarr disk space");
|
||||
let event = RadarrEvent::GetOverview;
|
||||
let event = RadarrEvent::GetDiskSpace;
|
||||
|
||||
let request_props = self
|
||||
.request_props_from(event, RequestMethod::Get, None::<()>, None, None)
|
||||
|
||||
@@ -222,7 +222,7 @@ mod test {
|
||||
#[case(RadarrEvent::SearchNewMovie(None), "/movie/lookup")]
|
||||
#[case(RadarrEvent::GetMovieCredits(None), "/credit")]
|
||||
#[case(RadarrEvent::GetMovieHistory(None), "/history/movie")]
|
||||
#[case(RadarrEvent::GetOverview, "/diskspace")]
|
||||
#[case(RadarrEvent::GetDiskSpace, "/diskspace")]
|
||||
#[case(RadarrEvent::GetQualityProfiles, "/qualityprofile")]
|
||||
#[case(RadarrEvent::GetStatus, "/system/status")]
|
||||
#[case(RadarrEvent::GetTasks, "/system/task")]
|
||||
@@ -262,7 +262,7 @@ mod test {
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_handle_get_diskspace_event() {
|
||||
async fn test_handle_get_radarr_diskspace_event() {
|
||||
let (async_server, app_arc, _server) = mock_servarr_api(
|
||||
RequestMethod::Get,
|
||||
None,
|
||||
@@ -277,7 +277,7 @@ mod test {
|
||||
}
|
||||
])),
|
||||
None,
|
||||
RadarrEvent::GetOverview,
|
||||
RadarrEvent::GetDiskSpace,
|
||||
None,
|
||||
None,
|
||||
)
|
||||
@@ -295,7 +295,7 @@ mod test {
|
||||
];
|
||||
|
||||
if let RadarrSerdeable::DiskSpaces(disk_space) = network
|
||||
.handle_radarr_event(RadarrEvent::GetOverview)
|
||||
.handle_radarr_event(RadarrEvent::GetDiskSpace)
|
||||
.await
|
||||
.unwrap()
|
||||
{
|
||||
|
||||
@@ -10,8 +10,8 @@ use crate::{
|
||||
sonarr_data::ActiveSonarrBlock,
|
||||
},
|
||||
servarr_models::{
|
||||
AddRootFolderBody, HostConfig, Indexer, LogResponse, QualityProfile, QueueEvent, Release,
|
||||
RootFolder, SecurityConfig, Tag,
|
||||
AddRootFolderBody, DiskSpace, HostConfig, Indexer, LogResponse, QualityProfile, QueueEvent,
|
||||
Release, RootFolder, SecurityConfig, Tag,
|
||||
},
|
||||
sonarr_models::{
|
||||
BlocklistResponse, DownloadRecord, DownloadsResponse, Episode, IndexerSettings, Series,
|
||||
@@ -49,6 +49,7 @@ pub enum SonarrEvent {
|
||||
GetEpisodes(Option<i64>),
|
||||
GetEpisodeHistory(Option<i64>),
|
||||
GetLogs(Option<u64>),
|
||||
GetDiskSpace,
|
||||
GetQualityProfiles,
|
||||
GetQueuedEvents,
|
||||
GetRootFolders,
|
||||
@@ -77,6 +78,7 @@ impl NetworkResource for SonarrEvent {
|
||||
SonarrEvent::GetHostConfig | SonarrEvent::GetSecurityConfig => "/config/host",
|
||||
SonarrEvent::GetIndexers | SonarrEvent::DeleteIndexer(_) => "/indexer",
|
||||
SonarrEvent::GetLogs(_) => "/log",
|
||||
SonarrEvent::GetDiskSpace => "/diskspace",
|
||||
SonarrEvent::GetQualityProfiles => "/qualityprofile",
|
||||
SonarrEvent::GetQueuedEvents => "/command",
|
||||
SonarrEvent::GetRootFolders
|
||||
@@ -163,6 +165,7 @@ impl<'a, 'b> Network<'a, 'b> {
|
||||
.get_sonarr_logs(events)
|
||||
.await
|
||||
.map(SonarrSerdeable::from),
|
||||
SonarrEvent::GetDiskSpace => self.get_sonarr_diskspace().await.map(SonarrSerdeable::from),
|
||||
SonarrEvent::GetQualityProfiles => self
|
||||
.get_sonarr_quality_profiles()
|
||||
.await
|
||||
@@ -843,6 +846,21 @@ impl<'a, 'b> Network<'a, 'b> {
|
||||
.await
|
||||
}
|
||||
|
||||
async fn get_sonarr_diskspace(&mut self) -> Result<Vec<DiskSpace>> {
|
||||
info!("Fetching Sonarr disk space");
|
||||
let event = SonarrEvent::GetDiskSpace;
|
||||
|
||||
let request_props = self
|
||||
.request_props_from(event, RequestMethod::Get, None::<()>, None, None)
|
||||
.await;
|
||||
|
||||
self
|
||||
.handle_request::<(), Vec<DiskSpace>>(request_props, |disk_space_vec, mut app| {
|
||||
app.data.sonarr_data.disk_space_vec = disk_space_vec;
|
||||
})
|
||||
.await
|
||||
}
|
||||
|
||||
async fn get_sonarr_quality_profiles(&mut self) -> Result<Vec<QualityProfile>> {
|
||||
info!("Fetching Sonarr quality profiles");
|
||||
let event = SonarrEvent::GetQualityProfiles;
|
||||
|
||||
@@ -17,7 +17,7 @@ mod test {
|
||||
use crate::models::servarr_data::sonarr::modals::{EpisodeDetailsModal, SeasonDetailsModal};
|
||||
use crate::models::servarr_data::sonarr::sonarr_data::ActiveSonarrBlock;
|
||||
use crate::models::servarr_models::{
|
||||
HostConfig, Indexer, IndexerField, Language, LogResponse, Quality, QualityProfile,
|
||||
DiskSpace, HostConfig, Indexer, IndexerField, Language, LogResponse, Quality, QualityProfile,
|
||||
QualityWrapper, QueueEvent, Release, RootFolder, SecurityConfig, Tag,
|
||||
};
|
||||
use crate::models::sonarr_models::SystemStatus;
|
||||
@@ -212,6 +212,7 @@ mod test {
|
||||
#[case(SonarrEvent::DeleteBlocklistItem(None), "/blocklist")]
|
||||
#[case(SonarrEvent::HealthCheck, "/health")]
|
||||
#[case(SonarrEvent::GetBlocklist, "/blocklist?page=1&pageSize=10000")]
|
||||
#[case(SonarrEvent::GetDiskSpace, "/diskspace")]
|
||||
#[case(SonarrEvent::GetSeriesHistory(None), "/history/series")]
|
||||
#[case(SonarrEvent::GetLogs(Some(500)), "/log")]
|
||||
#[case(SonarrEvent::GetQualityProfiles, "/qualityprofile")]
|
||||
@@ -784,6 +785,53 @@ mod test {
|
||||
}
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_handle_get_sonarr_diskspace_event() {
|
||||
let (async_server, app_arc, _server) = mock_servarr_api(
|
||||
RequestMethod::Get,
|
||||
None,
|
||||
Some(json!([
|
||||
{
|
||||
"freeSpace": 1111,
|
||||
"totalSpace": 2222,
|
||||
},
|
||||
{
|
||||
"freeSpace": 3333,
|
||||
"totalSpace": 4444
|
||||
}
|
||||
])),
|
||||
None,
|
||||
SonarrEvent::GetDiskSpace,
|
||||
None,
|
||||
None,
|
||||
)
|
||||
.await;
|
||||
let mut network = Network::new(&app_arc, CancellationToken::new(), Client::new());
|
||||
let disk_space_vec = vec![
|
||||
DiskSpace {
|
||||
free_space: 1111,
|
||||
total_space: 2222,
|
||||
},
|
||||
DiskSpace {
|
||||
free_space: 3333,
|
||||
total_space: 4444,
|
||||
},
|
||||
];
|
||||
|
||||
if let SonarrSerdeable::DiskSpaces(disk_space) = network
|
||||
.handle_sonarr_event(SonarrEvent::GetDiskSpace)
|
||||
.await
|
||||
.unwrap()
|
||||
{
|
||||
async_server.assert_async().await;
|
||||
assert_eq!(
|
||||
app_arc.lock().await.data.sonarr_data.disk_space_vec,
|
||||
disk_space_vec
|
||||
);
|
||||
assert_eq!(disk_space, disk_space_vec);
|
||||
}
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_handle_get_sonarr_healthcheck_event() {
|
||||
let (async_server, app_arc, _server) = mock_servarr_api(
|
||||
|
||||
Reference in New Issue
Block a user