2
0

BaseNfoProvider.cs 2.3 KB

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