BaseNfoProvider.cs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. #pragma warning disable CS1591
  2. using System.IO;
  3. using System.Threading;
  4. using System.Threading.Tasks;
  5. using MediaBrowser.Controller.Entities;
  6. using MediaBrowser.Controller.Providers;
  7. using MediaBrowser.Model.IO;
  8. using MediaBrowser.XbmcMetadata.Savers;
  9. namespace MediaBrowser.XbmcMetadata.Providers
  10. {
  11. public abstract class BaseNfoProvider<T> : ILocalMetadataProvider<T>, IHasItemChangeMonitor
  12. where T : BaseItem, new()
  13. {
  14. private IFileSystem _fileSystem;
  15. protected BaseNfoProvider(IFileSystem fileSystem)
  16. {
  17. _fileSystem = fileSystem;
  18. }
  19. /// <inheritdoc />
  20. public string Name => BaseNfoSaver.SaverName;
  21. /// <inheritdoc />
  22. public Task<MetadataResult<T>> GetMetadata(
  23. ItemInfo info,
  24. IDirectoryService directoryService,
  25. CancellationToken cancellationToken)
  26. {
  27. var result = new MetadataResult<T>();
  28. var file = GetXmlFile(info, directoryService);
  29. if (file == null)
  30. {
  31. return Task.FromResult(result);
  32. }
  33. var path = file.FullName;
  34. try
  35. {
  36. result.Item = new T();
  37. Fetch(result, path, cancellationToken);
  38. result.HasMetadata = true;
  39. }
  40. catch (FileNotFoundException)
  41. {
  42. result.HasMetadata = false;
  43. }
  44. catch (IOException)
  45. {
  46. result.HasMetadata = false;
  47. }
  48. return Task.FromResult(result);
  49. }
  50. /// <inheritdoc />
  51. public bool HasChanged(BaseItem item, IDirectoryService directoryService)
  52. {
  53. var file = GetXmlFile(new ItemInfo(item), directoryService);
  54. if (file == null)
  55. {
  56. return false;
  57. }
  58. return file.Exists && _fileSystem.GetLastWriteTimeUtc(file) > item.DateLastSaved;
  59. }
  60. protected abstract void Fetch(MetadataResult<T> result, string path, CancellationToken cancellationToken);
  61. protected abstract FileSystemMetadata GetXmlFile(ItemInfo info, IDirectoryService directoryService);
  62. }
  63. }