diff --git a/DysonNetwork.Sphere/Chat/ChatService.cs b/DysonNetwork.Sphere/Chat/ChatService.cs index dfd0df2..4263be1 100644 --- a/DysonNetwork.Sphere/Chat/ChatService.cs +++ b/DysonNetwork.Sphere/Chat/ChatService.cs @@ -29,18 +29,17 @@ public partial class ChatService( /// This method is designed to be called from a background task /// /// The message to process link previews for - private async Task ProcessMessageLinkPreviewAsync(SnChatMessage message) + private async Task CreateLinkPreviewBackgroundAsync(SnChatMessage message) { try { // Create a new scope for database operations using var scope = scopeFactory.CreateScope(); var dbContext = scope.ServiceProvider.GetRequiredService(); - var webReader = scope.ServiceProvider.GetRequiredService(); - var newChat = scope.ServiceProvider.GetRequiredService(); + var webReader = scope.ServiceProvider.GetRequiredService(); // Preview the links in the message - var updatedMessage = await PreviewMessageLinkAsync(message, webReader); + var updatedMessage = await CreateLinkPreviewAsync(message, webReader); // If embeds were added, update the message in the database if (updatedMessage.Meta != null && @@ -89,8 +88,6 @@ public partial class ChatService( syncMessage.ChatRoom = dbMessage.ChatRoom; using var syncScope = scopeFactory.CreateScope(); - var syncCrs = syncScope.ServiceProvider.GetRequiredService(); - var syncMembers = await syncCrs.ListRoomMembers(dbMessage.ChatRoomId); await DeliverMessageAsync( syncMessage, @@ -114,7 +111,7 @@ public partial class ChatService( /// The message to process /// The web reader service /// The message with link previews added to its meta data - public async Task PreviewMessageLinkAsync(SnChatMessage message, WebReaderService? webReader = null) + public async Task CreateLinkPreviewAsync(SnChatMessage message, WebReaderService? webReader = null) { if (string.IsNullOrEmpty(message.Content)) return message; @@ -205,6 +202,10 @@ public partial class ChatService( // Create file references if message has attachments await CreateFileReferencesForMessageAsync(message); + + // Copy the value to ensure the delivery is correct + message.Sender = sender; + message.ChatRoom = room; // Then start the delivery process var localMessage = message; @@ -225,10 +226,8 @@ public partial class ChatService( // Process link preview in the background to avoid delaying message sending var localMessageForPreview = message; - _ = Task.Run(async () => await ProcessMessageLinkPreviewAsync(localMessageForPreview)); + _ = Task.Run(async () => await CreateLinkPreviewBackgroundAsync(localMessageForPreview)); - message.Sender = sender; - message.ChatRoom = room; return message; } @@ -251,9 +250,7 @@ public partial class ChatService( await DeliverWebSocketMessage(message, type, members, scope); if (notify) - { await SendPushNotificationsAsync(message, sender, room, type, members, scope); - } } private async Task SendPushNotificationsAsync( @@ -608,7 +605,7 @@ public partial class ChatService( { Type = "call.ended", ChatRoomId = call.RoomId, - SenderId = call.SenderId, + SenderId = sender.Id, Meta = new Dictionary { { "call_id", call.Id }, @@ -740,7 +737,7 @@ public partial class ChatService( // Process link preview in the background if content was updated if (isContentChanged) - _ = Task.Run(async () => await ProcessMessageLinkPreviewAsync(message)); + _ = Task.Run(async () => await CreateLinkPreviewBackgroundAsync(message)); if (message.Sender.Account is null) message.Sender = await crs.LoadMemberAccount(message.Sender); diff --git a/DysonNetwork.Sphere/Post/PostService.cs b/DysonNetwork.Sphere/Post/PostService.cs index 31c6519..348fa92 100644 --- a/DysonNetwork.Sphere/Post/PostService.cs +++ b/DysonNetwork.Sphere/Post/PostService.cs @@ -203,7 +203,7 @@ public partial class PostService( } // Process link preview in the background to avoid delaying post creation - _ = Task.Run(async () => await ProcessPostLinkPreviewAsync(post)); + _ = Task.Run(async () => await CreateLinkPreviewAsync(post)); return post; } @@ -280,7 +280,7 @@ public partial class PostService( await db.SaveChangesAsync(); // Process link preview in the background to avoid delaying post update - _ = Task.Run(async () => await ProcessPostLinkPreviewAsync(post)); + _ = Task.Run(async () => await CreateLinkPreviewAsync(post)); return post; } @@ -348,7 +348,7 @@ public partial class PostService( /// This method is designed to be called from a background task /// /// The post to process link previews for - private async Task ProcessPostLinkPreviewAsync(SnPost post) + private async Task CreateLinkPreviewAsync(SnPost post) { try {