Skip to content

Commit 8989053

Browse files
committed
DB.cs and unread handling cleanup
Our unread handling is now no longer overly complicated, and the database functions have less redundant code
1 parent 2899bce commit 8989053

File tree

6 files changed

+104
-192
lines changed

6 files changed

+104
-192
lines changed

Signal-Windows.Lib/IncomingMessages.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -276,8 +276,8 @@ private async Task HandleMessage(SignalServiceEnvelope envelope)
276276

277277
private async Task HandleSyncedReadMessage(ReadMessage readMessage)
278278
{
279-
var conv = await SignalDBContext.UpdateMessageRead(readMessage);
280-
await SignalLibHandle.Instance.DispatchMessageRead(conv.LastSeenMessageIndex, conv);
279+
var updatedConversation = SignalDBContext.UpdateMessageRead(readMessage.Timestamp);
280+
await SignalLibHandle.Instance.DispatchMessageRead(updatedConversation);
281281
}
282282

283283
private async Task HandleExpirationUpdateMessage(SignalServiceEnvelope envelope, SignalServiceContent content, SignalServiceDataMessage message, bool isSync, long timestamp)
@@ -322,7 +322,8 @@ private async Task HandleExpirationUpdateMessage(SignalServiceEnvelope envelope,
322322
conversation = await SignalDBContext.GetOrCreateContactLocked(envelope.GetSource(), 0);
323323
}
324324
}
325-
SignalDBContext.UpdateExpiresInLocked(conversation, (uint)message.ExpiresInSeconds);
325+
conversation.ExpiresInSeconds = (uint) message.ExpiresInSeconds;
326+
SignalDBContext.UpdateExpiresInLocked(conversation);
326327
SignalMessage sm = new SignalMessage()
327328
{
328329
Direction = type,

Signal-Windows.Lib/SignalLibHandle.cs

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -29,19 +29,19 @@ namespace Signal_Windows.Lib
2929
{
3030
public class AppendResult
3131
{
32-
public long Index { get; }
33-
public AppendResult(long index)
32+
public bool WasInstantlyRead { get; }
33+
public AppendResult(bool wasInstantlyRead)
3434
{
35-
Index = index;
35+
WasInstantlyRead = wasInstantlyRead;
3636
}
3737
}
3838

3939
public interface ISignalFrontend
4040
{
41-
void AddOrUpdateConversation(SignalConversation conversation, SignalMessage updateMessage);
42-
AppendResult HandleMessage(SignalMessage message, SignalConversation conversation);
41+
void AddOrUpdateConversation(SignalConversation updatedConversation, SignalMessage updateMessage);
42+
AppendResult HandleMessage(SignalMessage message, SignalConversation updatedConversation);
4343
void HandleUnreadMessage(SignalMessage message);
44-
void HandleMessageRead(long unreadMarkerIndex, SignalConversation conversation);
44+
void HandleMessageRead(SignalConversation updatedConversation);
4545
void HandleIdentitykeyChange(LinkedList<SignalMessage> messages);
4646
void HandleMessageUpdate(SignalMessage updatedMessage);
4747
void ReplaceConversationList(List<SignalConversation> conversations);
@@ -58,7 +58,7 @@ public interface ISignalLibHandle
5858
void RequestSync();
5959
Task SendMessage(string messageText, StorageFile attachment, SignalConversation conversation);
6060
Task SendBlockedMessage();
61-
Task SetMessageRead(long index, SignalMessage message, SignalConversation conversation);
61+
Task SetMessageRead(SignalMessage message);
6262
void ResendMessage(SignalMessage message);
6363
IEnumerable<SignalMessage> GetMessages(SignalConversation thread, int startIndex, int count);
6464
Task SaveAndDispatchSignalConversation(SignalConversation updatedConversation, SignalMessage updateMessage);
@@ -397,18 +397,18 @@ public void RequestSync()
397397
/// Marks and dispatches a message as read. Must not be called on a task which holds the handle lock.
398398
/// </summary>
399399
/// <param name="message"></param>
400-
public async Task SetMessageRead(long index, SignalMessage message, SignalConversation conversation)
400+
public async Task SetMessageRead(SignalMessage message)
401401
{
402402
Logger.LogTrace("SetMessageRead() locking");
403403
await SemaphoreSlim.WaitAsync(CancelSource.Token);
404404
try
405405
{
406406
Logger.LogTrace("SetMessageRead() locked");
407-
conversation = SignalDBContext.UpdateMessageRead(index, conversation);
407+
var updatedConversation = SignalDBContext.UpdateMessageRead(message.ComposedTimestamp);
408408
OutgoingMessages.SendMessage(SignalServiceSyncMessage.ForRead(new List<ReadMessage>() {
409409
new ReadMessage(message.Author.ThreadId, message.ComposedTimestamp)
410410
}));
411-
await DispatchMessageRead(index + 1, conversation);
411+
await DispatchMessageRead(updatedConversation);
412412
}
413413
catch (Exception e)
414414
{
@@ -669,10 +669,10 @@ await dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
669669
foreach (var b in operations)
670670
{
671671
AppendResult result = await b;
672-
if (result != null)
672+
if (result != null && result.WasInstantlyRead)
673673
{
674-
SignalDBContext.UpdateMessageRead(result.Index, conversation);
675-
await DispatchMessageRead(result.Index + 1, conversation);
674+
var updatedConversation = SignalDBContext.UpdateMessageRead(message.ComposedTimestamp);
675+
await DispatchMessageRead(updatedConversation);
676676
wasInstantlyRead = true;
677677
break;
678678
}
@@ -713,7 +713,7 @@ await dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
713713
}
714714
}
715715

716-
internal async Task DispatchMessageRead(long unreadMarkerIndex, SignalConversation conversation)
716+
internal async Task DispatchMessageRead(SignalConversation conversation)
717717
{
718718
List<Task> operations = new List<Task>();
719719
foreach (var dispatcher in Frames.Keys)
@@ -723,7 +723,7 @@ await dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
723723
{
724724
try
725725
{
726-
Frames[dispatcher].HandleMessageRead(unreadMarkerIndex, conversation);
726+
Frames[dispatcher].HandleMessageRead(conversation);
727727
}
728728
catch (Exception e)
729729
{

0 commit comments

Comments
 (0)