Skip to content

Commit 8654ae2

Browse files
committed
Update ExpiresAt only when message is read
1 parent a542964 commit 8654ae2

File tree

3 files changed

+39
-22
lines changed

3 files changed

+39
-22
lines changed

Signal-Windows.Lib/IncomingMessages.cs

Lines changed: 1 addition & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -530,15 +530,6 @@ private async Task HandleGroupUpdateMessage(SignalServiceEnvelope envelope, Sign
530530
composedTimestamp = envelope.GetTimestamp();
531531
}
532532

533-
long messageExpiration;
534-
if (dataMessage.ExpiresInSeconds == 0)
535-
{
536-
messageExpiration = 0;
537-
}
538-
else
539-
{
540-
messageExpiration = timestamp + (long)TimeSpan.FromSeconds(dataMessage.ExpiresInSeconds).TotalMilliseconds;
541-
}
542533
SignalMessage sm = new SignalMessage()
543534
{
544535
Direction = type,
@@ -550,8 +541,7 @@ private async Task HandleGroupUpdateMessage(SignalServiceEnvelope envelope, Sign
550541
DeviceId = (uint)envelope.GetSourceDevice(),
551542
Receipts = 0,
552543
ComposedTimestamp = composedTimestamp,
553-
ReceivedTimestamp = timestamp,
554-
ExpiresAt = messageExpiration
544+
ReceivedTimestamp = timestamp
555545
};
556546
SignalDBContext.SaveMessageLocked(sm);
557547
dbgroup.MessagesCount += 1;
@@ -637,15 +627,6 @@ private async Task HandleSignalMessage(SignalServiceEnvelope envelope, SignalSer
637627
return;
638628
}
639629

640-
long messageExpiration;
641-
if (dataMessage.ExpiresInSeconds == 0)
642-
{
643-
messageExpiration = 0;
644-
}
645-
else
646-
{
647-
messageExpiration = timestamp + (long)TimeSpan.FromSeconds(dataMessage.ExpiresInSeconds).TotalMilliseconds;
648-
}
649630
List<SignalAttachment> attachments = new List<SignalAttachment>();
650631
SignalMessage message = new SignalMessage()
651632
{
@@ -658,7 +639,6 @@ private async Task HandleSignalMessage(SignalServiceEnvelope envelope, SignalSer
658639
Receipts = 0,
659640
ComposedTimestamp = composedTimestamp,
660641
ReceivedTimestamp = timestamp,
661-
ExpiresAt = messageExpiration,
662642
AttachmentsCount = (uint)attachments.Count,
663643
Attachments = attachments
664644
};
@@ -686,7 +666,6 @@ private async Task HandleSignalMessage(SignalServiceEnvelope envelope, SignalSer
686666
// Make sure to update attachments count
687667
message.AttachmentsCount = (uint)attachments.Count;
688668
}
689-
DisappearingMessagesManager.QueueForDeletion(message);
690669
await SignalLibHandle.Instance.SaveAndDispatchSignalMessage(message, conversation);
691670
}
692671
}

Signal-Windows.Lib/SignalLibHandle.cs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,7 @@ public void RequestSync()
378378
/// <param name="message"></param>
379379
public async Task SetMessageRead(long index, SignalMessage message, SignalConversation conversation)
380380
{
381+
UpdateMessageExpiration(message, conversation.ExpiresInSeconds);
381382
Logger.LogTrace("SetMessageRead() locking");
382383
await SemaphoreSlim.WaitAsync(CancelSource.Token);
383384
try
@@ -642,6 +643,7 @@ await dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
642643
AppendResult result = await b;
643644
if (result != null)
644645
{
646+
UpdateMessageExpiration(message, conversation.ExpiresInSeconds);
645647
SignalDBContext.UpdateMessageRead(result.Index, conversation);
646648
await DispatchMessageRead(result.Index + 1, conversation);
647649
wasInstantlyRead = true;
@@ -713,6 +715,29 @@ await dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
713715
}
714716
}
715717

718+
internal void UpdateMessageExpiration(SignalMessage message, uint conversationExpireTimeSeconds)
719+
{
720+
if (message.Type == Signal_Windows.Models.SignalMessageType.Normal && message.ExpiresAt == 0)
721+
{
722+
long messageExpiration;
723+
if (conversationExpireTimeSeconds == 0)
724+
{
725+
messageExpiration = 0;
726+
}
727+
else
728+
{
729+
messageExpiration = Util.CurrentTimeMillis() + (long)TimeSpan.FromSeconds(conversationExpireTimeSeconds).TotalMilliseconds;
730+
}
731+
732+
if (messageExpiration > 0)
733+
{
734+
message.ExpiresAt = messageExpiration;
735+
SignalDBContext.UpdateMessageExpiresAt(message);
736+
DisappearingMessagesManager.QueueForDeletion(message);
737+
}
738+
}
739+
}
740+
716741
internal void DispatchPipeEmptyMessage()
717742
{
718743
SignalMessageEvent?.Invoke(this, new SignalMessageEventArgs(null, Events.SignalMessageType.PipeEmptyMessage));

Signal-Windows.Lib/Storage/DB.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -919,6 +919,19 @@ public static SignalMessage IncreaseReceiptCountLocked(SignalServiceEnvelope env
919919
return set_mark? m : null;
920920
}
921921

922+
public static void UpdateMessageExpiresAt(SignalMessage message)
923+
{
924+
lock (DBLock)
925+
{
926+
using (var ctx = new SignalDBContext())
927+
{
928+
var m = ctx.Messages.Single(t => t.Id == message.Id);
929+
m.ExpiresAt = message.ExpiresAt;
930+
ctx.SaveChanges();
931+
}
932+
}
933+
}
934+
922935
/// <summary>
923936
/// Gets messages older than the given timestamp.
924937
/// </summary>

0 commit comments

Comments
 (0)