diff --git a/SDMetaUI/Controllers/ImagesController.cs b/SDMetaUI/Controllers/ImagesController.cs index f877290..5e9a6c9 100644 --- a/SDMetaUI/Controllers/ImagesController.cs +++ b/SDMetaUI/Controllers/ImagesController.cs @@ -17,6 +17,7 @@ public static IResult GetThumb( string physicalPath = Base32Decode(path); if (fileSystem.File.Exists(physicalPath)) { + EnableCaching(httpResponse); var fileInfo = fileSystem.FileInfo.New(physicalPath); var thumbPath = thumbnailService.GetOrGenerateThumbnail(fileInfo.FullName); httpResponse.Headers.LastModified = fileInfo.LastWriteTimeUtc.ToString("R"); @@ -46,6 +47,7 @@ public static IResult GetFull( string physicalPath = Base32Decode(path); if (fileSystem.File.Exists(physicalPath)) { + EnableCaching(httpResponse); httpResponse.Headers.LastModified = fileSystem.FileInfo.New(physicalPath).LastWriteTimeUtc.ToString("R"); return Results.File(physicalPath, "image/png"); } @@ -66,5 +68,10 @@ private static string Base32Decode(string base32EncodedData) var base32EncodedBytes = Base32Encoding.ToBytes(base32EncodedData); return System.Text.Encoding.UTF8.GetString(base32EncodedBytes); } + + private static void EnableCaching(HttpResponse httpResponse) + { + httpResponse.Headers.CacheControl = "public, max-age=31536000, immutable"; + } } } diff --git a/SDMetaUI/Models/ImageFileViewModel.cs b/SDMetaUI/Models/ImageFileViewModel.cs index 999418e..0b063bf 100644 --- a/SDMetaUI/Models/ImageFileViewModel.cs +++ b/SDMetaUI/Models/ImageFileViewModel.cs @@ -1,28 +1,30 @@ namespace SDMetaUI.Models { - public class ImageFileViewModel - { - private readonly Func func; + public class ImageFileViewModel + { + private readonly Func func; + private readonly string version; - public ImageFileViewModel(string fileName, string fullPromptHash, Func func) - { - FileName = fileName; - FullPromptHash = fullPromptHash; - this.func = func; - this.EncodedFileName = new(() => Base32Encode(this.FileName)); - } - public string FileName { get; } - public string ThumbnailUrl => $"/images/thumb/{EncodedFileName.Value}"; - public string ImageUrl => $"/images/full/{EncodedFileName.Value}/{func(this.FileName)}"; - public string FullPromptHash { get; } - public IList? SubItems { get; set; } + public ImageFileViewModel(string fileName, string fullPromptHash, string version, Func func) + { + FileName = fileName; + FullPromptHash = fullPromptHash; + this.version = version; + this.func = func; + this.EncodedFileName = new(() => Base32Encode(this.FileName)); + } + public string FileName { get; } + public string ThumbnailUrl => $"/images/thumb/{EncodedFileName.Value}?v={version}"; + public string ImageUrl => $"/images/full/{EncodedFileName.Value}/{func(this.FileName)}?v={version}"; + public string FullPromptHash { get; } + public IList? SubItems { get; set; } - private readonly Lazy EncodedFileName; + private readonly Lazy EncodedFileName; - private static string Base32Encode(string plainText) - { - var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText); - return Base32Encoding.ToString(plainTextBytes); - } - } + private static string Base32Encode(string plainText) + { + var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText); + return Base32Encoding.ToString(plainTextBytes); + } + } } diff --git a/SDMetaUI/Models/ImageFileViewModelBuilder.cs b/SDMetaUI/Models/ImageFileViewModelBuilder.cs index 793f209..d0ad134 100644 --- a/SDMetaUI/Models/ImageFileViewModelBuilder.cs +++ b/SDMetaUI/Models/ImageFileViewModelBuilder.cs @@ -3,11 +3,12 @@ namespace SDMetaUI.Models { - public class ImageFileViewModelBuilder(IFileSystem fileSystem) - { - public ImageFileViewModel BuildModel(ImageFileSummary p) - { - return new ImageFileViewModel(p.FileName, p.FullPromptHash ?? "", fileSystem.Path.GetFileName); - } - } + public class ImageFileViewModelBuilder(IFileSystem fileSystem) + { + public ImageFileViewModel BuildModel(ImageFileSummary p) + { + var lastWriteTicks = fileSystem.FileInfo.New(p.FileName).LastWriteTimeUtc.Ticks.ToString(); + return new ImageFileViewModel(p.FileName, p.FullPromptHash ?? "", lastWriteTicks, fileSystem.Path.GetFileName); + } + } }