diff options
Diffstat (limited to 'MediaBrowser.Controller/Providers/TV/SeriesProviderFromXml.cs')
| -rw-r--r-- | MediaBrowser.Controller/Providers/TV/SeriesProviderFromXml.cs | 122 |
1 files changed, 86 insertions, 36 deletions
diff --git a/MediaBrowser.Controller/Providers/TV/SeriesProviderFromXml.cs b/MediaBrowser.Controller/Providers/TV/SeriesProviderFromXml.cs index 76d7e7ac1..728ac0549 100644 --- a/MediaBrowser.Controller/Providers/TV/SeriesProviderFromXml.cs +++ b/MediaBrowser.Controller/Providers/TV/SeriesProviderFromXml.cs @@ -1,36 +1,86 @@ -using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Entities.TV;
-using MediaBrowser.Controller.Library;
-using System.ComponentModel.Composition;
-using System.IO;
-using System.Threading.Tasks;
-
-namespace MediaBrowser.Controller.Providers.TV
-{
- [Export(typeof(BaseMetadataProvider))]
- public class SeriesProviderFromXml : BaseMetadataProvider
- {
- public override bool Supports(BaseEntity item)
- {
- return item is Series;
- }
-
- public override MetadataProviderPriority Priority
- {
- get { return MetadataProviderPriority.First; }
- }
-
- public override async Task FetchAsync(BaseEntity item, ItemResolveEventArgs args)
- {
- await Task.Run(() => Fetch(item, args)).ConfigureAwait(false);
- }
-
- private void Fetch(BaseEntity item, ItemResolveEventArgs args)
- {
- if (args.ContainsFile("series.xml"))
- {
- new SeriesXmlParser().Fetch(item as Series, Path.Combine(args.Path, "series.xml"));
- }
- }
- }
-}
+using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Entities.TV; +using MediaBrowser.Model.Entities; +using System; +using System.ComponentModel.Composition; +using System.IO; +using System.Threading; +using System.Threading.Tasks; + +namespace MediaBrowser.Controller.Providers.TV +{ + /// <summary> + /// Class SeriesProviderFromXml + /// </summary> + [Export(typeof(BaseMetadataProvider))] + public class SeriesProviderFromXml : BaseMetadataProvider + { + /// <summary> + /// Supportses the specified item. + /// </summary> + /// <param name="item">The item.</param> + /// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns> + public override bool Supports(BaseItem item) + { + return item is Series && item.LocationType == LocationType.FileSystem; + } + + /// <summary> + /// Gets the priority. + /// </summary> + /// <value>The priority.</value> + public override MetadataProviderPriority Priority + { + get { return MetadataProviderPriority.First; } + } + + /// <summary> + /// Override this to return the date that should be compared to the last refresh date + /// to determine if this provider should be re-fetched. + /// </summary> + /// <param name="item">The item.</param> + /// <returns>DateTime.</returns> + protected override DateTime CompareDate(BaseItem item) + { + var entry = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, "series.xml")); + return entry != null ? entry.Value.LastWriteTimeUtc : DateTime.MinValue; + } + + /// <summary> + /// Fetches metadata and returns true or false indicating if any work that requires persistence was done + /// </summary> + /// <param name="item">The item.</param> + /// <param name="force">if set to <c>true</c> [force].</param> + /// <param name="cancellationToken">The cancellation token.</param> + /// <returns>Task{System.Boolean}.</returns> + protected override Task<bool> FetchAsyncInternal(BaseItem item, bool force, CancellationToken cancellationToken) + { + return Task.Run(() => Fetch(item, cancellationToken)); + } + + /// <summary> + /// Fetches the specified item. + /// </summary> + /// <param name="item">The item.</param> + /// <param name="cancellationToken">The cancellation token.</param> + /// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns> + private bool Fetch(BaseItem item, CancellationToken cancellationToken) + { + cancellationToken.ThrowIfCancellationRequested(); + + var metadataFile = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, "series.xml")); + + if (metadataFile.HasValue) + { + var path = metadataFile.Value.Path; + + new SeriesXmlParser().Fetch((Series)item, path, cancellationToken); + SetLastRefreshed(item, DateTime.UtcNow); + + return true; + } + + return false; + } + } +} |
