Skip to content

Commit 7814d2e

Browse files
committed
Use more consistent index names, fix index bug
1 parent 07560b2 commit 7814d2e

File tree

7 files changed

+41
-23
lines changed

7 files changed

+41
-23
lines changed

Signal-Windows.Lib/IncomingMessages.cs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ private void HandleMessage(SignalServiceEnvelope envelope)
157157
{
158158
try
159159
{
160-
HandleReadMessage(readMessage);
160+
HandleSyncedReadMessage(readMessage);
161161
}
162162
catch(Exception e)
163163
{
@@ -172,14 +172,10 @@ private void HandleMessage(SignalServiceEnvelope envelope)
172172
}
173173
}
174174

175-
private void HandleReadMessage(ReadMessage readMessage)
175+
private void HandleSyncedReadMessage(ReadMessage readMessage)
176176
{
177177
var conv = SignalDBContext.UpdateMessageRead(readMessage);
178-
long readIndex = conv.LastSeenMessageIndex - 1;
179-
if (readIndex > 0)
180-
{
181-
SignalLibHandle.Instance.DispatchMessageRead(conv.LastSeenMessageIndex - 1, conv).Wait();
182-
}
178+
SignalLibHandle.Instance.DispatchMessageRead(conv.LastSeenMessageIndex, conv).Wait();
183179
}
184180

185181
private void HandleExpirationUpdateMessage(SignalServiceEnvelope envelope, SignalServiceContent content, SignalServiceDataMessage message, bool isSync, long timestamp)

