aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2016-03-20 14:40:33 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2016-03-20 14:40:33 -0400
commitefed1b0cf6934bd6e70784669e2eef112d7babec (patch)
treebeb59181b41f82bbe9c98e672c12d8d91012ebde /MediaBrowser.Server.Implementations
parentea68601a55887684c34813f66cfc34c68ebf9cb2 (diff)
parent7caed86e853e4181750f2058266c83f751a14b47 (diff)
Merge branch 'beta' of https://github.com/MediaBrowser/Emby into beta
Diffstat (limited to 'MediaBrowser.Server.Implementations')
-rw-r--r--MediaBrowser.Server.Implementations/Channels/ChannelManager.cs7
-rw-r--r--MediaBrowser.Server.Implementations/Dto/DtoService.cs5
-rw-r--r--MediaBrowser.Server.Implementations/Intros/DefaultIntroProvider.cs4
-rw-r--r--MediaBrowser.Server.Implementations/Library/LibraryManager.cs43
-rw-r--r--MediaBrowser.Server.Implementations/Library/LocalTrailerPostScanTask.cs7
-rw-r--r--MediaBrowser.Server.Implementations/Library/MusicManager.cs2
-rw-r--r--MediaBrowser.Server.Implementations/Library/SearchEngine.cs2
-rw-r--r--MediaBrowser.Server.Implementations/Library/UserViewManager.cs2
-rw-r--r--MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs10
-rw-r--r--MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs113
-rw-r--r--MediaBrowser.Server.Implementations/TV/TVSeriesManager.cs4
11 files changed, 153 insertions, 46 deletions
diff --git a/MediaBrowser.Server.Implementations/Channels/ChannelManager.cs b/MediaBrowser.Server.Implementations/Channels/ChannelManager.cs
index e957b9889..240037597 100644
--- a/MediaBrowser.Server.Implementations/Channels/ChannelManager.cs
+++ b/MediaBrowser.Server.Implementations/Channels/ChannelManager.cs
@@ -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)
diff --git a/MediaBrowser.Server.Implementations/Dto/DtoService.cs b/MediaBrowser.Server.Implementations/Dto/DtoService.cs
index 3ead1a835..5fe9ee434 100644
--- a/MediaBrowser.Server.Implementations/Dto/DtoService.cs
+++ b/MediaBrowser.Server.Implementations/Dto/DtoService.cs
@@ -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;
diff --git a/MediaBrowser.Server.Implementations/Intros/DefaultIntroProvider.cs b/MediaBrowser.Server.Implementations/Intros/DefaultIntroProvider.cs
index 5adddd38a..2755a476c 100644
--- a/MediaBrowser.Server.Implementations/Intros/DefaultIntroProvider.cs
+++ b/MediaBrowser.Server.Implementations/Intros/DefaultIntroProvider.cs
@@ -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,
diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
index 19b66836b..bf895e5ce 100644
--- a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
+++ b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
@@ -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();
}
}
diff --git a/MediaBrowser.Server.Implementations/Library/LocalTrailerPostScanTask.cs b/MediaBrowser.Server.Implementations/Library/LocalTrailerPostScanTask.cs
index 10263f7d7..4e23b5e93 100644
--- a/MediaBrowser.Server.Implementations/Library/LocalTrailerPostScanTask.cs
+++ b/MediaBrowser.Server.Implementations/Library/LocalTrailerPostScanTask.cs
@@ -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;
diff --git a/MediaBrowser.Server.Implementations/Library/MusicManager.cs b/MediaBrowser.Server.Implementations/Library/MusicManager.cs
index 11a1f190a..aad7c112b 100644
--- a/MediaBrowser.Server.Implementations/Library/MusicManager.cs
+++ b/MediaBrowser.Server.Implementations/Library/MusicManager.cs
@@ -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 },
diff --git a/MediaBrowser.Server.Implementations/Library/SearchEngine.cs b/MediaBrowser.Server.Implementations/Library/SearchEngine.cs
index 62392c1c7..276fc329f 100644
--- a/MediaBrowser.Server.Implementations/Library/SearchEngine.cs
+++ b/MediaBrowser.Server.Implementations/Library/SearchEngine.cs
@@ -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(),
diff --git a/MediaBrowser.Server.Implementations/Library/UserViewManager.cs b/MediaBrowser.Server.Implementations/Library/UserViewManager.cs
index 9d276ada2..37046bfef 100644
--- a/MediaBrowser.Server.Implementations/Library/UserViewManager.cs
+++ b/MediaBrowser.Server.Implementations/Library/UserViewManager.cs
@@ -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,
diff --git a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
index 47379fcb0..22516e7a6 100644
--- a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
+++ b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
@@ -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") },
diff --git a/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs b/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs
index 50662c90f..491f2c116 100644
--- a/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs
+++ b/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs
@@ -19,6 +19,7 @@ using System.Runtime.Serialization;
using System.Threading;
using System.Threading.Tasks;
using MediaBrowser.Controller.Channels;
+using MediaBrowser.Controller.Playlists;
using MediaBrowser.Model.LiveTv;
namespace MediaBrowser.Server.Implementations.Persistence
@@ -729,10 +730,12 @@ namespace MediaBrowser.Server.Implementations.Persistence
var topParent = item.GetTopParent();
if (topParent != null)
{
+ //Logger.Debug("Item {0} has top parent {1}", item.Id, topParent.Id);
_saveItemCommand.GetParameter(index++).Value = topParent.Id.ToString("N");
}
else
{
+ //Logger.Debug("Item {0} has null top parent", item.Id);
_saveItemCommand.GetParameter(index++).Value = null;
}
@@ -1583,11 +1586,19 @@ 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";
+ }
+ if (string.Equals(name, ItemSortBy.Random, StringComparison.OrdinalIgnoreCase))
+ {
+ return "RANDOM()";
+ }
return name;
}
@@ -1783,6 +1794,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 +1882,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 +1924,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 +2022,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 item in query.Genres)
+ {
+ clauses.Add("Genres like @Genres" + index);
+ cmd.Parameters.Add(cmd, "@Genres" + index, DbType.String).Value = "%" + item + "%";
+ index++;
+ }
+ 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 genre in query.Genres)
+ foreach (var item in query.Tags)
{
- genres.Add("Genres like @Genres" + index);
- cmd.Parameters.Add(cmd, "@Genres" + index, DbType.String).Value = "%" + genre + "%";
+ clauses.Add("Tags like @Tags" + index);
+ cmd.Parameters.Add(cmd, "@Tags" + 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.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 +2098,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;
@@ -2113,6 +2202,8 @@ namespace MediaBrowser.Server.Implementations.Persistence
typeof(MusicGenre),
typeof(MusicVideo),
typeof(Movie),
+ typeof(Playlist),
+ typeof(AudioPodcast),
typeof(Trailer),
typeof(BoxSet),
typeof(Episode),
diff --git a/MediaBrowser.Server.Implementations/TV/TVSeriesManager.cs b/MediaBrowser.Server.Implementations/TV/TVSeriesManager.cs
index 69d1c89fe..3e43ebe9b 100644
--- a/MediaBrowser.Server.Implementations/TV/TVSeriesManager.cs
+++ b/MediaBrowser.Server.Implementations/TV/TVSeriesManager.cs
@@ -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