New: 3D and HDR metadata for Trakt connection

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

@ -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<TraktCollectMoviesResource>(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<string>()), 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<TraktCollectMoviesResource>(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<string>()), Times.Once());
}
}

@ -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; }
}
}

@ -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;

Loading…
Cancel
Save