Browse Source

fixes

pull/2779/head
Jason Dove 7 months ago
parent
commit
d49c3dac9d
No known key found for this signature in database
  1. 27
      ErsatzTV.Application/Maintenance/Commands/DeleteOrphanedArtworkHandler.cs
  2. 9
      ErsatzTV.Infrastructure/Images/ImageCache.cs

27
ErsatzTV.Application/Maintenance/Commands/DeleteOrphanedArtworkHandler.cs

@ -2,6 +2,7 @@ @@ -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( @@ -47,8 +48,7 @@ public class DeleteOrphanedArtworkHandler(
System.Collections.Generic.HashSet<string> validFiles = [];
var lastId = 0;
var hasMoreRows = true;
while (hasMoreRows)
while (true)
{
List<MinimalArtwork> result = await dbContext.Artwork
.TagWithCallSite()
@ -59,38 +59,35 @@ public class DeleteOrphanedArtworkHandler( @@ -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);

9
ErsatzTV.Infrastructure/Images/ImageCache.cs

@ -22,6 +22,12 @@ public class ImageCache(IFileSystem fileSystem, ILocalFileSystem localFileSystem @@ -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<Either<BaseError, string>> SaveArtworkToCache(Stream stream, ArtworkKind artworkKind)
{
try
@ -149,8 +155,7 @@ public class ImageCache(IFileSystem fileSystem, ILocalFileSystem localFileSystem @@ -149,8 +155,7 @@ public class ImageCache(IFileSystem fileSystem, ILocalFileSystem localFileSystem
public Task<string> 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))
{

Loading…
Cancel
Save