diff --git a/src/NzbDrone.Core.Test/NotificationTests/TraktTests/TraktServiceFixture.cs b/src/NzbDrone.Core.Test/NotificationTests/TraktTests/TraktServiceFixture.cs index c1ba4cae9..405606b9f 100644 --- a/src/NzbDrone.Core.Test/NotificationTests/TraktTests/TraktServiceFixture.cs +++ b/src/NzbDrone.Core.Test/NotificationTests/TraktTests/TraktServiceFixture.cs @@ -48,13 +48,14 @@ namespace NzbDrone.Core.Test.NotificationTests Subject.Definition = _traktDefinition; } - private void GiventValidMediaInfo(Quality quality, string audioChannels, string audioFormat, string scanType) + private void GiventValidMediaInfo(Quality quality, string audioChannels, string audioFormat, string scanType, HdrFormat hdrFormat = HdrFormat.None) { _downloadMessage.MovieFile.MediaInfo = new MediaInfoModel { AudioChannelPositions = audioChannels, AudioFormat = audioFormat, - ScanType = scanType + ScanType = scanType, + VideoHdrFormat = hdrFormat }; _downloadMessage.MovieFile.Quality.Quality = quality; @@ -72,7 +73,7 @@ namespace NzbDrone.Core.Test.NotificationTests [Test] public void should_add_collection_movie_if_valid_mediainfo() { - GiventValidMediaInfo(Quality.Bluray1080p, "5.1", "DTS", "Progressive"); + GiventValidMediaInfo(Quality.Bluray2160p, "5.1", "DTS", "Progressive", HdrFormat.DolbyVisionHdr10); Subject.OnDownload(_downloadMessage); @@ -80,15 +81,16 @@ namespace NzbDrone.Core.Test.NotificationTests .Verify(v => v.AddToCollection(It.Is(t => t.Movies.First().Audio == "dts" && t.Movies.First().AudioChannels == "5.1" && - t.Movies.First().Resolution == "hd_1080p" && - t.Movies.First().MediaType == "bluray"), + t.Movies.First().Resolution == "uhd_4k" && + t.Movies.First().MediaType == "bluray" && + t.Movies.First().Hdr == "hdr10"), It.IsAny()), Times.Once()); } [Test] public void should_format_audio_channels_to_one_decimal_when_adding_collection_movie() { - GiventValidMediaInfo(Quality.Bluray1080p, "2.0", "DTS", "Progressive"); + GiventValidMediaInfo(Quality.Bluray2160p, "2.0", "DTS", "Progressive", HdrFormat.DolbyVisionHdr10); Subject.OnDownload(_downloadMessage); @@ -96,8 +98,9 @@ namespace NzbDrone.Core.Test.NotificationTests .Verify(v => v.AddToCollection(It.Is(t => t.Movies.First().Audio == "dts" && t.Movies.First().AudioChannels == "2.0" && - t.Movies.First().Resolution == "hd_1080p" && - t.Movies.First().MediaType == "bluray"), + t.Movies.First().Resolution == "uhd_4k" && + t.Movies.First().MediaType == "bluray" && + t.Movies.First().Hdr == "hdr10"), It.IsAny()), Times.Once()); } } diff --git a/src/NzbDrone.Core/Notifications/Trakt/Resource/TraktCollectMovieResource.cs b/src/NzbDrone.Core/Notifications/Trakt/Resource/TraktCollectMovieResource.cs index 01b7aa64c..5528ed8aa 100644 --- a/src/NzbDrone.Core/Notifications/Trakt/Resource/TraktCollectMovieResource.cs +++ b/src/NzbDrone.Core/Notifications/Trakt/Resource/TraktCollectMovieResource.cs @@ -8,10 +8,16 @@ namespace NzbDrone.Core.Notifications.Trakt.Resource [JsonProperty(PropertyName = "collected_at")] public DateTime CollectedAt { get; set; } public string Resolution { get; set; } + public string Hdr { get; set; } + [JsonProperty(PropertyName = "audio_channels")] public string AudioChannels { get; set; } public string Audio { get; set; } + [JsonProperty(PropertyName = "media_type")] public string MediaType { get; set; } + + [JsonProperty(PropertyName = "3d")] + public bool Is3D { get; set; } } } diff --git a/src/NzbDrone.Core/Notifications/Trakt/Trakt.cs b/src/NzbDrone.Core/Notifications/Trakt/Trakt.cs index 3f8e199ba..335c8aefb 100644 --- a/src/NzbDrone.Core/Notifications/Trakt/Trakt.cs +++ b/src/NzbDrone.Core/Notifications/Trakt/Trakt.cs @@ -154,6 +154,7 @@ namespace NzbDrone.Core.Notifications.Trakt }; var traktResolution = MapResolution(movieFile.Quality.Quality.Resolution, movieFile.MediaInfo?.ScanType); + var hdr = MapHdr(movieFile); var mediaType = MapMediaType(movieFile.Quality.Quality.Source); var audio = MapAudio(movieFile); var audioChannels = MapAudioChannels(movieFile); @@ -164,9 +165,11 @@ namespace NzbDrone.Core.Notifications.Trakt Year = movie.Year, CollectedAt = DateTime.Now, Resolution = traktResolution, + Hdr = hdr, MediaType = mediaType, AudioChannels = audioChannels, Audio = audio, + Is3D = movieFile.MediaInfo?.VideoMultiViewCount > 1, Ids = new TraktMovieIdsResource { Tmdb = movie.MovieMetadata.Value.TmdbId, @@ -230,6 +233,20 @@ namespace NzbDrone.Core.Notifications.Trakt return traktResolution; } + private string MapHdr(MovieFile movieFile) + { + var traktHdr = movieFile.MediaInfo?.VideoHdrFormat switch + { + HdrFormat.DolbyVision or HdrFormat.DolbyVisionSdr => "dolby_vision", + HdrFormat.Hdr10 or HdrFormat.DolbyVisionHdr10 => "hdr10", + HdrFormat.Hdr10Plus or HdrFormat.DolbyVisionHdr10Plus => "hdr10_plus", + HdrFormat.Hlg10 or HdrFormat.DolbyVisionHlg => "hlg", + _ => null + }; + + return traktHdr; + } + private string MapAudio(MovieFile movieFile) { var audioCodec = movieFile.MediaInfo != null ? MediaInfoFormatter.FormatAudioCodec(movieFile.MediaInfo, movieFile.SceneName) : string.Empty;