aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2014-02-22 15:20:22 -0500
committerLuke Pulverenti <luke.pulverenti@gmail.com>2014-02-22 15:20:22 -0500
commitb52d99568b8917e5743dd67e531604753a16bb4e (patch)
treeeb48c9adb37ec65d0099d31812d6ee9486d0a1f0 /MediaBrowser.Server.Implementations
parent014c06ea43bba32da4f64e3f64717dba19468335 (diff)
consolidate ibn api a bit
Diffstat (limited to 'MediaBrowser.Server.Implementations')
-rw-r--r--MediaBrowser.Server.Implementations/Library/LibraryManager.cs85
1 files changed, 46 insertions, 39 deletions
diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
index 5bc1ff45a..b59e95c72 100644
--- a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
+++ b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
@@ -279,7 +279,7 @@ namespace MediaBrowser.Server.Implementations.Library
if (ibnPathChanged)
{
- _itemsByName.Clear();
+ RemoveItemsByNameFromCache();
}
var newSeasonZeroName = ConfigurationManager.Configuration.SeasonZeroDisplayName;
@@ -302,6 +302,32 @@ namespace MediaBrowser.Server.Implementations.Library
});
}
+ private void RemoveItemsByNameFromCache()
+ {
+ RemoveItemsFromCache(i => i is Person);
+ RemoveItemsFromCache(i => i is Year);
+ RemoveItemsFromCache(i => i is Genre);
+ RemoveItemsFromCache(i => i is MusicGenre);
+ RemoveItemsFromCache(i => i is GameGenre);
+ RemoveItemsFromCache(i => i is Studio);
+ RemoveItemsFromCache(i =>
+ {
+ var artist = i as MusicArtist;
+ return artist != null && artist.IsAccessedByName;
+ });
+ }
+
+ private void RemoveItemsFromCache(Func<BaseItem, bool> remove)
+ {
+ var items = _libraryItemsCache.ToList().Where(i => remove(i.Value)).ToList();
+
+ foreach (var item in items)
+ {
+ BaseItem value;
+ _libraryItemsCache.TryRemove(item.Key, out value);
+ }
+ }
+
/// <summary>
/// Updates the season zero names.
/// </summary>
@@ -378,28 +404,17 @@ namespace MediaBrowser.Server.Implementations.Library
/// <param name="item">The item.</param>
private void UpdateItemInLibraryCache(BaseItem item)
{
- if (item is IItemByName)
- {
- var hasDualAccess = item as IHasDualAccess;
- if (hasDualAccess != null)
- {
- if (hasDualAccess.IsAccessedByName)
- {
- return;
- }
- }
- else
- {
- return;
- }
- }
-
RegisterItem(item);
}
public void RegisterItem(BaseItem item)
{
- LibraryItemsCache.AddOrUpdate(item.Id, item, delegate { return item; });
+ RegisterItem(item.Id, item);
+ }
+
+ private void RegisterItem(Guid id, BaseItem item)
+ {
+ LibraryItemsCache.AddOrUpdate(id, item, delegate { return item; });
}
public async Task DeleteItem(BaseItem item, DeleteOptions options)
@@ -580,7 +595,7 @@ namespace MediaBrowser.Server.Implementations.Library
var flattenFolderDepth = isPhysicalRoot ? 2 : 0;
var fileSystemDictionary = FileData.GetFilteredFileSystemEntries(directoryService, args.Path, _fileSystem, _logger, args, flattenFolderDepth: flattenFolderDepth, resolveShortcuts: isPhysicalRoot || args.IsVf);
-
+
// Need to remove subpaths that may have been resolved from shortcuts
// Example: if \\server\movies exists, then strip out \\server\movies\action
if (isPhysicalRoot)
@@ -790,11 +805,6 @@ namespace MediaBrowser.Server.Implementations.Library
return GetItemByName<MusicArtist>(ConfigurationManager.ApplicationPaths.ArtistsPath, name);
}
- /// <summary>
- /// The images by name item cache
- /// </summary>
- private readonly ConcurrentDictionary<string, BaseItem> _itemsByName = new ConcurrentDictionary<string, BaseItem>(StringComparer.OrdinalIgnoreCase);
-
private T GetItemByName<T>(string path, string name)
where T : BaseItem, new()
{
@@ -812,24 +822,26 @@ namespace MediaBrowser.Server.Implementations.Library
string subFolderPrefix = null;
- if (typeof(T) == typeof(Person) && ConfigurationManager.Configuration.EnablePeoplePrefixSubFolders)
+ var type = typeof(T);
+
+ if (type == typeof(Person) && ConfigurationManager.Configuration.EnablePeoplePrefixSubFolders)
{
subFolderPrefix = validFilename.Substring(0, 1);
}
- var key = string.IsNullOrEmpty(subFolderPrefix) ?
+ var fullPath = string.IsNullOrEmpty(subFolderPrefix) ?
Path.Combine(path, validFilename) :
Path.Combine(path, subFolderPrefix, validFilename);
+ var id = fullPath.GetMBId(type);
+
BaseItem obj;
- if (!_itemsByName.TryGetValue(key, out obj))
+ if (!_libraryItemsCache.TryGetValue(id, out obj))
{
- var tuple = CreateItemByName<T>(key, name);
+ obj = CreateItemByName<T>(fullPath, name, id);
- obj = tuple.Item2;
-
- _itemsByName.AddOrUpdate(key, obj, (keyName, oldValue) => obj);
+ RegisterItem(id, obj);
}
return obj as T;
@@ -843,7 +855,7 @@ namespace MediaBrowser.Server.Implementations.Library
/// <param name="name">The name.</param>
/// <returns>Task{``0}.</returns>
/// <exception cref="System.IO.IOException">Path not created: + path</exception>
- private Tuple<bool, T> CreateItemByName<T>(string path, string name)
+ private T CreateItemByName<T>(string path, string name, Guid id)
where T : BaseItem, new()
{
var isArtist = typeof(T) == typeof(MusicArtist);
@@ -856,7 +868,7 @@ namespace MediaBrowser.Server.Implementations.Library
if (existing != null)
{
- return new Tuple<bool, T>(false, existing);
+ return existing;
}
}
@@ -877,10 +889,6 @@ namespace MediaBrowser.Server.Implementations.Library
isNew = true;
}
- var type = typeof(T);
-
- var id = path.GetMBId(type);
-
var item = isNew ? null : RetrieveItem(id) as T;
if (item == null)
@@ -893,7 +901,6 @@ namespace MediaBrowser.Server.Implementations.Library
DateModified = _fileSystem.GetLastWriteTimeUtc(fileInfo),
Path = path
};
- isNew = true;
}
if (isArtist)
@@ -901,7 +908,7 @@ namespace MediaBrowser.Server.Implementations.Library
(item as MusicArtist).IsAccessedByName = true;
}
- return new Tuple<bool, T>(isNew, item);
+ return item;
}
/// <summary>