|
|
|
@ -82,6 +82,7 @@ NSString *const TSSecondaryDevicesDatabaseViewExtensionName = @"TSSecondaryDevic
|
|
|
|
|
|
|
|
|
|
YapDatabaseView *existingView = [[TSStorageManager sharedManager].database registeredExtension:viewName];
|
|
|
|
|
if (existingView) {
|
|
|
|
|
OWSFail(@"Registered database view twice: %@", viewName);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -206,29 +207,37 @@ NSString *const TSSecondaryDevicesDatabaseViewExtensionName = @"TSSecondaryDevic
|
|
|
|
|
async:YES];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
+ (void)registerThreadDatabaseView
|
|
|
|
|
+ (void)asyncRegisterThreadDatabaseView
|
|
|
|
|
{
|
|
|
|
|
YapDatabaseView *threadView =
|
|
|
|
|
[[TSStorageManager sharedManager].database registeredExtension:TSThreadDatabaseViewExtensionName];
|
|
|
|
|
if (threadView) {
|
|
|
|
|
OWSFail(@"Registered database view twice: %@", TSThreadDatabaseViewExtensionName);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
YapDatabaseViewGrouping *viewGrouping = [YapDatabaseViewGrouping
|
|
|
|
|
withObjectBlock:^NSString *(
|
|
|
|
|
YapDatabaseReadTransaction *transaction, NSString *collection, NSString *key, id object) {
|
|
|
|
|
if ([object isKindOfClass:[TSThread class]]) {
|
|
|
|
|
TSThread *thread = (TSThread *)object;
|
|
|
|
|
if (thread.archivalDate) {
|
|
|
|
|
return ([self threadShouldBeInInbox:thread]) ? TSInboxGroup : TSArchiveGroup;
|
|
|
|
|
} else if (thread.archivalDate) {
|
|
|
|
|
return TSArchiveGroup;
|
|
|
|
|
} else {
|
|
|
|
|
return TSInboxGroup;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return nil;
|
|
|
|
|
}];
|
|
|
|
|
YapDatabaseViewGrouping *viewGrouping = [YapDatabaseViewGrouping withObjectBlock:^NSString *(
|
|
|
|
|
YapDatabaseReadTransaction *transaction, NSString *collection, NSString *key, id object) {
|
|
|
|
|
if (![object isKindOfClass:[TSThread class]]) {
|
|
|
|
|
return nil;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TSThread *thread = (TSThread *)object;
|
|
|
|
|
|
|
|
|
|
YapDatabaseViewTransaction *viewTransaction = [transaction ext:TSMessageDatabaseViewExtensionName];
|
|
|
|
|
NSUInteger threadMessageCount = [viewTransaction numberOfItemsInGroup:thread.uniqueId];
|
|
|
|
|
if (threadMessageCount < 1) {
|
|
|
|
|
return nil;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (thread.archivalDate) {
|
|
|
|
|
return ([self threadShouldBeInInbox:thread]) ? TSInboxGroup : TSArchiveGroup;
|
|
|
|
|
} else if (thread.archivalDate) {
|
|
|
|
|
return TSArchiveGroup;
|
|
|
|
|
} else {
|
|
|
|
|
return TSInboxGroup;
|
|
|
|
|
}
|
|
|
|
|
}];
|
|
|
|
|
|
|
|
|
|
YapDatabaseViewSorting *viewSorting = [self threadSorting];
|
|
|
|
|
|
|
|
|
@ -238,10 +247,17 @@ NSString *const TSSecondaryDevicesDatabaseViewExtensionName = @"TSSecondaryDevic
|
|
|
|
|
[[YapWhitelistBlacklist alloc] initWithWhitelist:[NSSet setWithObject:[TSThread collection]]];
|
|
|
|
|
|
|
|
|
|
YapDatabaseView *databaseView =
|
|
|
|
|
[[YapDatabaseView alloc] initWithGrouping:viewGrouping sorting:viewSorting versionTag:@"1" options:options];
|
|
|
|
|
[[YapDatabaseView alloc] initWithGrouping:viewGrouping sorting:viewSorting versionTag:@"2" options:options];
|
|
|
|
|
|
|
|
|
|
[[TSStorageManager sharedManager].database registerExtension:databaseView
|
|
|
|
|
withName:TSThreadDatabaseViewExtensionName];
|
|
|
|
|
[[TSStorageManager sharedManager].database
|
|
|
|
|
asyncRegisterExtension:databaseView
|
|
|
|
|
withName:TSThreadDatabaseViewExtensionName
|
|
|
|
|
completionBlock:^(BOOL ready) {
|
|
|
|
|
OWSCAssert(ready);
|
|
|
|
|
|
|
|
|
|
DDLogInfo(
|
|
|
|
|
@"%@ asyncRegisterExtension: %@ -> %d", self.tag, TSThreadDatabaseViewExtensionName, ready);
|
|
|
|
|
}];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|