diff --git a/Cargo.toml b/Cargo.toml index 823ce31..dc27f12 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,7 +9,7 @@ repository = "https://github.com/Dark-Alex-17/managarr" homepage = "https://github.com/Dark-Alex-17/managarr" readme = "README.md" edition = "2021" -rust-version = "1.75.0" +rust-version = "1.76.0" [dependencies] anyhow = "1.0.68" diff --git a/README.md b/README.md index 971e1a9..eeaf43a 100644 --- a/README.md +++ b/README.md @@ -157,7 +157,7 @@ tautulli: * [reqwest](https://github.com/seanmonstar/reqwest) ## Servarr Requirements -* [Radarr >= v3](https://radarr.video/docs/api/) +* [Radarr >= 5.3.6.8612](https://radarr.video/docs/api/) * [Sonarr >= v3](https://sonarr.tv/docs/api/) * [Readarr v1](https://readarr.com/docs/api/) * [Lidarr v1](https://lidarr.audio/docs/api/) diff --git a/src/handlers/radarr_handlers/blocklist/blocklist_handler_tests.rs b/src/handlers/radarr_handlers/blocklist/blocklist_handler_tests.rs index 278e5a7..a90128e 100644 --- a/src/handlers/radarr_handlers/blocklist/blocklist_handler_tests.rs +++ b/src/handlers/radarr_handlers/blocklist/blocklist_handler_tests.rs @@ -5,7 +5,9 @@ mod tests { use crate::event::Key; use crate::handlers::radarr_handlers::blocklist::{blocklist_sorting_options, BlocklistHandler}; use crate::handlers::KeyEventHandler; - use crate::models::radarr_models::{BlocklistItem, Language, Movie, Quality, QualityWrapper}; + use crate::models::radarr_models::{ + BlocklistItem, BlocklistItemMovie, Language, Quality, QualityWrapper, + }; use crate::models::servarr_data::radarr::radarr_data::{ActiveRadarrBlock, BLOCKLIST_BLOCKS}; use crate::models::stateful_table::SortOption; use chrono::DateTime; @@ -627,9 +629,8 @@ mod tests { name: "nikki".to_owned(), }]), date: DateTime::from(DateTime::parse_from_rfc3339("2024-01-10T07:28:45Z").unwrap()), - movie: Movie { + movie: BlocklistItemMovie { title: "test 3".into(), - ..Movie::default() }, ..BlocklistItem::default() }, @@ -653,9 +654,8 @@ mod tests { }, ]), date: DateTime::from(DateTime::parse_from_rfc3339("2024-02-10T07:28:45Z").unwrap()), - movie: Movie { + movie: BlocklistItemMovie { title: "test 2".into(), - ..Movie::default() }, ..BlocklistItem::default() }, @@ -674,9 +674,8 @@ mod tests { name: "English".to_owned(), }]), date: DateTime::from(DateTime::parse_from_rfc3339("2024-03-10T07:28:45Z").unwrap()), - movie: Movie { + movie: BlocklistItemMovie { title: "test 1".into(), - ..Movie::default() }, ..BlocklistItem::default() }, diff --git a/src/models/radarr_models.rs b/src/models/radarr_models.rs index 86f1605..2396538 100644 --- a/src/models/radarr_models.rs +++ b/src/models/radarr_models.rs @@ -74,7 +74,12 @@ pub struct BlocklistItem { pub protocol: String, pub indexer: String, pub message: String, - pub movie: Movie, + pub movie: BlocklistItemMovie, +} + +#[derive(Default, Deserialize, Debug, Clone, PartialEq, Eq)] +pub struct BlocklistItemMovie { + pub title: HorizontallyScrollableText, } #[derive(Deserialize, Derivative, Default, Clone, Debug, PartialEq, Eq)] @@ -342,8 +347,7 @@ impl Monitor { } } -#[derive(Derivative, Deserialize, Debug, Clone, PartialEq, Eq)] -#[derivative(Default)] +#[derive(Derivative, Deserialize, Debug, Default, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct Movie { #[serde(deserialize_with = "super::from_i64")] @@ -372,7 +376,13 @@ pub struct Movie { pub tags: Vec, pub ratings: RatingsList, pub movie_file: Option, - pub collection: Option, + pub collection: Option, +} + +#[derive(Deserialize, Default, Debug, Clone, PartialEq, Eq)] +#[serde(rename_all = "camelCase")] +pub struct MovieCollection { + pub title: Option, } #[derive(Default, Serialize, Debug)] @@ -382,8 +392,7 @@ pub struct MovieCommandBody { pub movie_ids: Vec, } -#[derive(Deserialize, Derivative, Debug, Clone, PartialEq, Eq)] -#[derivative(Default)] +#[derive(Deserialize, Default, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct MovieFile { pub relative_path: String, diff --git a/src/network/radarr_network.rs b/src/network/radarr_network.rs index 274a105..cc76d70 100644 --- a/src/network/radarr_network.rs +++ b/src/network/radarr_network.rs @@ -1195,7 +1195,11 @@ impl<'a, 'b> Network<'a, 'b> { Studio: {studio} Genres: {}", certification.unwrap_or_default(), - collection.title, + collection + .title + .as_ref() + .unwrap_or(&String::new()) + .to_owned(), genres.join(", ") )), ..MovieDetailsModal::default() diff --git a/src/network/radarr_network_tests.rs b/src/network/radarr_network_tests.rs index d9dbc7b..eea3b1c 100644 --- a/src/network/radarr_network_tests.rs +++ b/src/network/radarr_network_tests.rs @@ -13,8 +13,9 @@ mod test { use tokio_util::sync::CancellationToken; use crate::models::radarr_models::{ - BlocklistItem, CollectionMovie, IndexerField, Language, MediaInfo, MinimumAvailability, - Monitor, MovieFile, Quality, QualityWrapper, Rating, RatingsList, + BlocklistItem, BlocklistItemMovie, CollectionMovie, IndexerField, Language, MediaInfo, + MinimumAvailability, Monitor, MovieCollection, MovieFile, Quality, QualityWrapper, Rating, + RatingsList, }; use crate::models::servarr_data::radarr::radarr_data::ActiveRadarrBlock; use crate::models::stateful_table::SortOption; @@ -1386,12 +1387,8 @@ mod test { id: 123, movie_id: 1007, source_title: "z movie".into(), - movie: Movie { - id: 1007, + movie: BlocklistItemMovie { title: "z movie".into(), - movie_file: None, - collection: None, - ..movie() }, ..blocklist_item() }, @@ -1399,12 +1396,8 @@ mod test { id: 456, movie_id: 2001, source_title: "A Movie".into(), - movie: Movie { - id: 2001, + movie: BlocklistItemMovie { title: "A Movie".into(), - movie_file: None, - collection: None, - ..movie() }, ..blocklist_item() }, @@ -3653,7 +3646,13 @@ mod test { protocol: "usenet".to_owned(), indexer: "DrunkenSlug (Prowlarr)".to_owned(), message: "test message".to_owned(), - movie: movie(), + movie: blocklist_item_movie(), + } + } + + fn blocklist_item_movie() -> BlocklistItemMovie { + BlocklistItemMovie { + title: "Test".into(), } } @@ -3693,7 +3692,13 @@ mod test { tags: vec![Number::from(1)], ratings: ratings_list(), movie_file: Some(movie_file()), - collection: Some(collection()), + collection: Some(movie_collection()), + } + } + + fn movie_collection() -> MovieCollection { + MovieCollection { + title: Some("Test Collection".to_owned()), } }