diff --git a/Signal/test/PerformanceTests/ThreadFinderPerformanceTest.swift b/Signal/test/PerformanceTests/ThreadFinderPerformanceTest.swift index 8e0adaca65..a24ce37e87 100644 --- a/Signal/test/PerformanceTests/ThreadFinderPerformanceTest.swift +++ b/Signal/test/PerformanceTests/ThreadFinderPerformanceTest.swift @@ -75,8 +75,8 @@ class ThreadFinderPerformanceTest: PerformanceBaseTest { // Note that we enumerate _twice_ (archived & non-archived) let readCount = 10 - startMeasuring() write { transaction in + self.startMeasuring() for _ in 0.. SDSRecord { - // let id: Int64? = nil let id: Int64? = model.grdbId?.int64Value let recordType: SDSRecordType = .contactQuery diff --git a/SignalServiceKit/src/Contacts/OWSDisappearingMessagesConfiguration+SDS.swift b/SignalServiceKit/src/Contacts/OWSDisappearingMessagesConfiguration+SDS.swift index b769c6c2d8..0aae314dac 100644 --- a/SignalServiceKit/src/Contacts/OWSDisappearingMessagesConfiguration+SDS.swift +++ b/SignalServiceKit/src/Contacts/OWSDisappearingMessagesConfiguration+SDS.swift @@ -550,7 +550,6 @@ class OWSDisappearingMessagesConfigurationSerializer: SDSSerializer { // MARK: - Record func asRecord() throws -> SDSRecord { - // let id: Int64? = nil let id: Int64? = model.grdbId?.int64Value let recordType: SDSRecordType = .disappearingMessagesConfiguration diff --git a/SignalServiceKit/src/Contacts/SignalAccount+SDS.swift b/SignalServiceKit/src/Contacts/SignalAccount+SDS.swift index a915a6625a..988a562f1d 100644 --- a/SignalServiceKit/src/Contacts/SignalAccount+SDS.swift +++ b/SignalServiceKit/src/Contacts/SignalAccount+SDS.swift @@ -579,7 +579,6 @@ class SignalAccountSerializer: SDSSerializer { // MARK: - Record func asRecord() throws -> SDSRecord { - // let id: Int64? = nil let id: Int64? = model.grdbId?.int64Value let recordType: SDSRecordType = .signalAccount diff --git a/SignalServiceKit/src/Contacts/SignalRecipient+SDS.swift b/SignalServiceKit/src/Contacts/SignalRecipient+SDS.swift index 6492b39c34..42b079f687 100644 --- a/SignalServiceKit/src/Contacts/SignalRecipient+SDS.swift +++ b/SignalServiceKit/src/Contacts/SignalRecipient+SDS.swift @@ -565,7 +565,6 @@ class SignalRecipientSerializer: SDSSerializer { // MARK: - Record func asRecord() throws -> SDSRecord { - // let id: Int64? = nil let id: Int64? = model.grdbId?.int64Value let recordType: SDSRecordType = .signalRecipient diff --git a/SignalServiceKit/src/Contacts/TSThread+SDS.swift b/SignalServiceKit/src/Contacts/TSThread+SDS.swift index aaa44a9a0e..13e16f2f59 100644 --- a/SignalServiceKit/src/Contacts/TSThread+SDS.swift +++ b/SignalServiceKit/src/Contacts/TSThread+SDS.swift @@ -29,9 +29,9 @@ public struct ThreadRecord: SDSRecord { // Base class properties public let archivalDate: Double? - public let archivedAsOfMessageSortId: UInt64? public let conversationColorName: String public let creationDate: Double? + public let isArchived: Bool public let isArchivedByLegacyTimestampForSorting: Bool public let lastInteractionSortId: Int64 public let lastMessageDate: Double? @@ -51,9 +51,9 @@ public struct ThreadRecord: SDSRecord { case recordType case uniqueId case archivalDate - case archivedAsOfMessageSortId case conversationColorName case creationDate + case isArchived case isArchivedByLegacyTimestampForSorting case lastInteractionSortId case lastMessageDate @@ -92,9 +92,9 @@ public extension ThreadRecord { recordType = row[1] uniqueId = row[2] archivalDate = row[3] - archivedAsOfMessageSortId = row[4] - conversationColorName = row[5] - creationDate = row[6] + conversationColorName = row[4] + creationDate = row[5] + isArchived = row[6] isArchivedByLegacyTimestampForSorting = row[7] lastInteractionSortId = row[8] lastMessageDate = row[9] @@ -139,10 +139,10 @@ extension TSThread { let uniqueId: String = record.uniqueId let archivalDateInterval: Double? = record.archivalDate let archivalDate: Date? = SDSDeserialization.optionalDoubleAsDate(archivalDateInterval, name: "archivalDate") - let archivedAsOfMessageSortId: NSNumber? = SDSDeserialization.optionalNumericAsNSNumber(record.archivedAsOfMessageSortId, name: "archivedAsOfMessageSortId", conversion: { NSNumber(value: $0) }) let conversationColorName: ConversationColorName = ConversationColorName(rawValue: record.conversationColorName) let creationDateInterval: Double? = record.creationDate let creationDate: Date? = SDSDeserialization.optionalDoubleAsDate(creationDateInterval, name: "creationDate") + let isArchived: Bool = record.isArchived let isArchivedByLegacyTimestampForSorting: Bool = record.isArchivedByLegacyTimestampForSorting let lastInteractionSortId: Int64 = record.lastInteractionSortId let lastMessageDateInterval: Double? = record.lastMessageDate @@ -160,9 +160,9 @@ extension TSThread { return TSContactThread(grdbId: recordId, uniqueId: uniqueId, archivalDate: archivalDate, - archivedAsOfMessageSortId: archivedAsOfMessageSortId, conversationColorName: conversationColorName, creationDate: creationDate, + isArchived: isArchived, isArchivedByLegacyTimestampForSorting: isArchivedByLegacyTimestampForSorting, lastInteractionSortId: lastInteractionSortId, lastMessageDate: lastMessageDate, @@ -180,10 +180,10 @@ extension TSThread { let uniqueId: String = record.uniqueId let archivalDateInterval: Double? = record.archivalDate let archivalDate: Date? = SDSDeserialization.optionalDoubleAsDate(archivalDateInterval, name: "archivalDate") - let archivedAsOfMessageSortId: NSNumber? = SDSDeserialization.optionalNumericAsNSNumber(record.archivedAsOfMessageSortId, name: "archivedAsOfMessageSortId", conversion: { NSNumber(value: $0) }) let conversationColorName: ConversationColorName = ConversationColorName(rawValue: record.conversationColorName) let creationDateInterval: Double? = record.creationDate let creationDate: Date? = SDSDeserialization.optionalDoubleAsDate(creationDateInterval, name: "creationDate") + let isArchived: Bool = record.isArchived let isArchivedByLegacyTimestampForSorting: Bool = record.isArchivedByLegacyTimestampForSorting let lastInteractionSortId: Int64 = record.lastInteractionSortId let lastMessageDateInterval: Double? = record.lastMessageDate @@ -199,9 +199,9 @@ extension TSThread { return TSGroupThread(grdbId: recordId, uniqueId: uniqueId, archivalDate: archivalDate, - archivedAsOfMessageSortId: archivedAsOfMessageSortId, conversationColorName: conversationColorName, creationDate: creationDate, + isArchived: isArchived, isArchivedByLegacyTimestampForSorting: isArchivedByLegacyTimestampForSorting, lastInteractionSortId: lastInteractionSortId, lastMessageDate: lastMessageDate, @@ -216,10 +216,10 @@ extension TSThread { let uniqueId: String = record.uniqueId let archivalDateInterval: Double? = record.archivalDate let archivalDate: Date? = SDSDeserialization.optionalDoubleAsDate(archivalDateInterval, name: "archivalDate") - let archivedAsOfMessageSortId: NSNumber? = SDSDeserialization.optionalNumericAsNSNumber(record.archivedAsOfMessageSortId, name: "archivedAsOfMessageSortId", conversion: { NSNumber(value: $0) }) let conversationColorName: ConversationColorName = ConversationColorName(rawValue: record.conversationColorName) let creationDateInterval: Double? = record.creationDate let creationDate: Date? = SDSDeserialization.optionalDoubleAsDate(creationDateInterval, name: "creationDate") + let isArchived: Bool = record.isArchived let isArchivedByLegacyTimestampForSorting: Bool = record.isArchivedByLegacyTimestampForSorting let lastInteractionSortId: Int64 = record.lastInteractionSortId let lastMessageDateInterval: Double? = record.lastMessageDate @@ -233,9 +233,9 @@ extension TSThread { return TSThread(grdbId: recordId, uniqueId: uniqueId, archivalDate: archivalDate, - archivedAsOfMessageSortId: archivedAsOfMessageSortId, conversationColorName: conversationColorName, creationDate: creationDate, + isArchived: isArchived, isArchivedByLegacyTimestampForSorting: isArchivedByLegacyTimestampForSorting, lastInteractionSortId: lastInteractionSortId, lastMessageDate: lastMessageDate, @@ -294,9 +294,9 @@ extension TSThreadSerializer { static let uniqueIdColumn = SDSColumnMetadata(columnName: "uniqueId", columnType: .unicodeString, isUnique: true, columnIndex: 2) // Base class properties static let archivalDateColumn = SDSColumnMetadata(columnName: "archivalDate", columnType: .double, isOptional: true, columnIndex: 3) - static let archivedAsOfMessageSortIdColumn = SDSColumnMetadata(columnName: "archivedAsOfMessageSortId", columnType: .int64, isOptional: true, columnIndex: 4) - static let conversationColorNameColumn = SDSColumnMetadata(columnName: "conversationColorName", columnType: .unicodeString, columnIndex: 5) - static let creationDateColumn = SDSColumnMetadata(columnName: "creationDate", columnType: .double, isOptional: true, columnIndex: 6) + static let conversationColorNameColumn = SDSColumnMetadata(columnName: "conversationColorName", columnType: .unicodeString, columnIndex: 4) + static let creationDateColumn = SDSColumnMetadata(columnName: "creationDate", columnType: .double, isOptional: true, columnIndex: 5) + static let isArchivedColumn = SDSColumnMetadata(columnName: "isArchived", columnType: .int, columnIndex: 6) static let isArchivedByLegacyTimestampForSortingColumn = SDSColumnMetadata(columnName: "isArchivedByLegacyTimestampForSorting", columnType: .int, columnIndex: 7) static let lastInteractionSortIdColumn = SDSColumnMetadata(columnName: "lastInteractionSortId", columnType: .int64, columnIndex: 8) static let lastMessageDateColumn = SDSColumnMetadata(columnName: "lastMessageDate", columnType: .double, isOptional: true, columnIndex: 9) @@ -319,9 +319,9 @@ extension TSThreadSerializer { recordTypeColumn, uniqueIdColumn, archivalDateColumn, - archivedAsOfMessageSortIdColumn, conversationColorNameColumn, creationDateColumn, + isArchivedColumn, isArchivedByLegacyTimestampForSortingColumn, lastInteractionSortIdColumn, lastMessageDateColumn, @@ -723,7 +723,6 @@ class TSThreadSerializer: SDSSerializer { // MARK: - Record func asRecord() throws -> SDSRecord { - // let id: Int64? = nil let id: Int64? = model.grdbId?.int64Value let recordType: SDSRecordType = .thread @@ -731,9 +730,9 @@ class TSThreadSerializer: SDSSerializer { // Base class properties let archivalDate: Double? = archiveOptionalDate(model.archivalDate) - let archivedAsOfMessageSortId: UInt64? = archiveOptionalNSNumber(model.archivedAsOfMessageSortId, conversion: { $0.uint64Value }) let conversationColorName: String = model.conversationColorName.rawValue let creationDate: Double? = archiveOptionalDate(model.creationDate) + let isArchived: Bool = model.isArchived let isArchivedByLegacyTimestampForSorting: Bool = model.isArchivedByLegacyTimestampForSorting let lastInteractionSortId: Int64 = model.lastInteractionSortId let lastMessageDate: Double? = archiveOptionalDate(model.lastMessageDate) @@ -748,6 +747,6 @@ class TSThreadSerializer: SDSSerializer { let groupModel: Data? = nil let hasDismissedOffers: Bool? = nil - return ThreadRecord(delegate: model, id: id, recordType: recordType, uniqueId: uniqueId, archivalDate: archivalDate, archivedAsOfMessageSortId: archivedAsOfMessageSortId, conversationColorName: conversationColorName, creationDate: creationDate, isArchivedByLegacyTimestampForSorting: isArchivedByLegacyTimestampForSorting, lastInteractionSortId: lastInteractionSortId, lastMessageDate: lastMessageDate, messageDraft: messageDraft, mutedUntilDate: mutedUntilDate, shouldThreadBeVisible: shouldThreadBeVisible, contactPhoneNumber: contactPhoneNumber, contactThreadSchemaVersion: contactThreadSchemaVersion, contactUUID: contactUUID, groupModel: groupModel, hasDismissedOffers: hasDismissedOffers) + return ThreadRecord(delegate: model, id: id, recordType: recordType, uniqueId: uniqueId, archivalDate: archivalDate, conversationColorName: conversationColorName, creationDate: creationDate, isArchived: isArchived, isArchivedByLegacyTimestampForSorting: isArchivedByLegacyTimestampForSorting, lastInteractionSortId: lastInteractionSortId, lastMessageDate: lastMessageDate, messageDraft: messageDraft, mutedUntilDate: mutedUntilDate, shouldThreadBeVisible: shouldThreadBeVisible, contactPhoneNumber: contactPhoneNumber, contactThreadSchemaVersion: contactThreadSchemaVersion, contactUUID: contactUUID, groupModel: groupModel, hasDismissedOffers: hasDismissedOffers) } } diff --git a/SignalServiceKit/src/Contacts/TSThread.h b/SignalServiceKit/src/Contacts/TSThread.h index c19fa65cad..1dd511f6e5 100644 --- a/SignalServiceKit/src/Contacts/TSThread.h +++ b/SignalServiceKit/src/Contacts/TSThread.h @@ -41,6 +41,7 @@ extern ConversationColorName const kConversationColorName_Default; @property (nonatomic, readonly, nullable) NSDate *creationDate; @property (nonatomic, readonly) BOOL isArchivedByLegacyTimestampForSorting; @property (nonatomic, readonly) int64_t rowId; +@property (nonatomic, readonly) BOOL isArchived; // zero if thread has never had an interaction. // The corresponding interaction may have been deleted. @@ -55,9 +56,9 @@ extern ConversationColorName const kConversationColorName_Default; - (instancetype)initWithGrdbId:(int64_t)grdbId uniqueId:(NSString *)uniqueId archivalDate:(nullable NSDate *)archivalDate - archivedAsOfMessageSortId:(nullable NSNumber *)archivedAsOfMessageSortId conversationColorName:(ConversationColorName)conversationColorName creationDate:(nullable NSDate *)creationDate + isArchived:(BOOL)isArchived isArchivedByLegacyTimestampForSorting:(BOOL)isArchivedByLegacyTimestampForSorting lastInteractionSortId:(int64_t)lastInteractionSortId lastMessageDate:(nullable NSDate *)lastMessageDate @@ -65,7 +66,7 @@ isArchivedByLegacyTimestampForSorting:(BOOL)isArchivedByLegacyTimestampForSortin mutedUntilDate:(nullable NSDate *)mutedUntilDate rowId:(int64_t)rowId shouldThreadBeVisible:(BOOL)shouldThreadBeVisible -NS_SWIFT_NAME(init(grdbId:uniqueId:archivalDate:archivedAsOfMessageSortId:conversationColorName:creationDate:isArchivedByLegacyTimestampForSorting:lastInteractionSortId:lastMessageDate:messageDraft:mutedUntilDate:rowId:shouldThreadBeVisible:)); +NS_SWIFT_NAME(init(grdbId:uniqueId:archivalDate:conversationColorName:creationDate:isArchived:isArchivedByLegacyTimestampForSorting:lastInteractionSortId:lastMessageDate:messageDraft:mutedUntilDate:rowId:shouldThreadBeVisible:)); // clang-format on @@ -128,15 +129,12 @@ NS_SWIFT_NAME(init(grdbId:uniqueId:archivalDate:archivedAsOfMessageSortId:conver * @param lastMessage Latest Interaction to take into consideration. * @param transaction Database transaction. */ -- (void)updateWithLastMessage:(TSInteraction *)lastMessage transaction:(SDSAnyWriteTransaction *)transaction; +- (void)updateWithLastMessage:(TSInteraction *)lastMessage + wasMessageInserted:(BOOL)wasMessageInserted + transaction:(SDSAnyWriteTransaction *)transaction; #pragma mark Archival -/** - * @return YES if no new messages have been sent or received since the thread was last archived. - */ -- (BOOL)isArchivedWithTransaction:(SDSAnyReadTransaction *)transaction; - /** * Archives a thread * diff --git a/SignalServiceKit/src/Contacts/TSThread.m b/SignalServiceKit/src/Contacts/TSThread.m index d2f134e52b..0a2428356a 100644 --- a/SignalServiceKit/src/Contacts/TSThread.m +++ b/SignalServiceKit/src/Contacts/TSThread.m @@ -43,7 +43,7 @@ ConversationColorName const kConversationColorName_Default = ConversationColorNa @property (nonatomic, nullable) NSDate *creationDate; @property (nonatomic) NSString *conversationColorName; -@property (nonatomic, nullable) NSNumber *archivedAsOfMessageSortId; +@property (nonatomic) BOOL isArchived; @property (nonatomic, copy, nullable) NSString *messageDraft; @property (atomic, nullable) NSDate *mutedUntilDate; @@ -107,9 +107,9 @@ ConversationColorName const kConversationColorName_Default = ConversationColorNa - (instancetype)initWithGrdbId:(int64_t)grdbId uniqueId:(NSString *)uniqueId archivalDate:(nullable NSDate *)archivalDate - archivedAsOfMessageSortId:(nullable NSNumber *)archivedAsOfMessageSortId conversationColorName:(ConversationColorName)conversationColorName creationDate:(nullable NSDate *)creationDate + isArchived:(BOOL)isArchived isArchivedByLegacyTimestampForSorting:(BOOL)isArchivedByLegacyTimestampForSorting lastInteractionSortId:(int64_t)lastInteractionSortId lastMessageDate:(nullable NSDate *)lastMessageDate @@ -126,9 +126,9 @@ isArchivedByLegacyTimestampForSorting:(BOOL)isArchivedByLegacyTimestampForSortin } _archivalDate = archivalDate; - _archivedAsOfMessageSortId = archivedAsOfMessageSortId; _conversationColorName = conversationColorName; _creationDate = creationDate; + _isArchived = isArchived; _isArchivedByLegacyTimestampForSorting = isArchivedByLegacyTimestampForSorting; _lastInteractionSortId = lastInteractionSortId; _lastMessageDate = lastMessageDate; @@ -188,6 +188,11 @@ isArchivedByLegacyTimestampForSorting:(BOOL)isArchivedByLegacyTimestampForSortin _isArchivedByLegacyTimestampForSorting = [self.class legacyIsArchivedWithLastMessageDate:lastMessageDate archivalDate:archivalDate]; + if ([coder decodeObjectForKey:@"archivedAsOfMessageSortId"] != nil) { + OWSAssertDebug(!_isArchived); + _isArchived = YES; + } + return self; } @@ -428,7 +433,9 @@ isArchivedByLegacyTimestampForSorting:(BOOL)isArchivedByLegacyTimestampForSortin return YES; } -- (void)updateWithLastMessage:(TSInteraction *)lastMessage transaction:(SDSAnyWriteTransaction *)transaction +- (void)updateWithLastMessage:(TSInteraction *)lastMessage + wasMessageInserted:(BOOL)wasMessageInserted + transaction:(SDSAnyWriteTransaction *)transaction { OWSAssertDebug(lastMessage); OWSAssertDebug(transaction); @@ -450,18 +457,16 @@ isArchivedByLegacyTimestampForSorting:(BOOL)isArchivedByLegacyTimestampForSortin } } BOOL needsToMarkAsVisible = !self.shouldThreadBeVisible; - BOOL needsToClearArchived = (self.archivedAsOfMessageSortId != nil - && self.archivedAsOfMessageSortId.unsignedLongLongValue < messageSortId); + BOOL needsToClearArchived = self.isArchived && wasMessageInserted; BOOL needsToUpdateLastInteractionSortId = messageSortId > self.lastInteractionSortId; if (needsToMarkAsVisible || needsToClearArchived || needsToUpdateLastInteractionSortId) { [self anyUpdateWithTransaction:transaction block:^(TSThread *thread) { thread.shouldThreadBeVisible = YES; thread.lastInteractionSortId = MAX(thread.lastInteractionSortId, messageSortId); - if (thread.archivedAsOfMessageSortId != nil - && thread.archivedAsOfMessageSortId.unsignedLongLongValue < messageSortId) { + if (thread.isArchived && wasMessageInserted) { // No longer archived. - thread.archivedAsOfMessageSortId = nil; + thread.isArchived = NO; } }]; } else { @@ -501,17 +506,6 @@ isArchivedByLegacyTimestampForSorting:(BOOL)isArchivedByLegacyTimestampForSortin #pragma mark - Archival -- (BOOL)isArchivedWithTransaction:(SDSAnyReadTransaction *)transaction -{ - if (!self.archivedAsOfMessageSortId) { - return NO; - } - - TSInteraction *_Nullable latestInteraction = [self lastInteractionForInboxWithTransaction:transaction]; - uint64_t latestSortIdForInbox = latestInteraction ? latestInteraction.sortId : 0; - return self.archivedAsOfMessageSortId.unsignedLongLongValue >= latestSortIdForInbox; -} - + (BOOL)legacyIsArchivedWithLastMessageDate:(nullable NSDate *)lastMessageDate archivalDate:(nullable NSDate *)archivalDate { @@ -530,8 +524,7 @@ isArchivedByLegacyTimestampForSorting:(BOOL)isArchivedByLegacyTimestampForSortin { [self anyUpdateWithTransaction:transaction block:^(TSThread *thread) { - uint64_t latestId = [InteractionFinder mostRecentSortIdWithTransaction:transaction]; - thread.archivedAsOfMessageSortId = @(latestId); + thread.isArchived = YES; }]; [self markAllAsReadWithTransaction:transaction]; @@ -541,7 +534,7 @@ isArchivedByLegacyTimestampForSorting:(BOOL)isArchivedByLegacyTimestampForSortin { [self anyUpdateWithTransaction:transaction block:^(TSThread *thread) { - thread.archivedAsOfMessageSortId = nil; + thread.isArchived = NO; }]; } diff --git a/SignalServiceKit/src/Contacts/Threads/TSContactThread+SDS.swift b/SignalServiceKit/src/Contacts/Threads/TSContactThread+SDS.swift index 1e6dba8d6b..d253878e02 100644 --- a/SignalServiceKit/src/Contacts/Threads/TSContactThread+SDS.swift +++ b/SignalServiceKit/src/Contacts/Threads/TSContactThread+SDS.swift @@ -55,7 +55,6 @@ class TSContactThreadSerializer: SDSSerializer { // MARK: - Record func asRecord() throws -> SDSRecord { - // let id: Int64? = nil let id: Int64? = model.grdbId?.int64Value let recordType: SDSRecordType = .contactThread @@ -63,9 +62,9 @@ class TSContactThreadSerializer: SDSSerializer { // Base class properties let archivalDate: Double? = archiveOptionalDate(model.archivalDate) - let archivedAsOfMessageSortId: UInt64? = archiveOptionalNSNumber(model.archivedAsOfMessageSortId, conversion: { $0.uint64Value }) let conversationColorName: String = model.conversationColorName.rawValue let creationDate: Double? = archiveOptionalDate(model.creationDate) + let isArchived: Bool = model.isArchived let isArchivedByLegacyTimestampForSorting: Bool = model.isArchivedByLegacyTimestampForSorting let lastInteractionSortId: Int64 = model.lastInteractionSortId let lastMessageDate: Double? = archiveOptionalDate(model.lastMessageDate) @@ -80,6 +79,6 @@ class TSContactThreadSerializer: SDSSerializer { let groupModel: Data? = nil let hasDismissedOffers: Bool? = model.hasDismissedOffers - return ThreadRecord(delegate: model, id: id, recordType: recordType, uniqueId: uniqueId, archivalDate: archivalDate, archivedAsOfMessageSortId: archivedAsOfMessageSortId, conversationColorName: conversationColorName, creationDate: creationDate, isArchivedByLegacyTimestampForSorting: isArchivedByLegacyTimestampForSorting, lastInteractionSortId: lastInteractionSortId, lastMessageDate: lastMessageDate, messageDraft: messageDraft, mutedUntilDate: mutedUntilDate, shouldThreadBeVisible: shouldThreadBeVisible, contactPhoneNumber: contactPhoneNumber, contactThreadSchemaVersion: contactThreadSchemaVersion, contactUUID: contactUUID, groupModel: groupModel, hasDismissedOffers: hasDismissedOffers) + return ThreadRecord(delegate: model, id: id, recordType: recordType, uniqueId: uniqueId, archivalDate: archivalDate, conversationColorName: conversationColorName, creationDate: creationDate, isArchived: isArchived, isArchivedByLegacyTimestampForSorting: isArchivedByLegacyTimestampForSorting, lastInteractionSortId: lastInteractionSortId, lastMessageDate: lastMessageDate, messageDraft: messageDraft, mutedUntilDate: mutedUntilDate, shouldThreadBeVisible: shouldThreadBeVisible, contactPhoneNumber: contactPhoneNumber, contactThreadSchemaVersion: contactThreadSchemaVersion, contactUUID: contactUUID, groupModel: groupModel, hasDismissedOffers: hasDismissedOffers) } } diff --git a/SignalServiceKit/src/Contacts/Threads/TSContactThread.h b/SignalServiceKit/src/Contacts/Threads/TSContactThread.h index 6091f84f20..2b1fbef72e 100644 --- a/SignalServiceKit/src/Contacts/Threads/TSContactThread.h +++ b/SignalServiceKit/src/Contacts/Threads/TSContactThread.h @@ -19,9 +19,9 @@ NS_ASSUME_NONNULL_BEGIN - (instancetype)initWithGrdbId:(int64_t)grdbId uniqueId:(NSString *)uniqueId archivalDate:(nullable NSDate *)archivalDate - archivedAsOfMessageSortId:(nullable NSNumber *)archivedAsOfMessageSortId conversationColorName:(ConversationColorName)conversationColorName creationDate:(nullable NSDate *)creationDate + isArchived:(BOOL)isArchived isArchivedByLegacyTimestampForSorting:(BOOL)isArchivedByLegacyTimestampForSorting lastInteractionSortId:(int64_t)lastInteractionSortId lastMessageDate:(nullable NSDate *)lastMessageDate @@ -33,7 +33,7 @@ isArchivedByLegacyTimestampForSorting:(BOOL)isArchivedByLegacyTimestampForSortin contactThreadSchemaVersion:(NSUInteger)contactThreadSchemaVersion contactUUID:(nullable NSString *)contactUUID hasDismissedOffers:(BOOL)hasDismissedOffers -NS_SWIFT_NAME(init(grdbId:uniqueId:archivalDate:archivedAsOfMessageSortId:conversationColorName:creationDate:isArchivedByLegacyTimestampForSorting:lastInteractionSortId:lastMessageDate:messageDraft:mutedUntilDate:rowId:shouldThreadBeVisible:contactPhoneNumber:contactThreadSchemaVersion:contactUUID:hasDismissedOffers:)); +NS_SWIFT_NAME(init(grdbId:uniqueId:archivalDate:conversationColorName:creationDate:isArchived:isArchivedByLegacyTimestampForSorting:lastInteractionSortId:lastMessageDate:messageDraft:mutedUntilDate:rowId:shouldThreadBeVisible:contactPhoneNumber:contactThreadSchemaVersion:contactUUID:hasDismissedOffers:)); // clang-format on diff --git a/SignalServiceKit/src/Contacts/Threads/TSContactThread.m b/SignalServiceKit/src/Contacts/Threads/TSContactThread.m index 54b40975e6..b79f023827 100644 --- a/SignalServiceKit/src/Contacts/Threads/TSContactThread.m +++ b/SignalServiceKit/src/Contacts/Threads/TSContactThread.m @@ -52,9 +52,9 @@ NSUInteger const TSContactThreadSchemaVersion = 1; - (instancetype)initWithGrdbId:(int64_t)grdbId uniqueId:(NSString *)uniqueId archivalDate:(nullable NSDate *)archivalDate - archivedAsOfMessageSortId:(nullable NSNumber *)archivedAsOfMessageSortId conversationColorName:(ConversationColorName)conversationColorName creationDate:(nullable NSDate *)creationDate + isArchived:(BOOL)isArchived isArchivedByLegacyTimestampForSorting:(BOOL)isArchivedByLegacyTimestampForSorting lastInteractionSortId:(int64_t)lastInteractionSortId lastMessageDate:(nullable NSDate *)lastMessageDate @@ -70,9 +70,9 @@ isArchivedByLegacyTimestampForSorting:(BOOL)isArchivedByLegacyTimestampForSortin self = [super initWithGrdbId:grdbId uniqueId:uniqueId archivalDate:archivalDate - archivedAsOfMessageSortId:archivedAsOfMessageSortId conversationColorName:conversationColorName creationDate:creationDate + isArchived:isArchived isArchivedByLegacyTimestampForSorting:isArchivedByLegacyTimestampForSorting lastInteractionSortId:lastInteractionSortId lastMessageDate:lastMessageDate diff --git a/SignalServiceKit/src/Contacts/Threads/TSGroupThread+SDS.swift b/SignalServiceKit/src/Contacts/Threads/TSGroupThread+SDS.swift index 249edc54e3..68cb6b4f57 100644 --- a/SignalServiceKit/src/Contacts/Threads/TSGroupThread+SDS.swift +++ b/SignalServiceKit/src/Contacts/Threads/TSGroupThread+SDS.swift @@ -55,7 +55,6 @@ class TSGroupThreadSerializer: SDSSerializer { // MARK: - Record func asRecord() throws -> SDSRecord { - // let id: Int64? = nil let id: Int64? = model.grdbId?.int64Value let recordType: SDSRecordType = .groupThread @@ -63,9 +62,9 @@ class TSGroupThreadSerializer: SDSSerializer { // Base class properties let archivalDate: Double? = archiveOptionalDate(model.archivalDate) - let archivedAsOfMessageSortId: UInt64? = archiveOptionalNSNumber(model.archivedAsOfMessageSortId, conversion: { $0.uint64Value }) let conversationColorName: String = model.conversationColorName.rawValue let creationDate: Double? = archiveOptionalDate(model.creationDate) + let isArchived: Bool = model.isArchived let isArchivedByLegacyTimestampForSorting: Bool = model.isArchivedByLegacyTimestampForSorting let lastInteractionSortId: Int64 = model.lastInteractionSortId let lastMessageDate: Double? = archiveOptionalDate(model.lastMessageDate) @@ -80,6 +79,6 @@ class TSGroupThreadSerializer: SDSSerializer { let groupModel: Data? = optionalArchive(model.groupModel) let hasDismissedOffers: Bool? = nil - return ThreadRecord(delegate: model, id: id, recordType: recordType, uniqueId: uniqueId, archivalDate: archivalDate, archivedAsOfMessageSortId: archivedAsOfMessageSortId, conversationColorName: conversationColorName, creationDate: creationDate, isArchivedByLegacyTimestampForSorting: isArchivedByLegacyTimestampForSorting, lastInteractionSortId: lastInteractionSortId, lastMessageDate: lastMessageDate, messageDraft: messageDraft, mutedUntilDate: mutedUntilDate, shouldThreadBeVisible: shouldThreadBeVisible, contactPhoneNumber: contactPhoneNumber, contactThreadSchemaVersion: contactThreadSchemaVersion, contactUUID: contactUUID, groupModel: groupModel, hasDismissedOffers: hasDismissedOffers) + return ThreadRecord(delegate: model, id: id, recordType: recordType, uniqueId: uniqueId, archivalDate: archivalDate, conversationColorName: conversationColorName, creationDate: creationDate, isArchived: isArchived, isArchivedByLegacyTimestampForSorting: isArchivedByLegacyTimestampForSorting, lastInteractionSortId: lastInteractionSortId, lastMessageDate: lastMessageDate, messageDraft: messageDraft, mutedUntilDate: mutedUntilDate, shouldThreadBeVisible: shouldThreadBeVisible, contactPhoneNumber: contactPhoneNumber, contactThreadSchemaVersion: contactThreadSchemaVersion, contactUUID: contactUUID, groupModel: groupModel, hasDismissedOffers: hasDismissedOffers) } } diff --git a/SignalServiceKit/src/Contacts/Threads/TSGroupThread.h b/SignalServiceKit/src/Contacts/Threads/TSGroupThread.h index e60dfcf521..49641da704 100644 --- a/SignalServiceKit/src/Contacts/Threads/TSGroupThread.h +++ b/SignalServiceKit/src/Contacts/Threads/TSGroupThread.h @@ -25,9 +25,9 @@ extern NSString *const TSGroupThread_NotificationKey_UniqueId; - (instancetype)initWithGrdbId:(int64_t)grdbId uniqueId:(NSString *)uniqueId archivalDate:(nullable NSDate *)archivalDate - archivedAsOfMessageSortId:(nullable NSNumber *)archivedAsOfMessageSortId conversationColorName:(ConversationColorName)conversationColorName creationDate:(nullable NSDate *)creationDate + isArchived:(BOOL)isArchived isArchivedByLegacyTimestampForSorting:(BOOL)isArchivedByLegacyTimestampForSorting lastInteractionSortId:(int64_t)lastInteractionSortId lastMessageDate:(nullable NSDate *)lastMessageDate @@ -36,7 +36,7 @@ isArchivedByLegacyTimestampForSorting:(BOOL)isArchivedByLegacyTimestampForSortin rowId:(int64_t)rowId shouldThreadBeVisible:(BOOL)shouldThreadBeVisible groupModel:(TSGroupModel *)groupModel -NS_SWIFT_NAME(init(grdbId:uniqueId:archivalDate:archivedAsOfMessageSortId:conversationColorName:creationDate:isArchivedByLegacyTimestampForSorting:lastInteractionSortId:lastMessageDate:messageDraft:mutedUntilDate:rowId:shouldThreadBeVisible:groupModel:)); +NS_SWIFT_NAME(init(grdbId:uniqueId:archivalDate:conversationColorName:creationDate:isArchived:isArchivedByLegacyTimestampForSorting:lastInteractionSortId:lastMessageDate:messageDraft:mutedUntilDate:rowId:shouldThreadBeVisible:groupModel:)); // clang-format on diff --git a/SignalServiceKit/src/Contacts/Threads/TSGroupThread.m b/SignalServiceKit/src/Contacts/Threads/TSGroupThread.m index 654a7a6750..089a8699c4 100644 --- a/SignalServiceKit/src/Contacts/Threads/TSGroupThread.m +++ b/SignalServiceKit/src/Contacts/Threads/TSGroupThread.m @@ -26,9 +26,9 @@ NSString *const TSGroupThread_NotificationKey_UniqueId = @"TSGroupThread_Notific - (instancetype)initWithGrdbId:(int64_t)grdbId uniqueId:(NSString *)uniqueId archivalDate:(nullable NSDate *)archivalDate - archivedAsOfMessageSortId:(nullable NSNumber *)archivedAsOfMessageSortId conversationColorName:(ConversationColorName)conversationColorName creationDate:(nullable NSDate *)creationDate + isArchived:(BOOL)isArchived isArchivedByLegacyTimestampForSorting:(BOOL)isArchivedByLegacyTimestampForSorting lastInteractionSortId:(int64_t)lastInteractionSortId lastMessageDate:(nullable NSDate *)lastMessageDate @@ -41,9 +41,9 @@ isArchivedByLegacyTimestampForSorting:(BOOL)isArchivedByLegacyTimestampForSortin self = [super initWithGrdbId:grdbId uniqueId:uniqueId archivalDate:archivalDate - archivedAsOfMessageSortId:archivedAsOfMessageSortId conversationColorName:conversationColorName creationDate:creationDate + isArchived:isArchived isArchivedByLegacyTimestampForSorting:isArchivedByLegacyTimestampForSorting lastInteractionSortId:lastInteractionSortId lastMessageDate:lastMessageDate diff --git a/SignalServiceKit/src/Devices/OWSDevice+SDS.swift b/SignalServiceKit/src/Devices/OWSDevice+SDS.swift index 62399a348c..be2ef4205e 100644 --- a/SignalServiceKit/src/Devices/OWSDevice+SDS.swift +++ b/SignalServiceKit/src/Devices/OWSDevice+SDS.swift @@ -566,7 +566,6 @@ class OWSDeviceSerializer: SDSSerializer { // MARK: - Record func asRecord() throws -> SDSRecord { - // let id: Int64? = nil let id: Int64? = model.grdbId?.int64Value let recordType: SDSRecordType = .device diff --git a/SignalServiceKit/src/Devices/OWSLinkedDeviceReadReceipt+SDS.swift b/SignalServiceKit/src/Devices/OWSLinkedDeviceReadReceipt+SDS.swift index 9057cb63e3..8c5da043d7 100644 --- a/SignalServiceKit/src/Devices/OWSLinkedDeviceReadReceipt+SDS.swift +++ b/SignalServiceKit/src/Devices/OWSLinkedDeviceReadReceipt+SDS.swift @@ -571,7 +571,6 @@ class OWSLinkedDeviceReadReceiptSerializer: SDSSerializer { // MARK: - Record func asRecord() throws -> SDSRecord { - // let id: Int64? = nil let id: Int64? = model.grdbId?.int64Value let recordType: SDSRecordType = .linkedDeviceReadReceipt diff --git a/SignalServiceKit/src/Messages/Attachments/TSAttachment+SDS.swift b/SignalServiceKit/src/Messages/Attachments/TSAttachment+SDS.swift index a3ff197e45..88ff48bcf4 100644 --- a/SignalServiceKit/src/Messages/Attachments/TSAttachment+SDS.swift +++ b/SignalServiceKit/src/Messages/Attachments/TSAttachment+SDS.swift @@ -795,7 +795,6 @@ class TSAttachmentSerializer: SDSSerializer { // MARK: - Record func asRecord() throws -> SDSRecord { - // let id: Int64? = nil let id: Int64? = model.grdbId?.int64Value let recordType: SDSRecordType = .attachment diff --git a/SignalServiceKit/src/Messages/Attachments/TSAttachmentPointer+SDS.swift b/SignalServiceKit/src/Messages/Attachments/TSAttachmentPointer+SDS.swift index f5dc42a17c..1f19328824 100644 --- a/SignalServiceKit/src/Messages/Attachments/TSAttachmentPointer+SDS.swift +++ b/SignalServiceKit/src/Messages/Attachments/TSAttachmentPointer+SDS.swift @@ -55,7 +55,6 @@ class TSAttachmentPointerSerializer: SDSSerializer { // MARK: - Record func asRecord() throws -> SDSRecord { - // let id: Int64? = nil let id: Int64? = model.grdbId?.int64Value let recordType: SDSRecordType = .attachmentPointer diff --git a/SignalServiceKit/src/Messages/Attachments/TSAttachmentStream+SDS.swift b/SignalServiceKit/src/Messages/Attachments/TSAttachmentStream+SDS.swift index 0d468557a8..e906222980 100644 --- a/SignalServiceKit/src/Messages/Attachments/TSAttachmentStream+SDS.swift +++ b/SignalServiceKit/src/Messages/Attachments/TSAttachmentStream+SDS.swift @@ -55,7 +55,6 @@ class TSAttachmentStreamSerializer: SDSSerializer { // MARK: - Record func asRecord() throws -> SDSRecord { - // let id: Int64? = nil let id: Int64? = model.grdbId?.int64Value let recordType: SDSRecordType = .attachmentStream diff --git a/SignalServiceKit/src/Messages/Interactions/OWSContactOffersInteraction+SDS.swift b/SignalServiceKit/src/Messages/Interactions/OWSContactOffersInteraction+SDS.swift index 7863fc552f..9525aafff6 100644 --- a/SignalServiceKit/src/Messages/Interactions/OWSContactOffersInteraction+SDS.swift +++ b/SignalServiceKit/src/Messages/Interactions/OWSContactOffersInteraction+SDS.swift @@ -55,7 +55,6 @@ class OWSContactOffersInteractionSerializer: SDSSerializer { // MARK: - Record func asRecord() throws -> SDSRecord { - // let id: Int64? = model.sortId > 0 ? Int64(model.sortId) : nil let id: Int64? = model.grdbId?.int64Value let recordType: SDSRecordType = .contactOffersInteraction diff --git a/SignalServiceKit/src/Messages/Interactions/OWSDisappearingConfigurationUpdateInfoMessage+SDS.swift b/SignalServiceKit/src/Messages/Interactions/OWSDisappearingConfigurationUpdateInfoMessage+SDS.swift index 0e6e109d4b..4b7b4527af 100644 --- a/SignalServiceKit/src/Messages/Interactions/OWSDisappearingConfigurationUpdateInfoMessage+SDS.swift +++ b/SignalServiceKit/src/Messages/Interactions/OWSDisappearingConfigurationUpdateInfoMessage+SDS.swift @@ -55,7 +55,6 @@ class OWSDisappearingConfigurationUpdateInfoMessageSerializer: SDSSerializer { // MARK: - Record func asRecord() throws -> SDSRecord { - // let id: Int64? = model.sortId > 0 ? Int64(model.sortId) : nil let id: Int64? = model.grdbId?.int64Value let recordType: SDSRecordType = .disappearingConfigurationUpdateInfoMessage diff --git a/SignalServiceKit/src/Messages/Interactions/OWSVerificationStateChangeMessage+SDS.swift b/SignalServiceKit/src/Messages/Interactions/OWSVerificationStateChangeMessage+SDS.swift index df185523e8..5776bd94f0 100644 --- a/SignalServiceKit/src/Messages/Interactions/OWSVerificationStateChangeMessage+SDS.swift +++ b/SignalServiceKit/src/Messages/Interactions/OWSVerificationStateChangeMessage+SDS.swift @@ -55,7 +55,6 @@ class OWSVerificationStateChangeMessageSerializer: SDSSerializer { // MARK: - Record func asRecord() throws -> SDSRecord { - // let id: Int64? = model.sortId > 0 ? Int64(model.sortId) : nil let id: Int64? = model.grdbId?.int64Value let recordType: SDSRecordType = .verificationStateChangeMessage diff --git a/SignalServiceKit/src/Messages/Interactions/TSErrorMessage+SDS.swift b/SignalServiceKit/src/Messages/Interactions/TSErrorMessage+SDS.swift index 2c5649f3b0..73afd91655 100644 --- a/SignalServiceKit/src/Messages/Interactions/TSErrorMessage+SDS.swift +++ b/SignalServiceKit/src/Messages/Interactions/TSErrorMessage+SDS.swift @@ -55,7 +55,6 @@ class TSErrorMessageSerializer: SDSSerializer { // MARK: - Record func asRecord() throws -> SDSRecord { - // let id: Int64? = model.sortId > 0 ? Int64(model.sortId) : nil let id: Int64? = model.grdbId?.int64Value let recordType: SDSRecordType = .errorMessage diff --git a/SignalServiceKit/src/Messages/Interactions/TSIncomingMessage+SDS.swift b/SignalServiceKit/src/Messages/Interactions/TSIncomingMessage+SDS.swift index 99f6a01329..92985b1fbd 100644 --- a/SignalServiceKit/src/Messages/Interactions/TSIncomingMessage+SDS.swift +++ b/SignalServiceKit/src/Messages/Interactions/TSIncomingMessage+SDS.swift @@ -55,7 +55,6 @@ class TSIncomingMessageSerializer: SDSSerializer { // MARK: - Record func asRecord() throws -> SDSRecord { - // let id: Int64? = model.sortId > 0 ? Int64(model.sortId) : nil let id: Int64? = model.grdbId?.int64Value let recordType: SDSRecordType = .incomingMessage diff --git a/SignalServiceKit/src/Messages/Interactions/TSInfoMessage+SDS.swift b/SignalServiceKit/src/Messages/Interactions/TSInfoMessage+SDS.swift index bd59085f4d..338eb5a1af 100644 --- a/SignalServiceKit/src/Messages/Interactions/TSInfoMessage+SDS.swift +++ b/SignalServiceKit/src/Messages/Interactions/TSInfoMessage+SDS.swift @@ -55,7 +55,6 @@ class TSInfoMessageSerializer: SDSSerializer { // MARK: - Record func asRecord() throws -> SDSRecord { - // let id: Int64? = model.sortId > 0 ? Int64(model.sortId) : nil let id: Int64? = model.grdbId?.int64Value let recordType: SDSRecordType = .infoMessage diff --git a/SignalServiceKit/src/Messages/Interactions/TSInteraction+SDS.swift b/SignalServiceKit/src/Messages/Interactions/TSInteraction+SDS.swift index c730d489f5..1e8577c30f 100644 --- a/SignalServiceKit/src/Messages/Interactions/TSInteraction+SDS.swift +++ b/SignalServiceKit/src/Messages/Interactions/TSInteraction+SDS.swift @@ -1825,7 +1825,6 @@ class TSInteractionSerializer: SDSSerializer { // MARK: - Record func asRecord() throws -> SDSRecord { - // let id: Int64? = model.sortId > 0 ? Int64(model.sortId) : nil let id: Int64? = model.grdbId?.int64Value let recordType: SDSRecordType = .interaction diff --git a/SignalServiceKit/src/Messages/Interactions/TSInteraction.m b/SignalServiceKit/src/Messages/Interactions/TSInteraction.m index 6fa1918523..b77576c478 100644 --- a/SignalServiceKit/src/Messages/Interactions/TSInteraction.m +++ b/SignalServiceKit/src/Messages/Interactions/TSInteraction.m @@ -294,21 +294,22 @@ NSString *NSStringFromOWSInteractionType(OWSInteractionType value) { [super anyDidInsertWithTransaction:transaction]; - [self updateLastMessageWithTransaction:transaction]; + [self updateLastMessageWithTransaction:transaction wasMessageInserted:YES]; } - (void)anyDidUpdateWithTransaction:(SDSAnyWriteTransaction *)transaction { [super anyDidUpdateWithTransaction:transaction]; - [self updateLastMessageWithTransaction:transaction]; + [self updateLastMessageWithTransaction:transaction wasMessageInserted:NO]; } - (void)updateLastMessageWithTransaction:(SDSAnyWriteTransaction *)transaction + wasMessageInserted:(BOOL)wasMessageInserted { TSThread *fetchedThread = [self threadWithTransaction:transaction]; - [fetchedThread updateWithLastMessage:self transaction:transaction]; + [fetchedThread updateWithLastMessage:self wasMessageInserted:wasMessageInserted transaction:transaction]; } - (void)anyDidRemoveWithTransaction:(SDSAnyWriteTransaction *)transaction diff --git a/SignalServiceKit/src/Messages/Interactions/TSMessage+SDS.swift b/SignalServiceKit/src/Messages/Interactions/TSMessage+SDS.swift index b28efc5fd8..125ee3a7ba 100644 --- a/SignalServiceKit/src/Messages/Interactions/TSMessage+SDS.swift +++ b/SignalServiceKit/src/Messages/Interactions/TSMessage+SDS.swift @@ -55,7 +55,6 @@ class TSMessageSerializer: SDSSerializer { // MARK: - Record func asRecord() throws -> SDSRecord { - // let id: Int64? = model.sortId > 0 ? Int64(model.sortId) : nil let id: Int64? = model.grdbId?.int64Value let recordType: SDSRecordType = .message diff --git a/SignalServiceKit/src/Messages/Interactions/TSOutgoingMessage+SDS.swift b/SignalServiceKit/src/Messages/Interactions/TSOutgoingMessage+SDS.swift index 8b75f8512a..c946279e97 100644 --- a/SignalServiceKit/src/Messages/Interactions/TSOutgoingMessage+SDS.swift +++ b/SignalServiceKit/src/Messages/Interactions/TSOutgoingMessage+SDS.swift @@ -55,7 +55,6 @@ class TSOutgoingMessageSerializer: SDSSerializer { // MARK: - Record func asRecord() throws -> SDSRecord { - // let id: Int64? = model.sortId > 0 ? Int64(model.sortId) : nil let id: Int64? = model.grdbId?.int64Value let recordType: SDSRecordType = .outgoingMessage diff --git a/SignalServiceKit/src/Messages/Interactions/TSUnreadIndicatorInteraction+SDS.swift b/SignalServiceKit/src/Messages/Interactions/TSUnreadIndicatorInteraction+SDS.swift index 3fe5954601..ba6abd4c6c 100644 --- a/SignalServiceKit/src/Messages/Interactions/TSUnreadIndicatorInteraction+SDS.swift +++ b/SignalServiceKit/src/Messages/Interactions/TSUnreadIndicatorInteraction+SDS.swift @@ -55,7 +55,6 @@ class TSUnreadIndicatorInteractionSerializer: SDSSerializer { // MARK: - Record func asRecord() throws -> SDSRecord { - // let id: Int64? = model.sortId > 0 ? Int64(model.sortId) : nil let id: Int64? = model.grdbId?.int64Value let recordType: SDSRecordType = .unreadIndicatorInteraction diff --git a/SignalServiceKit/src/Messages/InvalidKeyMessages/TSInvalidIdentityKeyErrorMessage+SDS.swift b/SignalServiceKit/src/Messages/InvalidKeyMessages/TSInvalidIdentityKeyErrorMessage+SDS.swift index e54a0930da..85d08a1924 100644 --- a/SignalServiceKit/src/Messages/InvalidKeyMessages/TSInvalidIdentityKeyErrorMessage+SDS.swift +++ b/SignalServiceKit/src/Messages/InvalidKeyMessages/TSInvalidIdentityKeyErrorMessage+SDS.swift @@ -55,7 +55,6 @@ class TSInvalidIdentityKeyErrorMessageSerializer: SDSSerializer { // MARK: - Record func asRecord() throws -> SDSRecord { - // let id: Int64? = model.sortId > 0 ? Int64(model.sortId) : nil let id: Int64? = model.grdbId?.int64Value let recordType: SDSRecordType = .invalidIdentityKeyErrorMessage diff --git a/SignalServiceKit/src/Messages/InvalidKeyMessages/TSInvalidIdentityKeyReceivingErrorMessage+SDS.swift b/SignalServiceKit/src/Messages/InvalidKeyMessages/TSInvalidIdentityKeyReceivingErrorMessage+SDS.swift index b5f0abb0c3..9679baf89d 100644 --- a/SignalServiceKit/src/Messages/InvalidKeyMessages/TSInvalidIdentityKeyReceivingErrorMessage+SDS.swift +++ b/SignalServiceKit/src/Messages/InvalidKeyMessages/TSInvalidIdentityKeyReceivingErrorMessage+SDS.swift @@ -55,7 +55,6 @@ class TSInvalidIdentityKeyReceivingErrorMessageSerializer: SDSSerializer { // MARK: - Record func asRecord() throws -> SDSRecord { - // let id: Int64? = model.sortId > 0 ? Int64(model.sortId) : nil let id: Int64? = model.grdbId?.int64Value let recordType: SDSRecordType = .invalidIdentityKeyReceivingErrorMessage diff --git a/SignalServiceKit/src/Messages/InvalidKeyMessages/TSInvalidIdentityKeySendingErrorMessage+SDS.swift b/SignalServiceKit/src/Messages/InvalidKeyMessages/TSInvalidIdentityKeySendingErrorMessage+SDS.swift index 6f369b7d0d..0840cd311c 100644 --- a/SignalServiceKit/src/Messages/InvalidKeyMessages/TSInvalidIdentityKeySendingErrorMessage+SDS.swift +++ b/SignalServiceKit/src/Messages/InvalidKeyMessages/TSInvalidIdentityKeySendingErrorMessage+SDS.swift @@ -55,7 +55,6 @@ class TSInvalidIdentityKeySendingErrorMessageSerializer: SDSSerializer { // MARK: - Record func asRecord() throws -> SDSRecord { - // let id: Int64? = model.sortId > 0 ? Int64(model.sortId) : nil let id: Int64? = model.grdbId?.int64Value let recordType: SDSRecordType = .invalidIdentityKeySendingErrorMessage diff --git a/SignalServiceKit/src/Messages/OWSAddToContactsOfferMessage+SDS.swift b/SignalServiceKit/src/Messages/OWSAddToContactsOfferMessage+SDS.swift index 6e6cea4bb3..a6e1e1ef23 100644 --- a/SignalServiceKit/src/Messages/OWSAddToContactsOfferMessage+SDS.swift +++ b/SignalServiceKit/src/Messages/OWSAddToContactsOfferMessage+SDS.swift @@ -55,7 +55,6 @@ class OWSAddToContactsOfferMessageSerializer: SDSSerializer { // MARK: - Record func asRecord() throws -> SDSRecord { - // let id: Int64? = model.sortId > 0 ? Int64(model.sortId) : nil let id: Int64? = model.grdbId?.int64Value let recordType: SDSRecordType = .addToContactsOfferMessage diff --git a/SignalServiceKit/src/Messages/OWSAddToProfileWhitelistOfferMessage+SDS.swift b/SignalServiceKit/src/Messages/OWSAddToProfileWhitelistOfferMessage+SDS.swift index 1fbe45f575..8d10e49000 100644 --- a/SignalServiceKit/src/Messages/OWSAddToProfileWhitelistOfferMessage+SDS.swift +++ b/SignalServiceKit/src/Messages/OWSAddToProfileWhitelistOfferMessage+SDS.swift @@ -55,7 +55,6 @@ class OWSAddToProfileWhitelistOfferMessageSerializer: SDSSerializer { // MARK: - Record func asRecord() throws -> SDSRecord { - // let id: Int64? = model.sortId > 0 ? Int64(model.sortId) : nil let id: Int64? = model.grdbId?.int64Value let recordType: SDSRecordType = .addToProfileWhitelistOfferMessage diff --git a/SignalServiceKit/src/Messages/OWSBatchMessageProcessor+SDS.swift b/SignalServiceKit/src/Messages/OWSBatchMessageProcessor+SDS.swift index 9a50bfb033..017b85f773 100644 --- a/SignalServiceKit/src/Messages/OWSBatchMessageProcessor+SDS.swift +++ b/SignalServiceKit/src/Messages/OWSBatchMessageProcessor+SDS.swift @@ -565,7 +565,6 @@ class OWSMessageContentJobSerializer: SDSSerializer { // MARK: - Record func asRecord() throws -> SDSRecord { - // let id: Int64? = nil let id: Int64? = model.grdbId?.int64Value let recordType: SDSRecordType = .messageContentJob diff --git a/SignalServiceKit/src/Messages/OWSMessageReceiver+SDS.swift b/SignalServiceKit/src/Messages/OWSMessageReceiver+SDS.swift index 3ea5a628b6..f0b6255309 100644 --- a/SignalServiceKit/src/Messages/OWSMessageReceiver+SDS.swift +++ b/SignalServiceKit/src/Messages/OWSMessageReceiver+SDS.swift @@ -551,7 +551,6 @@ class OWSMessageDecryptJobSerializer: SDSSerializer { // MARK: - Record func asRecord() throws -> SDSRecord { - // let id: Int64? = nil let id: Int64? = model.grdbId?.int64Value let recordType: SDSRecordType = .messageDecryptJob diff --git a/SignalServiceKit/src/Messages/OWSReadReceiptManager+SDS.swift b/SignalServiceKit/src/Messages/OWSReadReceiptManager+SDS.swift index bab4951417..47db69f449 100644 --- a/SignalServiceKit/src/Messages/OWSReadReceiptManager+SDS.swift +++ b/SignalServiceKit/src/Messages/OWSReadReceiptManager+SDS.swift @@ -558,7 +558,6 @@ class TSRecipientReadReceiptSerializer: SDSSerializer { // MARK: - Record func asRecord() throws -> SDSRecord { - // let id: Int64? = nil let id: Int64? = model.grdbId?.int64Value let recordType: SDSRecordType = .recipientReadReceipt diff --git a/SignalServiceKit/src/Messages/OWSUnknownContactBlockOfferMessage+SDS.swift b/SignalServiceKit/src/Messages/OWSUnknownContactBlockOfferMessage+SDS.swift index de9f17db9f..ed9eb2e648 100644 --- a/SignalServiceKit/src/Messages/OWSUnknownContactBlockOfferMessage+SDS.swift +++ b/SignalServiceKit/src/Messages/OWSUnknownContactBlockOfferMessage+SDS.swift @@ -55,7 +55,6 @@ class OWSUnknownContactBlockOfferMessageSerializer: SDSSerializer { // MARK: - Record func asRecord() throws -> SDSRecord { - // let id: Int64? = model.sortId > 0 ? Int64(model.sortId) : nil let id: Int64? = model.grdbId?.int64Value let recordType: SDSRecordType = .unknownContactBlockOfferMessage diff --git a/SignalServiceKit/src/Messages/OWSUnknownProtocolVersionMessage+SDS.swift b/SignalServiceKit/src/Messages/OWSUnknownProtocolVersionMessage+SDS.swift index 65d805a430..ea017300b0 100644 --- a/SignalServiceKit/src/Messages/OWSUnknownProtocolVersionMessage+SDS.swift +++ b/SignalServiceKit/src/Messages/OWSUnknownProtocolVersionMessage+SDS.swift @@ -55,7 +55,6 @@ class OWSUnknownProtocolVersionMessageSerializer: SDSSerializer { // MARK: - Record func asRecord() throws -> SDSRecord { - // let id: Int64? = model.sortId > 0 ? Int64(model.sortId) : nil let id: Int64? = model.grdbId?.int64Value let recordType: SDSRecordType = .unknownProtocolVersionMessage diff --git a/SignalServiceKit/src/Messages/Stickers/InstalledSticker+SDS.swift b/SignalServiceKit/src/Messages/Stickers/InstalledSticker+SDS.swift index cf8bad0074..33ece0afd6 100644 --- a/SignalServiceKit/src/Messages/Stickers/InstalledSticker+SDS.swift +++ b/SignalServiceKit/src/Messages/Stickers/InstalledSticker+SDS.swift @@ -551,7 +551,6 @@ class InstalledStickerSerializer: SDSSerializer { // MARK: - Record func asRecord() throws -> SDSRecord { - // let id: Int64? = nil let id: Int64? = model.grdbId?.int64Value let recordType: SDSRecordType = .installedSticker diff --git a/SignalServiceKit/src/Messages/Stickers/KnownStickerPack+SDS.swift b/SignalServiceKit/src/Messages/Stickers/KnownStickerPack+SDS.swift index 132e15cd3e..f1fafe72dc 100644 --- a/SignalServiceKit/src/Messages/Stickers/KnownStickerPack+SDS.swift +++ b/SignalServiceKit/src/Messages/Stickers/KnownStickerPack+SDS.swift @@ -559,7 +559,6 @@ class KnownStickerPackSerializer: SDSSerializer { // MARK: - Record func asRecord() throws -> SDSRecord { - // let id: Int64? = nil let id: Int64? = model.grdbId?.int64Value let recordType: SDSRecordType = .knownStickerPack diff --git a/SignalServiceKit/src/Messages/Stickers/StickerPack+SDS.swift b/SignalServiceKit/src/Messages/Stickers/StickerPack+SDS.swift index f978f31644..736e47dcf6 100644 --- a/SignalServiceKit/src/Messages/Stickers/StickerPack+SDS.swift +++ b/SignalServiceKit/src/Messages/Stickers/StickerPack+SDS.swift @@ -589,7 +589,6 @@ class StickerPackSerializer: SDSSerializer { // MARK: - Record func asRecord() throws -> SDSRecord { - // let id: Int64? = nil let id: Int64? = model.grdbId?.int64Value let recordType: SDSRecordType = .stickerPack diff --git a/SignalServiceKit/src/Messages/TSCall+SDS.swift b/SignalServiceKit/src/Messages/TSCall+SDS.swift index d1c9b6bdab..5888964a3f 100644 --- a/SignalServiceKit/src/Messages/TSCall+SDS.swift +++ b/SignalServiceKit/src/Messages/TSCall+SDS.swift @@ -55,7 +55,6 @@ class TSCallSerializer: SDSSerializer { // MARK: - Record func asRecord() throws -> SDSRecord { - // let id: Int64? = model.sortId > 0 ? Int64(model.sortId) : nil let id: Int64? = model.grdbId?.int64Value let recordType: SDSRecordType = .call diff --git a/SignalServiceKit/src/Network/Receiving/SSKMessageDecryptJobRecord+SDS.swift b/SignalServiceKit/src/Network/Receiving/SSKMessageDecryptJobRecord+SDS.swift index 0c1cbf16df..7db5b9cd52 100644 --- a/SignalServiceKit/src/Network/Receiving/SSKMessageDecryptJobRecord+SDS.swift +++ b/SignalServiceKit/src/Network/Receiving/SSKMessageDecryptJobRecord+SDS.swift @@ -55,7 +55,6 @@ class SSKMessageDecryptJobRecordSerializer: SDSSerializer { // MARK: - Record func asRecord() throws -> SDSRecord { - // let id: Int64? = model.sortId > 0 ? Int64(model.sortId) : nil let id: Int64? = model.grdbId?.int64Value let recordType: SDSRecordType = .messageDecryptJobRecord diff --git a/SignalServiceKit/src/Security/OWSRecipientIdentity+SDS.swift b/SignalServiceKit/src/Security/OWSRecipientIdentity+SDS.swift index 0a24a8cfdf..b446021c16 100644 --- a/SignalServiceKit/src/Security/OWSRecipientIdentity+SDS.swift +++ b/SignalServiceKit/src/Security/OWSRecipientIdentity+SDS.swift @@ -579,7 +579,6 @@ class OWSRecipientIdentitySerializer: SDSSerializer { // MARK: - Record func asRecord() throws -> SDSRecord { - // let id: Int64? = nil let id: Int64? = model.grdbId?.int64Value let recordType: SDSRecordType = .recipientIdentity diff --git a/SignalServiceKit/src/Storage/Database/GRDBDatabaseStorageAdapter.swift b/SignalServiceKit/src/Storage/Database/GRDBDatabaseStorageAdapter.swift index bbebfc3390..568e065488 100644 --- a/SignalServiceKit/src/Storage/Database/GRDBDatabaseStorageAdapter.swift +++ b/SignalServiceKit/src/Storage/Database/GRDBDatabaseStorageAdapter.swift @@ -213,7 +213,7 @@ public class GRDBDatabaseStorageAdapter: NSObject { on: ThreadRecord.databaseTableName, columns: [ ThreadRecord.columnName(.shouldThreadBeVisible), - ThreadRecord.columnName(.archivedAsOfMessageSortId), + ThreadRecord.columnName(.isArchived), ThreadRecord.columnName(.lastInteractionSortId) ] ) diff --git a/SignalServiceKit/src/Storage/Database/Records/ThreadFinder.swift b/SignalServiceKit/src/Storage/Database/Records/ThreadFinder.swift index f3a26dae9e..aa59fbbf9f 100644 --- a/SignalServiceKit/src/Storage/Database/Records/ThreadFinder.swift +++ b/SignalServiceKit/src/Storage/Database/Records/ThreadFinder.swift @@ -83,14 +83,13 @@ struct GRDBThreadFinder: ThreadFinder { static let cn = ThreadRecord.columnName func visibleThreadCount(isArchived: Bool, transaction: Database) throws -> UInt { - let archivedClause = isArchived ? "IS NOT NULL" : "IS NULL" let sql = """ SELECT COUNT(*) FROM \(ThreadRecord.databaseTableName) WHERE \(threadColumn: .shouldThreadBeVisible) = 1 - AND \(threadColumn: .archivedAsOfMessageSortId) \(archivedClause) + AND \(threadColumn: .isArchived) = ? """ - let arguments: StatementArguments = [] + let arguments: StatementArguments = [isArchived] guard let count = try UInt.fetchOne(transaction, sql: sql, arguments: arguments) else { owsFailDebug("count was unexpectedly nil") @@ -101,15 +100,14 @@ struct GRDBThreadFinder: ThreadFinder { } func enumerateVisibleThreads(isArchived: Bool, transaction: Database, block: @escaping (TSThread) -> Void) throws { - let archivedClause = isArchived ? "IS NOT NULL" : "IS NULL" let sql = """ SELECT * FROM \(ThreadRecord.databaseTableName) WHERE \(threadColumn: .shouldThreadBeVisible) = 1 - AND \(threadColumn: .archivedAsOfMessageSortId) \(archivedClause) + AND \(threadColumn: .isArchived) = ? ORDER BY \(threadColumn: .lastInteractionSortId) DESC """ - let arguments: StatementArguments = [] + let arguments: StatementArguments = [isArchived] try ThreadRecord.fetchCursor(transaction, sql: sql, arguments: arguments).forEach { threadRecord in block(try TSThread.fromRecord(threadRecord)) diff --git a/SignalServiceKit/src/Storage/Database/SSKAccessors+SDS.h b/SignalServiceKit/src/Storage/Database/SSKAccessors+SDS.h index f8b80b389a..563d753204 100644 --- a/SignalServiceKit/src/Storage/Database/SSKAccessors+SDS.h +++ b/SignalServiceKit/src/Storage/Database/SSKAccessors+SDS.h @@ -10,7 +10,6 @@ NS_ASSUME_NONNULL_BEGIN @interface TSThread (SDS) -@property (nonatomic, nullable, readonly) NSNumber *archivedAsOfMessageSortId; @property (nonatomic, copy, nullable, readonly) NSString *messageDraft; @property (nonatomic, nullable, readonly) NSDate *lastMessageDate DEPRECATED_ATTRIBUTE; diff --git a/SignalServiceKit/src/Storage/Jobs/OWSBroadcastMediaMessageJobRecord+SDS.swift b/SignalServiceKit/src/Storage/Jobs/OWSBroadcastMediaMessageJobRecord+SDS.swift index a3a26b1732..c2b17e2153 100644 --- a/SignalServiceKit/src/Storage/Jobs/OWSBroadcastMediaMessageJobRecord+SDS.swift +++ b/SignalServiceKit/src/Storage/Jobs/OWSBroadcastMediaMessageJobRecord+SDS.swift @@ -55,7 +55,6 @@ class OWSBroadcastMediaMessageJobRecordSerializer: SDSSerializer { // MARK: - Record func asRecord() throws -> SDSRecord { - // let id: Int64? = model.sortId > 0 ? Int64(model.sortId) : nil let id: Int64? = model.grdbId?.int64Value let recordType: SDSRecordType = .broadcastMediaMessageJobRecord diff --git a/SignalServiceKit/src/Storage/Jobs/OWSSessionResetJobRecord+SDS.swift b/SignalServiceKit/src/Storage/Jobs/OWSSessionResetJobRecord+SDS.swift index cb2f43c1ec..43af0d9427 100644 --- a/SignalServiceKit/src/Storage/Jobs/OWSSessionResetJobRecord+SDS.swift +++ b/SignalServiceKit/src/Storage/Jobs/OWSSessionResetJobRecord+SDS.swift @@ -55,7 +55,6 @@ class OWSSessionResetJobRecordSerializer: SDSSerializer { // MARK: - Record func asRecord() throws -> SDSRecord { - // let id: Int64? = model.sortId > 0 ? Int64(model.sortId) : nil let id: Int64? = model.grdbId?.int64Value let recordType: SDSRecordType = .sessionResetJobRecord diff --git a/SignalServiceKit/src/Storage/Jobs/SSKJobRecord+SDS.swift b/SignalServiceKit/src/Storage/Jobs/SSKJobRecord+SDS.swift index 67b14cc41b..989697bcc9 100644 --- a/SignalServiceKit/src/Storage/Jobs/SSKJobRecord+SDS.swift +++ b/SignalServiceKit/src/Storage/Jobs/SSKJobRecord+SDS.swift @@ -685,7 +685,6 @@ class SSKJobRecordSerializer: SDSSerializer { // MARK: - Record func asRecord() throws -> SDSRecord { - // let id: Int64? = model.sortId > 0 ? Int64(model.sortId) : nil let id: Int64? = model.grdbId?.int64Value let recordType: SDSRecordType = .jobRecord diff --git a/SignalServiceKit/src/Storage/SSKMessageSenderJobRecord+SDS.swift b/SignalServiceKit/src/Storage/SSKMessageSenderJobRecord+SDS.swift index a92a04ec30..fc03a9e757 100644 --- a/SignalServiceKit/src/Storage/SSKMessageSenderJobRecord+SDS.swift +++ b/SignalServiceKit/src/Storage/SSKMessageSenderJobRecord+SDS.swift @@ -55,7 +55,6 @@ class SSKMessageSenderJobRecordSerializer: SDSSerializer { // MARK: - Record func asRecord() throws -> SDSRecord { - // let id: Int64? = model.sortId > 0 ? Int64(model.sortId) : nil let id: Int64? = model.grdbId?.int64Value let recordType: SDSRecordType = .messageSenderJobRecord diff --git a/SignalServiceKit/src/Storage/TSDatabaseView.m b/SignalServiceKit/src/Storage/TSDatabaseView.m index 5d92d8d530..a0968f5a78 100644 --- a/SignalServiceKit/src/Storage/TSDatabaseView.m +++ b/SignalServiceKit/src/Storage/TSDatabaseView.m @@ -315,7 +315,7 @@ NSString *const TSLazyRestoreAttachmentsGroup = @"TSLazyRestoreAttachmentsGroup" } } - return [thread isArchivedWithTransaction:transaction.asAnyRead] ? TSArchiveGroup : TSInboxGroup; + return thread.isArchived ? TSArchiveGroup : TSInboxGroup; }]; YapDatabaseViewSorting *viewSorting = [self threadSorting]; diff --git a/SignalServiceKit/src/Util/ExperienceUpgrade+SDS.swift b/SignalServiceKit/src/Util/ExperienceUpgrade+SDS.swift index 36057661b0..ac1c7e1566 100644 --- a/SignalServiceKit/src/Util/ExperienceUpgrade+SDS.swift +++ b/SignalServiceKit/src/Util/ExperienceUpgrade+SDS.swift @@ -533,7 +533,6 @@ class ExperienceUpgradeSerializer: SDSSerializer { // MARK: - Record func asRecord() throws -> SDSRecord { - // let id: Int64? = nil let id: Int64? = model.grdbId?.int64Value let recordType: SDSRecordType = .experienceUpgrade diff --git a/SignalServiceKit/src/Util/OWSBackupFragment+SDS.swift b/SignalServiceKit/src/Util/OWSBackupFragment+SDS.swift index ef3fc56034..15f90ba484 100644 --- a/SignalServiceKit/src/Util/OWSBackupFragment+SDS.swift +++ b/SignalServiceKit/src/Util/OWSBackupFragment+SDS.swift @@ -578,7 +578,6 @@ class OWSBackupFragmentSerializer: SDSSerializer { // MARK: - Record func asRecord() throws -> SDSRecord { - // let id: Int64? = nil let id: Int64? = model.grdbId?.int64Value let recordType: SDSRecordType = .backupFragment diff --git a/SignalServiceKit/src/Util/OWSUserProfile+SDS.swift b/SignalServiceKit/src/Util/OWSUserProfile+SDS.swift index f6a51499d6..2fa6cda648 100644 --- a/SignalServiceKit/src/Util/OWSUserProfile+SDS.swift +++ b/SignalServiceKit/src/Util/OWSUserProfile+SDS.swift @@ -593,7 +593,6 @@ class OWSUserProfileSerializer: SDSSerializer { // MARK: - Record func asRecord() throws -> SDSRecord { - // let id: Int64? = nil let id: Int64? = model.grdbId?.int64Value let recordType: SDSRecordType = .userProfile diff --git a/SignalServiceKit/src/Util/TestModel+SDS.swift b/SignalServiceKit/src/Util/TestModel+SDS.swift index 49047ed5cc..b885c2976a 100644 --- a/SignalServiceKit/src/Util/TestModel+SDS.swift +++ b/SignalServiceKit/src/Util/TestModel+SDS.swift @@ -600,7 +600,6 @@ class TestModelSerializer: SDSSerializer { // MARK: - Record func asRecord() throws -> SDSRecord { - // let id: Int64? = nil let id: Int64? = model.grdbId?.int64Value let recordType: SDSRecordType = .testModel