From c1a97b603d420899d8edb9f7e3010fa933808533 Mon Sep 17 00:00:00 2001 From: Dippys Date: Tue, 10 Feb 2026 19:36:52 +0400 Subject: [PATCH 1/2] fixed messenger timestamp issues --- Turbo.Players/Grains/MessengerGrain.cs | 18 +++++++++++++++++- .../FriendList/MessageHistoryEntrySnapshot.cs | 8 ++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/Turbo.Players/Grains/MessengerGrain.cs b/Turbo.Players/Grains/MessengerGrain.cs index 1074bf74..5b697eab 100644 --- a/Turbo.Players/Grains/MessengerGrain.cs +++ b/Turbo.Players/Grains/MessengerGrain.cs @@ -800,6 +800,7 @@ CancellationToken ct Message = message, SecondsSinceSent = 0, MessageId = sessionMsgId, + SentAtUtc = now, } ); @@ -857,6 +858,7 @@ public async Task ReceiveMessageAsync( Message = messageText, SecondsSinceSent = secondsSinceSent, MessageId = sessionMsgId, + SentAtUtc = DateTime.UtcNow.AddSeconds(-secondsSinceSent), } ); @@ -911,7 +913,20 @@ CancellationToken ct } // Return up to pageSize entries, newest first (reverse order from the end) - return Task.FromResult(result.Reverse().Take(pageSize).Reverse().ToList()); + // Recompute SecondsSinceSent based on actual SentAtUtc so timestamps are accurate + // when the client fetches history later (not frozen at the value from creation time). + var now = DateTime.UtcNow; + return Task.FromResult( + result + .Reverse() + .Take(pageSize) + .Reverse() + .Select(e => e with + { + SecondsSinceSent = Math.Max(0, (int)(now - e.SentAtUtc).TotalSeconds), + }) + .ToList() + ); } /// @@ -952,6 +967,7 @@ public async Task DeliverOfflineMessagesAsync(CancellationToken ct) Message = msg.Message, SecondsSinceSent = secondsSince, MessageId = sessionMsgId, + SentAtUtc = msg.Timestamp, } ); diff --git a/Turbo.Primitives/Snapshots/FriendList/MessageHistoryEntrySnapshot.cs b/Turbo.Primitives/Snapshots/FriendList/MessageHistoryEntrySnapshot.cs index e4461b56..0e494424 100644 --- a/Turbo.Primitives/Snapshots/FriendList/MessageHistoryEntrySnapshot.cs +++ b/Turbo.Primitives/Snapshots/FriendList/MessageHistoryEntrySnapshot.cs @@ -1,3 +1,4 @@ +using System; using Orleans; using Turbo.Primitives.Players; @@ -23,4 +24,11 @@ public record MessageHistoryEntrySnapshot [Id(5)] public required string MessageId { get; init; } + + /// + /// The actual UTC time at which the message was originally sent. + /// Used to recompute when history is fetched later. + /// + [Id(6)] + public required DateTime SentAtUtc { get; init; } } From 06eab7aa8786242c9df6d2a50d424b165a6f9523 Mon Sep 17 00:00:00 2001 From: Dippys Date: Tue, 10 Feb 2026 19:38:37 +0400 Subject: [PATCH 2/2] format --- Turbo.Players/Grains/MessengerGrain.cs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/Turbo.Players/Grains/MessengerGrain.cs b/Turbo.Players/Grains/MessengerGrain.cs index 5b697eab..85204a60 100644 --- a/Turbo.Players/Grains/MessengerGrain.cs +++ b/Turbo.Players/Grains/MessengerGrain.cs @@ -921,10 +921,12 @@ CancellationToken ct .Reverse() .Take(pageSize) .Reverse() - .Select(e => e with - { - SecondsSinceSent = Math.Max(0, (int)(now - e.SentAtUtc).TotalSeconds), - }) + .Select(e => + e with + { + SecondsSinceSent = Math.Max(0, (int)(now - e.SentAtUtc).TotalSeconds), + } + ) .ToList() ); }