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
{