mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-04-20 09:04:42 +01:00
reduce task allocations by making IBN api synchronous
This commit is contained in:
@@ -38,8 +38,8 @@ namespace MediaBrowser.Server.Implementations.Dto
|
||||
_userManager = userManager;
|
||||
_userDataRepository = userDataRepository;
|
||||
_itemRepo = itemRepo;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Converts a BaseItem to a DTOBaseItem
|
||||
/// </summary>
|
||||
@@ -63,16 +63,9 @@ namespace MediaBrowser.Server.Implementations.Dto
|
||||
|
||||
var dto = new BaseItemDto();
|
||||
|
||||
var tasks = new List<Task>();
|
||||
|
||||
if (fields.Contains(ItemFields.Studios))
|
||||
{
|
||||
tasks.Add(AttachStudios(dto, item));
|
||||
}
|
||||
|
||||
if (fields.Contains(ItemFields.People))
|
||||
{
|
||||
tasks.Add(AttachPeople(dto, item));
|
||||
AttachPeople(dto, item);
|
||||
}
|
||||
|
||||
if (fields.Contains(ItemFields.PrimaryImageAspectRatio))
|
||||
@@ -98,6 +91,11 @@ namespace MediaBrowser.Server.Implementations.Dto
|
||||
AttachUserSpecificInfo(dto, item, user, fields);
|
||||
}
|
||||
|
||||
if (fields.Contains(ItemFields.Studios))
|
||||
{
|
||||
AttachStudios(dto, item);
|
||||
}
|
||||
|
||||
AttachBasicFields(dto, item, owner, fields);
|
||||
|
||||
if (fields.Contains(ItemFields.SoundtrackIds))
|
||||
@@ -116,12 +114,6 @@ namespace MediaBrowser.Server.Implementations.Dto
|
||||
}
|
||||
}
|
||||
|
||||
// Make sure all the tasks we kicked off have completed.
|
||||
if (tasks.Count > 0)
|
||||
{
|
||||
await Task.WhenAll(tasks).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
return dto;
|
||||
}
|
||||
|
||||
@@ -425,15 +417,15 @@ namespace MediaBrowser.Server.Implementations.Dto
|
||||
_logger.ErrorException("Error getting {0} image info for {1}", ex, type, path);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Attaches People DTO's to a DTOBaseItem
|
||||
/// </summary>
|
||||
/// <param name="dto">The dto.</param>
|
||||
/// <param name="item">The item.</param>
|
||||
/// <returns>Task.</returns>
|
||||
private async Task AttachPeople(BaseItemDto dto, BaseItem item)
|
||||
private void AttachPeople(BaseItemDto dto, BaseItem item)
|
||||
{
|
||||
// Ordering by person type to ensure actors and artists are at the front.
|
||||
// This is taking advantage of the fact that they both begin with A
|
||||
@@ -443,24 +435,20 @@ namespace MediaBrowser.Server.Implementations.Dto
|
||||
// Attach People by transforming them into BaseItemPerson (DTO)
|
||||
dto.People = new BaseItemPerson[people.Count];
|
||||
|
||||
var entities = await Task.WhenAll(people.Select(p => p.Name)
|
||||
var dictionary = people.Select(p => p.Name)
|
||||
.Distinct(StringComparer.OrdinalIgnoreCase).Select(c =>
|
||||
Task.Run(async () =>
|
||||
{
|
||||
try
|
||||
{
|
||||
try
|
||||
{
|
||||
return await _libraryManager.GetPerson(c).ConfigureAwait(false);
|
||||
}
|
||||
catch (IOException ex)
|
||||
{
|
||||
_logger.ErrorException("Error getting person {0}", ex, c);
|
||||
return null;
|
||||
}
|
||||
})
|
||||
return _libraryManager.GetPerson(c);
|
||||
}
|
||||
catch (IOException ex)
|
||||
{
|
||||
_logger.ErrorException("Error getting person {0}", ex, c);
|
||||
return null;
|
||||
}
|
||||
|
||||
)).ConfigureAwait(false);
|
||||
|
||||
var dictionary = entities.Where(i => i != null)
|
||||
}).Where(i => i != null)
|
||||
.DistinctBy(i => i.Name)
|
||||
.ToDictionary(i => i.Name, StringComparer.OrdinalIgnoreCase);
|
||||
|
||||
@@ -497,32 +485,26 @@ namespace MediaBrowser.Server.Implementations.Dto
|
||||
/// <param name="dto">The dto.</param>
|
||||
/// <param name="item">The item.</param>
|
||||
/// <returns>Task.</returns>
|
||||
private async Task AttachStudios(BaseItemDto dto, BaseItem item)
|
||||
private void AttachStudios(BaseItemDto dto, BaseItem item)
|
||||
{
|
||||
var studios = item.Studios.ToList();
|
||||
|
||||
dto.Studios = new StudioDto[studios.Count];
|
||||
|
||||
var entities = await Task.WhenAll(studios.Distinct(StringComparer.OrdinalIgnoreCase).Select(c =>
|
||||
|
||||
Task.Run(async () =>
|
||||
{
|
||||
try
|
||||
{
|
||||
return await _libraryManager.GetStudio(c).ConfigureAwait(false);
|
||||
}
|
||||
catch (IOException ex)
|
||||
{
|
||||
_logger.ErrorException("Error getting studio {0}", ex, c);
|
||||
return null;
|
||||
}
|
||||
})
|
||||
|
||||
)).ConfigureAwait(false);
|
||||
|
||||
var dictionary = entities
|
||||
.Where(i => i != null)
|
||||
.ToDictionary(i => i.Name, StringComparer.OrdinalIgnoreCase);
|
||||
var dictionary = studios.Distinct(StringComparer.OrdinalIgnoreCase).Select(name =>
|
||||
{
|
||||
try
|
||||
{
|
||||
return _libraryManager.GetStudio(name);
|
||||
}
|
||||
catch (IOException ex)
|
||||
{
|
||||
_logger.ErrorException("Error getting studio {0}", ex, name);
|
||||
return null;
|
||||
}
|
||||
})
|
||||
.Where(i => i != null)
|
||||
.ToDictionary(i => i.Name, StringComparer.OrdinalIgnoreCase);
|
||||
|
||||
for (var i = 0; i < studios.Count; i++)
|
||||
{
|
||||
|
||||
@@ -590,144 +590,60 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
/// Gets a Person
|
||||
/// </summary>
|
||||
/// <param name="name">The name.</param>
|
||||
/// <param name="allowSlowProviders">if set to <c>true</c> [allow slow providers].</param>
|
||||
/// <returns>Task{Person}.</returns>
|
||||
public Task<Person> GetPerson(string name, bool allowSlowProviders = false)
|
||||
public Person GetPerson(string name)
|
||||
{
|
||||
return GetPerson(name, CancellationToken.None, allowSlowProviders);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a Person
|
||||
/// </summary>
|
||||
/// <param name="name">The name.</param>
|
||||
/// <param name="cancellationToken">The cancellation token.</param>
|
||||
/// <param name="allowSlowProviders">if set to <c>true</c> [allow slow providers].</param>
|
||||
/// <param name="refreshMetadata">if set to <c>true</c> [force creation].</param>
|
||||
/// <returns>Task{Person}.</returns>
|
||||
private Task<Person> GetPerson(string name, CancellationToken cancellationToken, bool allowSlowProviders = false, bool refreshMetadata = false)
|
||||
{
|
||||
return GetItemByName<Person>(ConfigurationManager.ApplicationPaths.PeoplePath, name, cancellationToken, allowSlowProviders, refreshMetadata);
|
||||
return GetItemByName<Person>(ConfigurationManager.ApplicationPaths.PeoplePath, name);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a Studio
|
||||
/// </summary>
|
||||
/// <param name="name">The name.</param>
|
||||
/// <param name="allowSlowProviders">if set to <c>true</c> [allow slow providers].</param>
|
||||
/// <returns>Task{Studio}.</returns>
|
||||
public Task<Studio> GetStudio(string name, bool allowSlowProviders = false)
|
||||
public Studio GetStudio(string name)
|
||||
{
|
||||
return GetStudio(name, CancellationToken.None, allowSlowProviders);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the studio.
|
||||
/// </summary>
|
||||
/// <param name="name">The name.</param>
|
||||
/// <param name="cancellationToken">The cancellation token.</param>
|
||||
/// <param name="allowSlowProviders">if set to <c>true</c> [allow slow providers].</param>
|
||||
/// <param name="refreshMetadata">if set to <c>true</c> [refresh metadata].</param>
|
||||
/// <returns>Task{Studio}.</returns>
|
||||
internal Task<Studio> GetStudio(string name, CancellationToken cancellationToken, bool allowSlowProviders = false, bool refreshMetadata = false)
|
||||
{
|
||||
return GetItemByName<Studio>(ConfigurationManager.ApplicationPaths.StudioPath, name, cancellationToken, allowSlowProviders, refreshMetadata);
|
||||
return GetItemByName<Studio>(ConfigurationManager.ApplicationPaths.StudioPath, name);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a Genre
|
||||
/// </summary>
|
||||
/// <param name="name">The name.</param>
|
||||
/// <param name="allowSlowProviders">if set to <c>true</c> [allow slow providers].</param>
|
||||
/// <returns>Task{Genre}.</returns>
|
||||
public Task<Genre> GetGenre(string name, bool allowSlowProviders = false)
|
||||
public Genre GetGenre(string name)
|
||||
{
|
||||
return GetGenre(name, CancellationToken.None, allowSlowProviders);
|
||||
return GetItemByName<Genre>(ConfigurationManager.ApplicationPaths.GenrePath, name);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the genre.
|
||||
/// </summary>
|
||||
/// <param name="name">The name.</param>
|
||||
/// <param name="cancellationToken">The cancellation token.</param>
|
||||
/// <param name="allowSlowProviders">if set to <c>true</c> [allow slow providers].</param>
|
||||
/// <param name="refreshMetadata">if set to <c>true</c> [refresh metadata].</param>
|
||||
/// <returns>Task{Genre}.</returns>
|
||||
internal Task<Genre> GetGenre(string name, CancellationToken cancellationToken, bool allowSlowProviders = false, bool refreshMetadata = false)
|
||||
{
|
||||
return GetItemByName<Genre>(ConfigurationManager.ApplicationPaths.GenrePath, name, cancellationToken, allowSlowProviders, refreshMetadata);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the genre.
|
||||
/// </summary>
|
||||
/// <param name="name">The name.</param>
|
||||
/// <param name="allowSlowProviders">if set to <c>true</c> [allow slow providers].</param>
|
||||
/// <returns>Task{MusicGenre}.</returns>
|
||||
public Task<MusicGenre> GetMusicGenre(string name, bool allowSlowProviders = false)
|
||||
public MusicGenre GetMusicGenre(string name)
|
||||
{
|
||||
return GetMusicGenre(name, CancellationToken.None, allowSlowProviders);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the music genre.
|
||||
/// </summary>
|
||||
/// <param name="name">The name.</param>
|
||||
/// <param name="cancellationToken">The cancellation token.</param>
|
||||
/// <param name="allowSlowProviders">if set to <c>true</c> [allow slow providers].</param>
|
||||
/// <param name="refreshMetadata">if set to <c>true</c> [refresh metadata].</param>
|
||||
/// <returns>Task{MusicGenre}.</returns>
|
||||
internal Task<MusicGenre> GetMusicGenre(string name, CancellationToken cancellationToken, bool allowSlowProviders = false, bool refreshMetadata = false)
|
||||
{
|
||||
return GetItemByName<MusicGenre>(ConfigurationManager.ApplicationPaths.MusicGenrePath, name, cancellationToken, allowSlowProviders, refreshMetadata);
|
||||
return GetItemByName<MusicGenre>(ConfigurationManager.ApplicationPaths.MusicGenrePath, name);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the game genre.
|
||||
/// </summary>
|
||||
/// <param name="name">The name.</param>
|
||||
/// <param name="allowSlowProviders">if set to <c>true</c> [allow slow providers].</param>
|
||||
/// <returns>Task{GameGenre}.</returns>
|
||||
public Task<GameGenre> GetGameGenre(string name, bool allowSlowProviders = false)
|
||||
public GameGenre GetGameGenre(string name)
|
||||
{
|
||||
return GetGameGenre(name, CancellationToken.None, allowSlowProviders);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the game genre.
|
||||
/// </summary>
|
||||
/// <param name="name">The name.</param>
|
||||
/// <param name="cancellationToken">The cancellation token.</param>
|
||||
/// <param name="allowSlowProviders">if set to <c>true</c> [allow slow providers].</param>
|
||||
/// <param name="refreshMetadata">if set to <c>true</c> [refresh metadata].</param>
|
||||
/// <returns>Task{GameGenre}.</returns>
|
||||
internal Task<GameGenre> GetGameGenre(string name, CancellationToken cancellationToken, bool allowSlowProviders = false, bool refreshMetadata = false)
|
||||
{
|
||||
return GetItemByName<GameGenre>(ConfigurationManager.ApplicationPaths.GameGenrePath, name, cancellationToken, allowSlowProviders, refreshMetadata);
|
||||
return GetItemByName<GameGenre>(ConfigurationManager.ApplicationPaths.GameGenrePath, name);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a Genre
|
||||
/// </summary>
|
||||
/// <param name="name">The name.</param>
|
||||
/// <param name="allowSlowProviders">if set to <c>true</c> [allow slow providers].</param>
|
||||
/// <returns>Task{Genre}.</returns>
|
||||
public Task<Artist> GetArtist(string name, bool allowSlowProviders = false)
|
||||
public Artist GetArtist(string name)
|
||||
{
|
||||
return GetArtist(name, CancellationToken.None, allowSlowProviders);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the artist.
|
||||
/// </summary>
|
||||
/// <param name="name">The name.</param>
|
||||
/// <param name="cancellationToken">The cancellation token.</param>
|
||||
/// <param name="allowSlowProviders">if set to <c>true</c> [allow slow providers].</param>
|
||||
/// <param name="refreshMetadata">if set to <c>true</c> [force creation].</param>
|
||||
/// <returns>Task{Artist}.</returns>
|
||||
internal Task<Artist> GetArtist(string name, CancellationToken cancellationToken, bool allowSlowProviders = false, bool refreshMetadata = false)
|
||||
{
|
||||
return GetItemByName<Artist>(ConfigurationManager.ApplicationPaths.ArtistsPath, name, cancellationToken, allowSlowProviders, refreshMetadata);
|
||||
return GetItemByName<Artist>(ConfigurationManager.ApplicationPaths.ArtistsPath, name);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -739,17 +655,16 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
/// Gets a Year
|
||||
/// </summary>
|
||||
/// <param name="value">The value.</param>
|
||||
/// <param name="allowSlowProviders">if set to <c>true</c> [allow slow providers].</param>
|
||||
/// <returns>Task{Year}.</returns>
|
||||
/// <exception cref="System.ArgumentOutOfRangeException"></exception>
|
||||
public Task<Year> GetYear(int value, bool allowSlowProviders = false)
|
||||
public Year GetYear(int value)
|
||||
{
|
||||
if (value <= 0)
|
||||
{
|
||||
throw new ArgumentOutOfRangeException();
|
||||
}
|
||||
|
||||
return GetItemByName<Year>(ConfigurationManager.ApplicationPaths.YearPath, value.ToString(UsCulture), CancellationToken.None, allowSlowProviders);
|
||||
return GetItemByName<Year>(ConfigurationManager.ApplicationPaths.YearPath, value.ToString(UsCulture));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -940,7 +855,9 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
|
||||
try
|
||||
{
|
||||
await GetPerson(currentPerson.Name, cancellationToken, true, true).ConfigureAwait(false);
|
||||
var item = GetPerson(currentPerson.Name);
|
||||
|
||||
await item.RefreshMetadata(cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
catch (IOException ex)
|
||||
{
|
||||
@@ -964,6 +881,10 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
progress.Report(100);
|
||||
|
||||
_logger.Info("People validation complete");
|
||||
|
||||
// Bad practice, i know. But we keep a lot in memory, unfortunately.
|
||||
GC.Collect(2, GCCollectionMode.Forced, true);
|
||||
GC.Collect(2, GCCollectionMode.Forced, true);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -97,7 +97,7 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
/// <param name="searchTerm">The search term.</param>
|
||||
/// <returns>IEnumerable{SearchHintResult}.</returns>
|
||||
/// <exception cref="System.ArgumentNullException">searchTerm</exception>
|
||||
public async Task<IEnumerable<SearchHintInfo>> GetSearchHints(IEnumerable<BaseItem> inputItems, string searchTerm)
|
||||
public Task<IEnumerable<SearchHintInfo>> GetSearchHints(IEnumerable<BaseItem> inputItems, string searchTerm)
|
||||
{
|
||||
if (string.IsNullOrEmpty(searchTerm))
|
||||
{
|
||||
@@ -143,7 +143,7 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
{
|
||||
try
|
||||
{
|
||||
var artist = await _libraryManager.GetArtist(item).ConfigureAwait(false);
|
||||
var artist = _libraryManager.GetArtist(item);
|
||||
|
||||
hints.Add(new Tuple<BaseItem, string, int>(artist, index.Item1, index.Item2));
|
||||
}
|
||||
@@ -169,7 +169,7 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
{
|
||||
try
|
||||
{
|
||||
var genre = await _libraryManager.GetGenre(item).ConfigureAwait(false);
|
||||
var genre = _libraryManager.GetGenre(item);
|
||||
|
||||
hints.Add(new Tuple<BaseItem, string, int>(genre, index.Item1, index.Item2));
|
||||
}
|
||||
@@ -195,7 +195,7 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
{
|
||||
try
|
||||
{
|
||||
var genre = await _libraryManager.GetMusicGenre(item).ConfigureAwait(false);
|
||||
var genre = _libraryManager.GetMusicGenre(item);
|
||||
|
||||
hints.Add(new Tuple<BaseItem, string, int>(genre, index.Item1, index.Item2));
|
||||
}
|
||||
@@ -221,7 +221,7 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
{
|
||||
try
|
||||
{
|
||||
var genre = await _libraryManager.GetGameGenre(item).ConfigureAwait(false);
|
||||
var genre = _libraryManager.GetGameGenre(item);
|
||||
|
||||
hints.Add(new Tuple<BaseItem, string, int>(genre, index.Item1, index.Item2));
|
||||
}
|
||||
@@ -246,7 +246,7 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
{
|
||||
try
|
||||
{
|
||||
var studio = await _libraryManager.GetStudio(item).ConfigureAwait(false);
|
||||
var studio = _libraryManager.GetStudio(item);
|
||||
|
||||
hints.Add(new Tuple<BaseItem, string, int>(studio, index.Item1, index.Item2));
|
||||
}
|
||||
@@ -272,7 +272,7 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
{
|
||||
try
|
||||
{
|
||||
var person = await _libraryManager.GetPerson(item).ConfigureAwait(false);
|
||||
var person = _libraryManager.GetPerson(item);
|
||||
|
||||
hints.Add(new Tuple<BaseItem, string, int>(person, index.Item1, index.Item2));
|
||||
}
|
||||
@@ -283,11 +283,13 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
}
|
||||
}
|
||||
|
||||
return hints.Where(i => i.Item3 >= 0).OrderBy(i => i.Item3).Select(i => new SearchHintInfo
|
||||
var returnValue = hints.Where(i => i.Item3 >= 0).OrderBy(i => i.Item3).Select(i => new SearchHintInfo
|
||||
{
|
||||
Item = i.Item1,
|
||||
MatchedTerm = i.Item2
|
||||
});
|
||||
|
||||
return Task.FromResult(returnValue);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -24,7 +24,7 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
|
||||
/// <summary>
|
||||
/// The _library manager
|
||||
/// </summary>
|
||||
private readonly LibraryManager _libraryManager;
|
||||
private readonly ILibraryManager _libraryManager;
|
||||
|
||||
/// <summary>
|
||||
/// The _user manager
|
||||
@@ -42,7 +42,7 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
|
||||
/// <param name="libraryManager">The library manager.</param>
|
||||
/// <param name="userManager">The user manager.</param>
|
||||
/// <param name="logger">The logger.</param>
|
||||
public ArtistsValidator(LibraryManager libraryManager, IUserManager userManager, ILogger logger)
|
||||
public ArtistsValidator(ILibraryManager libraryManager, IUserManager userManager, ILogger logger)
|
||||
{
|
||||
_libraryManager = libraryManager;
|
||||
_userManager = userManager;
|
||||
@@ -65,7 +65,7 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
|
||||
var innerProgress = new ActionableProgress<double>();
|
||||
|
||||
innerProgress.RegisterAction(pct => progress.Report(pct * .8));
|
||||
|
||||
|
||||
var allArtists = await GetAllArtists(allSongs, cancellationToken, innerProgress).ConfigureAwait(false);
|
||||
|
||||
progress.Report(80);
|
||||
@@ -79,7 +79,7 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
|
||||
foreach (var artist in allArtists)
|
||||
{
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
|
||||
|
||||
artist.ValidateImages();
|
||||
artist.ValidateBackdrops();
|
||||
|
||||
@@ -230,8 +230,9 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
|
||||
|
||||
try
|
||||
{
|
||||
var artistItem = await _libraryManager.GetArtist(currentArtist, cancellationToken, true, true)
|
||||
.ConfigureAwait(false);
|
||||
var artistItem = _libraryManager.GetArtist(currentArtist);
|
||||
|
||||
await artistItem.RefreshMetadata(cancellationToken).ConfigureAwait(false);
|
||||
|
||||
returnArtists.Add(artistItem);
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
|
||||
/// <summary>
|
||||
/// The _library manager
|
||||
/// </summary>
|
||||
private readonly LibraryManager _libraryManager;
|
||||
private readonly ILibraryManager _libraryManager;
|
||||
|
||||
/// <summary>
|
||||
/// The _user manager
|
||||
@@ -26,7 +26,7 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
|
||||
/// </summary>
|
||||
private readonly ILogger _logger;
|
||||
|
||||
public GameGenresValidator(LibraryManager libraryManager, IUserManager userManager, ILogger logger)
|
||||
public GameGenresValidator(ILibraryManager libraryManager, IUserManager userManager, ILogger logger)
|
||||
{
|
||||
_libraryManager = libraryManager;
|
||||
_userManager = userManager;
|
||||
@@ -47,8 +47,6 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
|
||||
.Select(i => new Tuple<Guid, List<Game>>(i.Id, i.RootFolder.GetRecursiveChildren(i).OfType<Game>().ToList()))
|
||||
.ToList();
|
||||
|
||||
var allLibraryItems = allItems;
|
||||
|
||||
var masterDictionary = new Dictionary<string, Dictionary<Guid, Dictionary<CountType, int>>>(StringComparer.OrdinalIgnoreCase);
|
||||
|
||||
// Populate counts of items
|
||||
@@ -99,7 +97,7 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
|
||||
|
||||
private async Task UpdateItemByNameCounts(string name, CancellationToken cancellationToken, Dictionary<Guid, Dictionary<CountType, int>> counts)
|
||||
{
|
||||
var itemByName = await _libraryManager.GetGameGenre(name, cancellationToken, true, true).ConfigureAwait(false);
|
||||
var itemByName = _libraryManager.GetGameGenre(name);
|
||||
|
||||
foreach (var libraryId in counts.Keys)
|
||||
{
|
||||
@@ -107,6 +105,8 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
|
||||
|
||||
itemByName.UserItemCounts[libraryId] = itemCounts;
|
||||
}
|
||||
|
||||
await itemByName.RefreshMetadata(cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
private void SetItemCounts(Guid userId, IEnumerable<BaseItem> allItems, Dictionary<string, Dictionary<Guid, Dictionary<CountType, int>>> masterDictionary)
|
||||
|
||||
@@ -15,7 +15,7 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
|
||||
/// <summary>
|
||||
/// The _library manager
|
||||
/// </summary>
|
||||
private readonly LibraryManager _libraryManager;
|
||||
private readonly ILibraryManager _libraryManager;
|
||||
|
||||
/// <summary>
|
||||
/// The _user manager
|
||||
@@ -27,7 +27,7 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
|
||||
/// </summary>
|
||||
private readonly ILogger _logger;
|
||||
|
||||
public GenresValidator(LibraryManager libraryManager, IUserManager userManager, ILogger logger)
|
||||
public GenresValidator(ILibraryManager libraryManager, IUserManager userManager, ILogger logger)
|
||||
{
|
||||
_libraryManager = libraryManager;
|
||||
_userManager = userManager;
|
||||
@@ -102,7 +102,7 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
|
||||
|
||||
private async Task UpdateItemByNameCounts(string name, CancellationToken cancellationToken, Dictionary<Guid, Dictionary<CountType, int>> counts)
|
||||
{
|
||||
var itemByName = await _libraryManager.GetGenre(name, cancellationToken, true, true).ConfigureAwait(false);
|
||||
var itemByName = _libraryManager.GetGenre(name);
|
||||
|
||||
foreach (var libraryId in counts.Keys)
|
||||
{
|
||||
@@ -110,6 +110,8 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
|
||||
|
||||
itemByName.UserItemCounts[libraryId] = itemCounts;
|
||||
}
|
||||
|
||||
await itemByName.RefreshMetadata(cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
private void SetItemCounts(Guid userId, IEnumerable<BaseItem> allItems, Dictionary<string, Dictionary<Guid, Dictionary<CountType, int>>> masterDictionary)
|
||||
|
||||
@@ -15,7 +15,7 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
|
||||
/// <summary>
|
||||
/// The _library manager
|
||||
/// </summary>
|
||||
private readonly LibraryManager _libraryManager;
|
||||
private readonly ILibraryManager _libraryManager;
|
||||
|
||||
/// <summary>
|
||||
/// The _user manager
|
||||
@@ -27,7 +27,7 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
|
||||
/// </summary>
|
||||
private readonly ILogger _logger;
|
||||
|
||||
public MusicGenresValidator(LibraryManager libraryManager, IUserManager userManager, ILogger logger)
|
||||
public MusicGenresValidator(ILibraryManager libraryManager, IUserManager userManager, ILogger logger)
|
||||
{
|
||||
_libraryManager = libraryManager;
|
||||
_userManager = userManager;
|
||||
@@ -102,7 +102,7 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
|
||||
|
||||
private async Task UpdateItemByNameCounts(string name, CancellationToken cancellationToken, Dictionary<Guid, Dictionary<CountType, int>> counts)
|
||||
{
|
||||
var itemByName = await _libraryManager.GetMusicGenre(name, cancellationToken, true, true).ConfigureAwait(false);
|
||||
var itemByName = _libraryManager.GetMusicGenre(name);
|
||||
|
||||
foreach (var libraryId in counts.Keys)
|
||||
{
|
||||
@@ -110,6 +110,8 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
|
||||
|
||||
itemByName.UserItemCounts[libraryId] = itemCounts;
|
||||
}
|
||||
|
||||
await itemByName.RefreshMetadata(cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
private void SetItemCounts(Guid userId, IEnumerable<BaseItem> allItems, Dictionary<string, Dictionary<Guid, Dictionary<CountType, int>>> masterDictionary)
|
||||
|
||||
@@ -41,11 +41,10 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
|
||||
/// <returns>Task.</returns>
|
||||
public Task Run(IProgress<double> progress, CancellationToken cancellationToken)
|
||||
{
|
||||
return RunInternal(progress, cancellationToken);
|
||||
//return Task.Run(() => RunInternal(progress, cancellationToken));
|
||||
return Task.Run(() => RunInternal(progress, cancellationToken));
|
||||
}
|
||||
|
||||
private async Task RunInternal(IProgress<double> progress, CancellationToken cancellationToken)
|
||||
private void RunInternal(IProgress<double> progress, CancellationToken cancellationToken)
|
||||
{
|
||||
var allItems = _libraryManager.RootFolder.RecursiveChildren.ToList();
|
||||
|
||||
@@ -91,7 +90,7 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
|
||||
{
|
||||
var counts = masterDictionary[name];
|
||||
|
||||
var itemByName = await _libraryManager.GetPerson(name).ConfigureAwait(false);
|
||||
var itemByName = _libraryManager.GetPerson(name);
|
||||
|
||||
foreach (var libraryId in counts.Keys)
|
||||
{
|
||||
|
||||
@@ -14,7 +14,7 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
|
||||
/// <summary>
|
||||
/// The _library manager
|
||||
/// </summary>
|
||||
private readonly LibraryManager _libraryManager;
|
||||
private readonly ILibraryManager _libraryManager;
|
||||
|
||||
/// <summary>
|
||||
/// The _user manager
|
||||
@@ -26,7 +26,7 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
|
||||
/// </summary>
|
||||
private readonly ILogger _logger;
|
||||
|
||||
public StudiosValidator(LibraryManager libraryManager, IUserManager userManager, ILogger logger)
|
||||
public StudiosValidator(ILibraryManager libraryManager, IUserManager userManager, ILogger logger)
|
||||
{
|
||||
_libraryManager = libraryManager;
|
||||
_userManager = userManager;
|
||||
@@ -99,7 +99,7 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
|
||||
|
||||
private async Task UpdateItemByNameCounts(string name, CancellationToken cancellationToken, Dictionary<Guid, Dictionary<CountType, int>> counts)
|
||||
{
|
||||
var itemByName = await _libraryManager.GetStudio(name, cancellationToken, true, true).ConfigureAwait(false);
|
||||
var itemByName = _libraryManager.GetStudio(name);
|
||||
|
||||
foreach (var libraryId in counts.Keys)
|
||||
{
|
||||
@@ -107,6 +107,8 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
|
||||
|
||||
itemByName.UserItemCounts[libraryId] = itemCounts;
|
||||
}
|
||||
|
||||
await itemByName.RefreshMetadata(cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
private void SetItemCounts(Guid userId, IEnumerable<BaseItem> allItems, Dictionary<string, Dictionary<Guid, Dictionary<CountType, int>>> masterDictionary)
|
||||
|
||||
Reference in New Issue
Block a user