@@ -29,19 +29,19 @@ namespace Signal_Windows.Lib
29
29
{
30
30
public class AppendResult
31
31
{
32
- public long Index { get ; }
33
- public AppendResult ( long index )
32
+ public bool WasInstantlyRead { get ; }
33
+ public AppendResult ( bool wasInstantlyRead )
34
34
{
35
- Index = index ;
35
+ WasInstantlyRead = wasInstantlyRead ;
36
36
}
37
37
}
38
38
39
39
public interface ISignalFrontend
40
40
{
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 ) ;
43
43
void HandleUnreadMessage ( SignalMessage message ) ;
44
- void HandleMessageRead ( long unreadMarkerIndex , SignalConversation conversation ) ;
44
+ void HandleMessageRead ( SignalConversation updatedConversation ) ;
45
45
void HandleIdentitykeyChange ( LinkedList < SignalMessage > messages ) ;
46
46
void HandleMessageUpdate ( SignalMessage updatedMessage ) ;
47
47
void ReplaceConversationList ( List < SignalConversation > conversations ) ;
@@ -58,7 +58,7 @@ public interface ISignalLibHandle
58
58
void RequestSync ( ) ;
59
59
Task SendMessage ( string messageText , StorageFile attachment , SignalConversation conversation ) ;
60
60
Task SendBlockedMessage ( ) ;
61
- Task SetMessageRead ( long index , SignalMessage message , SignalConversation conversation ) ;
61
+ Task SetMessageRead ( SignalMessage message ) ;
62
62
void ResendMessage ( SignalMessage message ) ;
63
63
IEnumerable < SignalMessage > GetMessages ( SignalConversation thread , int startIndex , int count ) ;
64
64
Task SaveAndDispatchSignalConversation ( SignalConversation updatedConversation , SignalMessage updateMessage ) ;
@@ -397,18 +397,18 @@ public void RequestSync()
397
397
/// Marks and dispatches a message as read. Must not be called on a task which holds the handle lock.
398
398
/// </summary>
399
399
/// <param name="message"></param>
400
- public async Task SetMessageRead ( long index , SignalMessage message , SignalConversation conversation )
400
+ public async Task SetMessageRead ( SignalMessage message )
401
401
{
402
402
Logger . LogTrace ( "SetMessageRead() locking" ) ;
403
403
await SemaphoreSlim . WaitAsync ( CancelSource . Token ) ;
404
404
try
405
405
{
406
406
Logger . LogTrace ( "SetMessageRead() locked" ) ;
407
- conversation = SignalDBContext . UpdateMessageRead ( index , conversation ) ;
407
+ var updatedConversation = SignalDBContext . UpdateMessageRead ( message . ComposedTimestamp ) ;
408
408
OutgoingMessages . SendMessage ( SignalServiceSyncMessage . ForRead ( new List < ReadMessage > ( ) {
409
409
new ReadMessage ( message . Author . ThreadId , message . ComposedTimestamp )
410
410
} ) ) ;
411
- await DispatchMessageRead ( index + 1 , conversation ) ;
411
+ await DispatchMessageRead ( updatedConversation ) ;
412
412
}
413
413
catch ( Exception e )
414
414
{
@@ -669,10 +669,10 @@ await dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
669
669
foreach ( var b in operations )
670
670
{
671
671
AppendResult result = await b ;
672
- if ( result != null )
672
+ if ( result != null && result . WasInstantlyRead )
673
673
{
674
- SignalDBContext . UpdateMessageRead ( result . Index , conversation ) ;
675
- await DispatchMessageRead ( result . Index + 1 , conversation ) ;
674
+ var updatedConversation = SignalDBContext . UpdateMessageRead ( message . ComposedTimestamp ) ;
675
+ await DispatchMessageRead ( updatedConversation ) ;
676
676
wasInstantlyRead = true ;
677
677
break ;
678
678
}
@@ -713,7 +713,7 @@ await dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
713
713
}
714
714
}
715
715
716
- internal async Task DispatchMessageRead ( long unreadMarkerIndex , SignalConversation conversation )
716
+ internal async Task DispatchMessageRead ( SignalConversation conversation )
717
717
{
718
718
List < Task > operations = new List < Task > ( ) ;
719
719
foreach ( var dispatcher in Frames . Keys )
@@ -723,7 +723,7 @@ await dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
723
723
{
724
724
try
725
725
{
726
- Frames [ dispatcher ] . HandleMessageRead ( unreadMarkerIndex , conversation ) ;
726
+ Frames [ dispatcher ] . HandleMessageRead ( conversation ) ;
727
727
}
728
728
catch ( Exception e )
729
729
{
0 commit comments