| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 | #pragma warning disable CS1591using 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<T> : ILocalMetadataProvider<T>, IHasItemChangeMonitor        where T : BaseItem, new()    {        private readonly IFileSystem _fileSystem;        protected BaseNfoProvider(IFileSystem fileSystem)        {            _fileSystem = fileSystem;        }        /// <inheritdoc />        public string Name => BaseNfoSaver.SaverName;        /// <inheritdoc />        public Task<MetadataResult<T>> GetMetadata(            ItemInfo info,            IDirectoryService directoryService,            CancellationToken cancellationToken)        {            var result = new MetadataResult<T>();            var file = GetXmlFile(info, directoryService);            if (file is null)            {                return Task.FromResult(result);            }            var path = file.FullName;            try            {                result.Item = new T();                Fetch(result, path, cancellationToken);                result.HasMetadata = true;            }            catch (FileNotFoundException)            {                result.HasMetadata = false;            }            catch (IOException)            {                result.HasMetadata = false;            }            return Task.FromResult(result);        }        /// <inheritdoc />        public bool HasChanged(BaseItem item, IDirectoryService directoryService)        {            var file = GetXmlFile(new ItemInfo(item), directoryService);            if (file is null)            {                return false;            }            return file.Exists && _fileSystem.GetLastWriteTimeUtc(file) > item.DateLastSaved;        }        protected abstract void Fetch(MetadataResult<T> result, string path, CancellationToken cancellationToken);        protected abstract FileSystemMetadata? GetXmlFile(ItemInfo info, IDirectoryService directoryService);    }}
 |