From 4e794ceb9bd1c0d744a619035864886ee65e3732 Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Sun, 18 May 2025 12:53:32 +0800 Subject: [PATCH] :bug: Fix message attachment did not marked --- DysonNetwork.Sphere/Chat/ChatService.cs | 6 +++++- .../Storage/Handlers/MessageReadReceiptFlushHandler.cs | 4 +++- DysonNetwork.Sphere/appsettings.json | 3 +++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/DysonNetwork.Sphere/Chat/ChatService.cs b/DysonNetwork.Sphere/Chat/ChatService.cs index 1f34841..0e597b1 100644 --- a/DysonNetwork.Sphere/Chat/ChatService.cs +++ b/DysonNetwork.Sphere/Chat/ChatService.cs @@ -1,11 +1,12 @@ using DysonNetwork.Sphere.Account; using DysonNetwork.Sphere.Connection; +using DysonNetwork.Sphere.Storage; using Microsoft.EntityFrameworkCore; using NodaTime; namespace DysonNetwork.Sphere.Chat; -public class ChatService(AppDatabase db, IServiceScopeFactory scopeFactory) +public class ChatService(AppDatabase db, FileService fs, IServiceScopeFactory scopeFactory) { public async Task SendMessageAsync(Message message, ChatMember sender, ChatRoom room) { @@ -16,6 +17,9 @@ public class ChatService(AppDatabase db, IServiceScopeFactory scopeFactory) db.ChatMessages.Add(message); await db.SaveChangesAsync(); + var files = message.Attachments.Distinct().ToList(); + if (files.Count != 0) await fs.MarkUsageRangeAsync(files, 1); + // Then start the delivery process // Using ConfigureAwait(false) is correct here since we don't need context to flow _ = Task.Run(() => DeliverMessageAsync(message, sender, room)) diff --git a/DysonNetwork.Sphere/Storage/Handlers/MessageReadReceiptFlushHandler.cs b/DysonNetwork.Sphere/Storage/Handlers/MessageReadReceiptFlushHandler.cs index 6e26223..7ef02b1 100644 --- a/DysonNetwork.Sphere/Storage/Handlers/MessageReadReceiptFlushHandler.cs +++ b/DysonNetwork.Sphere/Storage/Handlers/MessageReadReceiptFlushHandler.cs @@ -10,10 +10,12 @@ public class MessageReadReceiptFlushHandler(IServiceProvider serviceProvider) : { public async Task FlushAsync(IReadOnlyList items) { + var distinctItems = items.DistinctBy(x => new { x.MessageId, x.SenderId }).ToList(); + using var scope = serviceProvider.CreateScope(); var db = scope.ServiceProvider.GetRequiredService(); - await db.BulkInsertAsync(items); + await db.BulkInsertAsync(distinctItems); } } diff --git a/DysonNetwork.Sphere/appsettings.json b/DysonNetwork.Sphere/appsettings.json index 362e818..3660cc0 100644 --- a/DysonNetwork.Sphere/appsettings.json +++ b/DysonNetwork.Sphere/appsettings.json @@ -73,6 +73,9 @@ "FromName": "Alphabot", "SubjectPrefix": "Solar Network" }, + "RealtimeChat": { + "Provider": "cloudflare" + }, "GeoIp": { "DatabasePath": "./Keys/GeoLite2-City.mmdb" }