From 6f03c2d92fea03b40882d1ae2844de7c05d02080 Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Wed, 2 Aug 2017 14:18:27 -0400 Subject: [PATCH] =?UTF-8?q?Don=E2=80=99t=20hide=20threads=20if=20they=20ar?= =?UTF-8?q?e=20a=20group=20thread,=20or=20if=20they=20have=20=5Fever=5F=20?= =?UTF-8?q?had=20a=20message.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit // FREEBIE --- SignalServiceKit/src/Contacts/TSThread.h | 3 +++ SignalServiceKit/src/Contacts/TSThread.m | 2 ++ SignalServiceKit/src/Storage/TSDatabaseView.m | 18 ++++++++++++------ 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/SignalServiceKit/src/Contacts/TSThread.h b/SignalServiceKit/src/Contacts/TSThread.h index 7a25f0882..fd9bcf55e 100644 --- a/SignalServiceKit/src/Contacts/TSThread.h +++ b/SignalServiceKit/src/Contacts/TSThread.h @@ -16,6 +16,9 @@ NS_ASSUME_NONNULL_BEGIN @interface TSThread : TSYapDatabaseObject +// YES IFF this thread has ever had a message. +@property (nonatomic) BOOL hasEverHadMessage; + /** * Whether the object is a group thread or not. * diff --git a/SignalServiceKit/src/Contacts/TSThread.m b/SignalServiceKit/src/Contacts/TSThread.m index ff67a2c29..8acc9eead 100644 --- a/SignalServiceKit/src/Contacts/TSThread.m +++ b/SignalServiceKit/src/Contacts/TSThread.m @@ -321,6 +321,8 @@ NS_ASSUME_NONNULL_BEGIN return; } + self.hasEverHadMessage = YES; + NSDate *lastMessageDate = [lastMessage dateForSorting]; if (!_lastMessageDate || [lastMessageDate timeIntervalSinceDate:self.lastMessageDate] > 0) { _lastMessageDate = lastMessageDate; diff --git a/SignalServiceKit/src/Storage/TSDatabaseView.m b/SignalServiceKit/src/Storage/TSDatabaseView.m index dabede30b..35ed412d5 100644 --- a/SignalServiceKit/src/Storage/TSDatabaseView.m +++ b/SignalServiceKit/src/Storage/TSDatabaseView.m @@ -224,11 +224,17 @@ NSString *const TSSecondaryDevicesDatabaseViewExtensionName = @"TSSecondaryDevic TSThread *thread = (TSThread *)object; - YapDatabaseViewTransaction *viewTransaction = [transaction ext:TSMessageDatabaseViewExtensionName]; - OWSAssert(viewTransaction); - NSUInteger threadMessageCount = [viewTransaction numberOfItemsInGroup:thread.uniqueId]; - if (threadMessageCount < 1) { - return nil; + if (thread.isGroupThread) { + // Do nothing; we never hide group threads. + } else if (thread.hasEverHadMessage) { + // Do nothing; we never hide threads that have ever had a message. + } else { + YapDatabaseViewTransaction *viewTransaction = [transaction ext:TSMessageDatabaseViewExtensionName]; + OWSAssert(viewTransaction); + NSUInteger threadMessageCount = [viewTransaction numberOfItemsInGroup:thread.uniqueId]; + if (threadMessageCount < 1) { + return nil; + } } if (thread.archivalDate) { @@ -248,7 +254,7 @@ NSString *const TSSecondaryDevicesDatabaseViewExtensionName = @"TSSecondaryDevic [[YapWhitelistBlacklist alloc] initWithWhitelist:[NSSet setWithObject:[TSThread collection]]]; YapDatabaseView *databaseView = - [[YapDatabaseView alloc] initWithGrouping:viewGrouping sorting:viewSorting versionTag:@"2" options:options]; + [[YapDatabaseView alloc] initWithGrouping:viewGrouping sorting:viewSorting versionTag:@"3" options:options]; [[TSStorageManager sharedManager].database registerExtension:databaseView withName:TSThreadDatabaseViewExtensionName];