mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-05-28 19:38:26 +01:00
Merge pull request #848 from Bond-009/perf
Minor changes to reduce allocations
This commit is contained in:
@@ -9,6 +9,7 @@ using MediaBrowser.Controller.Net;
|
||||
using MediaBrowser.Controller.Session;
|
||||
using MediaBrowser.Model.Entities;
|
||||
using MediaBrowser.Model.Services;
|
||||
using MediaBrowser.Model.Querying;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace MediaBrowser.Api
|
||||
@@ -118,8 +119,7 @@ namespace MediaBrowser.Api
|
||||
{
|
||||
var options = new DtoOptions();
|
||||
|
||||
var hasFields = request as IHasItemFields;
|
||||
if (hasFields != null)
|
||||
if (request is IHasItemFields hasFields)
|
||||
{
|
||||
options.Fields = hasFields.GetItemFields();
|
||||
}
|
||||
@@ -133,9 +133,11 @@ namespace MediaBrowser.Api
|
||||
client.IndexOf("media center", StringComparison.OrdinalIgnoreCase) != -1 ||
|
||||
client.IndexOf("classic", StringComparison.OrdinalIgnoreCase) != -1)
|
||||
{
|
||||
var list = options.Fields.ToList();
|
||||
list.Add(Model.Querying.ItemFields.RecursiveItemCount);
|
||||
options.Fields = list.ToArray();
|
||||
int oldLen = options.Fields.Length;
|
||||
var arr = new ItemFields[oldLen + 1];
|
||||
options.Fields.CopyTo(arr, 0);
|
||||
arr[oldLen] = Model.Querying.ItemFields.RecursiveItemCount;
|
||||
options.Fields = arr;
|
||||
}
|
||||
|
||||
if (client.IndexOf("kodi", StringComparison.OrdinalIgnoreCase) != -1 ||
|
||||
@@ -146,9 +148,12 @@ namespace MediaBrowser.Api
|
||||
client.IndexOf("samsung", StringComparison.OrdinalIgnoreCase) != -1 ||
|
||||
client.IndexOf("androidtv", StringComparison.OrdinalIgnoreCase) != -1)
|
||||
{
|
||||
var list = options.Fields.ToList();
|
||||
list.Add(Model.Querying.ItemFields.ChildCount);
|
||||
options.Fields = list.ToArray();
|
||||
|
||||
int oldLen = options.Fields.Length;
|
||||
var arr = new ItemFields[oldLen + 1];
|
||||
options.Fields.CopyTo(arr, 0);
|
||||
arr[oldLen] = Model.Querying.ItemFields.ChildCount;
|
||||
options.Fields = arr;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -167,7 +172,16 @@ namespace MediaBrowser.Api
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(hasDtoOptions.EnableImageTypes))
|
||||
{
|
||||
options.ImageTypes = (hasDtoOptions.EnableImageTypes ?? string.Empty).Split(',').Where(i => !string.IsNullOrWhiteSpace(i)).Select(v => (ImageType)Enum.Parse(typeof(ImageType), v, true)).ToArray();
|
||||
if (string.IsNullOrEmpty(hasDtoOptions.EnableImageTypes))
|
||||
{
|
||||
options.ImageTypes = Array.Empty<ImageType>();
|
||||
}
|
||||
else
|
||||
{
|
||||
options.ImageTypes = hasDtoOptions.EnableImageTypes.Split(new [] { ',' }, StringSplitOptions.RemoveEmptyEntries)
|
||||
.Select(v => (ImageType)Enum.Parse(typeof(ImageType), v, true))
|
||||
.ToArray();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -112,7 +112,7 @@ namespace MediaBrowser.Api.UserLibrary
|
||||
return ToOptimizedResult(result);
|
||||
}
|
||||
|
||||
protected override QueryResult<Tuple<BaseItem, ItemCounts>> GetItems(GetItemsByName request, InternalItemsQuery query)
|
||||
protected override QueryResult<(BaseItem, ItemCounts)> GetItems(GetItemsByName request, InternalItemsQuery query)
|
||||
{
|
||||
if (request is GetAlbumArtists)
|
||||
{
|
||||
|
||||
@@ -209,9 +209,9 @@ namespace MediaBrowser.Api.UserLibrary
|
||||
};
|
||||
}
|
||||
|
||||
protected virtual QueryResult<Tuple<BaseItem, ItemCounts>> GetItems(GetItemsByName request, InternalItemsQuery query)
|
||||
protected virtual QueryResult<(BaseItem, ItemCounts)> GetItems(GetItemsByName request, InternalItemsQuery query)
|
||||
{
|
||||
return new QueryResult<Tuple<BaseItem, ItemCounts>>();
|
||||
return new QueryResult<(BaseItem, ItemCounts)>();
|
||||
}
|
||||
|
||||
private void SetItemCounts(BaseItemDto dto, ItemCounts counts)
|
||||
|
||||
@@ -396,14 +396,12 @@ namespace MediaBrowser.Api.UserLibrary
|
||||
|
||||
public VideoType[] GetVideoTypes()
|
||||
{
|
||||
var val = VideoTypes;
|
||||
|
||||
if (string.IsNullOrEmpty(val))
|
||||
if (string.IsNullOrEmpty(VideoTypes))
|
||||
{
|
||||
return new VideoType[] { };
|
||||
return Array.Empty<VideoType>();
|
||||
}
|
||||
|
||||
return val.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(v => (VideoType)Enum.Parse(typeof(VideoType), v, true)).ToArray();
|
||||
return VideoTypes.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(v => (VideoType)Enum.Parse(typeof(VideoType), v, true)).ToArray();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -92,7 +92,7 @@ namespace MediaBrowser.Api.UserLibrary
|
||||
return ToOptimizedResult(result);
|
||||
}
|
||||
|
||||
protected override QueryResult<Tuple<BaseItem, ItemCounts>> GetItems(GetItemsByName request, InternalItemsQuery query)
|
||||
protected override QueryResult<(BaseItem, ItemCounts)> GetItems(GetItemsByName request, InternalItemsQuery query)
|
||||
{
|
||||
var viewType = GetParentItemViewType(request);
|
||||
|
||||
|
||||
@@ -90,7 +90,7 @@ namespace MediaBrowser.Api.UserLibrary
|
||||
|
||||
var options = GetDtoOptions(_authContext, request);
|
||||
|
||||
var ancestorIds = new List<Guid>();
|
||||
var ancestorIds = Array.Empty<Guid>();
|
||||
|
||||
var excludeFolderIds = user.Configuration.LatestItemsExcludes;
|
||||
if (parentIdGuid.Equals(Guid.Empty) && excludeFolderIds.Length > 0)
|
||||
@@ -99,12 +99,12 @@ namespace MediaBrowser.Api.UserLibrary
|
||||
.Where(i => i is Folder)
|
||||
.Where(i => !excludeFolderIds.Contains(i.Id.ToString("N")))
|
||||
.Select(i => i.Id)
|
||||
.ToList();
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
var itemsResult = _libraryManager.GetItemsResult(new InternalItemsQuery(user)
|
||||
{
|
||||
OrderBy = new[] { ItemSortBy.DatePlayed }.Select(i => new ValueTuple<string, SortOrder>(i, SortOrder.Descending)).ToArray(),
|
||||
OrderBy = new[] { (ItemSortBy.DatePlayed, SortOrder.Descending) },
|
||||
IsResumable = true,
|
||||
StartIndex = request.StartIndex,
|
||||
Limit = request.Limit,
|
||||
@@ -115,7 +115,7 @@ namespace MediaBrowser.Api.UserLibrary
|
||||
IsVirtualItem = false,
|
||||
CollapseBoxSetItems = false,
|
||||
EnableTotalRecordCount = request.EnableTotalRecordCount,
|
||||
AncestorIds = ancestorIds.ToArray(),
|
||||
AncestorIds = ancestorIds,
|
||||
IncludeItemTypes = request.GetIncludeItemTypes(),
|
||||
ExcludeItemTypes = request.GetExcludeItemTypes(),
|
||||
SearchTerm = request.SearchTerm
|
||||
@@ -155,7 +155,7 @@ namespace MediaBrowser.Api.UserLibrary
|
||||
/// <param name="request">The request.</param>
|
||||
private QueryResult<BaseItemDto> GetItems(GetItems request)
|
||||
{
|
||||
var user = !request.UserId.Equals(Guid.Empty) ? _userManager.GetUserById(request.UserId) : null;
|
||||
var user = request.UserId == Guid.Empty ? null : _userManager.GetUserById(request.UserId);
|
||||
|
||||
var dtoOptions = GetDtoOptions(_authContext, request);
|
||||
|
||||
@@ -190,11 +190,8 @@ namespace MediaBrowser.Api.UserLibrary
|
||||
/// </summary>
|
||||
private QueryResult<BaseItem> GetQueryResult(GetItems request, DtoOptions dtoOptions, User user)
|
||||
{
|
||||
if (string.Equals(request.IncludeItemTypes, "Playlist", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
request.ParentId = null;
|
||||
}
|
||||
else if (string.Equals(request.IncludeItemTypes, "BoxSet", StringComparison.OrdinalIgnoreCase))
|
||||
if (string.Equals(request.IncludeItemTypes, "Playlist", StringComparison.OrdinalIgnoreCase)
|
||||
|| string.Equals(request.IncludeItemTypes, "BoxSet", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
request.ParentId = null;
|
||||
}
|
||||
|
||||
@@ -83,7 +83,7 @@ namespace MediaBrowser.Api.UserLibrary
|
||||
return ToOptimizedResult(result);
|
||||
}
|
||||
|
||||
protected override QueryResult<Tuple<BaseItem, ItemCounts>> GetItems(GetItemsByName request, InternalItemsQuery query)
|
||||
protected override QueryResult<(BaseItem, ItemCounts)> GetItems(GetItemsByName request, InternalItemsQuery query)
|
||||
{
|
||||
return LibraryManager.GetMusicGenres(query);
|
||||
}
|
||||
|
||||
@@ -101,7 +101,7 @@ namespace MediaBrowser.Api.UserLibrary
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
protected override QueryResult<Tuple<BaseItem, ItemCounts>> GetItems(GetItemsByName request, InternalItemsQuery query)
|
||||
protected override QueryResult<(BaseItem, ItemCounts)> GetItems(GetItemsByName request, InternalItemsQuery query)
|
||||
{
|
||||
var items = LibraryManager.GetPeopleItems(new InternalPeopleQuery
|
||||
{
|
||||
@@ -109,10 +109,10 @@ namespace MediaBrowser.Api.UserLibrary
|
||||
NameContains = query.NameContains ?? query.SearchTerm
|
||||
});
|
||||
|
||||
return new QueryResult<Tuple<BaseItem, ItemCounts>>
|
||||
return new QueryResult<(BaseItem, ItemCounts)>
|
||||
{
|
||||
TotalRecordCount = items.Count,
|
||||
Items = items.Take(query.Limit ?? int.MaxValue).Select(i => new Tuple<BaseItem, ItemCounts>(i, new ItemCounts())).ToArray()
|
||||
Items = items.Take(query.Limit ?? int.MaxValue).Select(i => (i as BaseItem, new ItemCounts())).ToArray()
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -91,7 +91,7 @@ namespace MediaBrowser.Api.UserLibrary
|
||||
return ToOptimizedResult(result);
|
||||
}
|
||||
|
||||
protected override QueryResult<Tuple<BaseItem, ItemCounts>> GetItems(GetItemsByName request, InternalItemsQuery query)
|
||||
protected override QueryResult<(BaseItem, ItemCounts)> GetItems(GetItemsByName request, InternalItemsQuery query)
|
||||
{
|
||||
return LibraryManager.GetStudios(query);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user