mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-04-22 18:14:42 +01:00
get recursive items from db
This commit is contained in:
@@ -510,15 +510,12 @@ namespace MediaBrowser.Server.Implementations.Channels
|
||||
|
||||
public IEnumerable<ChannelFeatures> GetAllChannelFeatures()
|
||||
{
|
||||
var inputItems = _libraryManager.GetItems(new InternalItemsQuery
|
||||
return _libraryManager.GetItemList(new InternalItemsQuery
|
||||
{
|
||||
IncludeItemTypes = new[] { typeof(Channel).Name },
|
||||
SortBy = new[] { ItemSortBy.SortName }
|
||||
|
||||
}).Items;
|
||||
|
||||
return inputItems
|
||||
.Select(i => GetChannelFeatures(i.Id.ToString("N")));
|
||||
}).Select(i => GetChannelFeatures(i.Id.ToString("N")));
|
||||
}
|
||||
|
||||
public ChannelFeatures GetChannelFeatures(string id)
|
||||
|
||||
@@ -183,7 +183,7 @@ namespace MediaBrowser.Server.Implementations.Dto
|
||||
|
||||
if (person != null)
|
||||
{
|
||||
var items = _libraryManager.GetItems(new InternalItemsQuery(user)
|
||||
var items = _libraryManager.GetItemList(new InternalItemsQuery(user)
|
||||
{
|
||||
Person = byName.Name
|
||||
|
||||
@@ -1655,8 +1655,7 @@ namespace MediaBrowser.Server.Implementations.Dto
|
||||
{
|
||||
IsFolder = false,
|
||||
Recursive = true,
|
||||
IsVirtualUnaired = false,
|
||||
IsMissing = false,
|
||||
ExcludeLocationTypes = new[] { LocationType.Virtual },
|
||||
User = user
|
||||
|
||||
}).Result.Items;
|
||||
|
||||
@@ -106,13 +106,13 @@ namespace MediaBrowser.Server.Implementations.Intros
|
||||
|
||||
if (trailerTypes.Count > 0)
|
||||
{
|
||||
var trailerResult = _libraryManager.GetItems(new InternalItemsQuery
|
||||
var trailerResult = _libraryManager.GetItemList(new InternalItemsQuery
|
||||
{
|
||||
IncludeItemTypes = new[] { typeof(Trailer).Name },
|
||||
TrailerTypes = trailerTypes.ToArray()
|
||||
});
|
||||
|
||||
candidates.AddRange(trailerResult.Items.Select(i => new ItemWithTrailer
|
||||
candidates.AddRange(trailerResult.Select(i => new ItemWithTrailer
|
||||
{
|
||||
Item = i,
|
||||
Type = i.SourceType == SourceType.Channel ? ItemWithTrailerType.ChannelTrailer : ItemWithTrailerType.ItemWithTrailer,
|
||||
|
||||
@@ -813,7 +813,7 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
return RootFolder.FindByPath(path);
|
||||
}
|
||||
|
||||
@@ -1305,7 +1305,7 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
return item;
|
||||
}
|
||||
|
||||
public QueryResult<BaseItem> GetItems(InternalItemsQuery query)
|
||||
public IEnumerable<BaseItem> GetItemList(InternalItemsQuery query)
|
||||
{
|
||||
if (query.User != null)
|
||||
{
|
||||
@@ -1314,12 +1314,7 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
|
||||
var result = ItemRepository.GetItemIdsList(query);
|
||||
|
||||
var items = result.Select(GetItemById).Where(i => i != null).ToArray();
|
||||
|
||||
return new QueryResult<BaseItem>
|
||||
{
|
||||
Items = items
|
||||
};
|
||||
return result.Select(GetItemById).Where(i => i != null);
|
||||
}
|
||||
|
||||
public QueryResult<BaseItem> QueryItems(InternalItemsQuery query)
|
||||
@@ -1342,7 +1337,7 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
return ItemRepository.GetItemIdsList(query);
|
||||
}
|
||||
|
||||
public IEnumerable<BaseItem> GetItems(InternalItemsQuery query, IEnumerable<string> parentIds)
|
||||
public IEnumerable<BaseItem> GetItemList(InternalItemsQuery query, IEnumerable<string> parentIds)
|
||||
{
|
||||
var parents = parentIds.Select(i => GetItemById(new Guid(i))).Where(i => i != null).ToList();
|
||||
|
||||
@@ -1351,13 +1346,39 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
return GetItemIds(query).Select(GetItemById).Where(i => i != null);
|
||||
}
|
||||
|
||||
public QueryResult<BaseItem> GetItemsResult(InternalItemsQuery query)
|
||||
{
|
||||
if (query.Recursive && query.ParentId.HasValue)
|
||||
{
|
||||
var parent = GetItemById(query.ParentId.Value);
|
||||
if (parent != null)
|
||||
{
|
||||
SetTopParentIdsOrAncestors(query, new List<BaseItem> { parent });
|
||||
query.ParentId = null;
|
||||
}
|
||||
}
|
||||
|
||||
if (query.User != null)
|
||||
{
|
||||
AddUserToQuery(query, query.User);
|
||||
}
|
||||
|
||||
var initialResult = ItemRepository.GetItemIds(query);
|
||||
|
||||
return new QueryResult<BaseItem>
|
||||
{
|
||||
TotalRecordCount = initialResult.TotalRecordCount,
|
||||
Items = initialResult.Items.Select(GetItemById).Where(i => i != null).ToArray()
|
||||
};
|
||||
}
|
||||
|
||||
public QueryResult<BaseItem> GetItemsResult(InternalItemsQuery query, IEnumerable<string> parentIds)
|
||||
{
|
||||
var parents = parentIds.Select(i => GetItemById(new Guid(i))).Where(i => i != null).ToList();
|
||||
|
||||
SetTopParentIdsOrAncestors(query, parents);
|
||||
|
||||
return GetItems(query);
|
||||
return GetItemsResult(query);
|
||||
}
|
||||
|
||||
private void SetTopParentIdsOrAncestors(InternalItemsQuery query, List<BaseItem> parents)
|
||||
@@ -2545,7 +2566,7 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
// Remove this image to prevent it from retrying over and over
|
||||
item.RemoveImage(image);
|
||||
await item.UpdateToRepository(ItemUpdateType.ImageUpdate, CancellationToken.None).ConfigureAwait(false);
|
||||
|
||||
|
||||
throw new InvalidOperationException();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ using MediaBrowser.Controller.Library;
|
||||
using MediaBrowser.Model.Channels;
|
||||
using MediaBrowser.Model.Entities;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
@@ -28,16 +29,14 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
.Cast<IHasTrailers>()
|
||||
.ToList();
|
||||
|
||||
var trailerResult = _libraryManager.GetItems(new InternalItemsQuery
|
||||
var trailers = _libraryManager.GetItemList(new InternalItemsQuery
|
||||
{
|
||||
IncludeItemTypes = new[] { typeof(Trailer).Name },
|
||||
ExcludeTrailerTypes = new[]
|
||||
{
|
||||
TrailerType.LocalTrailer
|
||||
}
|
||||
|
||||
});
|
||||
var trailers = trailerResult.Items;
|
||||
}).ToArray();
|
||||
|
||||
var numComplete = 0;
|
||||
|
||||
|
||||
@@ -80,7 +80,7 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
{
|
||||
var genreList = genres.ToList();
|
||||
|
||||
var inputItems = _libraryManager.GetItems(new InternalItemsQuery(user)
|
||||
var inputItems = _libraryManager.GetItemList(new InternalItemsQuery(user)
|
||||
{
|
||||
IncludeItemTypes = new[] { typeof(Audio).Name },
|
||||
|
||||
|
||||
@@ -157,7 +157,7 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
|
||||
AddIfMissing(excludeItemTypes, typeof(CollectionFolder).Name);
|
||||
|
||||
var mediaItems = _libraryManager.GetItems(new InternalItemsQuery(user)
|
||||
var mediaItems = _libraryManager.GetItemList(new InternalItemsQuery(user)
|
||||
{
|
||||
NameContains = searchTerm,
|
||||
ExcludeItemTypes = excludeItemTypes.ToArray(),
|
||||
|
||||
@@ -278,7 +278,7 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
|
||||
} : new string[] { };
|
||||
|
||||
return _libraryManager.GetItems(new InternalItemsQuery(user)
|
||||
return _libraryManager.GetItemList(new InternalItemsQuery(user)
|
||||
{
|
||||
IncludeItemTypes = includeItemTypes,
|
||||
SortOrder = SortOrder.Descending,
|
||||
|
||||
@@ -135,11 +135,11 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||
{
|
||||
var user = string.IsNullOrEmpty(query.UserId) ? null : _userManager.GetUserById(query.UserId);
|
||||
|
||||
var channels = _libraryManager.GetItems(new InternalItemsQuery
|
||||
var channels = _libraryManager.GetItemList(new InternalItemsQuery
|
||||
{
|
||||
IncludeItemTypes = new[] { typeof(LiveTvChannel).Name }
|
||||
|
||||
}).Items.Cast<LiveTvChannel>();
|
||||
}).Cast<LiveTvChannel>();
|
||||
|
||||
if (user != null)
|
||||
{
|
||||
@@ -1430,7 +1430,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||
internalQuery.ChannelIds = new[] { query.ChannelId };
|
||||
}
|
||||
|
||||
var queryResult = _libraryManager.GetItems(internalQuery, new string[] { });
|
||||
var queryResult = _libraryManager.GetItemList(internalQuery, new string[] { });
|
||||
IEnumerable<ILiveTvRecording> recordings = queryResult.Cast<ILiveTvRecording>();
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(query.Id))
|
||||
@@ -1865,7 +1865,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||
|
||||
var now = DateTime.UtcNow;
|
||||
|
||||
var programs = _libraryManager.GetItems(new InternalItemsQuery(user)
|
||||
var programs = _libraryManager.GetItemList(new InternalItemsQuery(user)
|
||||
{
|
||||
IncludeItemTypes = new[] { typeof(LiveTvProgram).Name },
|
||||
ChannelIds = new[] { id },
|
||||
@@ -1889,7 +1889,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||
|
||||
var now = DateTime.UtcNow;
|
||||
|
||||
var programs = _libraryManager.GetItems(new InternalItemsQuery(user)
|
||||
var programs = _libraryManager.GetItemList(new InternalItemsQuery(user)
|
||||
{
|
||||
IncludeItemTypes = new[] { typeof(LiveTvProgram).Name },
|
||||
ChannelIds = new[] { channel.Id.ToString("N") },
|
||||
|
||||
@@ -1583,11 +1583,15 @@ namespace MediaBrowser.Server.Implementations.Persistence
|
||||
|
||||
private string MapOrderByField(string name)
|
||||
{
|
||||
if (string.Equals(name, "airtime", StringComparison.OrdinalIgnoreCase))
|
||||
if (string.Equals(name, ItemSortBy.AirTime, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
// TODO
|
||||
return "SortName";
|
||||
}
|
||||
if (string.Equals(name, ItemSortBy.Runtime, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
return "RuntimeTicks";
|
||||
}
|
||||
|
||||
return name;
|
||||
}
|
||||
@@ -1783,6 +1787,16 @@ namespace MediaBrowser.Server.Implementations.Persistence
|
||||
}
|
||||
cmd.Parameters.Add(cmd, "@SchemaVersion", DbType.Int32).Value = LatestSchemaVersion;
|
||||
}
|
||||
if (query.IsHD.HasValue)
|
||||
{
|
||||
whereClauses.Add("IsHD=@IsHD");
|
||||
cmd.Parameters.Add(cmd, "@IsHD", DbType.Boolean).Value = query.IsHD;
|
||||
}
|
||||
if (query.IsLocked.HasValue)
|
||||
{
|
||||
whereClauses.Add("IsLocked=@IsLocked");
|
||||
cmd.Parameters.Add(cmd, "@IsLocked", DbType.Boolean).Value = query.IsLocked;
|
||||
}
|
||||
if (query.IsOffline.HasValue)
|
||||
{
|
||||
whereClauses.Add("IsOffline=@IsOffline");
|
||||
@@ -1861,6 +1875,30 @@ namespace MediaBrowser.Server.Implementations.Persistence
|
||||
cmd.Parameters.Add(cmd, "@Path", DbType.String).Value = query.Path;
|
||||
}
|
||||
|
||||
if (query.MinCommunityRating.HasValue)
|
||||
{
|
||||
whereClauses.Add("CommunityRating>=@MinCommunityRating");
|
||||
cmd.Parameters.Add(cmd, "@MinCommunityRating", DbType.Double).Value = query.MinCommunityRating.Value;
|
||||
}
|
||||
|
||||
if (query.MinIndexNumber.HasValue)
|
||||
{
|
||||
whereClauses.Add("IndexNumber>=@MinIndexNumber");
|
||||
cmd.Parameters.Add(cmd, "@MinIndexNumber", DbType.Int32).Value = query.MinIndexNumber.Value;
|
||||
}
|
||||
|
||||
//if (query.MinPlayers.HasValue)
|
||||
//{
|
||||
// whereClauses.Add("Players>=@MinPlayers");
|
||||
// cmd.Parameters.Add(cmd, "@MinPlayers", DbType.Int32).Value = query.MinPlayers.Value;
|
||||
//}
|
||||
|
||||
//if (query.MaxPlayers.HasValue)
|
||||
//{
|
||||
// whereClauses.Add("Players<=@MaxPlayers");
|
||||
// cmd.Parameters.Add(cmd, "@MaxPlayers", DbType.Int32).Value = query.MaxPlayers.Value;
|
||||
//}
|
||||
|
||||
if (query.MinEndDate.HasValue)
|
||||
{
|
||||
whereClauses.Add("EndDate>=@MinEndDate");
|
||||
@@ -1879,16 +1917,21 @@ namespace MediaBrowser.Server.Implementations.Persistence
|
||||
cmd.Parameters.Add(cmd, "@MinStartDate", DbType.Date).Value = query.MinStartDate.Value;
|
||||
}
|
||||
|
||||
if (query.MaxStartDate.HasValue)
|
||||
{
|
||||
whereClauses.Add("StartDate<=@MaxStartDate");
|
||||
cmd.Parameters.Add(cmd, "@MaxStartDate", DbType.Date).Value = query.MaxStartDate.Value;
|
||||
}
|
||||
|
||||
if (query.MinPremiereDate.HasValue)
|
||||
{
|
||||
whereClauses.Add("PremiereDate>=@MinPremiereDate");
|
||||
cmd.Parameters.Add(cmd, "@MinPremiereDate", DbType.Date).Value = query.MinPremiereDate.Value;
|
||||
}
|
||||
|
||||
if (query.MaxStartDate.HasValue)
|
||||
if (query.MaxPremiereDate.HasValue)
|
||||
{
|
||||
whereClauses.Add("StartDate<=@MaxStartDate");
|
||||
cmd.Parameters.Add(cmd, "@MaxStartDate", DbType.Date).Value = query.MaxStartDate.Value;
|
||||
whereClauses.Add("PremiereDate<=@MaxPremiereDate");
|
||||
cmd.Parameters.Add(cmd, "@MaxPremiereDate", DbType.Date).Value = query.MaxPremiereDate.Value;
|
||||
}
|
||||
|
||||
if (query.SourceTypes.Length == 1)
|
||||
@@ -1972,16 +2015,44 @@ namespace MediaBrowser.Server.Implementations.Persistence
|
||||
|
||||
if (query.Genres.Length > 0)
|
||||
{
|
||||
var genres = new List<string>();
|
||||
var clauses = new List<string>();
|
||||
var index = 0;
|
||||
foreach (var genre in query.Genres)
|
||||
foreach (var item in query.Genres)
|
||||
{
|
||||
genres.Add("Genres like @Genres" + index);
|
||||
cmd.Parameters.Add(cmd, "@Genres" + index, DbType.String).Value = "%" + genre + "%";
|
||||
clauses.Add("Genres like @Genres" + index);
|
||||
cmd.Parameters.Add(cmd, "@Genres" + index, DbType.String).Value = "%" + item + "%";
|
||||
index++;
|
||||
}
|
||||
var genreCaluse = "(" + string.Join(" OR ", genres.ToArray()) + ")";
|
||||
whereClauses.Add(genreCaluse);
|
||||
var clause = "(" + string.Join(" OR ", clauses.ToArray()) + ")";
|
||||
whereClauses.Add(clause);
|
||||
}
|
||||
|
||||
if (query.Tags.Length > 0)
|
||||
{
|
||||
var clauses = new List<string>();
|
||||
var index = 0;
|
||||
foreach (var item in query.Tags)
|
||||
{
|
||||
clauses.Add("Tags like @Tags" + index);
|
||||
cmd.Parameters.Add(cmd, "@Tags" + index, DbType.String).Value = "%" + item + "%";
|
||||
index++;
|
||||
}
|
||||
var clause = "(" + string.Join(" OR ", clauses.ToArray()) + ")";
|
||||
whereClauses.Add(clause);
|
||||
}
|
||||
|
||||
if (query.Studios.Length > 0)
|
||||
{
|
||||
var clauses = new List<string>();
|
||||
var index = 0;
|
||||
foreach (var item in query.Studios)
|
||||
{
|
||||
clauses.Add("Studios like @Studios" + index);
|
||||
cmd.Parameters.Add(cmd, "@Studios" + index, DbType.String).Value = "%" + item + "%";
|
||||
index++;
|
||||
}
|
||||
var clause = "(" + string.Join(" OR ", clauses.ToArray()) + ")";
|
||||
whereClauses.Add(clause);
|
||||
}
|
||||
|
||||
if (query.MaxParentalRating.HasValue)
|
||||
@@ -2020,6 +2091,17 @@ namespace MediaBrowser.Server.Implementations.Persistence
|
||||
|
||||
whereClauses.Add("LocationType not in (" + val + ")");
|
||||
}
|
||||
if (query.MediaTypes.Length == 1)
|
||||
{
|
||||
whereClauses.Add("MediaType=@MediaTypes");
|
||||
cmd.Parameters.Add(cmd, "@MediaTypes", DbType.String).Value = query.MediaTypes[0].ToString();
|
||||
}
|
||||
if (query.MediaTypes.Length > 1)
|
||||
{
|
||||
var val = string.Join(",", query.MediaTypes.Select(i => "'" + i + "'").ToArray());
|
||||
|
||||
whereClauses.Add("MediaType in (" + val + ")");
|
||||
}
|
||||
|
||||
var enableItemsByName = query.IncludeItemsByName ?? query.IncludeItemTypes.Length > 0;
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@ namespace MediaBrowser.Server.Implementations.TV
|
||||
? new string[] { }
|
||||
: new[] { request.ParentId };
|
||||
|
||||
var items = _libraryManager.GetItems(new InternalItemsQuery(user)
|
||||
var items = _libraryManager.GetItemList(new InternalItemsQuery(user)
|
||||
{
|
||||
IncludeItemTypes = new[] { typeof(Series).Name },
|
||||
SortOrder = SortOrder.Ascending
|
||||
@@ -58,7 +58,7 @@ namespace MediaBrowser.Server.Implementations.TV
|
||||
throw new ArgumentException("User not found");
|
||||
}
|
||||
|
||||
var items = _libraryManager.GetItems(new InternalItemsQuery(user)
|
||||
var items = _libraryManager.GetItemList(new InternalItemsQuery(user)
|
||||
{
|
||||
IncludeItemTypes = new[] { typeof(Series).Name },
|
||||
SortOrder = SortOrder.Ascending
|
||||
|
||||
Reference in New Issue
Block a user