From 8ed5927f679a37e6523cf85b7ba7b7136f3067c7 Mon Sep 17 00:00:00 2001 From: Thorsten Sommer Date: Tue, 6 Jan 2026 15:24:13 +0100 Subject: [PATCH] Refactored the backend code --- .../AudioRecorderHandler.cs | 65 ------------------- .../Layout/MainLayout.razor.cs | 16 ++--- app/MindWork AI Studio/Program.cs | 1 - 3 files changed, 7 insertions(+), 75 deletions(-) delete mode 100644 app/MindWork AI Studio/AudioRecorderHandler.cs diff --git a/app/MindWork AI Studio/AudioRecorderHandler.cs b/app/MindWork AI Studio/AudioRecorderHandler.cs deleted file mode 100644 index b11adc42..00000000 --- a/app/MindWork AI Studio/AudioRecorderHandler.cs +++ /dev/null @@ -1,65 +0,0 @@ -using AIStudio.Tools.Services; - -namespace AIStudio; - -public static class AudioRecorderHandler -{ - public static void AddAudioRecorderHandlers(this IEndpointRouteBuilder app) - { - var router = app.MapGroup("/audio"); - - router.MapPost("/upload", UploadAudio) - .DisableAntiforgery(); - } - - private static async Task UploadAudio(HttpRequest request, RustService rustService) - { - var form = await request.ReadFormAsync(); - var file = form.Files.GetFile("audio"); - var mimeType = form["mimeType"].ToString(); - - if (file is null || file.Length == 0) - return Results.BadRequest("No audio file uploaded."); - - var actualMimeType = !string.IsNullOrWhiteSpace(mimeType) - ? mimeType - : file.ContentType; - - var extension = GetFileExtension(actualMimeType); - - var dataDirectory = await rustService.GetDataDirectory(); - var recordingDirectory = Path.Combine(dataDirectory, "audioRecordings"); - if(!Path.Exists(recordingDirectory)) - Directory.CreateDirectory(recordingDirectory); - - var fileName = $"recording_{DateTime.UtcNow:yyyyMMdd_HHmmss}{extension}"; - var filePath = Path.Combine(recordingDirectory, fileName); - - await using var stream = File.Create(filePath); - await file.CopyToAsync(stream); - - return Results.Ok(new - { - FileName = fileName, - MimeType = actualMimeType, - Size = file.Length - }); - } - - static string GetFileExtension(string mimeType) - { - var baseMimeType = mimeType.Split(';')[0].Trim().ToLowerInvariant(); - - return baseMimeType switch - { - "audio/webm" => ".webm", - "audio/ogg" => ".ogg", - "audio/mp4" => ".m4a", - "audio/mpeg" => ".mp3", - "audio/wav" => ".wav", - "audio/x-wav" => ".wav", - "audio/aac" => ".aac", - _ => ".audio" - }; - } -} \ No newline at end of file diff --git a/app/MindWork AI Studio/Layout/MainLayout.razor.cs b/app/MindWork AI Studio/Layout/MainLayout.razor.cs index c79d889d..ee25f4f4 100644 --- a/app/MindWork AI Studio/Layout/MainLayout.razor.cs +++ b/app/MindWork AI Studio/Layout/MainLayout.razor.cs @@ -403,18 +403,16 @@ public partial class MainLayout : LayoutComponentBase, IMessageBusReceiver, ILan private async Task SendAudioToBackend(AudioRecordingResult recording) { - #warning No need to send the recording to the backend (Blazor Hybrid) var audioBytes = Convert.FromBase64String(recording.Data); - - using var content = new MultipartFormDataContent(); - var fileContent = new ByteArrayContent(audioBytes); - fileContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue(recording.MimeType); - var extension = GetFileExtension(recording.MimeType); - content.Add(fileContent, "audio", $"recording{extension}"); - content.Add(new StringContent(recording.MimeType), "mimeType"); + var dataDirectory = await this.RustService.GetDataDirectory(); + var recordingDirectory = Path.Combine(dataDirectory, "audioRecordings"); + if(!Path.Exists(recordingDirectory)) + Directory.CreateDirectory(recordingDirectory); - await this.HttpClient.PostAsync("/audio/upload", content); + var fileName = $"recording_{DateTime.UtcNow:yyyyMMdd_HHmmss}{extension}"; + var filePath = Path.Combine(recordingDirectory, fileName); + await File.WriteAllBytesAsync(filePath, audioBytes); } private static string GetFileExtension(string mimeType) diff --git a/app/MindWork AI Studio/Program.cs b/app/MindWork AI Studio/Program.cs index b59081ec..fa7927b1 100644 --- a/app/MindWork AI Studio/Program.cs +++ b/app/MindWork AI Studio/Program.cs @@ -192,7 +192,6 @@ internal sealed class Program programLogger.LogInformation("Initialize internal file system."); app.Use(Redirect.HandlerContentAsync); app.Use(FileHandler.HandlerAsync); - app.AddAudioRecorderHandlers(); #if DEBUG app.UseStaticFiles();