GameProviderFromXml.cs 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. using MediaBrowser.Common.IO;
  2. using MediaBrowser.Controller.Configuration;
  3. using MediaBrowser.Controller.Entities;
  4. using MediaBrowser.Controller.Providers;
  5. using MediaBrowser.Model.Logging;
  6. using MediaBrowser.Providers.Savers;
  7. using System;
  8. using System.IO;
  9. using System.Threading;
  10. using System.Threading.Tasks;
  11. namespace MediaBrowser.Providers.Games
  12. {
  13. public class GameProviderFromXml : BaseMetadataProvider
  14. {
  15. private readonly IFileSystem _fileSystem;
  16. /// <summary>
  17. ///
  18. /// </summary>
  19. /// <param name="logManager"></param>
  20. /// <param name="configurationManager"></param>
  21. public GameProviderFromXml(ILogManager logManager, IServerConfigurationManager configurationManager, IFileSystem fileSystem)
  22. : base(logManager, configurationManager)
  23. {
  24. _fileSystem = fileSystem;
  25. }
  26. /// <summary>
  27. ///
  28. /// </summary>
  29. /// <param name="item"></param>
  30. /// <returns></returns>
  31. public override bool Supports(BaseItem item)
  32. {
  33. return item is Game;
  34. }
  35. protected override bool NeedsRefreshBasedOnCompareDate(BaseItem item, BaseProviderInfo providerInfo)
  36. {
  37. var savePath = GameXmlSaver.GetGameSavePath(item);
  38. var xml = item.ResolveArgs.GetMetaFileByPath(savePath) ?? new FileInfo(savePath);
  39. if (!xml.Exists)
  40. {
  41. return false;
  42. }
  43. return _fileSystem.GetLastWriteTimeUtc(xml) > item.DateLastSaved;
  44. }
  45. /// <summary>
  46. ///
  47. /// </summary>
  48. /// <param name="item"></param>
  49. /// <param name="force"></param>
  50. /// <param name="cancellationToken"></param>
  51. /// <returns></returns>
  52. public override async Task<bool> FetchAsync(BaseItem item, bool force, BaseProviderInfo providerInfo, CancellationToken cancellationToken)
  53. {
  54. var game = (Game)item;
  55. cancellationToken.ThrowIfCancellationRequested();
  56. var metaFile = GameXmlSaver.GetGameSavePath(game);
  57. if (File.Exists(metaFile))
  58. {
  59. await XmlParsingResourcePool.WaitAsync(cancellationToken).ConfigureAwait(false);
  60. try
  61. {
  62. new GameXmlParser(Logger).Fetch(game, metaFile, cancellationToken);
  63. }
  64. finally
  65. {
  66. XmlParsingResourcePool.Release();
  67. }
  68. }
  69. SetLastRefreshed(game, DateTime.UtcNow, providerInfo);
  70. return true;
  71. }
  72. /// <summary>
  73. ///
  74. /// </summary>
  75. public override MetadataProviderPriority Priority
  76. {
  77. get { return MetadataProviderPriority.Second; }
  78. }
  79. }
  80. }