From 937d27ae9d6aa571ab9327f138bfba1b84c158db Mon Sep 17 00:00:00 2001 From: LukePulverenti Luke Pulverenti luke pulverenti Date: Sun, 19 Aug 2012 16:38:31 -0400 Subject: One async call leads to another, and another, all the way up the call stack... --- MediaBrowser.Controller/Library/ItemController.cs | 60 +++++++++++++---------- 1 file changed, 33 insertions(+), 27 deletions(-) (limited to 'MediaBrowser.Controller/Library/ItemController.cs') diff --git a/MediaBrowser.Controller/Library/ItemController.cs b/MediaBrowser.Controller/Library/ItemController.cs index 4b0d9a983..bc5cea79b 100644 --- a/MediaBrowser.Controller/Library/ItemController.cs +++ b/MediaBrowser.Controller/Library/ItemController.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Concurrent; using System.Collections.Generic; using System.IO; using System.Linq; @@ -217,49 +218,49 @@ namespace MediaBrowser.Controller.Library /// /// Gets a Person /// - public Person GetPerson(string name) + public async Task GetPerson(string name) { string path = Path.Combine(Kernel.Instance.ApplicationPaths.PeoplePath, name); - return GetImagesByNameItem(path, name); + return await GetImagesByNameItem(path, name); } /// /// Gets a Studio /// - public Studio GetStudio(string name) + public async Task GetStudio(string name) { string path = Path.Combine(Kernel.Instance.ApplicationPaths.StudioPath, name); - return GetImagesByNameItem(path, name); + return await GetImagesByNameItem(path, name); } /// /// Gets a Genre /// - public Genre GetGenre(string name) + public async Task GetGenre(string name) { string path = Path.Combine(Kernel.Instance.ApplicationPaths.GenrePath, name); - return GetImagesByNameItem(path, name); + return await GetImagesByNameItem(path, name); } /// /// Gets a Year /// - public Year GetYear(int value) + public async Task GetYear(int value) { string path = Path.Combine(Kernel.Instance.ApplicationPaths.YearPath, value.ToString()); - return GetImagesByNameItem(path, value.ToString()); + return await GetImagesByNameItem(path, value.ToString()); } - private Dictionary ImagesByNameItemCache = new Dictionary(); + private ConcurrentDictionary ImagesByNameItemCache = new ConcurrentDictionary(); /// /// Generically retrieves an IBN item /// - private T GetImagesByNameItem(string path, string name) + private async Task GetImagesByNameItem(string path, string name) where T : BaseEntity, new() { string key = path.ToLower(); @@ -267,7 +268,9 @@ namespace MediaBrowser.Controller.Library // Look for it in the cache, if it's not there, create it if (!ImagesByNameItemCache.ContainsKey(key)) { - ImagesByNameItemCache[key] = CreateImagesByNameItem(path, name); + T obj = await CreateImagesByNameItem(path, name); + ImagesByNameItemCache[key] = obj; + return obj; } return ImagesByNameItemCache[key] as T; @@ -276,7 +279,7 @@ namespace MediaBrowser.Controller.Library /// /// Creates an IBN item based on a given path /// - private T CreateImagesByNameItem(string path, string name) + private async Task CreateImagesByNameItem(string path, string name) where T : BaseEntity, new() { T item = new T(); @@ -284,25 +287,28 @@ namespace MediaBrowser.Controller.Library item.Name = name; item.Id = Kernel.GetMD5(path); - if (Directory.Exists(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"); - } + Directory.CreateDirectory(path); } - else + + 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"))) { - DateTime now = DateTime.Now; + item.PrimaryImagePath = Path.Combine(path, "folder.png"); + } + + var b = false; - item.DateCreated = now; - item.DateModified = now; + if (b) + { + await Kernel.Instance.ExecuteMetadataProviders(item, null); } return item; -- cgit v1.2.3