using System; using System.Collections.Generic; using System.IO; using FluentValidation.Results; using NzbDrone.Core.Extras.Metadata.Files; using NzbDrone.Core.MediaFiles; using NzbDrone.Core.ThingiProvider; using NzbDrone.Core.Tv; namespace NzbDrone.Core.Extras.Metadata { public abstract class MetadataBase : IMetadata where TSettings : IProviderConfig, new() { public abstract string Name { get; } public Type ConfigContract => typeof(TSettings); public virtual ProviderMessage Message => null; public IEnumerable DefaultDefinitions => new List(); public ProviderDefinition Definition { get; set; } public ValidationResult Test() { return new ValidationResult(); } public virtual string GetFilenameAfterMove(Series series, EpisodeFile episodeFile, MetadataFile metadataFile) { var existingFilename = Path.Combine(series.Path, metadataFile.RelativePath); var extension = Path.GetExtension(existingFilename).TrimStart('.'); var newFileName = Path.ChangeExtension(Path.Combine(series.Path, episodeFile.RelativePath), extension); return newFileName; } public abstract MetadataFile FindMetadataFile(Series series, string path); public abstract MetadataFileResult SeriesMetadata(Series series, SeriesMetadataReason reason); public abstract MetadataFileResult EpisodeMetadata(Series series, EpisodeFile episodeFile); public abstract List SeriesImages(Series series); public abstract List SeasonImages(Series series, Season season); public abstract List EpisodeImages(Series series, EpisodeFile episodeFile); public virtual object RequestAction(string action, IDictionary query) { return null; } protected TSettings Settings => (TSettings)Definition.Settings; public override string ToString() { return GetType().Name; } } }