Skip to content

Commit 50c4710

Browse files
committed
Send sync read messages to sibling devices
1 parent 7a3136e commit 50c4710

File tree

3 files changed

+18
-3
lines changed

3 files changed

+18
-3
lines changed

Signal-Windows.Lib/OutgoingMessages.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using libsignalservice;
33
using libsignalservice.crypto;
44
using libsignalservice.messages;
5+
using libsignalservice.messages.multidevice;
56
using libsignalservice.push;
67
using libsignalservice.push.exceptions;
78
using libsignalservice.util;
@@ -40,6 +41,14 @@ public void SendMessage(List<SignalServiceAddress> recipients, SignalServiceData
4041
}
4142
}
4243

44+
public void SendMessage(SignalServiceSyncMessage message)
45+
{
46+
lock (this)
47+
{
48+
MessageSender.sendMessage(message);
49+
}
50+
}
51+
4352
public void HandleOutgoingMessages()
4453
{
4554
Logger.LogDebug("HandleOutgoingMessages()");

Signal-Windows.Lib/SignalLibHandle.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@
2020
using Windows.Networking.BackgroundTransfer;
2121
using Windows.Storage;
2222
using Windows.Web;
23+
using libsignalservice.push;
24+
using Strilanc.Value;
25+
using libsignalservice.messages.multidevice;
2326

2427
namespace Signal_Windows.Lib
2528
{
@@ -50,7 +53,7 @@ public interface ISignalLibHandle
5053
//Frontend API
5154
SignalStore Store { get; set; }
5255
Task SendMessage(SignalMessage message, SignalConversation conversation);
53-
Task SetMessageRead(long index, SignalConversation conversation);
56+
Task SetMessageRead(long index, SignalMessage message, SignalConversation conversation);
5457
void ResendMessage(SignalMessage message);
5558
List<SignalMessageContainer> GetMessages(SignalConversation thread, int startIndex, int count);
5659
void SaveAndDispatchSignalConversation(SignalConversation updatedConversation, SignalMessage updateMessage);
@@ -331,14 +334,17 @@ await Task.Run(() =>
331334
/// Marks and dispatches a message as read. Must not be called on a task which holds the handle lock.
332335
/// </summary>
333336
/// <param name="message"></param>
334-
public async Task SetMessageRead(long index, SignalConversation conversation)
337+
public async Task SetMessageRead(long index, SignalMessage message, SignalConversation conversation)
335338
{
336339
Logger.LogTrace("SetMessageRead() locking");
337340
await SemaphoreSlim.WaitAsync(CancelSource.Token);
338341
try
339342
{
340343
Logger.LogTrace("SetMessageRead() locked");
341344
conversation = SignalDBContext.UpdateMessageRead(index, conversation);
345+
OutgoingMessages.SendMessage(SignalServiceSyncMessage.forRead(new List<ReadMessage>() {
346+
new ReadMessage(message.Author.ThreadId, message.ComposedTimestamp)
347+
}));
342348
await DispatchMessageRead(index, conversation);
343349
}
344350
finally

Signal-Windows/Controls/Conversation.xaml.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -344,7 +344,7 @@ private void ScrollViewer_ViewChanged(object sender, ScrollViewerViewChangedEven
344344
LastMarkReadRequest = bottomIndex;
345345
Task.Run(async () =>
346346
{
347-
await App.Handle.SetMessageRead(bottomIndex, SignalConversation);
347+
await App.Handle.SetMessageRead(bottomIndex, ((SignalMessageContainer) Collection[bottomIndex]).Message, SignalConversation);
348348
});
349349
}
350350
}

0 commit comments

Comments
 (0)