aboutsummaryrefslogtreecommitdiff
path: root/Emby.Server.Implementations
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2016-12-06 03:24:29 -0500
committerLuke Pulverenti <luke.pulverenti@gmail.com>2016-12-06 03:24:29 -0500
commit016d8301f5060d899cccbfad67823fa9e628d260 (patch)
treee2881e5e576102122ac79aced7c4fb6f1bcd28a3 /Emby.Server.Implementations
parente9a3690079e9676e1d315019d80da09c52d230f0 (diff)
update series queries
Diffstat (limited to 'Emby.Server.Implementations')
-rw-r--r--Emby.Server.Implementations/Data/SqliteItemRepository.cs32
-rw-r--r--Emby.Server.Implementations/Library/LibraryManager.cs11
-rw-r--r--Emby.Server.Implementations/TV/TVSeriesManager.cs9
3 files changed, 46 insertions, 6 deletions
diff --git a/Emby.Server.Implementations/Data/SqliteItemRepository.cs b/Emby.Server.Implementations/Data/SqliteItemRepository.cs
index 9c096916f..14723c0a7 100644
--- a/Emby.Server.Implementations/Data/SqliteItemRepository.cs
+++ b/Emby.Server.Implementations/Data/SqliteItemRepository.cs
@@ -291,6 +291,7 @@ namespace Emby.Server.Implementations.Data
AddColumn(db, "TypedBaseItems", "Artists", "Text", existingColumnNames);
AddColumn(db, "TypedBaseItems", "AlbumArtists", "Text", existingColumnNames);
AddColumn(db, "TypedBaseItems", "ExternalId", "Text", existingColumnNames);
+ AddColumn(db, "TypedBaseItems", "SeriesPresentationUniqueKey", "Text", existingColumnNames);
existingColumnNames = GetColumnNames(db, "ItemValues");
AddColumn(db, "ItemValues", "CleanValue", "Text", existingColumnNames);
@@ -341,6 +342,7 @@ namespace Emby.Server.Implementations.Data
"drop index if exists Idx_ProviderIds1",
"drop table if exists Images",
"drop index if exists idx_Images",
+ "drop index if exists idx_TypeSeriesPresentationUniqueKey",
"create index if not exists idx_PathTypedBaseItems on TypedBaseItems(Path)",
"create index if not exists idx_ParentIdTypedBaseItems on TypedBaseItems(ParentId)",
@@ -353,6 +355,9 @@ namespace Emby.Server.Implementations.Data
// covering index
"create index if not exists idx_TopParentIdGuid on TypedBaseItems(TopParentId,Guid)",
+ // series
+ "create index if not exists idx_TypeSeriesPresentationUniqueKey1 on TypedBaseItems(Type,SeriesPresentationUniqueKey,PresentationUniqueKey,SortName)",
+
// live tv programs
"create index if not exists idx_TypeTopParentIdStartDate on TypedBaseItems(Type,TopParentId,StartDate)",
@@ -488,7 +493,8 @@ namespace Emby.Server.Implementations.Data
"ExtraType",
"Artists",
"AlbumArtists",
- "ExternalId"
+ "ExternalId",
+ "SeriesPresentationUniqueKey"
};
private readonly string[] _mediaStreamSaveColumns =
@@ -619,7 +625,8 @@ namespace Emby.Server.Implementations.Data
"ExtraType",
"Artists",
"AlbumArtists",
- "ExternalId"
+ "ExternalId",
+ "SeriesPresentationUniqueKey"
};
var saveItemCommandCommandText = "replace into TypedBaseItems (" + string.Join(",", saveColumns.ToArray()) + ") values (";
@@ -1024,11 +1031,13 @@ namespace Emby.Server.Implementations.Data
{
saveItemStatement.TryBind("@SeriesId", hasSeries.SeriesId);
saveItemStatement.TryBind("@SeriesSortName", hasSeries.SeriesSortName);
+ saveItemStatement.TryBind("@SeriesPresentationUniqueKey", hasSeries.SeriesPresentationUniqueKey);
}
else
{
saveItemStatement.TryBindNull("@SeriesId");
saveItemStatement.TryBindNull("@SeriesSortName");
+ saveItemStatement.TryBindNull("@SeriesPresentationUniqueKey");
}
saveItemStatement.TryBind("@ExternalSeriesId", item.ExternalSeriesId);
@@ -1983,6 +1992,15 @@ namespace Emby.Server.Implementations.Data
}
index++;
+ if (hasSeries != null)
+ {
+ if (!reader.IsDBNull(index))
+ {
+ hasSeries.SeriesPresentationUniqueKey = reader.GetString(index);
+ }
+ }
+ index++;
+
if (string.IsNullOrWhiteSpace(item.Tagline))
{
var movie = item as Movie;
@@ -4292,6 +4310,16 @@ namespace Emby.Server.Implementations.Data
}
}
+ if (!string.IsNullOrWhiteSpace(query.SeriesPresentationUniqueKey))
+ {
+ whereClauses.Add("SeriesPresentationUniqueKey=@SeriesPresentationUniqueKey");
+
+ if (statement != null)
+ {
+ statement.TryBind("@SeriesPresentationUniqueKey", query.SeriesPresentationUniqueKey);
+ }
+ }
+
if (query.BlockUnratedItems.Length == 1)
{
whereClauses.Add("(InheritedParentalRatingValue > 0 or UnratedType <> @UnratedType)");
diff --git a/Emby.Server.Implementations/Library/LibraryManager.cs b/Emby.Server.Implementations/Library/LibraryManager.cs
index 8fb28fb59..d96756ce1 100644
--- a/Emby.Server.Implementations/Library/LibraryManager.cs
+++ b/Emby.Server.Implementations/Library/LibraryManager.cs
@@ -1057,6 +1057,12 @@ namespace Emby.Server.Implementations.Library
try
{
await PerformLibraryValidation(progress, cancellationToken).ConfigureAwait(false);
+
+ if (!ConfigurationManager.Configuration.EnableSeriesPresentationUniqueKey)
+ {
+ ConfigurationManager.Configuration.EnableSeriesPresentationUniqueKey = true;
+ ConfigurationManager.SaveConfiguration();
+ }
}
finally
{
@@ -1478,8 +1484,9 @@ namespace Emby.Server.Implementations.Library
!query.ParentId.HasValue &&
query.ChannelIds.Length == 0 &&
query.TopParentIds.Length == 0 &&
- string.IsNullOrWhiteSpace(query.AncestorWithPresentationUniqueKey)
- && query.ItemIds.Length == 0)
+ string.IsNullOrWhiteSpace(query.AncestorWithPresentationUniqueKey) &&
+ string.IsNullOrWhiteSpace(query.SeriesPresentationUniqueKey) &&
+ query.ItemIds.Length == 0)
{
var userViews = _userviewManager().GetUserViews(new UserViewQuery
{
diff --git a/Emby.Server.Implementations/TV/TVSeriesManager.cs b/Emby.Server.Implementations/TV/TVSeriesManager.cs
index 56e729995..4f876f6a3 100644
--- a/Emby.Server.Implementations/TV/TVSeriesManager.cs
+++ b/Emby.Server.Implementations/TV/TVSeriesManager.cs
@@ -158,9 +158,13 @@ namespace Emby.Server.Implementations.TV
/// <returns>Task{Episode}.</returns>
private Tuple<DateTime, Func<Episode>> GetNextUp(Series series, User user)
{
+ var enableSeriesPresentationKey = _config.Configuration.EnableSeriesPresentationUniqueKey;
+ var seriesKey = GetUniqueSeriesKey(series);
+
var lastWatchedEpisode = _libraryManager.GetItemList(new InternalItemsQuery(user)
{
- AncestorWithPresentationUniqueKey = GetUniqueSeriesKey(series),
+ AncestorWithPresentationUniqueKey = enableSeriesPresentationKey ? null : seriesKey,
+ SeriesPresentationUniqueKey = enableSeriesPresentationKey ? seriesKey : null,
IncludeItemTypes = new[] { typeof(Episode).Name },
SortBy = new[] { ItemSortBy.SortName },
SortOrder = SortOrder.Descending,
@@ -174,7 +178,8 @@ namespace Emby.Server.Implementations.TV
{
return _libraryManager.GetItemList(new InternalItemsQuery(user)
{
- AncestorWithPresentationUniqueKey = GetUniqueSeriesKey(series),
+ AncestorWithPresentationUniqueKey = enableSeriesPresentationKey ? null : seriesKey,
+ SeriesPresentationUniqueKey = enableSeriesPresentationKey ? seriesKey : null,
IncludeItemTypes = new[] { typeof(Episode).Name },
SortBy = new[] { ItemSortBy.SortName },
SortOrder = SortOrder.Ascending,