cleanup repeated querying within CollectionFolder

pull/702/head
Luke Pulverenti 11 years ago
parent cb839f9f25
commit d580abcd65

@ -1,5 +1,4 @@
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.IO;
using System.Linq;
@ -69,64 +68,76 @@ namespace MediaBrowser.Controller.Entities
return NullTaskResult;
}
private List<LinkedChild> _linkedChildren;
/// <summary>
/// Our children are actually just references to the ones in the physical root...
/// </summary>
/// <value>The linked children.</value>
public override List<LinkedChild> LinkedChildren
{
get
get { return _linkedChildren ?? (_linkedChildren = GetLinkedChildrenInternal()); }
set
{
Dictionary<string, string> locationsDicionary;
try
{
locationsDicionary = ResolveArgs.PhysicalLocations.ToDictionary(i => i, StringComparer.OrdinalIgnoreCase);
}
catch (IOException ex)
{
Logger.ErrorException("Error getting ResolveArgs for {0}", ex, Path);
return new List<LinkedChild>();
}
return LibraryManager.RootFolder.Children
.OfType<Folder>()
.Where(i => i.Path != null && locationsDicionary.ContainsKey(i.Path))
.SelectMany(c => c.LinkedChildren).ToList();
base.LinkedChildren = value;
}
}
private List<LinkedChild> GetLinkedChildrenInternal()
{
Dictionary<string, string> locationsDicionary;
try
{
locationsDicionary = ResolveArgs.PhysicalLocations.ToDictionary(i => i, StringComparer.OrdinalIgnoreCase);
}
set
catch (IOException ex)
{
base.LinkedChildren = value;
Logger.ErrorException("Error getting ResolveArgs for {0}", ex, Path);
return new List<LinkedChild>();
}
return LibraryManager.RootFolder.Children
.OfType<Folder>()
.Where(i => i.Path != null && locationsDicionary.ContainsKey(i.Path))
.SelectMany(c => c.LinkedChildren).ToList();
}
private IEnumerable<BaseItem> _actualChildren;
/// <summary>
/// Our children are actually just references to the ones in the physical root...
/// </summary>
/// <value>The actual children.</value>
protected override IEnumerable<BaseItem> ActualChildren
{
get
{
Dictionary<string, string> locationsDicionary;
get { return _actualChildren ?? (_actualChildren = GetActualChildren()); }
}
try
{
locationsDicionary = ResolveArgs.PhysicalLocations.ToDictionary(i => i, StringComparer.OrdinalIgnoreCase);
}
catch (IOException ex)
{
Logger.ErrorException("Error getting ResolveArgs for {0}", ex, Path);
return new BaseItem[] { };
}
private IEnumerable<BaseItem> GetActualChildren()
{
Dictionary<string, string> locationsDicionary;
return
LibraryManager.RootFolder.Children
.OfType<Folder>()
.Where(i => i.Path != null && locationsDicionary.ContainsKey(i.Path))
.SelectMany(c => c.Children);
try
{
locationsDicionary = ResolveArgs.PhysicalLocations.ToDictionary(i => i, StringComparer.OrdinalIgnoreCase);
}
catch (IOException ex)
{
Logger.ErrorException("Error getting ResolveArgs for {0}", ex, Path);
return new BaseItem[] { };
}
return
LibraryManager.RootFolder.Children
.OfType<Folder>()
.Where(i => i.Path != null && locationsDicionary.ContainsKey(i.Path))
.SelectMany(c => c.Children);
}
public void ResetDynamicChildren()
{
_actualChildren = null;
_linkedChildren = null;
}
}
}

@ -1283,6 +1283,8 @@ namespace MediaBrowser.Server.Implementations.Library
UpdateItemInLibraryCache(item);
}
UpdateCollectionFolders();
if (ItemAdded != null)
{
foreach (var item in list)
@ -1336,6 +1338,8 @@ namespace MediaBrowser.Server.Implementations.Library
/// <param name="item">The item.</param>
public void ReportItemRemoved(BaseItem item)
{
UpdateCollectionFolders();
if (ItemRemoved != null)
{
try
@ -1349,6 +1353,14 @@ namespace MediaBrowser.Server.Implementations.Library
}
}
private void UpdateCollectionFolders()
{
foreach (var folder in _userManager.Users.SelectMany(i => i.RootFolder.Children).OfType<CollectionFolder>().ToList())
{
folder.ResetDynamicChildren();
}
}
/// <summary>
/// Retrieves the item.
/// </summary>

Loading…
Cancel
Save