diff --git a/src/NzbDrone.Core/Extras/Metadata/Consumers/Plex/PlexMetadata.cs b/src/NzbDrone.Core/Extras/Metadata/Consumers/Plex/PlexMetadata.cs new file mode 100644 index 000000000..bfe8e7220 --- /dev/null +++ b/src/NzbDrone.Core/Extras/Metadata/Consumers/Plex/PlexMetadata.cs @@ -0,0 +1,77 @@ +using System.Collections.Generic; +using System.IO; +using System.Text; +using NzbDrone.Common.Extensions; +using NzbDrone.Core.Extras.Metadata.Files; +using NzbDrone.Core.MediaFiles; +using NzbDrone.Core.Tv; + +namespace NzbDrone.Core.Extras.Metadata.Consumers.Plex +{ + public class PlexMetadata : MetadataBase + { + public override string Name => "Plex"; + + public override MetadataFile FindMetadataFile(Series series, string path) + { + var filename = Path.GetFileName(path); + + if (filename == null) + { + return null; + } + + var relativePath = series.Path.GetRelativePath(path); + + if (relativePath == ".plexmatch") + { + return new MetadataFile + { + SeriesId = series.Id, + Consumer = GetType().Name, + RelativePath = series.Path.GetRelativePath(path), + Type = MetadataType.SeriesMetadata + }; + } + + return null; + } + + public override MetadataFileResult SeriesMetadata(Series series) + { + if (!Settings.SeriesPlexMatchFile) + { + return null; + } + + var content = new StringBuilder(); + + content.AppendLine($"Title: {series.Title}"); + content.AppendLine($"Year: {series.Year}"); + content.AppendLine($"TvdbId: {series.TvdbId}"); + content.AppendLine($"ImdbId: {series.ImdbId}"); + + return new MetadataFileResult(".plexmatch", content.ToString()); + } + + public override MetadataFileResult EpisodeMetadata(Series series, EpisodeFile episodeFile) + { + return null; + } + + public override List SeriesImages(Series series) + { + return new List(); + } + + public override List SeasonImages(Series series, Season season) + { + return new List(); + } + + public override List EpisodeImages(Series series, EpisodeFile episodeFile) + { + return new List(); + } + } +} diff --git a/src/NzbDrone.Core/Extras/Metadata/Consumers/Plex/PlexMetadataSettings.cs b/src/NzbDrone.Core/Extras/Metadata/Consumers/Plex/PlexMetadataSettings.cs new file mode 100644 index 000000000..a13f5f34b --- /dev/null +++ b/src/NzbDrone.Core/Extras/Metadata/Consumers/Plex/PlexMetadataSettings.cs @@ -0,0 +1,32 @@ +using FluentValidation; +using NzbDrone.Core.Annotations; +using NzbDrone.Core.ThingiProvider; +using NzbDrone.Core.Validation; + +namespace NzbDrone.Core.Extras.Metadata.Consumers.Plex +{ + public class PlexMetadataSettingsValidator : AbstractValidator + { + public PlexMetadataSettingsValidator() + { + } + } + + public class PlexMetadataSettings : IProviderConfig + { + private static readonly PlexMetadataSettingsValidator Validator = new PlexMetadataSettingsValidator(); + + public PlexMetadataSettings() + { + SeriesPlexMatchFile = true; + } + + [FieldDefinition(0, Label = "Series Plex Match File", Type = FieldType.Checkbox, Section = MetadataSectionType.Metadata, HelpText = "Creates a .plexmatch file in the series folder")] + public bool SeriesPlexMatchFile { get; set; } + + public NzbDroneValidationResult Validate() + { + return new NzbDroneValidationResult(Validator.Validate(this)); + } + } +}