mirror of
https://github.com/oxen-io/session-ios.git
synced 2023-12-13 21:30:14 +01:00
Merge pull request #386 from oxen-io/unread-count-bug
Fix Unread Count Bug
This commit is contained in:
commit
513658c991
|
@ -10,6 +10,7 @@ public class Message : NSObject, NSCoding { // NSObject/NSCoding conformance is
|
||||||
public var sender: String?
|
public var sender: String?
|
||||||
public var groupPublicKey: String?
|
public var groupPublicKey: String?
|
||||||
public var openGroupServerMessageID: UInt64?
|
public var openGroupServerMessageID: UInt64?
|
||||||
|
public var openGroupServerTimestamp: UInt64?
|
||||||
|
|
||||||
public var ttl: UInt64 { 2 * 24 * 60 * 60 * 1000 }
|
public var ttl: UInt64 { 2 * 24 * 60 * 60 * 1000 }
|
||||||
public var isSelfSendValid: Bool { false }
|
public var isSelfSendValid: Bool { false }
|
||||||
|
@ -30,6 +31,10 @@ public class Message : NSObject, NSCoding { // NSObject/NSCoding conformance is
|
||||||
if let sentTimestamp = coder.decodeObject(forKey: "sentTimestamp") as! UInt64? { self.sentTimestamp = sentTimestamp }
|
if let sentTimestamp = coder.decodeObject(forKey: "sentTimestamp") as! UInt64? { self.sentTimestamp = sentTimestamp }
|
||||||
if let receivedTimestamp = coder.decodeObject(forKey: "receivedTimestamp") as! UInt64? { self.receivedTimestamp = receivedTimestamp }
|
if let receivedTimestamp = coder.decodeObject(forKey: "receivedTimestamp") as! UInt64? { self.receivedTimestamp = receivedTimestamp }
|
||||||
if let recipient = coder.decodeObject(forKey: "recipient") as! String? { self.recipient = recipient }
|
if let recipient = coder.decodeObject(forKey: "recipient") as! String? { self.recipient = recipient }
|
||||||
|
if let sender = coder.decodeObject(forKey: "sender") as! String? { self.sender = sender }
|
||||||
|
if let groupPublicKey = coder.decodeObject(forKey: "groupPublicKey") as! String? { self.groupPublicKey = groupPublicKey }
|
||||||
|
if let openGroupServerMessageID = coder.decodeObject(forKey: "openGroupServerMessageID") as! UInt64? { self.openGroupServerMessageID = openGroupServerMessageID }
|
||||||
|
if let openGroupServerTimestamp = coder.decodeObject(forKey: "openGroupServerTimestamp") as! UInt64? { self.openGroupServerTimestamp = openGroupServerTimestamp }
|
||||||
}
|
}
|
||||||
|
|
||||||
public func encode(with coder: NSCoder) {
|
public func encode(with coder: NSCoder) {
|
||||||
|
@ -38,6 +43,10 @@ public class Message : NSObject, NSCoding { // NSObject/NSCoding conformance is
|
||||||
coder.encode(sentTimestamp, forKey: "sentTimestamp")
|
coder.encode(sentTimestamp, forKey: "sentTimestamp")
|
||||||
coder.encode(receivedTimestamp, forKey: "receivedTimestamp")
|
coder.encode(receivedTimestamp, forKey: "receivedTimestamp")
|
||||||
coder.encode(recipient, forKey: "recipient")
|
coder.encode(recipient, forKey: "recipient")
|
||||||
|
coder.encode(sender, forKey: "sender")
|
||||||
|
coder.encode(groupPublicKey, forKey: "groupPublicKey")
|
||||||
|
coder.encode(openGroupServerMessageID, forKey: "openGroupServerMessageID")
|
||||||
|
coder.encode(openGroupServerTimestamp, forKey: "openGroupServerTimestamp")
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: Proto Conversion
|
// MARK: Proto Conversion
|
||||||
|
|
|
@ -19,7 +19,7 @@ public extension TSIncomingMessage {
|
||||||
expiresInSeconds: !isOpenGroupMessage ? expiration : 0, // Ensure we don't ever expire open group messages
|
expiresInSeconds: !isOpenGroupMessage ? expiration : 0, // Ensure we don't ever expire open group messages
|
||||||
quotedMessage: quotedMessage,
|
quotedMessage: quotedMessage,
|
||||||
linkPreview: linkPreview,
|
linkPreview: linkPreview,
|
||||||
serverTimestamp: nil,
|
serverTimestamp: visibleMessage.openGroupServerTimestamp as NSNumber?,
|
||||||
wasReceivedByUD: true
|
wasReceivedByUD: true
|
||||||
)
|
)
|
||||||
result.openGroupServerMessageID = openGroupServerMessageID
|
result.openGroupServerMessageID = openGroupServerMessageID
|
||||||
|
|
|
@ -41,8 +41,6 @@ NSString *NSStringFromOWSInteractionType(OWSInteractionType value);
|
||||||
@property (nonatomic, readonly) uint64_t receivedAtTimestamp;
|
@property (nonatomic, readonly) uint64_t receivedAtTimestamp;
|
||||||
@property (nonatomic, readonly) BOOL shouldUseServerTime;
|
@property (nonatomic, readonly) BOOL shouldUseServerTime;
|
||||||
|
|
||||||
- (void)setServerTimestampToReceivedTimestamp:(uint64_t)receivedAtTimestamp;
|
|
||||||
|
|
||||||
- (uint64_t)timestampForUI;
|
- (uint64_t)timestampForUI;
|
||||||
|
|
||||||
- (NSDate *)receivedAtDate;
|
- (NSDate *)receivedAtDate;
|
||||||
|
|
|
@ -169,8 +169,8 @@ NSString *NSStringFromOWSInteractionType(OWSInteractionType value)
|
||||||
|
|
||||||
- (uint64_t)timestampForUI
|
- (uint64_t)timestampForUI
|
||||||
{
|
{
|
||||||
if (_shouldUseServerTime) {
|
if ([self isKindOfClass:TSIncomingMessage.class] && ((TSIncomingMessage *) self).isOpenGroupMessage) {
|
||||||
return _receivedAtTimestamp;
|
return ((TSIncomingMessage *) self).serverTimestamp.unsignedLongLongValue;
|
||||||
}
|
}
|
||||||
return _timestamp;
|
return _timestamp;
|
||||||
}
|
}
|
||||||
|
@ -180,14 +180,11 @@ NSString *NSStringFromOWSInteractionType(OWSInteractionType value)
|
||||||
return self.timestamp;
|
return self.timestamp;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)setServerTimestampToReceivedTimestamp:(uint64_t)receivedAtTimestamp
|
|
||||||
{
|
|
||||||
_shouldUseServerTime = YES;
|
|
||||||
_receivedAtTimestamp = receivedAtTimestamp;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSDate *)receivedAtDate
|
- (NSDate *)receivedAtDate
|
||||||
{
|
{
|
||||||
|
if ([self isKindOfClass:TSIncomingMessage.class] && ((TSIncomingMessage *) self).isOpenGroupMessage) {
|
||||||
|
return [NSDate ows_dateWithMillisecondsSince1970:((TSIncomingMessage *) self).serverTimestamp.unsignedLongLongValue];
|
||||||
|
}
|
||||||
return [NSDate ows_dateWithMillisecondsSince1970:self.receivedAtTimestamp];
|
return [NSDate ows_dateWithMillisecondsSince1970:self.receivedAtTimestamp];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -199,13 +196,10 @@ NSString *NSStringFromOWSInteractionType(OWSInteractionType value)
|
||||||
// In open groups messages should be sorted by server timestamp. `sortId` represents the order in which messages
|
// 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
|
// 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.
|
// effectively the same as sorting by server timestamp.
|
||||||
if ([self isKindOfClass:TSMessage.class] && ((TSMessage *)self).isOpenGroupMessage) {
|
// sortId == serverTimestamp for open group messages.
|
||||||
sortId1 = self.sortId;
|
// sortId == timestamp (the sent timestamp) for one-to-one and closed group messages.
|
||||||
sortId2 = other.sortId;
|
sortId1 = self.sortId;
|
||||||
} else {
|
sortId2 = other.sortId;
|
||||||
sortId1 = self.timestamp;
|
|
||||||
sortId2 = other.timestamp;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sortId1 > sortId2) {
|
if (sortId1 > sortId2) {
|
||||||
return NSOrderedDescending;
|
return NSOrderedDescending;
|
||||||
|
@ -229,6 +223,14 @@ NSString *NSStringFromOWSInteractionType(OWSInteractionType value)
|
||||||
(unsigned long)self.timestamp];
|
(unsigned long)self.timestamp];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (uint64_t)sortId
|
||||||
|
{
|
||||||
|
if ([self isKindOfClass:TSIncomingMessage.class] && ((TSIncomingMessage *) self).isOpenGroupMessage) {
|
||||||
|
return ((TSIncomingMessage *) self).serverTimestamp.unsignedLongLongValue;
|
||||||
|
}
|
||||||
|
return self.timestamp;
|
||||||
|
}
|
||||||
|
|
||||||
- (void)saveWithTransaction:(YapDatabaseReadWriteTransaction *)transaction
|
- (void)saveWithTransaction:(YapDatabaseReadWriteTransaction *)transaction
|
||||||
{
|
{
|
||||||
if (!self.uniqueId) {
|
if (!self.uniqueId) {
|
||||||
|
|
|
@ -146,6 +146,9 @@ public enum MessageReceiver {
|
||||||
message.recipient = userPublicKey
|
message.recipient = userPublicKey
|
||||||
message.sentTimestamp = envelope.timestamp
|
message.sentTimestamp = envelope.timestamp
|
||||||
message.receivedTimestamp = NSDate.millisecondTimestamp()
|
message.receivedTimestamp = NSDate.millisecondTimestamp()
|
||||||
|
if isOpenGroupMessage {
|
||||||
|
message.openGroupServerTimestamp = envelope.serverTimestamp
|
||||||
|
}
|
||||||
message.groupPublicKey = groupPublicKey
|
message.groupPublicKey = groupPublicKey
|
||||||
message.openGroupServerMessageID = openGroupMessageServerID
|
message.openGroupServerMessageID = openGroupMessageServerID
|
||||||
// Validate
|
// Validate
|
||||||
|
|
Loading…
Reference in a new issue