aboutsummaryrefslogtreecommitdiff
path: root/Emby.Server.Implementations/Library
diff options
context:
space:
mode:
Diffstat (limited to 'Emby.Server.Implementations/Library')
-rw-r--r--Emby.Server.Implementations/Library/LibraryManager.cs6
-rw-r--r--Emby.Server.Implementations/Library/Validators/ArtistsValidator.cs12
-rw-r--r--Emby.Server.Implementations/Library/Validators/GenresValidator.cs17
-rw-r--r--Emby.Server.Implementations/Library/Validators/StudiosValidator.cs17
4 files changed, 49 insertions, 3 deletions
diff --git a/Emby.Server.Implementations/Library/LibraryManager.cs b/Emby.Server.Implementations/Library/LibraryManager.cs
index 830c918541..15705dee96 100644
--- a/Emby.Server.Implementations/Library/LibraryManager.cs
+++ b/Emby.Server.Implementations/Library/LibraryManager.cs
@@ -3495,5 +3495,11 @@ namespace Emby.Server.Implementations.Library
{
return _itemRepository.RerouteLinkedChildren(fromChildId, toChildId);
}
+
+ /// <inheritdoc />
+ public QueryFiltersLegacy GetQueryFiltersLegacy(InternalItemsQuery query)
+ {
+ return _itemRepository.GetQueryFiltersLegacy(query);
+ }
}
}
diff --git a/Emby.Server.Implementations/Library/Validators/ArtistsValidator.cs b/Emby.Server.Implementations/Library/Validators/ArtistsValidator.cs
index 8de3bff7ab..b196b1e038 100644
--- a/Emby.Server.Implementations/Library/Validators/ArtistsValidator.cs
+++ b/Emby.Server.Implementations/Library/Validators/ArtistsValidator.cs
@@ -55,6 +55,8 @@ public class ArtistsValidator
IncludeItemTypes = [BaseItemKind.MusicArtist]
}).ToHashSet();
+ var existingArtists = _libraryManager.GetArtists(names);
+
var numComplete = 0;
var count = names.Count;
var refreshed = 0;
@@ -63,7 +65,15 @@ public class ArtistsValidator
{
try
{
- var item = _libraryManager.GetArtist(name);
+ MusicArtist? item = null;
+ if (existingArtists.TryGetValue(name, out var artists) && artists.Length > 0)
+ {
+ item = artists.OrderBy(i => i.IsAccessedByName ? 1 : 0).First();
+ }
+
+ // Fall back to GetArtist if not found (creates new item if needed)
+ item ??= _libraryManager.GetArtist(name);
+
if (!existingArtistIds.Contains(item.Id))
{
await item.RefreshMetadata(cancellationToken).ConfigureAwait(false);
diff --git a/Emby.Server.Implementations/Library/Validators/GenresValidator.cs b/Emby.Server.Implementations/Library/Validators/GenresValidator.cs
index 09ede8bb8d..badd6f1183 100644
--- a/Emby.Server.Implementations/Library/Validators/GenresValidator.cs
+++ b/Emby.Server.Implementations/Library/Validators/GenresValidator.cs
@@ -54,6 +54,13 @@ public class GenresValidator
IncludeItemTypes = [BaseItemKind.Genre]
}).ToHashSet();
+ var existingGenres = _libraryManager.GetItemList(new InternalItemsQuery
+ {
+ IncludeItemTypes = [BaseItemKind.Genre]
+ }).Cast<Genre>()
+ .GroupBy(g => g.Name, StringComparer.OrdinalIgnoreCase)
+ .ToDictionary(g => g.Key, g => g.First(), StringComparer.OrdinalIgnoreCase);
+
var numComplete = 0;
var count = names.Count;
var refreshed = 0;
@@ -62,7 +69,15 @@ public class GenresValidator
{
try
{
- var item = _libraryManager.GetGenre(name);
+ Genre? item = null;
+ if (existingGenres.TryGetValue(name, out var existingGenre))
+ {
+ item = existingGenre;
+ }
+
+ // Fall back to GetGenre if not found (creates new item if needed)
+ item ??= _libraryManager.GetGenre(name);
+
if (!existingGenreIds.Contains(item.Id))
{
await item.RefreshMetadata(cancellationToken).ConfigureAwait(false);
diff --git a/Emby.Server.Implementations/Library/Validators/StudiosValidator.cs b/Emby.Server.Implementations/Library/Validators/StudiosValidator.cs
index dd124feece..9fb6869171 100644
--- a/Emby.Server.Implementations/Library/Validators/StudiosValidator.cs
+++ b/Emby.Server.Implementations/Library/Validators/StudiosValidator.cs
@@ -55,6 +55,13 @@ public class StudiosValidator
IncludeItemTypes = [BaseItemKind.Studio]
}).ToHashSet();
+ var existingStudios = _libraryManager.GetItemList(new InternalItemsQuery
+ {
+ IncludeItemTypes = [BaseItemKind.Studio]
+ }).Cast<Studio>()
+ .GroupBy(s => s.Name, StringComparer.OrdinalIgnoreCase)
+ .ToDictionary(g => g.Key, g => g.First(), StringComparer.OrdinalIgnoreCase);
+
var numComplete = 0;
var count = names.Count;
var refreshed = 0;
@@ -63,7 +70,15 @@ public class StudiosValidator
{
try
{
- var item = _libraryManager.GetStudio(name);
+ Studio? item = null;
+ if (existingStudios.TryGetValue(name, out var existingStudio))
+ {
+ item = existingStudio;
+ }
+
+ // Fall back to GetStudio if not found (creates new item if needed)
+ item ??= _libraryManager.GetStudio(name);
+
if (!existingStudioIds.Contains(item.Id))
{
await item.RefreshMetadata(cancellationToken).ConfigureAwait(false);