diff options
| author | John Corser <johnpc@umich.edu> | 2026-05-09 14:38:22 -0400 |
|---|---|---|
| committer | John Corser <xss@amazon.com> | 2026-06-28 21:44:46 -0400 |
| commit | a888257c8299026fb73c4c90160c71cdacc0ee37 (patch) | |
| tree | 21d06c0e5c9a3b3223faff65c6bf9fcd950a353d /Emby.Server.Implementations | |
| parent | d55f80842391e1b69db927ae8938c0455ddb5192 (diff) | |
Project hasImage/hasOverview from DB query
Instead of re-checking image/overview on the domain object after loading,
project the values directly from the database query as part of the
anonymous type selection. This avoids redundant checks since the DB
already has this information.
Diffstat (limited to 'Emby.Server.Implementations')
| -rw-r--r-- | Emby.Server.Implementations/ScheduledTasks/Tasks/PeopleValidationTask.cs | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/Emby.Server.Implementations/ScheduledTasks/Tasks/PeopleValidationTask.cs b/Emby.Server.Implementations/ScheduledTasks/Tasks/PeopleValidationTask.cs index 7d42693b39..bdda7937fd 100644 --- a/Emby.Server.Implementations/ScheduledTasks/Tasks/PeopleValidationTask.cs +++ b/Emby.Server.Implementations/ScheduledTasks/Tasks/PeopleValidationTask.cs @@ -9,7 +9,6 @@ using Jellyfin.Database.Implementations.Entities; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Entities; using MediaBrowser.Model.Globalization; using MediaBrowser.Model.IO; using MediaBrowser.Model.Tasks; @@ -175,41 +174,43 @@ public class PeopleValidationTask : IScheduledTask, IConfigurableScheduledTask var context = await _dbContextFactory.CreateDbContextAsync(cancellationToken).ConfigureAwait(false); await using (context.ConfigureAwait(false)) { - var peopleIds = await context.BaseItems + var people = await context.BaseItems .AsNoTracking() .Where(b => b.Type == personTypeName) .Where(b => b.DateLastRefreshed == null || b.DateLastRefreshed < thirtyDaysAgo) .Where(b => !b.Images!.Any(i => i.ImageType == ImageInfoImageType.Primary) || string.IsNullOrEmpty(b.Overview)) - .Select(b => b.Id) + .Select(b => new + { + b.Id, + HasImage = b.Images!.Any(i => i.ImageType == ImageInfoImageType.Primary), + HasOverview = !string.IsNullOrEmpty(b.Overview) + }) .ToListAsync(cancellationToken) .ConfigureAwait(false); - var numPeople = peopleIds.Count; + var numPeople = people.Count; var numComplete = 0; var numRefreshed = 0; _logger.LogDebug("Found {Count} people needing image/overview refresh", numPeople); - foreach (var personId in peopleIds) + foreach (var entry in people) { cancellationToken.ThrowIfCancellationRequested(); try { - if (_libraryManager.GetItemById(personId) is not Person item) + if (_libraryManager.GetItemById(entry.Id) is not Person item) { continue; } - var hasImage = item.HasImage(ImageType.Primary, 0); - var hasOverview = !string.IsNullOrWhiteSpace(item.Overview); - var options = new MetadataRefreshOptions(new DirectoryService(_fileSystem)) { - ImageRefreshMode = hasImage ? MetadataRefreshMode.ValidationOnly : MetadataRefreshMode.Default, - MetadataRefreshMode = hasOverview ? MetadataRefreshMode.ValidationOnly : MetadataRefreshMode.Default + ImageRefreshMode = entry.HasImage ? MetadataRefreshMode.ValidationOnly : MetadataRefreshMode.Default, + MetadataRefreshMode = entry.HasOverview ? MetadataRefreshMode.ValidationOnly : MetadataRefreshMode.Default }; await item.RefreshMetadata(options, cancellationToken).ConfigureAwait(false); @@ -221,7 +222,7 @@ public class PeopleValidationTask : IScheduledTask, IConfigurableScheduledTask } catch (Exception ex) { - _logger.LogError(ex, "Error refreshing images for person {PersonId}", personId); + _logger.LogError(ex, "Error refreshing images for person {PersonId}", entry.Id); } numComplete++; |