Signal-Windows.Lib/SignalLibHandle.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public interface ISignalFrontend
4040
void AddOrUpdateConversation(SignalConversation conversation, SignalMessage updateMessage);
4141
AppendResult HandleMessage(SignalMessage message, SignalConversation conversation);
4242
void HandleUnreadMessage(SignalMessage message);
43-
void HandleMessageRead(long messageIndex, SignalConversation conversation);
43+
void HandleMessageRead(long unreadMarkerIndex, SignalConversation conversation);
4444
void HandleIdentitykeyChange(LinkedList<SignalMessage> messages);
4545
void HandleMessageUpdate(SignalMessage updatedMessage);
4646
void ReplaceConversationList(List<SignalConversation> conversations);
@@ -345,7 +345,7 @@ public async Task SetMessageRead(long index, SignalMessage message, SignalConver
345345
OutgoingMessages.SendMessage(SignalServiceSyncMessage.forRead(new List<ReadMessage>() {
346346
new ReadMessage(message.Author.ThreadId, message.ComposedTimestamp)
347347
}));
348-
await DispatchMessageRead(index, conversation);
348+
await DispatchMessageRead(index + 1, conversation);
349349
}
350350
finally
351351
{
@@ -495,7 +495,7 @@ internal void DispatchHandleMessage(SignalMessage message, SignalConversation co
495495
if (result != null)
496496
{
497497
SignalDBContext.UpdateMessageRead(result.Index, conversation);
498-
DispatchMessageRead(result.Index, conversation).Wait();
498+
DispatchMessageRead(result.Index + 1, conversation).Wait();
499499
wasInstantlyRead = true;
500500
break;
501501
}
@@ -520,14 +520,14 @@ internal void DispatchHandleUnreadMessage(SignalMessage message)
520520
Task.WaitAll(operations.ToArray());
521521
}
522522

523-
internal async Task DispatchMessageRead(long messageIndex, SignalConversation conversation)
523+
internal async Task DispatchMessageRead(long unreadMarkerIndex, SignalConversation conversation)
524524
{
525525
List<Task> operations = new List<Task>();
526526
foreach (var dispatcher in Frames.Keys)
527527
{
528528
operations.Add(dispatcher.RunTaskAsync(() =>
529529
{
530-
Frames[dispatcher].HandleMessageRead(messageIndex, conversation);
530+
Frames[dispatcher].HandleMessageRead(unreadMarkerIndex, conversation);
531531
}));
532532
}
533533
foreach (var waitHandle in operations)

Signal-Windows.Lib/Storage/DB.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1044,6 +1044,7 @@ private static SignalConversation GetSignalConversation(SignalDBContext ctx, str
10441044
internal static SignalConversation UpdateMessageRead(long index, SignalConversation conversation)
10451045
{
10461046
SignalConversation dbConversation = null;
1047+
long newMarkerIndex = index + 1;
10471048
lock (DBLock)
10481049
{
10491050
using (var ctx = new SignalDBContext())
@@ -1055,7 +1056,7 @@ internal static SignalConversation UpdateMessageRead(long index, SignalConversat
10551056
.SingleOrDefault();
10561057
if (contact != null)
10571058
{
1058-
contact.LastSeenMessageIndex = Math.Max(index, contact.LastSeenMessageIndex);
1059+
contact.LastSeenMessageIndex = Math.Max(newMarkerIndex, contact.LastSeenMessageIndex);
10591060
contact.UnreadCount = (uint)(contact.MessagesCount - contact.LastSeenMessageIndex);
10601061
dbConversation = contact;
10611062
}
@@ -1067,7 +1068,7 @@ internal static SignalConversation UpdateMessageRead(long index, SignalConversat
10671068
.SingleOrDefault();
10681069
if (group != null)
10691070
{
1070-
group.LastSeenMessageIndex = Math.Max(index, group.LastSeenMessageIndex);
1071+
group.LastSeenMessageIndex = Math.Max(newMarkerIndex, group.LastSeenMessageIndex);
10711072
group.UnreadCount = (uint)(group.MessagesCount - group.LastSeenMessageIndex);
10721073
dbConversation = group;
10731074
}

Signal-Windows/Controls/Conversation.xaml.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@ public AppendResult Append(SignalMessageContainer sm)
243243
ScrollToBottom();
244244
if (ActivationState != CoreWindowActivationState.Deactivated)
245245
{
246-
result = new AppendResult(sm.Index + 1);
246+
result = new AppendResult(sm.Index);
247247
}
248248
}
249249
return result;
@@ -338,13 +338,15 @@ private void ScrollViewer_ViewChanged(object sender, ScrollViewerViewChangedEven
338338
if (ActivationState != CoreWindowActivationState.Deactivated)
339339
{
340340
int bottomIndex = GetBottommostIndex();
341+
int rawBottomIndex = Collection.GetRawIndex(bottomIndex);
341342
long lastSeenIndex = SignalConversation.LastSeenMessageIndex;
342-
if (lastSeenIndex < bottomIndex && LastMarkReadRequest < bottomIndex)
343+
Logger.LogTrace("bottom={0} rawBottom={1} lastSeen={2} LastMarkReadRequest={3}", bottomIndex, rawBottomIndex, lastSeenIndex, LastMarkReadRequest);
344+
if (lastSeenIndex <= rawBottomIndex && LastMarkReadRequest < rawBottomIndex)
343345
{
344-
LastMarkReadRequest = bottomIndex;
346+
LastMarkReadRequest = rawBottomIndex;
345347
Task.Run(async () =>
346348
{
347-
await App.Handle.SetMessageRead(bottomIndex, ((SignalMessageContainer) Collection[bottomIndex]).Message, SignalConversation);
349+
await App.Handle.SetMessageRead(rawBottomIndex, ((SignalMessageContainer) Collection[bottomIndex]).Message, SignalConversation);
348350
});
349351
}
350352
}

Signal-Windows/Controls/VirtualizedMessagesCollection.cs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,25 @@ internal int GetVirtualIndex(int rawIndex)
230230
}
231231
}
232232

233+
public int GetRawIndex(int virtualIndex)
234+
{
235+
if (UnreadMarkerIndex > 0)
236+
{
237+
if (virtualIndex < UnreadMarkerIndex)
238+
{
239+
return virtualIndex;
240+
}
241+
else
242+
{
243+
return virtualIndex - 1;
244+
}
245+
}
246+
else
247+
{
248+
return virtualIndex;
249+
}
250+
}
251+
233252
public void Insert(int index, object value)
234253
{
235254
throw new NotImplementedException();

Signal-Windows/SignalWindowsFrontend.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,9 +77,9 @@ public void HandleAttachmentStatusChanged(SignalAttachment sa)
7777
Locator.MainPageInstance.HandleAttachmentStatusChanged(sa);
7878
}
7979

80-
public void HandleMessageRead(long messageIndex, SignalConversation conversation)
80+
public void HandleMessageRead(long unreadMarkerIndex, SignalConversation conversation)
8181
{
82-
Locator.MainPageInstance.HandleMessageRead(messageIndex, conversation);
82+
Locator.MainPageInstance.HandleMessageRead(unreadMarkerIndex, conversation);
8383
CheckNotification(conversation);
8484
}
8585

Signal-Windows/ViewModels/MainPageViewModel.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -241,11 +241,11 @@ public AppendResult HandleMessage(SignalMessage message, SignalConversation conv
241241
return result;
242242
}
243243

244-
public void HandleMessageRead(long messageIndex, SignalConversation conversation)
244+
public void HandleMessageRead(long unreadMarkerIndex, SignalConversation conversation)
245245
{
246246
var localConversation = ConversationsDictionary[conversation.ThreadId];
247-
Logger.LogTrace("LastSeenMessageIndex = {0}", messageIndex);
248-
localConversation.LastSeenMessageIndex = messageIndex;
247+
Logger.LogTrace("LastSeenMessageIndex = {0}", unreadMarkerIndex);
248+
localConversation.LastSeenMessageIndex = unreadMarkerIndex;
249249
localConversation.UnreadCount = conversation.UnreadCount;
250250
localConversation.UpdateUI();
251251
}

0 commit comments

Comments
 (0)