update user data queries

This commit is contained in:
Luke Pulverenti
2016-05-11 10:36:28 -04:00
parent 66d2f25555
commit 3118196ac6
13 changed files with 199 additions and 105 deletions

View File

@@ -617,9 +617,12 @@ namespace MediaBrowser.Server.Implementations.Dto
{
if (!string.IsNullOrEmpty(item.Album))
{
var parentAlbum = _libraryManager.RootFolder
.GetRecursiveChildren(i => i is MusicAlbum && string.Equals(i.Name, item.Album, StringComparison.OrdinalIgnoreCase))
.FirstOrDefault();
var parentAlbum = _libraryManager.GetItemList(new InternalItemsQuery
{
IncludeItemTypes = new[] { typeof(MusicAlbum).Name },
Name = item.Album
}).FirstOrDefault();
if (parentAlbum != null)
{

View File

@@ -140,6 +140,54 @@ namespace MediaBrowser.Server.Implementations.Library
return Repository.GetAllUserData(userId);
}
public UserItemData GetUserData(Guid userId, List<string> keys)
{
if (userId == Guid.Empty)
{
throw new ArgumentNullException("userId");
}
if (keys == null)
{
throw new ArgumentNullException("keys");
}
lock (_userData)
{
foreach (var key in keys)
{
var cacheKey = GetCacheKey(userId, key);
UserItemData value;
if (_userData.TryGetValue(cacheKey, out value))
{
return value;
}
value = Repository.GetUserData(userId, key);
if (value != null)
{
_userData[cacheKey] = value;
return value;
}
}
if (keys.Count > 0)
{
var key = keys[0];
var cacheKey = GetCacheKey(userId, key);
var userdata = new UserItemData
{
UserId = userId,
Key = key
};
_userData[cacheKey] = userdata;
return userdata;
}
return null;
}
}
/// <summary>
/// Gets the user data.
/// </summary>
@@ -166,27 +214,22 @@ namespace MediaBrowser.Server.Implementations.Library
return value;
}
value = GetUserDataFromRepository(userId, key);
value = Repository.GetUserData(userId, key);
if (value == null)
{
value = new UserItemData
{
UserId = userId,
Key = key
};
}
_userData[cacheKey] = value;
return value;
}
}
private UserItemData GetUserDataFromRepository(Guid userId, string key)
{
var data = Repository.GetUserData(userId, key);
if (data == null)
{
data = new UserItemData
{
UserId = userId,
Key = key
};
}
return data;
}
/// <summary>
/// Gets the internal key.
/// </summary>
@@ -200,22 +243,22 @@ namespace MediaBrowser.Server.Implementations.Library
public UserItemData GetUserData(IHasUserData user, IHasUserData item)
{
return GetUserData(user.Id, item.GetUserDataKeys().First());
return GetUserData(user.Id, item);
}
public UserItemData GetUserData(string userId, IHasUserData item)
{
return GetUserData(userId, item.GetUserDataKeys().First());
return GetUserData(new Guid(userId), item);
}
public UserItemData GetUserData(Guid userId, IHasUserData item)
{
return GetUserData(userId, item.GetUserDataKeys().First());
return GetUserData(userId, item.GetUserDataKeys());
}
public UserItemDataDto GetUserDataDto(IHasUserData item, User user)
{
var userData = GetUserData(user.Id, item.GetUserDataKeys().First());
var userData = GetUserData(user.Id, item);
var dto = GetUserItemDataDto(userData);
item.FillUserDataDtoValues(dto, userData, user);
@@ -302,10 +345,5 @@ namespace MediaBrowser.Server.Implementations.Library
return playedToCompletion;
}
public UserItemData GetUserData(string userId, string key)
{
return GetUserData(new Guid(userId), key);
}
}
}

View File

@@ -2,6 +2,7 @@
using MediaBrowser.Controller.Library;
using MediaBrowser.Model.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
@@ -34,20 +35,25 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
/// <returns>Task.</returns>
public async Task Run(IProgress<double> progress, CancellationToken cancellationToken)
{
var items = _libraryManager.GetItemList(new InternalItemsQuery
{
IncludeItemTypes = new[] { typeof(Studio).Name }
}).ToList();
var items = _libraryManager.RootFolder.GetRecursiveChildren(i => true)
.SelectMany(i => i.Studios)
.DistinctNames()
.ToList();
var numComplete = 0;
var count = items.Count;
foreach (var item in items)
var validIds = new List<Guid>();
foreach (var name in items)
{
try
{
await item.RefreshMetadata(cancellationToken).ConfigureAwait(false);
var itemByName = _libraryManager.GetStudio(name);
validIds.Add(itemByName.Id);
await itemByName.RefreshMetadata(cancellationToken).ConfigureAwait(false);
}
catch (OperationCanceledException)
{
@@ -56,7 +62,7 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
}
catch (Exception ex)
{
_logger.ErrorException("Error refreshing {0}", ex, item.Name);
_logger.ErrorException("Error refreshing {0}", ex, name);
}
numComplete++;

View File

@@ -1870,9 +1870,9 @@ namespace MediaBrowser.Server.Implementations.Persistence
using (var reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess | CommandBehavior.SingleResult))
{
Logger.Debug("GetItemIdsList query time: {0}ms. Query: {1}",
Convert.ToInt32((DateTime.UtcNow - now).TotalMilliseconds),
cmd.CommandText);
//Logger.Debug("GetItemIdsList query time: {0}ms. Query: {1}",
// Convert.ToInt32((DateTime.UtcNow - now).TotalMilliseconds),
// cmd.CommandText);
while (reader.Read())
{