From ee1fa6e816f0bf836c21a5901bf3d282f6e45dfa Mon Sep 17 00:00:00 2001 From: LukePulverenti Luke Pulverenti luke pulverenti Date: Tue, 14 Aug 2012 12:06:46 -0400 Subject: Implemented some IBN functionality - GetPerson, GetYear, GetStudio, GetGenre --- MediaBrowser.Controller/Library/ItemController.cs | 109 ++++++++++++++++++---- 1 file changed, 90 insertions(+), 19 deletions(-) (limited to 'MediaBrowser.Controller/Library/ItemController.cs') diff --git a/MediaBrowser.Controller/Library/ItemController.cs b/MediaBrowser.Controller/Library/ItemController.cs index cfca9e2cc..0c62ce7d9 100644 --- a/MediaBrowser.Controller/Library/ItemController.cs +++ b/MediaBrowser.Controller/Library/ItemController.cs @@ -8,6 +8,7 @@ using MediaBrowser.Controller.Events; using MediaBrowser.Controller.IO; using MediaBrowser.Controller.Resolvers; using MediaBrowser.Model.Entities; +using MediaBrowser.Common.Configuration; namespace MediaBrowser.Controller.Library { @@ -57,41 +58,41 @@ namespace MediaBrowser.Controller.Library } #endregion - #region Item Events + #region BaseItem Events /// /// Called when an item is being created. /// This should be used to fill item values, such as metadata /// - public event EventHandler> ItemCreating; + public event EventHandler> BaseItemCreating; /// /// Called when an item has been created. /// This should be used to process or modify item values. /// - public event EventHandler> ItemCreated; + public event EventHandler> BaseItemCreated; #endregion /// /// Called when an item has been created /// - private void OnItemCreated(BaseItem item, Folder parent) + private void OnBaseItemCreated(BaseItem item, Folder parent) { GenericItemEventArgs args = new GenericItemEventArgs { Item = item }; - if (ItemCreating != null) + if (BaseItemCreating != null) { - ItemCreating(this, args); + BaseItemCreating(this, args); } - if (ItemCreated != null) + if (BaseItemCreated != null) { - ItemCreated(this, args); + BaseItemCreated(this, args); } } private void FireCreateEventsRecursive(Folder folder, Folder parent) { - OnItemCreated(folder, parent); + OnBaseItemCreated(folder, parent); int count = folder.Children.Length; @@ -107,7 +108,7 @@ namespace MediaBrowser.Controller.Library } else { - OnItemCreated(item, folder); + OnBaseItemCreated(item, folder); } }); } @@ -153,7 +154,7 @@ namespace MediaBrowser.Controller.Library } else { - OnItemCreated(item, parent); + OnBaseItemCreated(item, parent); } } @@ -299,28 +300,98 @@ namespace MediaBrowser.Controller.Library return returnFiles; } + /// + /// Gets a Person + /// public Person GetPerson(string name) { - // not yet implemented - return null; + string path = Path.Combine(ApplicationPaths.PeoplePath, name); + + return GetImagesByNameItem(path, name); } + /// + /// Gets a Studio + /// public Studio GetStudio(string name) { - // not yet implemented - return null; + string path = Path.Combine(ApplicationPaths.StudioPath, name); + + return GetImagesByNameItem(path, name); } + /// + /// Gets a Genre + /// public Genre GetGenre(string name) { - // not yet implemented - return null; + string path = Path.Combine(ApplicationPaths.GenrePath, name); + + return GetImagesByNameItem(path, name); } + /// + /// Gets a Year + /// public Year GetYear(int value) { - // not yet implemented - return null; + string path = Path.Combine(ApplicationPaths.YearPath, value.ToString()); + + return GetImagesByNameItem(path, value.ToString()); + } + + private Dictionary ImagesByNameItemCache = new Dictionary(); + + /// + /// Generically retrieves an IBN item + /// + private T GetImagesByNameItem(string path, string name) + where T : BaseEntity, new() + { + string key = path.ToLower(); + + // Look for it in the cache, if it's not there, create it + if (!ImagesByNameItemCache.ContainsKey(key)) + { + ImagesByNameItemCache[key] = CreateImagesByNameItem(path, name); + } + + return ImagesByNameItemCache[key] as T; + } + + /// + /// Creates an IBN item based on a given path + /// + private T CreateImagesByNameItem(string path, string name) + where T : BaseEntity, new () + { + T item = new T(); + + item.Name = name; + item.Id = Kernel.GetMD5(path); + + if (Directory.Exists(path)) + { + item.DateCreated = Directory.GetCreationTime(path); + item.DateModified = Directory.GetLastAccessTime(path); + if (File.Exists(Path.Combine(path, "folder.jpg"))) + { + item.PrimaryImagePath = Path.Combine(path, "folder.jpg"); + } + else if (File.Exists(Path.Combine(path, "folder.png"))) + { + item.PrimaryImagePath = Path.Combine(path, "folder.png"); + } + } + else + { + DateTime now = DateTime.Now; + + item.DateCreated = now; + item.DateModified = now; + } + + return item; } } } -- cgit v1.2.3