diff --git a/ErsatzTV.Application/Maintenance/Commands/DeleteOrphanedArtworkHandler.cs b/ErsatzTV.Application/Maintenance/Commands/DeleteOrphanedArtworkHandler.cs index 32438f0ce..627135be2 100644 --- a/ErsatzTV.Application/Maintenance/Commands/DeleteOrphanedArtworkHandler.cs +++ b/ErsatzTV.Application/Maintenance/Commands/DeleteOrphanedArtworkHandler.cs @@ -2,6 +2,7 @@ using ErsatzTV.Core; using ErsatzTV.Core.Interfaces.Repositories; using ErsatzTV.Infrastructure.Data; +using ErsatzTV.Infrastructure.Images; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; @@ -47,8 +48,7 @@ public class DeleteOrphanedArtworkHandler( System.Collections.Generic.HashSet validFiles = []; var lastId = 0; - var hasMoreRows = true; - while (hasMoreRows) + while (true) { List result = await dbContext.Artwork .TagWithCallSite() @@ -59,38 +59,35 @@ public class DeleteOrphanedArtworkHandler( .Select(a => new MinimalArtwork(a.Id, a.Path, a.BlurHash43, a.BlurHash54, a.BlurHash64)) .ToListAsync(cancellationToken); - int newLastId = lastId; - foreach (MinimalArtwork artwork in result) + if (result.Count == 0) { - newLastId = artwork.Id; + break; + } - if (!artwork.Path.Contains('/')) + foreach (MinimalArtwork artwork in result) + { + if (!string.IsNullOrWhiteSpace(artwork.Path) && !artwork.Path.Contains('/')) { validFiles.Add(artwork.Path); } if (!string.IsNullOrWhiteSpace(artwork.BlurHash43)) { - validFiles.Add(artwork.BlurHash43); + validFiles.Add(ImageCache.GetBlurHashFileName(artwork.BlurHash43)); } if (!string.IsNullOrWhiteSpace(artwork.BlurHash54)) { - validFiles.Add(artwork.BlurHash54); + validFiles.Add(ImageCache.GetBlurHashFileName(artwork.BlurHash54)); } if (!string.IsNullOrWhiteSpace(artwork.BlurHash64)) { - validFiles.Add(artwork.BlurHash64); + validFiles.Add(ImageCache.GetBlurHashFileName(artwork.BlurHash64)); } } - if (lastId == newLastId) - { - hasMoreRows = false; - } - - lastId = newLastId; + lastId = result.Last().Id; } logger.LogDebug("Loaded {Count} artwork hashes (valid file names)", validFiles.Count); diff --git a/ErsatzTV.Infrastructure/Images/ImageCache.cs b/ErsatzTV.Infrastructure/Images/ImageCache.cs index 1c46feb57..0688f76fb 100644 --- a/ErsatzTV.Infrastructure/Images/ImageCache.cs +++ b/ErsatzTV.Infrastructure/Images/ImageCache.cs @@ -22,6 +22,12 @@ public class ImageCache(IFileSystem fileSystem, ILocalFileSystem localFileSystem static ImageCache() => Crypto = SHA1.Create(); + public static string GetBlurHashFileName(string blurHash) + { + byte[] bytes = Encoding.UTF8.GetBytes(blurHash); + return Convert.ToBase64String(bytes).Replace("+", "_").Replace("/", "-").Replace("=", ""); + } + public async Task> SaveArtworkToCache(Stream stream, ArtworkKind artworkKind) { try @@ -149,8 +155,7 @@ public class ImageCache(IFileSystem fileSystem, ILocalFileSystem localFileSystem public Task WriteBlurHash(string blurHash, IDisplaySize targetSize) { - byte[] bytes = Encoding.UTF8.GetBytes(blurHash); - string base64 = Convert.ToBase64String(bytes).Replace("+", "_").Replace("/", "-").Replace("=", ""); + string base64 = GetBlurHashFileName(blurHash); string targetFile = GetPathForImage(base64, ArtworkKind.Poster, targetSize.Height) ?? string.Empty; if (!fileSystem.File.Exists(targetFile)) {