mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-06-02 05:48:47 +01:00
cleanup repeated querying within CollectionFolder
This commit is contained in:
@@ -1,5 +1,4 @@
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
@@ -69,37 +68,41 @@ 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
|
||||
{
|
||||
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();
|
||||
|
||||
}
|
||||
get { return _linkedChildren ?? (_linkedChildren = GetLinkedChildrenInternal()); }
|
||||
set
|
||||
{
|
||||
base.LinkedChildren = value;
|
||||
}
|
||||
}
|
||||
private List<LinkedChild> GetLinkedChildrenInternal()
|
||||
{
|
||||
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();
|
||||
}
|
||||
|
||||
private IEnumerable<BaseItem> _actualChildren;
|
||||
|
||||
/// <summary>
|
||||
/// Our children are actually just references to the ones in the physical root...
|
||||
@@ -107,26 +110,34 @@ namespace MediaBrowser.Controller.Entities
|
||||
/// <value>The actual children.</value>
|
||||
protected override IEnumerable<BaseItem> ActualChildren
|
||||
{
|
||||
get
|
||||
get { return _actualChildren ?? (_actualChildren = GetActualChildren()); }
|
||||
}
|
||||
|
||||
private IEnumerable<BaseItem> GetActualChildren()
|
||||
{
|
||||
Dictionary<string, string> locationsDicionary;
|
||||
|
||||
try
|
||||
{
|
||||
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 BaseItem[] { };
|
||||
}
|
||||
|
||||
return
|
||||
LibraryManager.RootFolder.Children
|
||||
.OfType<Folder>()
|
||||
.Where(i => i.Path != null && locationsDicionary.ContainsKey(i.Path))
|
||||
.SelectMany(c => c.Children);
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user