From 9383a2fb09ffb60cfe63683106945bd688affa59 Mon Sep 17 00:00:00 2001 From: ivarlovlie Date: Wed, 1 Jun 2022 21:13:43 +0200 Subject: feat: Initial commit after clean slate --- src/Services/AssetsService.cs | 58 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 src/Services/AssetsService.cs (limited to 'src/Services/AssetsService.cs') diff --git a/src/Services/AssetsService.cs b/src/Services/AssetsService.cs new file mode 100644 index 0000000..bf0029a --- /dev/null +++ b/src/Services/AssetsService.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using IOL.Helpers; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Logging; +using VSH.Data; +using VSH.Data.Static; + +namespace VSH.Services; + +public class AssetsService +{ + private readonly MainDbContext _context; + private readonly ILogger _logger; + + + public AssetsService(MainDbContext context, ILogger logger) { + _context = context; + _logger = logger; + } + + public Task RemoveUnusedProductImages() { + try { + _logger.LogDebug("Starting RemoveUnusedProductImages"); + var inUseFileNames = new List(); + + foreach (var productImageList in _context.Products.Select(c => c.Images).AsNoTracking()) { + var defaultFiles = productImageList.Select(image => image.FileName).ToList(); + var smallFiles = defaultFiles.Select(c => c.ExtractFileName() + "-300" + c.ExtractExtension()); + var miniFiles = defaultFiles.Select(c => c.ExtractFileName() + "-150" + c.ExtractExtension()); + inUseFileNames.AddRange(defaultFiles); + inUseFileNames.AddRange(miniFiles); + inUseFileNames.AddRange(smallFiles); + } + + var removedFileCount = 0; + if (inUseFileNames.Any()) { + foreach (var diskFile in Directory.EnumerateFiles(AppPaths.ProductImages.HostPath)) { + if (inUseFileNames.Any(c => c == diskFile)) + continue; + if (File.Exists(diskFile)) + File.Delete(diskFile); + removedFileCount++; + _logger.LogDebug("Deleted " + diskFile); + } + } + + _logger.LogInformation("Removed " + removedFileCount + " unused product images"); + return Task.CompletedTask; + } catch (Exception ex) { + _logger.LogError("Exception removing unused assets: {exception}", ex.Message); + return Task.CompletedTask; + } + } +} \ No newline at end of file -- cgit v1.3