aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2016-05-06 00:50:39 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2016-05-06 00:50:39 -0400
commit5a496a1fc8d9ee2e728d6f712ae6bdf4862183f1 (patch)
tree70f8d08ae6cd74e08f5800136fe73728fd0ad3d0 /MediaBrowser.Server.Implementations
parent242fb3c770a657e3c2a23ac21ec7d902879d8023 (diff)
reduce recursive querying
Diffstat (limited to 'MediaBrowser.Server.Implementations')
-rw-r--r--MediaBrowser.Server.Implementations/Dto/DtoService.cs45
-rw-r--r--MediaBrowser.Server.Implementations/Library/Validators/StudiosValidator.cs44
-rw-r--r--MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs59
3 files changed, 64 insertions, 84 deletions
diff --git a/MediaBrowser.Server.Implementations/Dto/DtoService.cs b/MediaBrowser.Server.Implementations/Dto/DtoService.cs
index ff94552da..0aec3230d 100644
--- a/MediaBrowser.Server.Implementations/Dto/DtoService.cs
+++ b/MediaBrowser.Server.Implementations/Dto/DtoService.cs
@@ -397,12 +397,6 @@ namespace MediaBrowser.Server.Implementations.Dto
collectionFolder.GetViewType(user);
}
- var playlist = item as Playlist;
- if (playlist != null)
- {
- AttachLinkedChildImages(dto, playlist, user, options);
- }
-
if (fields.Contains(ItemFields.CanDelete))
{
dto.CanDelete = user == null
@@ -1564,45 +1558,6 @@ namespace MediaBrowser.Server.Implementations.Dto
}
}
- private void AttachLinkedChildImages(BaseItemDto dto, Folder folder, User user, DtoOptions options)
- {
- List<BaseItem> linkedChildren = null;
-
- var backdropLimit = options.GetImageLimit(ImageType.Backdrop);
-
- if (backdropLimit > 0 && dto.BackdropImageTags.Count == 0)
- {
- linkedChildren = user == null
- ? folder.GetRecursiveChildren().ToList()
- : folder.GetRecursiveChildren(user).ToList();
-
- var parentWithBackdrop = linkedChildren.FirstOrDefault(i => i.GetImages(ImageType.Backdrop).Any());
-
- if (parentWithBackdrop != null)
- {
- dto.ParentBackdropItemId = GetDtoId(parentWithBackdrop);
- dto.ParentBackdropImageTags = GetBackdropImageTags(parentWithBackdrop, backdropLimit);
- }
- }
-
- if (!dto.ImageTags.ContainsKey(ImageType.Primary) && options.GetImageLimit(ImageType.Primary) > 0)
- {
- if (linkedChildren == null)
- {
- linkedChildren = user == null
- ? folder.GetRecursiveChildren().ToList()
- : folder.GetRecursiveChildren(user).ToList();
- }
- var parentWithImage = linkedChildren.FirstOrDefault(i => i.GetImages(ImageType.Primary).Any());
-
- if (parentWithImage != null)
- {
- dto.ParentPrimaryImageItemId = GetDtoId(parentWithImage);
- dto.ParentPrimaryImageTag = GetImageCacheTag(parentWithImage, ImageType.Primary);
- }
- }
- }
-
private string GetMappedPath(IHasMetadata item)
{
var path = item.Path;
diff --git a/MediaBrowser.Server.Implementations/Library/Validators/StudiosValidator.cs b/MediaBrowser.Server.Implementations/Library/Validators/StudiosValidator.cs
index c122d64d3..00dc8e6a1 100644
--- a/MediaBrowser.Server.Implementations/Library/Validators/StudiosValidator.cs
+++ b/MediaBrowser.Server.Implementations/Library/Validators/StudiosValidator.cs
@@ -2,7 +2,6 @@
using MediaBrowser.Controller.Library;
using MediaBrowser.Model.Logging;
using System;
-using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
@@ -35,25 +34,20 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
/// <returns>Task.</returns>
public async Task Run(IProgress<double> progress, CancellationToken cancellationToken)
{
- var items = _libraryManager.RootFolder.GetRecursiveChildren()
- .SelectMany(i => i.Studios)
- .DistinctNames()
- .ToList();
+ var items = _libraryManager.GetItemList(new InternalItemsQuery
+ {
+ IncludeItemTypes = new[] { typeof(Studio).Name }
+
+ }).ToList();
var numComplete = 0;
var count = items.Count;
- var validIds = new List<Guid>();
-
- foreach (var name in items)
+ foreach (var item in items)
{
try
{
- var itemByName = _libraryManager.GetStudio(name);
-
- validIds.Add(itemByName.Id);
-
- await itemByName.RefreshMetadata(cancellationToken).ConfigureAwait(false);
+ await item.RefreshMetadata(cancellationToken).ConfigureAwait(false);
}
catch (OperationCanceledException)
{
@@ -62,7 +56,7 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
}
catch (Exception ex)
{
- _logger.ErrorException("Error refreshing {0}", ex, name);
+ _logger.ErrorException("Error refreshing {0}", ex, item.Name);
}
numComplete++;
@@ -73,28 +67,6 @@ namespace MediaBrowser.Server.Implementations.Library.Validators
progress.Report(percent);
}
- var allIds = _libraryManager.GetItemIds(new InternalItemsQuery
- {
- IncludeItemTypes = new[] { typeof(Studio).Name }
- });
-
- var invalidIds = allIds
- .Except(validIds)
- .ToList();
-
- foreach (var id in invalidIds)
- {
- cancellationToken.ThrowIfCancellationRequested();
-
- var item = _libraryManager.GetItemById(id);
-
- await _libraryManager.DeleteItem(item, new DeleteOptions
- {
- DeleteFileLocation = false
-
- }).ConfigureAwait(false);
- }
-
progress.Report(100);
}
}
diff --git a/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs b/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs
index d825a8de9..7199301af 100644
--- a/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs
+++ b/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs
@@ -82,7 +82,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
private IDbCommand _updateInheritedRatingCommand;
private IDbCommand _updateInheritedTagsCommand;
- public const int LatestSchemaVersion = 69;
+ public const int LatestSchemaVersion = 71;
/// <summary>
/// Initializes a new instance of the <see cref="SqliteItemRepository"/> class.
@@ -226,6 +226,9 @@ namespace MediaBrowser.Server.Implementations.Persistence
_connection.AddColumn(Logger, "TypedBaseItems", "InheritedTags", "Text");
_connection.AddColumn(Logger, "TypedBaseItems", "CleanName", "Text");
_connection.AddColumn(Logger, "TypedBaseItems", "PresentationUniqueKey", "Text");
+ _connection.AddColumn(Logger, "TypedBaseItems", "SlugName", "Text");
+ _connection.AddColumn(Logger, "TypedBaseItems", "OriginalTitle", "Text");
+ _connection.AddColumn(Logger, "TypedBaseItems", "PrimaryVersionId", "Text");
string[] postQueries =
{
@@ -367,7 +370,9 @@ namespace MediaBrowser.Server.Implementations.Persistence
"Tags",
"SourceType",
"TrailerTypes",
- "DateModifiedDuringLastRefresh"
+ "DateModifiedDuringLastRefresh",
+ "OriginalTitle",
+ "PrimaryVersionId"
};
private readonly string[] _mediaStreamSaveColumns =
@@ -476,7 +481,10 @@ namespace MediaBrowser.Server.Implementations.Persistence
"DateModifiedDuringLastRefresh",
"InheritedTags",
"CleanName",
- "PresentationUniqueKey"
+ "PresentationUniqueKey",
+ "SlugName",
+ "OriginalTitle",
+ "PrimaryVersionId"
};
_saveItemCommand = _connection.CreateCommand();
_saveItemCommand.CommandText = "replace into TypedBaseItems (" + string.Join(",", saveColumns.ToArray()) + ") values (";
@@ -810,7 +818,20 @@ namespace MediaBrowser.Server.Implementations.Persistence
{
_saveItemCommand.GetParameter(index++).Value = item.Name.RemoveDiacritics();
}
+
_saveItemCommand.GetParameter(index++).Value = item.PresentationUniqueKey;
+ _saveItemCommand.GetParameter(index++).Value = item.SlugName;
+ _saveItemCommand.GetParameter(index++).Value = item.OriginalTitle;
+
+ var video = item as Video;
+ if (video != null)
+ {
+ _saveItemCommand.GetParameter(index++).Value = video.PrimaryVersionId;
+ }
+ else
+ {
+ _saveItemCommand.GetParameter(index++).Value = null;
+ }
_saveItemCommand.Transaction = transaction;
@@ -1189,6 +1210,20 @@ namespace MediaBrowser.Server.Implementations.Persistence
item.DateModifiedDuringLastRefresh = reader.GetDateTime(51).ToUniversalTime();
}
+ if (!reader.IsDBNull(52))
+ {
+ item.OriginalTitle = reader.GetString(52);
+ }
+
+ var video = item as Video;
+ if (video != null)
+ {
+ if (!reader.IsDBNull(53))
+ {
+ video.PrimaryVersionId = reader.GetString(53);
+ }
+ }
+
return item;
}
@@ -2070,6 +2105,19 @@ namespace MediaBrowser.Server.Implementations.Persistence
cmd.Parameters.Add(cmd, "@PersonName", DbType.String).Value = query.Person;
}
+ if (!string.IsNullOrWhiteSpace(query.SlugName))
+ {
+ if (_config.Configuration.SchemaVersion >= 70)
+ {
+ whereClauses.Add("SlugName=@SlugName");
+ }
+ else
+ {
+ whereClauses.Add("Name=@SlugName");
+ }
+ cmd.Parameters.Add(cmd, "@SlugName", DbType.String).Value = query.SlugName;
+ }
+
if (!string.IsNullOrWhiteSpace(query.Name))
{
if (_config.Configuration.SchemaVersion >= 66)
@@ -2340,6 +2388,11 @@ namespace MediaBrowser.Server.Implementations.Persistence
private bool EnableGroupByPresentationUniqueKey(InternalItemsQuery query)
{
+ if (!query.GroupByPresentationUniqueKey)
+ {
+ return false;
+ }
+
if (!string.IsNullOrWhiteSpace(query.PresentationUniqueKey))
{
return false;