From 773b335971e564445073d47dadbd429ad562ec4a Mon Sep 17 00:00:00 2001 From: Rory& Date: Fri, 20 Feb 2026 03:20:06 +0100 Subject: [PATCH] cdn fsck fix test --- .../Spacebar.Cdn.Fsck/FsckService.cs | 26 ++++++++++++++----- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/extra/admin-api/Utilities/Spacebar.Cdn.Fsck/FsckService.cs b/extra/admin-api/Utilities/Spacebar.Cdn.Fsck/FsckService.cs index c0b0bbc3e..6247df3b7 100644 --- a/extra/admin-api/Utilities/Spacebar.Cdn.Fsck/FsckService.cs +++ b/extra/admin-api/Utilities/Spacebar.Cdn.Fsck/FsckService.cs @@ -29,6 +29,7 @@ public class FsckService(ILogger logger, IServiceScopeFactory servi public struct FsckItem { public string Path; public string ItemId; + public bool IsSingleSubDirFile; } private async Task RunFsckAsync(string name, string path, IQueryable items) { @@ -44,8 +45,17 @@ public class FsckService(ILogger logger, IServiceScopeFactory servi } i++; - if (!await fs.FileExists(item.Path)) - logger.LogWarning("{itemType} {itemId} is missing at {path}", name, item.ItemId, item.Path); + if (!item.IsSingleSubDirFile) { + if (!await fs.FileExists(item.Path)) + logger.LogWarning("{itemType} {itemId} is missing at {path}", name, item.ItemId, item.Path); + } + else if (item.IsSingleSubDirFile && fs is FilesystemFileSource ffs) { + if(!await ffs.DirectoryExists(Path.GetDirectoryName(item.Path))) + logger.LogWarning("{itemType} {itemId} is missing at {path} (directory missing)", name, item.ItemId, item.Path); + } + else { + logger.LogWarning("Unhandled case: {itemType} {itemId} -> {path} (IsSingleSubDirFile: {isSingleSubDirFile}, fstype: {fsType})", name, item.ItemId, item.Path, item.IsSingleSubDirFile, fs.GetType().Name); + } _fsckSemaphore.Release(); })); @@ -87,7 +97,7 @@ public class FsckService(ILogger logger, IServiceScopeFactory servi Path = $"/icons/{x.Id}/{x.Icon}", ItemId = x.Id }); - + public IQueryable EnumerateRoleIconPathsAsync() => _db.Roles .Where(x => !string.IsNullOrWhiteSpace(x.Icon)) @@ -101,16 +111,18 @@ public class FsckService(ILogger logger, IServiceScopeFactory servi _db.Stickers .OrderBy(x => x.Id) .Select(x => new FsckItem { - Path = $"/stickers/{x.Id}.png", - ItemId = x.Id + Path = $"/stickers/{x.Id}", + ItemId = x.Id, + IsSingleSubDirFile = fs is FilesystemFileSource }); public IQueryable EnumerateEmojiPathsAsync() => _db.Emojis .OrderBy(x => x.Id) .Select(x => new FsckItem { - Path = $"/emojis/{x.Id}", - ItemId = x.Id + Path = $"/emojis/{x.Id}/", + ItemId = x.Id, + IsSingleSubDirFile = fs is FilesystemFileSource }); #endregion