using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.IO; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Logging; 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 DateTime CompareDate(BaseItem item) { var xml = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, "game.xml")); return xml != null ? FileSystem.GetLastWriteTimeUtc(xml, Logger) : DateTime.MinValue; } /// /// /// /// /// /// /// 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 = Path.Combine(game.MetaLocation, "game.xml"); if (File.Exists(metaFile)) { await XmlParsingResourcePool.WaitAsync(cancellationToken).ConfigureAwait(false); try { new BaseItemXmlParser(Logger).Fetch(game, metaFile, cancellationToken); } finally { XmlParsingResourcePool.Release(); } } SetLastRefreshed(game, DateTime.UtcNow); return true; } /// /// /// public override MetadataProviderPriority Priority { get { return MetadataProviderPriority.First; } } } }