using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.IO; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Logging; using MediaBrowser.Providers.Savers; using System; using System.IO; using System.Threading; using System.Threading.Tasks; namespace MediaBrowser.Providers.Games { public class GameProviderFromXml : BaseMetadataProvider { /// /// /// /// /// public GameProviderFromXml(ILogManager logManager, IServerConfigurationManager configurationManager) : base(logManager, configurationManager) { } /// /// /// /// /// public override bool Supports(BaseItem item) { return item is Game; } protected override bool NeedsRefreshBasedOnCompareDate(BaseItem item, BaseProviderInfo providerInfo) { var savePath = GameXmlSaver.GetGameSavePath(item); var xml = item.ResolveArgs.GetMetaFileByPath(savePath) ?? new FileInfo(savePath); if (!xml.Exists) { return false; } return FileSystem.GetLastWriteTimeUtc(xml, Logger) > providerInfo.LastRefreshed; } /// /// /// /// /// /// /// public override Task FetchAsync(BaseItem item, bool force, CancellationToken cancellationToken) { return Fetch((Game)item, cancellationToken); } /// /// /// /// /// /// private async Task Fetch(Game game, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); var metaFile = GameXmlSaver.GetGameSavePath(game); if (File.Exists(metaFile)) { await XmlParsingResourcePool.WaitAsync(cancellationToken).ConfigureAwait(false); try { new GameXmlParser(Logger).Fetch(game, metaFile, cancellationToken); } finally { XmlParsingResourcePool.Release(); } } SetLastRefreshed(game, DateTime.UtcNow); return true; } /// /// /// public override MetadataProviderPriority Priority { get { return MetadataProviderPriority.Second; } } } }