New: 3D and HDR metadata for Trakt connection

pull/9496/head
Bogdan 7 months ago
parent cc0a448bc8
commit 1d70f36e7d

@ -48,13 +48,14 @@ namespace NzbDrone.Core.Test.NotificationTests
Subject.Definition = _traktDefinition; 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 _downloadMessage.MovieFile.MediaInfo = new MediaInfoModel
{ {
AudioChannelPositions = audioChannels, AudioChannelPositions = audioChannels,
AudioFormat = audioFormat, AudioFormat = audioFormat,
ScanType = scanType ScanType = scanType,
VideoHdrFormat = hdrFormat
}; };
_downloadMessage.MovieFile.Quality.Quality = quality; _downloadMessage.MovieFile.Quality.Quality = quality;
@ -72,7 +73,7 @@ namespace NzbDrone.Core.Test.NotificationTests
[Test] [Test]
public void should_add_collection_movie_if_valid_mediainfo() 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); Subject.OnDownload(_downloadMessage);
@ -80,15 +81,16 @@ namespace NzbDrone.Core.Test.NotificationTests
.Verify(v => v.AddToCollection(It.Is<TraktCollectMoviesResource>(t => .Verify(v => v.AddToCollection(It.Is<TraktCollectMoviesResource>(t =>
t.Movies.First().Audio == "dts" && t.Movies.First().Audio == "dts" &&
t.Movies.First().AudioChannels == "5.1" && t.Movies.First().AudioChannels == "5.1" &&
t.Movies.First().Resolution == "hd_1080p" && t.Movies.First().Resolution == "uhd_4k" &&
t.Movies.First().MediaType == "bluray"), t.Movies.First().MediaType == "bluray" &&
t.Movies.First().Hdr == "hdr10"),
It.IsAny<string>()), Times.Once()); It.IsAny<string>()), Times.Once());
} }
[Test] [Test]
public void should_format_audio_channels_to_one_decimal_when_adding_collection_movie() 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); Subject.OnDownload(_downloadMessage);
@ -96,8 +98,9 @@ namespace NzbDrone.Core.Test.NotificationTests
.Verify(v => v.AddToCollection(It.Is<TraktCollectMoviesResource>(t => .Verify(v => v.AddToCollection(It.Is<TraktCollectMoviesResource>(t =>
t.Movies.First().Audio == "dts" && t.Movies.First().Audio == "dts" &&
t.Movies.First().AudioChannels == "2.0" && t.Movies.First().AudioChannels == "2.0" &&
t.Movies.First().Resolution == "hd_1080p" && t.Movies.First().Resolution == "uhd_4k" &&
t.Movies.First().MediaType == "bluray"), t.Movies.First().MediaType == "bluray" &&
t.Movies.First().Hdr == "hdr10"),
It.IsAny<string>()), Times.Once()); It.IsAny<string>()), Times.Once());
} }
} }

@ -8,10 +8,16 @@ namespace NzbDrone.Core.Notifications.Trakt.Resource
[JsonProperty(PropertyName = "collected_at")] [JsonProperty(PropertyName = "collected_at")]
public DateTime CollectedAt { get; set; } public DateTime CollectedAt { get; set; }
public string Resolution { get; set; } public string Resolution { get; set; }
public string Hdr { get; set; }
[JsonProperty(PropertyName = "audio_channels")] [JsonProperty(PropertyName = "audio_channels")]
public string AudioChannels { get; set; } public string AudioChannels { get; set; }
public string Audio { get; set; } public string Audio { get; set; }
[JsonProperty(PropertyName = "media_type")] [JsonProperty(PropertyName = "media_type")]
public string MediaType { get; set; } public string MediaType { get; set; }
[JsonProperty(PropertyName = "3d")]
public bool Is3D { get; set; }
} }
} }

@ -154,6 +154,7 @@ namespace NzbDrone.Core.Notifications.Trakt
}; };
var traktResolution = MapResolution(movieFile.Quality.Quality.Resolution, movieFile.MediaInfo?.ScanType); var traktResolution = MapResolution(movieFile.Quality.Quality.Resolution, movieFile.MediaInfo?.ScanType);
var hdr = MapHdr(movieFile);
var mediaType = MapMediaType(movieFile.Quality.Quality.Source); var mediaType = MapMediaType(movieFile.Quality.Quality.Source);
var audio = MapAudio(movieFile); var audio = MapAudio(movieFile);
var audioChannels = MapAudioChannels(movieFile); var audioChannels = MapAudioChannels(movieFile);
@ -164,9 +165,11 @@ namespace NzbDrone.Core.Notifications.Trakt
Year = movie.Year, Year = movie.Year,
CollectedAt = DateTime.Now, CollectedAt = DateTime.Now,
Resolution = traktResolution, Resolution = traktResolution,
Hdr = hdr,
MediaType = mediaType, MediaType = mediaType,
AudioChannels = audioChannels, AudioChannels = audioChannels,
Audio = audio, Audio = audio,
Is3D = movieFile.MediaInfo?.VideoMultiViewCount > 1,
Ids = new TraktMovieIdsResource Ids = new TraktMovieIdsResource
{ {
Tmdb = movie.MovieMetadata.Value.TmdbId, Tmdb = movie.MovieMetadata.Value.TmdbId,
@ -230,6 +233,20 @@ namespace NzbDrone.Core.Notifications.Trakt
return traktResolution; 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) private string MapAudio(MovieFile movieFile)
{ {
var audioCodec = movieFile.MediaInfo != null ? MediaInfoFormatter.FormatAudioCodec(movieFile.MediaInfo, movieFile.SceneName) : string.Empty; var audioCodec = movieFile.MediaInfo != null ? MediaInfoFormatter.FormatAudioCodec(movieFile.MediaInfo, movieFile.SceneName) : string.Empty;

Loading…
Cancel
Save