From 6f71d4c2e062861572424897443bb7f3bbb2eea1 Mon Sep 17 00:00:00 2001 From: Pat Hartl Date: Thu, 4 Jun 2026 22:03:18 -0500 Subject: [PATCH] Fix packager LCX upload --- .../Views/OutputView.axaml.cs | 4 ++-- .../Endpoints/GameEndpoints.cs | 6 +++--- .../Endpoints/UploadEndpoints.cs | 21 ++++++++++--------- .../Components/ChunkUploader/ChunkUploader.ts | 4 ++-- .../Components/UploadManager/UploadManager.ts | 4 ++-- 5 files changed, 20 insertions(+), 19 deletions(-) diff --git a/LANCommander.Packager/Views/OutputView.axaml.cs b/LANCommander.Packager/Views/OutputView.axaml.cs index 432e2820..a4ea80c4 100644 --- a/LANCommander.Packager/Views/OutputView.axaml.cs +++ b/LANCommander.Packager/Views/OutputView.axaml.cs @@ -201,8 +201,8 @@ public partial class OutputView : UserControl .Create() .UseAuthenticationToken() .UseVersioning() - .UseRoute($"/api/Games/Import/{objectKey}") - .PostAsync(); + .UseRoute($"/api/Games/{objectKey}/Import") + .GetAsync(); }); try diff --git a/LANCommander.Server/Endpoints/GameEndpoints.cs b/LANCommander.Server/Endpoints/GameEndpoints.cs index e693a152..e46f4b3c 100644 --- a/LANCommander.Server/Endpoints/GameEndpoints.cs +++ b/LANCommander.Server/Endpoints/GameEndpoints.cs @@ -403,11 +403,11 @@ public static class GameEndpoints [FromServices] ArchiveService archiveService, [FromServices] ImportContext importContext, [FromServices] ILogger logger, - Guid objectKey) + Guid id) { try { - var path = await archiveService.GetArchiveFileLocationAsync(objectKey.ToString()); + var path = await archiveService.GetArchiveFileLocationAsync(id.ToString()); var result = await importContext.InitializeImportAsync(path); @@ -415,7 +415,7 @@ public static class GameEndpoints } catch (Exception ex) { - logger?.LogError(ex, "Failed to import game with object key {ObjectKey}", objectKey); + logger?.LogError(ex, "Failed to import game with object key {ObjectKey}", id); return TypedResults.BadRequest(ex.Message); } diff --git a/LANCommander.Server/Endpoints/UploadEndpoints.cs b/LANCommander.Server/Endpoints/UploadEndpoints.cs index f3a553e9..5b6ba13c 100644 --- a/LANCommander.Server/Endpoints/UploadEndpoints.cs +++ b/LANCommander.Server/Endpoints/UploadEndpoints.cs @@ -58,32 +58,33 @@ public static class UploadEndpoints } internal static async Task ChunkAsync( - [FromForm] ChunkUpload chunk, - HttpRequest request, + [FromForm] long Start, + [FromForm] long End, + [FromForm] long Total, + [FromForm] Guid Key, + IFormFile File, [FromServices] IFusionCache cache) { - var filePath = await cache.GetOrDefaultAsync($"ChunkArchivePath/{chunk.Key}", string.Empty); + var filePath = await cache.GetOrDefaultAsync($"ChunkArchivePath/{Key}", string.Empty); - if (!File.Exists(filePath)) + if (!System.IO.File.Exists(filePath)) return TypedResults.BadRequest("Destination file not initialized."); - request.EnableBuffering(); - using (var ms = new MemoryStream()) { - await chunk.File.CopyToAsync(ms); + await File.CopyToAsync(ms); var data = ms.ToArray(); using (var fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None)) { - fs.Position = chunk.Start; + fs.Position = Start; fs.Write(data, 0, data.Length); } } - if (chunk.End == chunk.Total) - await cache.ExpireAsync($"ChunkArchivePath/{chunk.Key}"); + if (End == Total) + await cache.ExpireAsync($"ChunkArchivePath/{Key}"); return TypedResults.Ok(); } diff --git a/LANCommander.UI/Components/ChunkUploader/ChunkUploader.ts b/LANCommander.UI/Components/ChunkUploader/ChunkUploader.ts index 42c71135..cad07764 100644 --- a/LANCommander.UI/Components/ChunkUploader/ChunkUploader.ts +++ b/LANCommander.UI/Components/ChunkUploader/ChunkUploader.ts @@ -41,9 +41,9 @@ export class ChunkUploader { request.storageLocationId = storageLocationId; request.key = objectKey; - const response = await axios.post(this.InitRoute, request); + const response = await axios.post<{ key: string }>(this.InitRoute, request); - this.Key = response.data; + this.Key = response.data.key; } else this.Key = objectKey; diff --git a/LANCommander.UI/Components/UploadManager/UploadManager.ts b/LANCommander.UI/Components/UploadManager/UploadManager.ts index 4e68ddfe..001f0bc3 100644 --- a/LANCommander.UI/Components/UploadManager/UploadManager.ts +++ b/LANCommander.UI/Components/UploadManager/UploadManager.ts @@ -47,8 +47,8 @@ export class UploadManager { request.storageLocationId = storageLocationId; request.key = ""; - const response = await axios.post(this.InitRoute, request); - key = response.data; + const response = await axios.post<{ key: string }>(this.InitRoute, request); + key = response.data.key; } const totalChunks = Math.ceil(file.size / this.MaxChunkSize);