New: Support for .plexmatch series metadata files

Closes #4960
This commit is contained in:
Mark McDowall 2023-02-20 15:08:26 -08:00
parent 6740257135
commit 890f107467
2 changed files with 109 additions and 0 deletions

View File

@ -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<PlexMetadataSettings>
{
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<ImageFileResult> SeriesImages(Series series)
{
return new List<ImageFileResult>();
}
public override List<ImageFileResult> SeasonImages(Series series, Season season)
{
return new List<ImageFileResult>();
}
public override List<ImageFileResult> EpisodeImages(Series series, EpisodeFile episodeFile)
{
return new List<ImageFileResult>();
}
}
}

View File

@ -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<PlexMetadataSettings>
{
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));
}
}
}