fix unread message count bug

This commit is contained in:
Ryan ZHAO 2021-04-12 16:56:53 +10:00
parent 51576acec1
commit fcc3c27779
4 changed files with 21 additions and 8 deletions

View File

@ -42,6 +42,9 @@ extension Storage {
} else {
tsMessage = TSIncomingMessage.from(message, quotedMessage: quotedMessage, linkPreview: linkPreview, associatedWith: thread)
}
if let serverTimestamp = message.receivedTimestamp, openGroupID != nil {
tsMessage.setServerTimestampToReceivedTimestamp(serverTimestamp)
}
tsMessage.save(with: transaction)
tsMessage.attachments(with: transaction).forEach { attachment in
attachment.albumMessageId = tsMessage.uniqueId!

View File

@ -199,13 +199,10 @@ NSString *NSStringFromOWSInteractionType(OWSInteractionType value)
// In open groups messages should be sorted by server timestamp. `sortId` represents the order in which messages
// were processed. Since in the open group poller we sort messages by their server timestamp, sorting by `sortId` is
// effectively the same as sorting by server timestamp.
if ([self isKindOfClass:TSMessage.class] && ((TSMessage *)self).isOpenGroupMessage) {
sortId1 = self.sortId;
sortId2 = other.sortId;
} else {
sortId1 = self.timestamp;
sortId2 = other.timestamp;
}
// sortId == receivedAtTimestamp for open group messages.
// sortId == sendTimestamp for one-to-one and closed group messages.
sortId1 = self.sortId;
sortId2 = other.sortId;
if (sortId1 > sortId2) {
return NSOrderedDescending;
@ -229,6 +226,14 @@ NSString *NSStringFromOWSInteractionType(OWSInteractionType value)
(unsigned long)self.timestamp];
}
- (uint64_t)sortId
{
if ([self isKindOfClass:TSMessage.class] && ((TSMessage *)self).isOpenGroupMessage) {
return self.receivedAtTimestamp;
}
return self.timestamp;
}
- (void)saveWithTransaction:(YapDatabaseReadWriteTransaction *)transaction
{
if (!self.uniqueId) {

View File

@ -145,7 +145,11 @@ public enum MessageReceiver {
message.sender = sender
message.recipient = userPublicKey
message.sentTimestamp = envelope.timestamp
message.receivedTimestamp = NSDate.millisecondTimestamp()
if (isOpenGroupMessage) {
message.receivedTimestamp = envelope.serverTimestamp
} else {
message.receivedTimestamp = NSDate.millisecondTimestamp()
}
message.groupPublicKey = groupPublicKey
message.openGroupServerMessageID = openGroupMessageServerID
// Validate

View File

@ -267,6 +267,7 @@ NSString *const OWSReadReceiptManagerAreReadReceiptsEnabled = @"areReadReceiptsE
}
id<OWSReadTracking> possiblyRead = (id<OWSReadTracking>)object;
if (possiblyRead.sortId > sortId) {
uint64_t test = possiblyRead.sortId;
*stop = YES;
return;
}