From 946c0e8256d61d5084efdd2196eef455fa13b89b Mon Sep 17 00:00:00 2001 From: ebr11 Eric Reed spam Date: Mon, 17 Sep 2012 16:08:32 -0400 Subject: [PATCH] Initial metadata provider hook in. No refresh intelligence yet. --- .../Entities/BaseEntity.cs | 48 +++++++++++++++++++ MediaBrowser.Controller/Entities/BaseItem.cs | 42 ---------------- MediaBrowser.Controller/Kernel.cs | 9 ++-- .../Library/ItemController.cs | 2 +- 4 files changed, 53 insertions(+), 48 deletions(-) diff --git a/MediaBrowser.Controller/Entities/BaseEntity.cs b/MediaBrowser.Controller/Entities/BaseEntity.cs index 53b42da01d..7f0ea12b80 100644 --- a/MediaBrowser.Controller/Entities/BaseEntity.cs +++ b/MediaBrowser.Controller/Entities/BaseEntity.cs @@ -1,4 +1,8 @@ using System; +using System.Collections.Generic; +using System.Linq; +using MediaBrowser.Controller.Library; +using MediaBrowser.Controller.IO; namespace MediaBrowser.Controller.Entities { @@ -11,6 +15,10 @@ namespace MediaBrowser.Controller.Entities public Guid Id { get; set; } + public string Path { get; set; } + + public Folder Parent { get; set; } + public string PrimaryImagePath { get; set; } public DateTime DateCreated { get; set; } @@ -21,5 +29,45 @@ namespace MediaBrowser.Controller.Entities { return Name; } + + protected ItemResolveEventArgs _resolveArgs; + /// + /// We attach these to the item so that we only ever have to hit the file system once + /// (this includes the children of the containing folder) + /// Use ResolveArgs.FileSystemChildren to check for the existence of files instead of File.Exists + /// + public ItemResolveEventArgs ResolveArgs + { + get + { + if (_resolveArgs == null) + { + _resolveArgs = new ItemResolveEventArgs() + { + FileInfo = FileData.GetFileData(this.Path), + Parent = this.Parent, + Cancel = false, + Path = this.Path + }; + _resolveArgs = FileSystemHelper.FilterChildFileSystemEntries(_resolveArgs, (this.Parent != null && this.Parent.IsRoot)); + } + return _resolveArgs; + } + set + { + _resolveArgs = value; + } + } + + /// + /// Refresh metadata on us by execution our provider chain + /// + /// true if a provider reports we changed + public bool RefreshMetadata() + { + Kernel.Instance.ExecuteMetadataProviders(this).ConfigureAwait(false); + return true; + } + } } diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs index dc148da36b..984584e9a5 100644 --- a/MediaBrowser.Controller/Entities/BaseItem.cs +++ b/MediaBrowser.Controller/Entities/BaseItem.cs @@ -9,35 +9,6 @@ namespace MediaBrowser.Controller.Entities { public abstract class BaseItem : BaseEntity, IHasProviderIds { - protected ItemResolveEventArgs _resolveArgs; - /// - /// We attach these to the item so that we only ever have to hit the file system once - /// (this includes the children of the containing folder) - /// Use ResolveArgs.FileSystemChildren to check for the existence of files instead of File.Exists - /// - public ItemResolveEventArgs ResolveArgs - { - get - { - if (_resolveArgs == null) - { - _resolveArgs = new ItemResolveEventArgs() - { - FileInfo = FileData.GetFileData(this.Path), - Parent = this.Parent, - Cancel = false, - Path = this.Path - }; - _resolveArgs = FileSystemHelper.FilterChildFileSystemEntries(_resolveArgs, (this.Parent != null && this.Parent.IsRoot)); - } - return _resolveArgs; - } - set - { - _resolveArgs = value; - } - } - public string SortName { get; set; } /// @@ -45,10 +16,6 @@ namespace MediaBrowser.Controller.Entities /// public DateTime? PremiereDate { get; set; } - public string Path { get; set; } - - public Folder Parent { get; set; } - public string LogoImagePath { get; set; } public string ArtImagePath { get; set; } @@ -177,15 +144,6 @@ namespace MediaBrowser.Controller.Entities return changed; } - /// - /// Refresh metadata on us by execution our provider chain - /// - /// true if a provider reports we changed - public bool RefreshMetadata() - { - return false; - } - /// /// Determines if the item is considered new based on user settings /// diff --git a/MediaBrowser.Controller/Kernel.cs b/MediaBrowser.Controller/Kernel.cs index b8243d65fe..cf4450aec5 100644 --- a/MediaBrowser.Controller/Kernel.cs +++ b/MediaBrowser.Controller/Kernel.cs @@ -118,9 +118,6 @@ namespace MediaBrowser.Controller //watch the root folder children for changes RootFolder.ChildrenChanged += RootFolder_ChildrenChanged; - System.Threading.Thread.Sleep(25000); - var allChildren = RootFolder.RecursiveChildren; - Logger.LogInfo(string.Format("Loading complete. Movies: {0} Episodes: {1}", allChildren.OfType().Count(), allChildren.OfType().Count())); } protected override void OnComposablePartsLoaded() @@ -180,6 +177,8 @@ namespace MediaBrowser.Controller //re-start the directory watchers DirectoryWatchers.Stop(); DirectoryWatchers.Start(); + var allChildren = RootFolder.RecursiveChildren; + Logger.LogInfo(string.Format("Loading complete. Movies: {0} Episodes: {1}", allChildren.OfType().Count(), allChildren.OfType().Count())); } /// @@ -328,7 +327,7 @@ namespace MediaBrowser.Controller /// /// Runs all metadata providers for an entity /// - internal async Task ExecuteMetadataProviders(BaseEntity item, ItemResolveEventArgs args, bool allowInternetProviders = true) + internal async Task ExecuteMetadataProviders(BaseEntity item, bool allowInternetProviders = true) { // Run them sequentially in order of priority for (int i = 0; i < MetadataProviders.Length; i++) @@ -349,7 +348,7 @@ namespace MediaBrowser.Controller try { - await provider.FetchAsync(item, args).ConfigureAwait(false); + await provider.FetchAsync(item, item.ResolveArgs).ConfigureAwait(false); } catch (Exception ex) { diff --git a/MediaBrowser.Controller/Library/ItemController.cs b/MediaBrowser.Controller/Library/ItemController.cs index 7ef1c17a11..dd08c193e7 100644 --- a/MediaBrowser.Controller/Library/ItemController.cs +++ b/MediaBrowser.Controller/Library/ItemController.cs @@ -217,7 +217,7 @@ namespace MediaBrowser.Controller.Library args.FileInfo = FileData.GetFileData(path); args.FileSystemChildren = FileData.GetFileSystemEntries(path, "*").ToArray(); - await Kernel.Instance.ExecuteMetadataProviders(item, args).ConfigureAwait(false); + await Kernel.Instance.ExecuteMetadataProviders(item).ConfigureAwait(false); return item; }