feat(cli): Support for adding a series to Sonarr

This commit is contained in:
2024-11-24 14:29:13 -07:00
parent 5ba3f2b1ba
commit 8125bd5ae0
12 changed files with 523 additions and 51 deletions
+11 -11
View File
@@ -29,7 +29,7 @@ pub struct AddMovieBody {
pub minimum_availability: String,
pub monitored: bool,
pub tags: Vec<i64>,
pub add_options: AddOptions,
pub add_options: AddMovieOptions,
}
#[derive(Derivative, Serialize, Deserialize, Debug, Default, Clone, PartialEq, Eq)]
@@ -51,7 +51,7 @@ pub struct AddMovieSearchResult {
#[derive(Default, Clone, Serialize, Debug, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub struct AddOptions {
pub struct AddMovieOptions {
pub monitor: String,
pub search_for_movie: bool,
}
@@ -305,30 +305,30 @@ impl<'a> EnumDisplayStyle<'a> for MinimumAvailability {
}
#[derive(Default, PartialEq, Eq, Clone, Copy, Debug, EnumIter, ValueEnum)]
pub enum Monitor {
pub enum MovieMonitor {
#[default]
MovieOnly,
MovieAndCollection,
None,
}
impl Display for Monitor {
impl Display for MovieMonitor {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
let monitor = match self {
Monitor::MovieOnly => "movieOnly",
Monitor::MovieAndCollection => "movieAndCollection",
Monitor::None => "none",
MovieMonitor::MovieOnly => "movieOnly",
MovieMonitor::MovieAndCollection => "movieAndCollection",
MovieMonitor::None => "none",
};
write!(f, "{monitor}")
}
}
impl<'a> EnumDisplayStyle<'a> for Monitor {
impl<'a> EnumDisplayStyle<'a> for MovieMonitor {
fn to_display_str(self) -> &'a str {
match self {
Monitor::MovieOnly => "Movie only",
Monitor::MovieAndCollection => "Movie and Collection",
Monitor::None => "None",
MovieMonitor::MovieOnly => "Movie only",
MovieMonitor::MovieAndCollection => "Movie and Collection",
MovieMonitor::None => "None",
}
}
}
+7 -7
View File
@@ -7,7 +7,7 @@ mod tests {
radarr_models::{
AddMovieSearchResult, BlocklistItem, BlocklistResponse, Collection, Credit, DiskSpace,
DownloadRecord, DownloadsResponse, Indexer, IndexerSettings, IndexerTestResult,
MinimumAvailability, Monitor, Movie, MovieHistoryItem, QualityProfile, RadarrRelease,
MinimumAvailability, Movie, MovieHistoryItem, MovieMonitor, QualityProfile, RadarrRelease,
RadarrSerdeable, RadarrTask, RadarrTaskName, SystemStatus, Tag, Update,
},
servarr_models::{HostConfig, Log, LogResponse, QueueEvent, RootFolder, SecurityConfig},
@@ -43,22 +43,22 @@ mod tests {
#[test]
fn test_monitor_display() {
assert_str_eq!(Monitor::MovieOnly.to_string(), "movieOnly");
assert_str_eq!(MovieMonitor::MovieOnly.to_string(), "movieOnly");
assert_str_eq!(
Monitor::MovieAndCollection.to_string(),
MovieMonitor::MovieAndCollection.to_string(),
"movieAndCollection"
);
assert_str_eq!(Monitor::None.to_string(), "none");
assert_str_eq!(MovieMonitor::None.to_string(), "none");
}
#[test]
fn test_monitor_to_display_str() {
assert_str_eq!(Monitor::MovieOnly.to_display_str(), "Movie only");
assert_str_eq!(MovieMonitor::MovieOnly.to_display_str(), "Movie only");
assert_str_eq!(
Monitor::MovieAndCollection.to_display_str(),
MovieMonitor::MovieAndCollection.to_display_str(),
"Movie and Collection"
);
assert_str_eq!(Monitor::None.to_display_str(), "None");
assert_str_eq!(MovieMonitor::None.to_display_str(), "None");
}
#[test]
+3 -3
View File
@@ -1,7 +1,7 @@
use strum::IntoEnumIterator;
use crate::models::radarr_models::{
Collection, Credit, MinimumAvailability, Monitor, Movie, MovieHistoryItem, RadarrRelease,
Collection, Credit, MinimumAvailability, Movie, MovieHistoryItem, MovieMonitor, RadarrRelease,
};
use crate::models::servarr_data::radarr::radarr_data::RadarrData;
use crate::models::servarr_models::{Indexer, RootFolder};
@@ -195,7 +195,7 @@ impl From<&RadarrData<'_>> for EditMovieModal {
#[derive(Default)]
pub struct AddMovieModal {
pub root_folder_list: StatefulList<RootFolder>,
pub monitor_list: StatefulList<Monitor>,
pub monitor_list: StatefulList<MovieMonitor>,
pub minimum_availability_list: StatefulList<MinimumAvailability>,
pub quality_profile_list: StatefulList<String>,
pub tags: HorizontallyScrollableText,
@@ -206,7 +206,7 @@ impl From<&RadarrData<'_>> for AddMovieModal {
let mut add_movie_modal = AddMovieModal::default();
add_movie_modal
.monitor_list
.set_items(Vec::from_iter(Monitor::iter()));
.set_items(Vec::from_iter(MovieMonitor::iter()));
add_movie_modal
.minimum_availability_list
.set_items(Vec::from_iter(MinimumAvailability::iter()));
@@ -1,6 +1,6 @@
#[cfg(test)]
mod test {
use crate::models::radarr_models::{Collection, MinimumAvailability, Monitor, Movie};
use crate::models::radarr_models::{Collection, MinimumAvailability, Movie, MovieMonitor};
use crate::models::servarr_data::radarr::modals::{
AddMovieModal, EditCollectionModal, EditIndexerModal, EditMovieModal,
};
@@ -185,7 +185,7 @@ mod test {
assert_eq!(
add_movie_modal.monitor_list.items,
Vec::from_iter(Monitor::iter())
Vec::from_iter(MovieMonitor::iter())
);
assert_eq!(
add_movie_modal.minimum_availability_list.items,
@@ -102,6 +102,13 @@ pub enum ActiveSonarrBlock {
AddSeriesPrompt,
AddSeriesSearchInput,
AddSeriesSearchResults,
AddSeriesSelectLanguageProfile,
AddSeriesSelectMonitor,
AddSeriesSelectQualityProfile,
AddSeriesSelectRootFolder,
AddSeriesSelectSeriesType,
AddSeriesTagsInput,
AddSeriesToggleUseSeasonFolder,
AllIndexerSettingsPrompt,
AutomaticallySearchEpisodePrompt,
AutomaticallySearchSeasonPrompt,