#pragma warning disable CS1591 using System; using System.IO; using System.Threading; using System.Threading.Tasks; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.IO; using MediaBrowser.XbmcMetadata.Savers; namespace MediaBrowser.XbmcMetadata.Providers { public abstract class BaseNfoProvider : ILocalMetadataProvider, IHasItemChangeMonitor where T : BaseItem, new() { private readonly IFileSystem _fileSystem; protected BaseNfoProvider(IFileSystem fileSystem) { _fileSystem = fileSystem; } /// public string Name => BaseNfoSaver.SaverName; /// public Task> GetMetadata( ItemInfo info, IDirectoryService directoryService, CancellationToken cancellationToken) { var result = new MetadataResult(); var file = GetXmlFile(info, directoryService); if (file is null) { return Task.FromResult(result); } var path = file.FullName; try { result.Item = new T { IndexNumber = info.IndexNumber }; Fetch(result, path, cancellationToken); result.HasMetadata = true; } catch (FileNotFoundException) { result.HasMetadata = false; } catch (IOException) { result.HasMetadata = false; } return Task.FromResult(result); } /// public bool HasChanged(BaseItem item, IDirectoryService directoryService) { var file = GetXmlFile(new ItemInfo(item), directoryService); if (file?.Exists is not true) { return false; } var fileTime = _fileSystem.GetLastWriteTimeUtc(file); // 1 minute tolerance to avoid detecting our own file writes return (fileTime - item.DateLastSaved) > TimeSpan.FromMinutes(1); } protected abstract void Fetch(MetadataResult result, string path, CancellationToken cancellationToken); protected abstract FileSystemMetadata? GetXmlFile(ItemInfo info, IDirectoryService directoryService); } }