fix(network): Added filtering for full seasons specifically in the UI when performing a manual full season search and added a message to the CLI that noes to only try to download a full season if that release includes 'fullSeason: true'

This commit is contained in:
2024-11-23 12:15:41 -07:00
parent 3be9321df6
commit 4d92c350de
17 changed files with 336 additions and 174 deletions
+25 -3
View File
@@ -11,7 +11,7 @@ use crate::{models::HorizontallyScrollableText, serde_enum_from};
use super::servarr_models::{
DiskSpace, HostConfig, Indexer, Language, LogResponse, QualityProfile, QualityWrapper,
QueueEvent, Release, RootFolder, SecurityConfig, Tag, Update,
QueueEvent, RootFolder, SecurityConfig, Tag, Update,
};
use super::{EnumDisplayStyle, Serdeable};
@@ -412,6 +412,28 @@ pub struct RatingsList {
pub rotten_tomatoes: Option<Rating>,
}
#[derive(Serialize, Deserialize, Default, Clone, Debug, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
#[serde(default)]
pub struct RadarrRelease {
pub guid: String,
pub protocol: String,
#[serde(deserialize_with = "super::from_i64")]
pub age: i64,
pub title: HorizontallyScrollableText,
pub indexer: String,
#[serde(deserialize_with = "super::from_i64")]
pub indexer_id: i64,
#[serde(deserialize_with = "super::from_i64")]
pub size: i64,
pub rejected: bool,
pub rejections: Option<Vec<String>>,
pub seeders: Option<Number>,
pub leechers: Option<Number>,
pub languages: Option<Vec<Language>>,
pub quality: QualityWrapper,
}
#[derive(Default, Serialize, Debug, PartialEq, Eq, Clone)]
#[serde(rename_all = "camelCase")]
pub struct RadarrReleaseDownloadBody {
@@ -485,7 +507,7 @@ pub enum RadarrSerdeable {
Movies(Vec<Movie>),
QualityProfiles(Vec<QualityProfile>),
QueueEvents(Vec<QueueEvent>),
Releases(Vec<Release>),
Releases(Vec<RadarrRelease>),
RootFolders(Vec<RootFolder>),
SecurityConfig(SecurityConfig),
SystemStatus(SystemStatus),
@@ -526,7 +548,7 @@ serde_enum_from!(
Movies(Vec<Movie>),
QualityProfiles(Vec<QualityProfile>),
QueueEvents(Vec<QueueEvent>),
Releases(Vec<Release>),
Releases(Vec<RadarrRelease>),
RootFolders(Vec<RootFolder>),
SecurityConfig(SecurityConfig),
SystemStatus(SystemStatus),
+4 -4
View File
@@ -7,8 +7,8 @@ mod tests {
radarr_models::{
AddMovieSearchResult, BlocklistItem, BlocklistResponse, Collection, Credit, DiskSpace,
DownloadRecord, DownloadsResponse, Indexer, IndexerSettings, IndexerTestResult,
MinimumAvailability, Monitor, Movie, MovieHistoryItem, QualityProfile, RadarrSerdeable,
RadarrTask, RadarrTaskName, Release, SystemStatus, Tag, Update,
MinimumAvailability, Monitor, Movie, MovieHistoryItem, QualityProfile, RadarrRelease,
RadarrSerdeable, RadarrTask, RadarrTaskName, SystemStatus, Tag, Update,
},
servarr_models::{HostConfig, Log, LogResponse, QueueEvent, RootFolder, SecurityConfig},
EnumDisplayStyle, Serdeable,
@@ -317,9 +317,9 @@ mod tests {
#[test]
fn test_radarr_serdeable_from_releases() {
let releases = vec![Release {
let releases = vec![RadarrRelease {
size: 1,
..Release::default()
..RadarrRelease::default()
}];
let radarr_serdeable: RadarrSerdeable = releases.clone().into();
+3 -3
View File
@@ -1,10 +1,10 @@
use strum::IntoEnumIterator;
use crate::models::radarr_models::{
Collection, Credit, MinimumAvailability, Monitor, Movie, MovieHistoryItem,
Collection, Credit, MinimumAvailability, Monitor, Movie, MovieHistoryItem, RadarrRelease,
};
use crate::models::servarr_data::radarr::radarr_data::RadarrData;
use crate::models::servarr_models::{Indexer, Release, RootFolder};
use crate::models::servarr_models::{Indexer, RootFolder};
use crate::models::stateful_list::StatefulList;
use crate::models::stateful_table::StatefulTable;
use crate::models::{HorizontallyScrollableText, ScrollableText};
@@ -22,7 +22,7 @@ pub struct MovieDetailsModal {
pub movie_history: StatefulTable<MovieHistoryItem>,
pub movie_cast: StatefulTable<Credit>,
pub movie_crew: StatefulTable<Credit>,
pub movie_releases: StatefulTable<Release>,
pub movie_releases: StatefulTable<RadarrRelease>,
}
#[derive(Default, Debug, PartialEq, Eq)]
@@ -1,11 +1,10 @@
#[cfg(test)]
pub mod utils {
use crate::models::radarr_models::{
AddMovieSearchResult, CollectionMovie, Credit, MovieHistoryItem,
AddMovieSearchResult, CollectionMovie, Credit, MovieHistoryItem, RadarrRelease,
};
use crate::models::servarr_data::radarr::modals::MovieDetailsModal;
use crate::models::servarr_data::radarr::radarr_data::RadarrData;
use crate::models::servarr_models::Release;
use crate::models::stateful_table::StatefulTable;
use crate::models::{HorizontallyScrollableText, ScrollableText};
@@ -25,7 +24,7 @@ pub mod utils {
.set_items(vec![Credit::default()]);
movie_details_modal
.movie_releases
.set_items(vec![Release::default()]);
.set_items(vec![RadarrRelease::default()]);
let mut radarr_data = RadarrData {
delete_movie_files: true,
+3 -4
View File
@@ -1,6 +1,5 @@
use crate::models::{
servarr_models::Release,
sonarr_models::{Episode, SonarrHistoryItem},
sonarr_models::{Episode, SonarrHistoryItem, SonarrRelease},
stateful_table::StatefulTable,
ScrollableText,
};
@@ -12,12 +11,12 @@ pub struct EpisodeDetailsModal {
pub audio_details: String,
pub video_details: String,
pub episode_history: StatefulTable<SonarrHistoryItem>,
pub episode_releases: StatefulTable<Release>,
pub episode_releases: StatefulTable<SonarrRelease>,
}
#[derive(Default)]
pub struct SeasonDetailsModal {
pub episodes: StatefulTable<Episode>,
pub episode_details_modal: Option<EpisodeDetailsModal>,
pub season_releases: StatefulTable<Release>,
pub season_releases: StatefulTable<SonarrRelease>,
}
-22
View File
@@ -195,28 +195,6 @@ pub struct QueueEvent {
pub duration: Option<String>,
}
#[derive(Serialize, Deserialize, Default, Clone, Debug, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
#[serde(default)]
pub struct Release {
pub guid: String,
pub protocol: String,
#[serde(deserialize_with = "super::from_i64")]
pub age: i64,
pub title: HorizontallyScrollableText,
pub indexer: String,
#[serde(deserialize_with = "super::from_i64")]
pub indexer_id: i64,
#[serde(deserialize_with = "super::from_i64")]
pub size: i64,
pub rejected: bool,
pub rejections: Option<Vec<String>>,
pub seeders: Option<Number>,
pub leechers: Option<Number>,
pub languages: Option<Vec<Language>>,
pub quality: QualityWrapper,
}
#[derive(Default, Serialize, Deserialize, Debug, Clone, Eq, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct RootFolder {
+25 -3
View File
@@ -13,7 +13,7 @@ use super::{
radarr_models::IndexerTestResult,
servarr_models::{
DiskSpace, HostConfig, Indexer, Language, LogResponse, QualityProfile, QualityWrapper,
QueueEvent, Release, RootFolder, SecurityConfig, Tag, Update,
QueueEvent, RootFolder, SecurityConfig, Tag, Update,
},
EnumDisplayStyle, HorizontallyScrollableText, Serdeable,
};
@@ -401,6 +401,28 @@ pub struct SonarrCommandBody {
pub episode_ids: Option<Vec<i64>>,
}
#[derive(Serialize, Deserialize, Default, Clone, Debug, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
#[serde(default)]
pub struct SonarrRelease {
pub guid: String,
pub protocol: String,
#[serde(deserialize_with = "super::from_i64")]
pub age: i64,
pub title: HorizontallyScrollableText,
pub indexer: String,
#[serde(deserialize_with = "super::from_i64")]
pub indexer_id: i64,
#[serde(deserialize_with = "super::from_i64")]
pub size: i64,
pub rejected: bool,
pub rejections: Option<Vec<String>>,
pub seeders: Option<Number>,
pub leechers: Option<Number>,
pub languages: Option<Vec<Language>>,
pub quality: QualityWrapper,
pub full_season: bool,
}
#[derive(Default, Serialize, Debug, PartialEq, Eq, Clone)]
#[serde(rename_all = "camelCase")]
pub struct SonarrReleaseDownloadBody {
@@ -467,7 +489,7 @@ pub enum SonarrSerdeable {
LogResponse(LogResponse),
QualityProfiles(Vec<QualityProfile>),
QueueEvents(Vec<QueueEvent>),
Releases(Vec<Release>),
Releases(Vec<SonarrRelease>),
RootFolders(Vec<RootFolder>),
SecurityConfig(SecurityConfig),
SeriesVec(Vec<Series>),
@@ -508,7 +530,7 @@ serde_enum_from!(
LogResponse(LogResponse),
QualityProfiles(Vec<QualityProfile>),
QueueEvents(Vec<QueueEvent>),
Releases(Vec<Release>),
Releases(Vec<SonarrRelease>),
RootFolders(Vec<RootFolder>),
SecurityConfig(SecurityConfig),
SeriesVec(Vec<Series>),
+5 -5
View File
@@ -6,13 +6,13 @@ mod tests {
use crate::models::{
radarr_models::IndexerTestResult,
servarr_models::{
DiskSpace, HostConfig, Indexer, Log, LogResponse, QualityProfile, QueueEvent, Release,
RootFolder, SecurityConfig, Tag, Update,
DiskSpace, HostConfig, Indexer, Log, LogResponse, QualityProfile, QueueEvent, RootFolder,
SecurityConfig, Tag, Update,
},
sonarr_models::{
BlocklistItem, BlocklistResponse, DownloadRecord, DownloadsResponse, Episode,
IndexerSettings, Series, SeriesStatus, SeriesType, SonarrHistoryEventType, SonarrHistoryItem,
SonarrSerdeable, SonarrTask, SonarrTaskName, SystemStatus,
SonarrRelease, SonarrSerdeable, SonarrTask, SonarrTaskName, SystemStatus,
},
EnumDisplayStyle, Serdeable,
};
@@ -355,9 +355,9 @@ mod tests {
#[test]
fn test_sonarr_serdeable_from_releases() {
let releases = vec![Release {
let releases = vec![SonarrRelease {
size: 1,
..Release::default()
..SonarrRelease::default()
}];
let sonarr_serdeable: SonarrSerdeable = releases.clone().into();