From 3a55b766c3f72f0384935f3561035717a65ebdd4 Mon Sep 17 00:00:00 2001 From: FuN_K3Y Date: Sun, 14 Oct 2018 09:59:57 +0200 Subject: [PATCH 1/7] Add imdb url, added setting, fix movie.nfo being renamed on movie rename --- .../Metadata/Consumers/Xbmc/XbmcMetadata.cs | 193 +++++++++--------- .../Consumers/Xbmc/XbmcMetadataSettings.cs | 8 +- 2 files changed, 107 insertions(+), 94 deletions(-) diff --git a/src/NzbDrone.Core/Extras/Metadata/Consumers/Xbmc/XbmcMetadata.cs b/src/NzbDrone.Core/Extras/Metadata/Consumers/Xbmc/XbmcMetadata.cs index d600f1041d..57b916ddc2 100644 --- a/src/NzbDrone.Core/Extras/Metadata/Consumers/Xbmc/XbmcMetadata.cs +++ b/src/NzbDrone.Core/Extras/Metadata/Consumers/Xbmc/XbmcMetadata.cs @@ -101,120 +101,122 @@ public override MetadataFile FindMetadataFile(Movie movie, string path) public override MetadataFileResult MovieMetadata(Movie movie, MovieFile movieFile) { - if (!Settings.MovieMetadata) - { - return null; - } - - _logger.Debug("Generating Movie Metadata for: {0}", Path.Combine(movie.Path, movieFile.RelativePath)); - - var watched = GetExistingWatchedStatus(movie, movieFile.RelativePath); - + var xmlResult = string.Empty; - - var sb = new StringBuilder(); - var xws = new XmlWriterSettings(); - xws.OmitXmlDeclaration = true; - xws.Indent = false; - - using (var xw = XmlWriter.Create(sb, xws)) + if (Settings.MovieMetadata) { - var doc = new XDocument(); - var image = movie.Images.SingleOrDefault(i => i.CoverType == MediaCoverTypes.Screenshot); + _logger.Debug("Generating Movie Metadata for: {0}", Path.Combine(movie.Path, movieFile.RelativePath)); + var watched = GetExistingWatchedStatus(movie, movieFile.RelativePath); - var details = new XElement("movie"); + var sb = new StringBuilder(); + var xws = new XmlWriterSettings(); + xws.OmitXmlDeclaration = true; + xws.Indent = false; - details.Add(new XElement("title", movie.Title)); - - if (movie.Ratings != null && movie.Ratings.Votes > 0) + using (var xw = XmlWriter.Create(sb, xws)) { - details.Add(new XElement("rating", movie.Ratings.Value)); - } + var doc = new XDocument(); + var image = movie.Images.SingleOrDefault(i => i.CoverType == MediaCoverTypes.Screenshot); - details.Add(new XElement("plot", movie.Overview)); - details.Add(new XElement("id", movie.ImdbId)); - details.Add(new XElement("year", movie.Year)); + var details = new XElement("movie"); - if (movie.InCinemas.HasValue) - { - details.Add(new XElement("premiered", movie.InCinemas.Value.ToString("yyyy-MM-dd"))); - } + details.Add(new XElement("title", movie.Title)); - foreach (var genre in movie.Genres) - { - details.Add(new XElement("genre", genre)); - } - - details.Add(new XElement("studio", movie.Studio)); - - if (image == null) - { - details.Add(new XElement("thumb")); - } - - else - { - details.Add(new XElement("thumb", image.Url)); - } - - details.Add(new XElement("watched", watched)); - - if (movieFile.MediaInfo != null) - { - var fileInfo = new XElement("fileinfo"); - var streamDetails = new XElement("streamdetails"); - - var video = new XElement("video"); - video.Add(new XElement("aspect", (float)movieFile.MediaInfo.Width / (float)movieFile.MediaInfo.Height)); - video.Add(new XElement("bitrate", movieFile.MediaInfo.VideoBitrate)); - video.Add(new XElement("codec", movieFile.MediaInfo.VideoCodec)); - video.Add(new XElement("framerate", movieFile.MediaInfo.VideoFps)); - video.Add(new XElement("height", movieFile.MediaInfo.Height)); - video.Add(new XElement("scantype", movieFile.MediaInfo.ScanType)); - video.Add(new XElement("width", movieFile.MediaInfo.Width)); - - if (movieFile.MediaInfo.RunTime != null) + if (movie.Ratings != null && movie.Ratings.Votes > 0) { - video.Add(new XElement("duration", movieFile.MediaInfo.RunTime.TotalMinutes)); - video.Add(new XElement("durationinseconds", movieFile.MediaInfo.RunTime.TotalSeconds)); + details.Add(new XElement("rating", movie.Ratings.Value)); } - streamDetails.Add(video); + details.Add(new XElement("plot", movie.Overview)); + details.Add(new XElement("id", movie.ImdbId)); + details.Add(new XElement("year", movie.Year)); - var audio = new XElement("audio"); - audio.Add(new XElement("bitrate", movieFile.MediaInfo.AudioBitrate)); - audio.Add(new XElement("channels", movieFile.MediaInfo.AudioChannels)); - audio.Add(new XElement("codec", GetAudioCodec(movieFile.MediaInfo.AudioFormat))); - audio.Add(new XElement("language", movieFile.MediaInfo.AudioLanguages)); - streamDetails.Add(audio); - - if (movieFile.MediaInfo.Subtitles != null && movieFile.MediaInfo.Subtitles.Length > 0) + if (movie.InCinemas.HasValue) { - var subtitle = new XElement("subtitle"); - subtitle.Add(new XElement("language", movieFile.MediaInfo.Subtitles)); - streamDetails.Add(subtitle); + details.Add(new XElement("premiered", movie.InCinemas.Value.ToString("yyyy-MM-dd"))); } - fileInfo.Add(streamDetails); - details.Add(fileInfo); + foreach (var genre in movie.Genres) + { + details.Add(new XElement("genre", genre)); + } + + details.Add(new XElement("studio", movie.Studio)); + + if (image == null) + { + details.Add(new XElement("thumb")); + } + + else + { + details.Add(new XElement("thumb", image.Url)); + } + + details.Add(new XElement("watched", watched)); + + if (movieFile.MediaInfo != null) + { + var fileInfo = new XElement("fileinfo"); + var streamDetails = new XElement("streamdetails"); + + var video = new XElement("video"); + video.Add(new XElement("aspect", (float)movieFile.MediaInfo.Width / (float)movieFile.MediaInfo.Height)); + video.Add(new XElement("bitrate", movieFile.MediaInfo.VideoBitrate)); + video.Add(new XElement("codec", movieFile.MediaInfo.VideoCodec)); + video.Add(new XElement("framerate", movieFile.MediaInfo.VideoFps)); + video.Add(new XElement("height", movieFile.MediaInfo.Height)); + video.Add(new XElement("scantype", movieFile.MediaInfo.ScanType)); + video.Add(new XElement("width", movieFile.MediaInfo.Width)); + + if (movieFile.MediaInfo.RunTime != null) + { + video.Add(new XElement("duration", movieFile.MediaInfo.RunTime.TotalMinutes)); + video.Add(new XElement("durationinseconds", movieFile.MediaInfo.RunTime.TotalSeconds)); + } + + streamDetails.Add(video); + + var audio = new XElement("audio"); + audio.Add(new XElement("bitrate", movieFile.MediaInfo.AudioBitrate)); + audio.Add(new XElement("channels", movieFile.MediaInfo.AudioChannels)); + audio.Add(new XElement("codec", GetAudioCodec(movieFile.MediaInfo.AudioFormat))); + audio.Add(new XElement("language", movieFile.MediaInfo.AudioLanguages)); + streamDetails.Add(audio); + + if (movieFile.MediaInfo.Subtitles != null && movieFile.MediaInfo.Subtitles.Length > 0) + { + var subtitle = new XElement("subtitle"); + subtitle.Add(new XElement("language", movieFile.MediaInfo.Subtitles)); + streamDetails.Add(subtitle); + } + + fileInfo.Add(streamDetails); + details.Add(fileInfo); + } + + doc.Add(details); + doc.Save(xw); + + xmlResult += doc.ToString(); + xmlResult += Environment.NewLine; + } + } + if (Settings.MoviMetadataURL) + { + _logger.Debug("Generating Movie Metadata URL for: {0}", Path.Combine(movie.Path, movieFile.RelativePath)); - doc.Add(details); - doc.Save(xw); - - xmlResult += doc.ToString(); + xmlResult += "https://www.themoviedb.org/movie/" + movie.TmdbId; xmlResult += Environment.NewLine; + xmlResult += "https://www.imdb.com/title/" + movie.ImdbId; + xmlResult += Environment.NewLine; } var metadataFileName = GetMovieMetadataFilename(movieFile.RelativePath); - if (Settings.UseMovieNfo) - { - metadataFileName = "movie.nfo"; - } - - return new MetadataFileResult(metadataFileName, xmlResult.Trim(Environment.NewLine.ToCharArray())); + return xmlResult==string.Empty?null:new MetadataFileResult(metadataFileName, xmlResult.Trim(Environment.NewLine.ToCharArray())); } public override List MovieImages(Movie movie) @@ -240,7 +242,14 @@ private IEnumerable ProcessMovieImages(Movie movie) private string GetMovieMetadataFilename(string movieFilePath) { - return Path.ChangeExtension(movieFilePath, "nfo"); + if (Settings.UseMovieNfo) + { + return Path.Combine(Path.GetDirectoryName(movieFilePath), "movie.nfo"); + } + else + { + return Path.ChangeExtension(movieFilePath, "nfo"); + } } private string GetAudioCodec(string audioCodec) diff --git a/src/NzbDrone.Core/Extras/Metadata/Consumers/Xbmc/XbmcMetadataSettings.cs b/src/NzbDrone.Core/Extras/Metadata/Consumers/Xbmc/XbmcMetadataSettings.cs index cc89592437..013a077e15 100644 --- a/src/NzbDrone.Core/Extras/Metadata/Consumers/Xbmc/XbmcMetadataSettings.cs +++ b/src/NzbDrone.Core/Extras/Metadata/Consumers/Xbmc/XbmcMetadataSettings.cs @@ -19,6 +19,7 @@ public class XbmcMetadataSettings : IProviderConfig public XbmcMetadataSettings() { MovieMetadata = true; + MoviMetadataURL = true; MovieImages = true; UseMovieNfo = false; } @@ -26,10 +27,13 @@ public XbmcMetadataSettings() [FieldDefinition(0, Label = "Movie Metadata", Type = FieldType.Checkbox)] public bool MovieMetadata { get; set; } - [FieldDefinition(1, Label = "Movie Images", Type = FieldType.Checkbox)] + [FieldDefinition(1, Label = "Movie Metadata URL", Type = FieldType.Checkbox, HelpText = "Radarr will write the tmdb/imdb url in the .nfo file")] + public bool MoviMetadataURL { get; set; } + + [FieldDefinition(2, Label = "Movie Images", Type = FieldType.Checkbox)] public bool MovieImages { get; set; } - [FieldDefinition(2, Label = "Use Movie.nfo", Type = FieldType.Checkbox, HelpText = "Radarr will write metadata to movie.nfo instead of the default .nfo")] + [FieldDefinition(3, Label = "Use Movie.nfo", Type = FieldType.Checkbox, HelpText = "Radarr will write metadata to movie.nfo instead of the default .nfo")] public bool UseMovieNfo { get; set; } public bool IsValid => true; From 0df5cd478b3d9ebbf488904f391d9f1f5c097f47 Mon Sep 17 00:00:00 2001 From: FuNK3Y Date: Sun, 14 Oct 2018 14:24:00 +0200 Subject: [PATCH 2/7] Update XbmcMetadataSettings.cs Fix typo --- .../Extras/Metadata/Consumers/Xbmc/XbmcMetadataSettings.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/NzbDrone.Core/Extras/Metadata/Consumers/Xbmc/XbmcMetadataSettings.cs b/src/NzbDrone.Core/Extras/Metadata/Consumers/Xbmc/XbmcMetadataSettings.cs index 013a077e15..f8729d442e 100644 --- a/src/NzbDrone.Core/Extras/Metadata/Consumers/Xbmc/XbmcMetadataSettings.cs +++ b/src/NzbDrone.Core/Extras/Metadata/Consumers/Xbmc/XbmcMetadataSettings.cs @@ -19,7 +19,7 @@ public class XbmcMetadataSettings : IProviderConfig public XbmcMetadataSettings() { MovieMetadata = true; - MoviMetadataURL = true; + MovieMetadataURL = true; MovieImages = true; UseMovieNfo = false; } @@ -28,7 +28,7 @@ public XbmcMetadataSettings() public bool MovieMetadata { get; set; } [FieldDefinition(1, Label = "Movie Metadata URL", Type = FieldType.Checkbox, HelpText = "Radarr will write the tmdb/imdb url in the .nfo file")] - public bool MoviMetadataURL { get; set; } + public bool MovieMetadataURL { get; set; } [FieldDefinition(2, Label = "Movie Images", Type = FieldType.Checkbox)] public bool MovieImages { get; set; } From 24cff4d6eec82afd50a07cf6a790a39b6187b10e Mon Sep 17 00:00:00 2001 From: FuNK3Y Date: Sun, 14 Oct 2018 14:24:36 +0200 Subject: [PATCH 3/7] Update XbmcMetadata.cs Fix typo --- .../Extras/Metadata/Consumers/Xbmc/XbmcMetadata.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NzbDrone.Core/Extras/Metadata/Consumers/Xbmc/XbmcMetadata.cs b/src/NzbDrone.Core/Extras/Metadata/Consumers/Xbmc/XbmcMetadata.cs index 57b916ddc2..6069f66630 100644 --- a/src/NzbDrone.Core/Extras/Metadata/Consumers/Xbmc/XbmcMetadata.cs +++ b/src/NzbDrone.Core/Extras/Metadata/Consumers/Xbmc/XbmcMetadata.cs @@ -203,7 +203,7 @@ public override MetadataFileResult MovieMetadata(Movie movie, MovieFile movieFil } } - if (Settings.MoviMetadataURL) + if (Settings.MovieMetadataURL) { _logger.Debug("Generating Movie Metadata URL for: {0}", Path.Combine(movie.Path, movieFile.RelativePath)); From e1fa7440da4295a998f224e86ed6320a2f8d5bd3 Mon Sep 17 00:00:00 2001 From: Leonardo Galli Date: Sat, 10 Nov 2018 16:16:50 +0100 Subject: [PATCH 4/7] Update src/NzbDrone.Core/Extras/Metadata/Consumers/Xbmc/XbmcMetadata.cs Co-Authored-By: FuNK3Y --- .../Extras/Metadata/Consumers/Xbmc/XbmcMetadata.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NzbDrone.Core/Extras/Metadata/Consumers/Xbmc/XbmcMetadata.cs b/src/NzbDrone.Core/Extras/Metadata/Consumers/Xbmc/XbmcMetadata.cs index 6069f66630..3fbf73726a 100644 --- a/src/NzbDrone.Core/Extras/Metadata/Consumers/Xbmc/XbmcMetadata.cs +++ b/src/NzbDrone.Core/Extras/Metadata/Consumers/Xbmc/XbmcMetadata.cs @@ -216,7 +216,7 @@ public override MetadataFileResult MovieMetadata(Movie movie, MovieFile movieFil var metadataFileName = GetMovieMetadataFilename(movieFile.RelativePath); - return xmlResult==string.Empty?null:new MetadataFileResult(metadataFileName, xmlResult.Trim(Environment.NewLine.ToCharArray())); + return xmlResult == string.Empty ? null : new MetadataFileResult(metadataFileName, xmlResult.Trim(Environment.NewLine.ToCharArray())); } public override List MovieImages(Movie movie) From e439fb00b57853a057f8aed8df7d9fddfac3d197 Mon Sep 17 00:00:00 2001 From: Leonardo Galli Date: Sat, 10 Nov 2018 16:20:39 +0100 Subject: [PATCH 5/7] As requested Co-Authored-By: FuNK3Y --- src/NzbDrone.Core/Extras/Metadata/Consumers/Xbmc/XbmcMetadata.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/NzbDrone.Core/Extras/Metadata/Consumers/Xbmc/XbmcMetadata.cs b/src/NzbDrone.Core/Extras/Metadata/Consumers/Xbmc/XbmcMetadata.cs index 3fbf73726a..51f898ea32 100644 --- a/src/NzbDrone.Core/Extras/Metadata/Consumers/Xbmc/XbmcMetadata.cs +++ b/src/NzbDrone.Core/Extras/Metadata/Consumers/Xbmc/XbmcMetadata.cs @@ -205,7 +205,6 @@ public override MetadataFileResult MovieMetadata(Movie movie, MovieFile movieFil } if (Settings.MovieMetadataURL) { - _logger.Debug("Generating Movie Metadata URL for: {0}", Path.Combine(movie.Path, movieFile.RelativePath)); xmlResult += "https://www.themoviedb.org/movie/" + movie.TmdbId; xmlResult += Environment.NewLine; From 85c0b95a3c584b6acff98a7574b8bb41488116d5 Mon Sep 17 00:00:00 2001 From: FuNK3Y Date: Tue, 16 Apr 2019 20:36:27 +0200 Subject: [PATCH 6/7] Update XbmcMetadata.cs Code styling --- .../Extras/Metadata/Consumers/Xbmc/XbmcMetadata.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/NzbDrone.Core/Extras/Metadata/Consumers/Xbmc/XbmcMetadata.cs b/src/NzbDrone.Core/Extras/Metadata/Consumers/Xbmc/XbmcMetadata.cs index 7ea0d4f510..ff314a6454 100644 --- a/src/NzbDrone.Core/Extras/Metadata/Consumers/Xbmc/XbmcMetadata.cs +++ b/src/NzbDrone.Core/Extras/Metadata/Consumers/Xbmc/XbmcMetadata.cs @@ -237,9 +237,7 @@ public override MetadataFileResult MovieMetadata(Movie movie, MovieFile movieFil public override List MovieImages(Movie movie) { if (!Settings.MovieImages) - { return new List(); - } return ProcessMovieImages(movie).ToList(); } From 64626b8bc3e4aeb223ca7443524949710095ec0c Mon Sep 17 00:00:00 2001 From: FuNK3Y Date: Tue, 16 Apr 2019 20:40:09 +0200 Subject: [PATCH 7/7] Update XbmcMetadata.cs Code styling again --- .../Extras/Metadata/Consumers/Xbmc/XbmcMetadata.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/NzbDrone.Core/Extras/Metadata/Consumers/Xbmc/XbmcMetadata.cs b/src/NzbDrone.Core/Extras/Metadata/Consumers/Xbmc/XbmcMetadata.cs index ff314a6454..5762c7ee4b 100644 --- a/src/NzbDrone.Core/Extras/Metadata/Consumers/Xbmc/XbmcMetadata.cs +++ b/src/NzbDrone.Core/Extras/Metadata/Consumers/Xbmc/XbmcMetadata.cs @@ -102,7 +102,6 @@ public override MetadataFile FindMetadataFile(Movie movie, string path) public override MetadataFileResult MovieMetadata(Movie movie, MovieFile movieFile) { - var xmlResult = string.Empty; if (Settings.MovieMetadata) { @@ -221,7 +220,6 @@ public override MetadataFileResult MovieMetadata(Movie movie, MovieFile movieFil } if (Settings.MovieMetadataURL) { - xmlResult += "https://www.themoviedb.org/movie/" + movie.TmdbId; xmlResult += Environment.NewLine; @@ -237,7 +235,9 @@ public override MetadataFileResult MovieMetadata(Movie movie, MovieFile movieFil public override List MovieImages(Movie movie) { if (!Settings.MovieImages) + { return new List(); + } return ProcessMovieImages(movie).ToList(); }