diff --git a/extra/admin-api/Spacebar.Cdn.Worker/Controllers/ImageResizeController.cs b/extra/admin-api/Spacebar.Cdn.Worker/Controllers/ImageResizeController.cs deleted file mode 100644 index 7ba269655..000000000 --- a/extra/admin-api/Spacebar.Cdn.Worker/Controllers/ImageResizeController.cs +++ /dev/null @@ -1,8 +0,0 @@ -using Microsoft.AspNetCore.Mvc; - -namespace Spacebar.Cdn.Worker.Controllers; - -[ApiController] -public class ImageResizeController : ControllerBase { - -} \ No newline at end of file diff --git a/extra/admin-api/Spacebar.Cdn.Worker/DiscordImageResizeService.cs b/extra/admin-api/Spacebar.Cdn.Worker/DiscordImageResizeService.cs index 64e726602..7aaf312e3 100644 --- a/extra/admin-api/Spacebar.Cdn.Worker/DiscordImageResizeService.cs +++ b/extra/admin-api/Spacebar.Cdn.Worker/DiscordImageResizeService.cs @@ -75,7 +75,7 @@ public class DiscordImageResizeService { // pads.IsPixelArt(frame) frame.Resize(resizeParams.Size.Value, resizeParams.Size.Value, resizeParams.Quality == DiscordImageResizeQuality.Low ? FilterType.Point : FilterType.Gaussian); - Console.WriteLine($"Resized frame from {oldWidth}x{oldHeight} to {frame.Width}x{frame.Height}: {img.IndexOf(frame)}/{img.Count}"); + Console.WriteLine($"Resized frame from {oldWidth}x{oldHeight} to {frame.Width}x{frame.Height}: {img.IndexOf(frame)+1}/{img.Count}"); } }); } diff --git a/extra/admin-api/Spacebar.Cdn.Worker/Mimes.cs b/extra/admin-api/Spacebar.Cdn.Worker/Mimes.cs index 8337e81d9..a60cee1c5 100644 --- a/extra/admin-api/Spacebar.Cdn.Worker/Mimes.cs +++ b/extra/admin-api/Spacebar.Cdn.Worker/Mimes.cs @@ -40,7 +40,7 @@ public static class Mimes { public static string GetMime(MagickFormat fmt) => fmt switch { MagickFormat.Png => "image/png", - MagickFormat.Jpeg => "image/jpeg", + MagickFormat.Jpeg or MagickFormat.Jpg => "image/jpeg", MagickFormat.Gif => "image/gif", MagickFormat.Bmp => "image/bmp", MagickFormat.Tiff => "image/tiff", diff --git a/extra/admin-api/Spacebar.Cdn.Worker/Program.cs b/extra/admin-api/Spacebar.Cdn.Worker/Program.cs index a722e666b..9c60d7413 100644 --- a/extra/admin-api/Spacebar.Cdn.Worker/Program.cs +++ b/extra/admin-api/Spacebar.Cdn.Worker/Program.cs @@ -1,10 +1,5 @@ -using System.Diagnostics; -using System.Diagnostics.CodeAnalysis; using System.Globalization; -using ArcaneLibs; -using ArcaneLibs.Extensions.Streams; using ImageMagick; -using Microsoft.AspNetCore.Mvc; using Spacebar.AdminApi.TestClient.Services.Helpers; using Spacebar.AdminApi.TestClient.Services.Services; using Spacebar.Cdn.Worker; @@ -12,7 +7,7 @@ using Spacebar.Interop.Cdn.Abstractions; var builder = WebApplication.CreateBuilder(args); -var sw = Stopwatch.StartNew(); +// var sw = Stopwatch.StartNew(); Console.WriteLine("Pre-initializing Magick.NET..."); // OpenCL.IsEnabled = true; MagickNET.Initialize(); diff --git a/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16-HDRI.AnyCPU.csproj b/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16-HDRI.AnyCPU.csproj index 2c2b794b8..38abbbc9a 100644 --- a/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16-HDRI.AnyCPU.csproj +++ b/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16-HDRI.AnyCPU.csproj @@ -17,8 +17,4 @@ - - - - diff --git a/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16-HDRI.aarch64.csproj b/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16-HDRI.aarch64.csproj index 16d278df8..688b758e9 100644 --- a/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16-HDRI.aarch64.csproj +++ b/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16-HDRI.aarch64.csproj @@ -17,8 +17,4 @@ - - - - diff --git a/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16-HDRI.x86_64.csproj b/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16-HDRI.x86_64.csproj index 34f49b8e1..6c6983873 100644 --- a/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16-HDRI.x86_64.csproj +++ b/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16-HDRI.x86_64.csproj @@ -17,8 +17,4 @@ - - - - diff --git a/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16.AnyCPU.csproj b/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16.AnyCPU.csproj index 48e671ed5..11f74861a 100644 --- a/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16.AnyCPU.csproj +++ b/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16.AnyCPU.csproj @@ -17,8 +17,4 @@ - - - - diff --git a/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16.aarch64.csproj b/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16.aarch64.csproj index 781068a6d..62423943b 100644 --- a/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16.aarch64.csproj +++ b/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16.aarch64.csproj @@ -17,8 +17,4 @@ - - - - diff --git a/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16.x86_64.csproj b/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16.x86_64.csproj index 16a2d1157..e70da7134 100644 --- a/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16.x86_64.csproj +++ b/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q16.x86_64.csproj @@ -17,8 +17,4 @@ - - - - diff --git a/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q8.AnyCPU.csproj b/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q8.AnyCPU.csproj index 663e16c66..2296a3320 100644 --- a/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q8.AnyCPU.csproj +++ b/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q8.AnyCPU.csproj @@ -17,8 +17,4 @@ - - - - diff --git a/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q8.aarch64.csproj b/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q8.aarch64.csproj index 326ed11e7..e7803db98 100644 --- a/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q8.aarch64.csproj +++ b/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q8.aarch64.csproj @@ -17,8 +17,4 @@ - - - - diff --git a/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q8.x86_64.csproj b/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q8.x86_64.csproj index 1943e7b0b..6b38743db 100644 --- a/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q8.x86_64.csproj +++ b/extra/admin-api/Spacebar.Cdn.Worker/Spacebar.Cdn.Worker.Q8.x86_64.csproj @@ -17,8 +17,4 @@ - - - - diff --git a/extra/admin-api/Spacebar.Cdn/CdnConfiguration.cs b/extra/admin-api/Spacebar.Cdn/CdnConfiguration.cs index e69de29bb..65ad4710b 100644 --- a/extra/admin-api/Spacebar.Cdn/CdnConfiguration.cs +++ b/extra/admin-api/Spacebar.Cdn/CdnConfiguration.cs @@ -0,0 +1,16 @@ +namespace Spacebar.Cdn; + +public class SpacebarCdnConfiguration +{ + public SpacebarCdnConfiguration(IConfiguration configuration) { + configuration.GetRequiredSection("Spacebar").GetRequiredSection("Cdn").Bind(this); + } + + // public + +} + +// public class SpacebarCdnWorkerConfiguration +// { +// public +// } \ No newline at end of file diff --git a/extra/admin-api/Spacebar.Cdn/Controllers/GetImageController.cs b/extra/admin-api/Spacebar.Cdn/Controllers/GetImageController.cs index 8e64100a0..c4473932b 100644 --- a/extra/admin-api/Spacebar.Cdn/Controllers/GetImageController.cs +++ b/extra/admin-api/Spacebar.Cdn/Controllers/GetImageController.cs @@ -1,56 +1,56 @@ -using ArcaneLibs.Extensions.Streams; -using Microsoft.AspNetCore.Mvc; -using Spacebar.AdminApi.TestClient.Services.Services; -using Spacebar.Cdn.Extensions; -using Spacebar.Interop.Cdn.Abstractions; - -namespace Spacebar.Cdn.Controllers; - -[ApiController] -public class GetImageController(LruFileCache lfc, IFileSource fs, DiscordImageResizeService dirs) : ImageController { - // [HttpGet("/avatars/{_:required}")] - [HttpGet("/emojis/{emoji_id:required}.{ext:required}")] - [HttpGet("/stickers/{sticker_id:required}.{ext:required}")] - // [HttpGet("/avatars/{user_id:required}/{avatar_hash:required}.{ext:required}")] - [HttpGet("/banners/{user_id:required}/{user_banner:required}.{ext:required}")] - public async Task GetImage(string? ext) { - var originalKey = fs.BaseUrl + Request.Path; - var cacheKey = Request.Path + Request.QueryString; - - DiscordImageResizeParams resizeParams = GetResizeParams(); - - var entry = await lfc.GetOrAdd(cacheKey, async () => { - var original = await fs.GetFile(Request.Path); - - if (Request.Query.Any()) { - using var img = await original.ToMagickImageCollectionAsync(); - dirs.Apply(img, resizeParams); - - var outStream = new MemoryStream(); - await img.WriteAsync(outStream, img.First().Format); - outStream.Position = 0; - - return new LruFileCache.Entry() { - Data = outStream.ReadToEnd().ToArray(), - MimeType = original.MimeType - }; - } - - return new LruFileCache.Entry() { - Data = original.Stream.ReadToEnd().ToArray(), - MimeType = original.MimeType - }; - }); - - // byte array with mime type result - return new FileContentResult(entry.Data, entry.MimeType); - } - - // TODO: is message_id required? Can't tell from discord.food: /attachments/{channel_id}/[{message_id]/attachment_id}/{attachment_filename} - [HttpGet("/attachments/{channel_id:required}/{message_id:required}/{attachment_id:required}/{filename:required}")] - [HttpGet("/ephemeral-attachments/{application_id:required}/{attachment_id:required}/{attachment_filename:required}")] - public async Task GetAttachmentImage() { - // TODO: url signing, file type checks - return await GetImage(""); - } -} \ No newline at end of file +// using ArcaneLibs.Extensions.Streams; +// using Microsoft.AspNetCore.Mvc; +// using Spacebar.AdminApi.TestClient.Services.Services; +// using Spacebar.Cdn.Extensions; +// using Spacebar.Interop.Cdn.Abstractions; +// +// namespace Spacebar.Cdn.Controllers; +// +// [ApiController] +// public class GetImageController(LruFileCache lfc, IFileSource fs, DiscordImageResizeService dirs) : ImageController { +// // [HttpGet("/avatars/{_:required}")] +// [HttpGet("/emojis/{emoji_id:required}.{ext:required}")] +// [HttpGet("/stickers/{sticker_id:required}.{ext:required}")] +// // [HttpGet("/avatars/{user_id:required}/{avatar_hash:required}.{ext:required}")] +// [HttpGet("/banners/{user_id:required}/{user_banner:required}.{ext:required}")] +// public async Task GetImage(string? ext) { +// var originalKey = fs.BaseUrl + Request.Path; +// var cacheKey = Request.Path + Request.QueryString; +// +// DiscordImageResizeParams resizeParams = Request.GetResizeParams(); +// +// var entry = await lfc.GetOrAdd(cacheKey, async () => { +// var original = await fs.GetFile(Request.Path); +// +// if (Request.Query.Any()) { +// using var img = await original.ToMagickImageCollectionAsync(); +// dirs.Apply(img, resizeParams); +// +// var outStream = new MemoryStream(); +// await img.WriteAsync(outStream, img.First().Format); +// outStream.Position = 0; +// +// return new LruFileCache.Entry() { +// Data = outStream.ReadToEnd().ToArray(), +// MimeType = original.MimeType +// }; +// } +// +// return new LruFileCache.Entry() { +// Data = original.Stream.ReadToEnd().ToArray(), +// MimeType = original.MimeType +// }; +// }); +// +// // byte array with mime type result +// return new FileContentResult(entry.Data, entry.MimeType); +// } +// +// // TODO: is message_id required? Can't tell from discord.food: /attachments/{channel_id}/[{message_id]/attachment_id}/{attachment_filename} +// [HttpGet("/attachments/{channel_id:required}/{message_id:required}/{attachment_id:required}/{filename:required}")] +// [HttpGet("/ephemeral-attachments/{application_id:required}/{attachment_id:required}/{attachment_filename:required}")] +// public async Task GetAttachmentImage() { +// // TODO: url signing, file type checks +// return await GetImage(""); +// } +// } \ No newline at end of file diff --git a/extra/admin-api/Spacebar.Cdn/Controllers/StaticAssetController.cs b/extra/admin-api/Spacebar.Cdn/Controllers/StaticAssetController.cs index 5d9d0d781..48ae22534 100644 --- a/extra/admin-api/Spacebar.Cdn/Controllers/StaticAssetController.cs +++ b/extra/admin-api/Spacebar.Cdn/Controllers/StaticAssetController.cs @@ -1,66 +1,66 @@ -using ArcaneLibs.Extensions.Streams; -using Microsoft.AspNetCore.Mvc; -using Microsoft.OpenApi; -using Spacebar.AdminApi.TestClient.Services.Services; -using Spacebar.Cdn.Extensions; -using Spacebar.Interop.Cdn.Abstractions; - -namespace Spacebar.Cdn.Controllers; - -[ApiController] -public class StaticAssetController(LruFileCache lfc, IFileSource fs, DiscordImageResizeService dirs) : ImageController { - private static readonly Dictionary defaultAvatarHashMap = new() { - { "0", "4a8562cf00887030c416d3ec2d46385a" }, - { "1", "9b0bb198936784c45c72833cc426cc55" }, - { "2", "22341bdb500c7b63a93bbce957d1601e" }, - { "3", "d9977836b82058bf2f74eebd50edc095" }, - { "4", "9d6ddb4e4d899a533a8cc617011351c9" }, - { "5", "7213ab6677377974697dfdfbaf5f6a6f" }, - }; - - private static readonly Dictionary defaultGroupDMAvatarHashMap = new() { - { "0", "3b70bb66089c60f8be5e214bf8574c9d" }, - { "1", "9581acd31832465bdeaa5385b0e919a3" }, - { "2", "a8a4727cf2dc2939bd3c657fad4463fa" }, - { "3", "2e46fe14586f8e95471c0917f56726b5" }, - { "4", "fac7e78de9753d4a37083bba74c1d9ef" }, - { "5", "4ab900144b0865430dc9be825c838faa" }, - { "6", "1276374a404452756f3c9cc2601508a5" }, - { "7", "904bf9f1b61f53ef4a3b7a893afeabe3" }, - }; - - // png only - [HttpGet("/embed/avatars/{userIndex}.{ext}")] - public async Task GetDefaultUserAvatar(string userIndex, string ext) { - - var cacheKey = Request.Path + Request.QueryString; - - DiscordImageResizeParams resizeParams = GetResizeParams(); - - var entry = await lfc.GetOrAdd(cacheKey, async () => { - var original = await fs.GetFile(Request.Path); - - if (Request.Query.Any()) { - using var img = await original.ToMagickImageCollectionAsync(); - dirs.Apply(img, resizeParams); - - var outStream = new MemoryStream(); - await img.WriteAsync(outStream, img.First().Format); - outStream.Position = 0; - - return new LruFileCache.Entry() { - Data = outStream.ReadToEnd().ToArray(), - MimeType = original.MimeType - }; - } - - return new LruFileCache.Entry() { - Data = original.Stream.ReadToEnd().ToArray(), - MimeType = original.MimeType - }; - }); - - // byte array with mime type result - return new FileContentResult(entry.Data, entry.MimeType); - } -} \ No newline at end of file +// using ArcaneLibs.Extensions.Streams; +// using Microsoft.AspNetCore.Mvc; +// using Microsoft.OpenApi; +// using Spacebar.AdminApi.TestClient.Services.Services; +// using Spacebar.Cdn.Extensions; +// using Spacebar.Interop.Cdn.Abstractions; +// +// namespace Spacebar.Cdn.Controllers; +// +// [ApiController] +// public class StaticAssetController(LruFileCache lfc, IFileSource fs, DiscordImageResizeService dirs) : ImageController { +// private static readonly Dictionary defaultAvatarHashMap = new() { +// { "0", "4a8562cf00887030c416d3ec2d46385a" }, +// { "1", "9b0bb198936784c45c72833cc426cc55" }, +// { "2", "22341bdb500c7b63a93bbce957d1601e" }, +// { "3", "d9977836b82058bf2f74eebd50edc095" }, +// { "4", "9d6ddb4e4d899a533a8cc617011351c9" }, +// { "5", "7213ab6677377974697dfdfbaf5f6a6f" }, +// }; +// +// private static readonly Dictionary defaultGroupDMAvatarHashMap = new() { +// { "0", "3b70bb66089c60f8be5e214bf8574c9d" }, +// { "1", "9581acd31832465bdeaa5385b0e919a3" }, +// { "2", "a8a4727cf2dc2939bd3c657fad4463fa" }, +// { "3", "2e46fe14586f8e95471c0917f56726b5" }, +// { "4", "fac7e78de9753d4a37083bba74c1d9ef" }, +// { "5", "4ab900144b0865430dc9be825c838faa" }, +// { "6", "1276374a404452756f3c9cc2601508a5" }, +// { "7", "904bf9f1b61f53ef4a3b7a893afeabe3" }, +// }; +// +// // png only +// [HttpGet("/embed/avatars/{userIndex}.{ext}")] +// public async Task GetDefaultUserAvatar(string userIndex, string ext) { +// +// var cacheKey = Request.Path + Request.QueryString; +// +// DiscordImageResizeParams resizeParams = GetResizeParams(); +// +// var entry = await lfc.GetOrAdd(cacheKey, async () => { +// var original = await fs.GetFile(Request.Path); +// +// if (Request.Query.Any()) { +// using var img = await original.ToMagickImageCollectionAsync(); +// dirs.Apply(img, resizeParams); +// +// var outStream = new MemoryStream(); +// await img.WriteAsync(outStream, img.First().Format); +// outStream.Position = 0; +// +// return new LruFileCache.Entry() { +// Data = outStream.ReadToEnd().ToArray(), +// MimeType = original.MimeType +// }; +// } +// +// return new LruFileCache.Entry() { +// Data = original.Stream.ReadToEnd().ToArray(), +// MimeType = original.MimeType +// }; +// }); +// +// // byte array with mime type result +// return new FileContentResult(entry.Data, entry.MimeType); +// } +// } \ No newline at end of file diff --git a/extra/admin-api/Spacebar.Cdn/Controllers/UserController.cs b/extra/admin-api/Spacebar.Cdn/Controllers/UserController.cs index 976266098..a6c470369 100644 --- a/extra/admin-api/Spacebar.Cdn/Controllers/UserController.cs +++ b/extra/admin-api/Spacebar.Cdn/Controllers/UserController.cs @@ -1,77 +1,77 @@ -using ArcaneLibs.Extensions.Streams; -using Microsoft.AspNetCore.Mvc; -using Spacebar.AdminApi.TestClient.Services.Services; -using Spacebar.Cdn.Extensions; -using Spacebar.Interop.Cdn.Abstractions; - -namespace Spacebar.Cdn.Controllers; - -[ApiController] -public class UserController(LruFileCache lfc, IFileSource fs, DiscordImageResizeService dirs) : ImageController { - [HttpGet("/avatars/{userId}/{hash}.{ext}")] - public async Task GetUserAvatar(string userId, string hash, string ext) { - var originalKey = fs.BaseUrl + Request.Path; - var cacheKey = Request.Path + Request.QueryString; - - DiscordImageResizeParams resizeParams = GetResizeParams(); - - var entry = await lfc.GetOrAdd(cacheKey, async () => { - var original = await fs.GetFile(Request.Path); - - if (Request.Query.Any()) { - using var img = await original.ToMagickImageCollectionAsync(); - dirs.Apply(img, resizeParams); - - var outStream = new MemoryStream(); - await img.WriteAsync(outStream, img.First().Format); - outStream.Position = 0; - - return new LruFileCache.Entry() { - Data = outStream.ReadToEnd().ToArray(), - MimeType = original.MimeType - }; - } - - return new LruFileCache.Entry() { - Data = original.Stream.ReadToEnd().ToArray(), - MimeType = original.MimeType - }; - }); - - // byte array with mime type result - return new FileContentResult(entry.Data, entry.MimeType); - } - [HttpGet("/banners/{userId}/{hash}.{ext}")] - public async Task GetUserBanner(string userId, string hash, string ext) { - var originalKey = fs.BaseUrl + Request.Path; - var cacheKey = Request.Path + Request.QueryString; - - DiscordImageResizeParams resizeParams = GetResizeParams(); - - var entry = await lfc.GetOrAdd(cacheKey, async () => { - var original = await fs.GetFile(Request.Path); - - if (Request.Query.Any()) { - using var img = await original.ToMagickImageCollectionAsync(); - dirs.Apply(img, resizeParams); - - var outStream = new MemoryStream(); - await img.WriteAsync(outStream, img.First().Format); - outStream.Position = 0; - - return new LruFileCache.Entry() { - Data = outStream.ReadToEnd().ToArray(), - MimeType = original.MimeType - }; - } - - return new LruFileCache.Entry() { - Data = original.Stream.ReadToEnd().ToArray(), - MimeType = original.MimeType - }; - }); - - // byte array with mime type result - return new FileContentResult(entry.Data, entry.MimeType); - } -} \ No newline at end of file +// using ArcaneLibs.Extensions.Streams; +// using Microsoft.AspNetCore.Mvc; +// using Spacebar.AdminApi.TestClient.Services.Services; +// using Spacebar.Cdn.Extensions; +// using Spacebar.Interop.Cdn.Abstractions; +// +// namespace Spacebar.Cdn.Controllers; +// +// [ApiController] +// public class UserController(LruFileCache lfc, IFileSource fs, DiscordImageResizeService dirs) : ImageController { +// [HttpGet("/avatars/{userId}/{hash}.{ext}")] +// public async Task GetUserAvatar(string userId, string hash, string ext) { +// var originalKey = fs.BaseUrl + Request.Path; +// var cacheKey = Request.Path + Request.QueryString; +// +// DiscordImageResizeParams resizeParams = GetResizeParams(); +// +// var entry = await lfc.GetOrAdd(cacheKey, async () => { +// var original = await fs.GetFile(Request.Path); +// +// if (Request.Query.Any()) { +// using var img = await original.ToMagickImageCollectionAsync(); +// dirs.Apply(img, resizeParams); +// +// var outStream = new MemoryStream(); +// await img.WriteAsync(outStream, img.First().Format); +// outStream.Position = 0; +// +// return new LruFileCache.Entry() { +// Data = outStream.ReadToEnd().ToArray(), +// MimeType = original.MimeType +// }; +// } +// +// return new LruFileCache.Entry() { +// Data = original.Stream.ReadToEnd().ToArray(), +// MimeType = original.MimeType +// }; +// }); +// +// // byte array with mime type result +// return new FileContentResult(entry.Data, entry.MimeType); +// } +// [HttpGet("/banners/{userId}/{hash}.{ext}")] +// public async Task GetUserBanner(string userId, string hash, string ext) { +// var originalKey = fs.BaseUrl + Request.Path; +// var cacheKey = Request.Path + Request.QueryString; +// +// DiscordImageResizeParams resizeParams = GetResizeParams(); +// +// var entry = await lfc.GetOrAdd(cacheKey, async () => { +// var original = await fs.GetFile(Request.Path); +// +// if (Request.Query.Any()) { +// using var img = await original.ToMagickImageCollectionAsync(); +// dirs.Apply(img, resizeParams); +// +// var outStream = new MemoryStream(); +// await img.WriteAsync(outStream, img.First().Format); +// outStream.Position = 0; +// +// return new LruFileCache.Entry() { +// Data = outStream.ReadToEnd().ToArray(), +// MimeType = original.MimeType +// }; +// } +// +// return new LruFileCache.Entry() { +// Data = original.Stream.ReadToEnd().ToArray(), +// MimeType = original.MimeType +// }; +// }); +// +// // byte array with mime type result +// return new FileContentResult(entry.Data, entry.MimeType); +// } +// } \ No newline at end of file diff --git a/extra/admin-api/Spacebar.Cdn/Mimes.cs b/extra/admin-api/Spacebar.Cdn/Mimes.cs index efef1e808..3401ddd0c 100644 --- a/extra/admin-api/Spacebar.Cdn/Mimes.cs +++ b/extra/admin-api/Spacebar.Cdn/Mimes.cs @@ -39,7 +39,7 @@ public static class Mimes { public static string GetMime(MagickFormat fmt) => fmt switch { MagickFormat.Png => "image/png", - MagickFormat.Jpeg => "image/jpeg", + MagickFormat.Jpeg or MagickFormat.Jpg => "image/jpeg", MagickFormat.Gif => "image/gif", MagickFormat.Bmp => "image/bmp", MagickFormat.Tiff => "image/tiff", diff --git a/extra/admin-api/Spacebar.Cdn/Program.cs b/extra/admin-api/Spacebar.Cdn/Program.cs index 61a5c07bd..911c72593 100644 --- a/extra/admin-api/Spacebar.Cdn/Program.cs +++ b/extra/admin-api/Spacebar.Cdn/Program.cs @@ -13,8 +13,8 @@ if (!string.IsNullOrWhiteSpace(Environment.GetEnvironmentVariable("APPSETTINGS_P // builder.Services.AddSingleton(new ProxyFileSource("http://cdn.old.server.spacebar.chat")); builder.Services.AddSingleton(new FilesystemFileSource(Environment.GetEnvironmentVariable("STORAGE_PATH") ?? throw new InvalidOperationException("STORAGE_PATH not set!"))); builder.Services.AddSingleton(new LruFileCache(1 * 1024 * 1024 * 1024)); -builder.Services.AddSingleton(); builder.Services.AddSingleton(); +builder.Services.AddSingleton(); builder.Services.AddDbContextPool(options => { options