feat(network): Support for listing disk space on a Sonarr instance

This commit is contained in:
2024-11-22 15:54:11 -07:00
parent d96316577a
commit a881d1f33a
17 changed files with 185 additions and 39 deletions
+2 -11
View File
@@ -10,8 +10,8 @@ use strum_macros::EnumIter;
use crate::{models::HorizontallyScrollableText, serde_enum_from};
use super::servarr_models::{
HostConfig, Indexer, Language, LogResponse, QualityProfile, QualityWrapper, QueueEvent, Release,
RootFolder, SecurityConfig, Tag,
DiskSpace, HostConfig, Indexer, Language, LogResponse, QualityProfile, QualityWrapper,
QueueEvent, Release, RootFolder, SecurityConfig, Tag,
};
use super::{EnumDisplayStyle, Serdeable};
@@ -149,15 +149,6 @@ pub struct DeleteMovieParams {
pub add_list_exclusion: bool,
}
#[derive(Serialize, Deserialize, Debug, Clone, Eq, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct DiskSpace {
#[serde(deserialize_with = "super::from_i64")]
pub free_space: i64,
#[serde(deserialize_with = "super::from_i64")]
pub total_space: i64,
}
#[derive(Derivative, Serialize, Deserialize, Debug, Default, Clone, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub struct DownloadRecord {
@@ -6,14 +6,14 @@ use crate::app::radarr::radarr_context_clues::{
SYSTEM_CONTEXT_CLUES,
};
use crate::models::radarr_models::{
AddMovieSearchResult, BlocklistItem, Collection, CollectionMovie, DiskSpace, DownloadRecord,
AddMovieSearchResult, BlocklistItem, Collection, CollectionMovie, DownloadRecord,
IndexerSettings, Movie, Task,
};
use crate::models::servarr_data::radarr::modals::{
AddMovieModal, EditCollectionModal, EditIndexerModal, EditMovieModal, IndexerTestResultModalItem,
MovieDetailsModal,
};
use crate::models::servarr_models::{Indexer, QueueEvent, RootFolder};
use crate::models::servarr_models::{DiskSpace, Indexer, QueueEvent, RootFolder};
use crate::models::stateful_list::StatefulList;
use crate::models::stateful_table::StatefulTable;
use crate::models::{
@@ -3,7 +3,7 @@ use chrono::{DateTime, Utc};
use strum::EnumIter;
use crate::models::{
servarr_models::{Indexer, QueueEvent, RootFolder},
servarr_models::{DiskSpace, Indexer, QueueEvent, RootFolder},
sonarr_models::{
BlocklistItem, DownloadRecord, IndexerSettings, Season, Series, SonarrHistoryItem,
},
@@ -21,6 +21,7 @@ mod sonarr_data_tests;
pub struct SonarrData {
pub blocklist: StatefulTable<BlocklistItem>,
pub downloads: StatefulTable<DownloadRecord>,
pub disk_space_vec: Vec<DiskSpace>,
pub edit_root_folder: Option<HorizontallyScrollableText>,
pub history: StatefulTable<SonarrHistoryItem>,
pub indexers: StatefulTable<Indexer>,
@@ -43,6 +44,7 @@ impl Default for SonarrData {
SonarrData {
blocklist: StatefulTable::default(),
downloads: StatefulTable::default(),
disk_space_vec: Vec::new(),
edit_root_folder: None,
history: StatefulTable::default(),
indexers: StatefulTable::default(),
@@ -36,6 +36,7 @@ mod tests {
assert!(sonarr_data.blocklist.is_empty());
assert!(sonarr_data.downloads.is_empty());
assert!(sonarr_data.disk_space_vec.is_empty());
assert!(sonarr_data.edit_root_folder.is_none());
assert!(sonarr_data.history.is_empty());
assert!(sonarr_data.indexers.is_empty());
+9
View File
@@ -74,6 +74,15 @@ impl Display for CertificateValidation {
}
}
#[derive(Serialize, Deserialize, Debug, Clone, Eq, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct DiskSpace {
#[serde(deserialize_with = "super::from_i64")]
pub free_space: i64,
#[serde(deserialize_with = "super::from_i64")]
pub total_space: i64,
}
#[derive(Default, Deserialize, Serialize, Debug, Clone, Eq, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct HostConfig {
+4 -2
View File
@@ -11,8 +11,8 @@ use crate::serde_enum_from;
use super::{
servarr_models::{
HostConfig, Indexer, Language, LogResponse, QualityProfile, QualityWrapper, QueueEvent,
Release, RootFolder, SecurityConfig, Tag,
DiskSpace, HostConfig, Indexer, Language, LogResponse, QualityProfile, QualityWrapper,
QueueEvent, Release, RootFolder, SecurityConfig, Tag,
},
EnumDisplayStyle, HorizontallyScrollableText, Serdeable,
};
@@ -394,6 +394,7 @@ pub struct SonarrHistoryItem {
pub enum SonarrSerdeable {
Value(Value),
DownloadsResponse(DownloadsResponse),
DiskSpaces(Vec<DiskSpace>),
Episode(Episode),
Episodes(Vec<Episode>),
HostConfig(HostConfig),
@@ -431,6 +432,7 @@ serde_enum_from!(
SonarrSerdeable {
Value(Value),
DownloadsResponse(DownloadsResponse),
DiskSpaces(Vec<DiskSpace>),
Episode(Episode),
Episodes(Vec<Episode>),
HostConfig(HostConfig),
+14 -2
View File
@@ -5,8 +5,8 @@ mod tests {
use crate::models::{
servarr_models::{
HostConfig, Indexer, Log, LogResponse, QualityProfile, QueueEvent, Release, RootFolder,
SecurityConfig, Tag,
DiskSpace, HostConfig, Indexer, Log, LogResponse, QualityProfile, QueueEvent, Release,
RootFolder, SecurityConfig, Tag,
},
sonarr_models::{
BlocklistItem, BlocklistResponse, DownloadRecord, DownloadsResponse, Episode,
@@ -291,6 +291,18 @@ mod tests {
);
}
#[test]
fn test_sonarr_serdeable_from_disk_spaces() {
let disk_spaces = vec![DiskSpace {
free_space: 1,
total_space: 1,
}];
let sonarr_serdeable: SonarrSerdeable = disk_spaces.clone().into();
assert_eq!(sonarr_serdeable, SonarrSerdeable::DiskSpaces(disk_spaces));
}
#[test]
fn test_sonarr_serdeable_from_log_response() {
let log_response = LogResponse {