Merge branch 'charlesmchen/databaseViewTypeChecking'

pull/1/head
Matthew Chen 7 years ago
commit c7714b09ab

@ -127,13 +127,14 @@ NSString *const TSLazyRestoreAttachmentsGroup = @"TSLazyRestoreAttachmentsGroup"
{ {
YapDatabaseViewGrouping *viewGrouping = [YapDatabaseViewGrouping withObjectBlock:^NSString *( YapDatabaseViewGrouping *viewGrouping = [YapDatabaseViewGrouping withObjectBlock:^NSString *(
YapDatabaseReadTransaction *transaction, NSString *collection, NSString *key, id object) { YapDatabaseReadTransaction *transaction, NSString *collection, NSString *key, id object) {
OWSAssert([object isKindOfClass:[TSInteraction class]]); if (![object isKindOfClass:[TSInteraction class]]) {
OWSProdLogAndFail(@"%@ Unexpected entity %@ in collection: %@", self.logTag, [object class], collection);
return nil;
}
TSInteraction *interaction = (TSInteraction *)object; TSInteraction *interaction = (TSInteraction *)object;
if ([interaction isDynamicInteraction]) { if ([interaction isDynamicInteraction]) {
return interaction.uniqueThreadId; return interaction.uniqueThreadId;
} else if ([object isKindOfClass:[TSInvalidIdentityKeyErrorMessage class]]) { } else if ([object isKindOfClass:[TSInvalidIdentityKeyErrorMessage class]]) {
TSInteraction *interaction = (TSInteraction *)object;
return interaction.uniqueThreadId; return interaction.uniqueThreadId;
} else if ([object isKindOfClass:[TSErrorMessage class]]) { } else if ([object isKindOfClass:[TSErrorMessage class]]) {
TSErrorMessage *errorMessage = (TSErrorMessage *)object; TSErrorMessage *errorMessage = (TSErrorMessage *)object;
@ -154,9 +155,12 @@ NSString *const TSLazyRestoreAttachmentsGroup = @"TSLazyRestoreAttachmentsGroup"
{ {
YapDatabaseViewGrouping *viewGrouping = [YapDatabaseViewGrouping withObjectBlock:^NSString *( YapDatabaseViewGrouping *viewGrouping = [YapDatabaseViewGrouping withObjectBlock:^NSString *(
YapDatabaseReadTransaction *transaction, NSString *collection, NSString *key, id object) { YapDatabaseReadTransaction *transaction, NSString *collection, NSString *key, id object) {
OWSAssert([object isKindOfClass:[TSInteraction class]]); if (![object isKindOfClass:[TSInteraction class]]) {
OWSProdLogAndFail(@"%@ Unexpected entity %@ in collection: %@", self.logTag, [object class], collection);
return nil;
}
TSInteraction *interaction = (TSInteraction *)object; TSInteraction *interaction = (TSInteraction *)object;
return interaction.uniqueThreadId; return interaction.uniqueThreadId;
}]; }];
@ -193,9 +197,9 @@ NSString *const TSLazyRestoreAttachmentsGroup = @"TSLazyRestoreAttachmentsGroup"
YapDatabaseViewGrouping *viewGrouping = [YapDatabaseViewGrouping withObjectBlock:^NSString *( YapDatabaseViewGrouping *viewGrouping = [YapDatabaseViewGrouping withObjectBlock:^NSString *(
YapDatabaseReadTransaction *transaction, NSString *collection, NSString *key, id object) { YapDatabaseReadTransaction *transaction, NSString *collection, NSString *key, id object) {
if (![object isKindOfClass:[TSThread class]]) { if (![object isKindOfClass:[TSThread class]]) {
OWSProdLogAndFail(@"%@ Unexpected entity %@ in collection: %@", self.logTag, [object class], collection);
return nil; return nil;
} }
TSThread *thread = (TSThread *)object; TSThread *thread = (TSThread *)object;
if (thread.isGroupThread) { if (thread.isGroupThread) {
@ -258,43 +262,52 @@ NSString *const TSLazyRestoreAttachmentsGroup = @"TSLazyRestoreAttachmentsGroup"
+ (YapDatabaseViewSorting *)threadSorting { + (YapDatabaseViewSorting *)threadSorting {
return [YapDatabaseViewSorting withObjectBlock:^NSComparisonResult(YapDatabaseReadTransaction *transaction, return [YapDatabaseViewSorting withObjectBlock:^NSComparisonResult(YapDatabaseReadTransaction *transaction,
NSString *group, NSString *group,
NSString *collection1, NSString *collection1,
NSString *key1, NSString *key1,
id object1, id object1,
NSString *collection2, NSString *collection2,
NSString *key2, NSString *key2,
id object2) { id object2) {
if ([group isEqualToString:TSArchiveGroup] || [group isEqualToString:TSInboxGroup]) { if (![object1 isKindOfClass:[TSThread class]]) {
if ([object1 isKindOfClass:[TSThread class]] && [object2 isKindOfClass:[TSThread class]]) { OWSProdLogAndFail(@"%@ Unexpected entity %@ in collection: %@", self.logTag, [object1 class], collection1);
TSThread *thread1 = (TSThread *)object1; return NSOrderedSame;
TSThread *thread2 = (TSThread *)object2; }
if (![object2 isKindOfClass:[TSThread class]]) {
return [thread1.lastMessageDate compare:thread2.lastMessageDate]; OWSProdLogAndFail(@"%@ Unexpected entity %@ in collection: %@", self.logTag, [object2 class], collection2);
} return NSOrderedSame;
} }
TSThread *thread1 = (TSThread *)object1;
return NSOrderedSame; TSThread *thread2 = (TSThread *)object2;
if ([group isEqualToString:TSArchiveGroup] || [group isEqualToString:TSInboxGroup]) {
return [thread1.lastMessageDate compare:thread2.lastMessageDate];
}
return NSOrderedSame;
}]; }];
} }
+ (YapDatabaseViewSorting *)messagesSorting { + (YapDatabaseViewSorting *)messagesSorting {
return [YapDatabaseViewSorting withObjectBlock:^NSComparisonResult(YapDatabaseReadTransaction *transaction, return [YapDatabaseViewSorting withObjectBlock:^NSComparisonResult(YapDatabaseReadTransaction *transaction,
NSString *group, NSString *group,
NSString *collection1, NSString *collection1,
NSString *key1, NSString *key1,
id object1, id object1,
NSString *collection2, NSString *collection2,
NSString *key2, NSString *key2,
id object2) { id object2) {
if ([object1 isKindOfClass:[TSInteraction class]] && [object2 isKindOfClass:[TSInteraction class]]) { if (![object1 isKindOfClass:[TSInteraction class]]) {
TSInteraction *message1 = (TSInteraction *)object1; OWSProdLogAndFail(@"%@ Unexpected entity %@ in collection: %@", self.logTag, [object1 class], collection1);
TSInteraction *message2 = (TSInteraction *)object2; return NSOrderedSame;
}
return [message1 compareForSorting:message2]; if (![object2 isKindOfClass:[TSInteraction class]]) {
} OWSProdLogAndFail(@"%@ Unexpected entity %@ in collection: %@", self.logTag, [object2 class], collection2);
return NSOrderedSame;
return NSOrderedSame; }
TSInteraction *message1 = (TSInteraction *)object1;
TSInteraction *message2 = (TSInteraction *)object2;
return [message1 compareForSorting:message2];
}]; }];
} }
@ -302,33 +315,39 @@ NSString *const TSLazyRestoreAttachmentsGroup = @"TSLazyRestoreAttachmentsGroup"
{ {
YapDatabaseViewGrouping *viewGrouping = [YapDatabaseViewGrouping withObjectBlock:^NSString *_Nullable( YapDatabaseViewGrouping *viewGrouping = [YapDatabaseViewGrouping withObjectBlock:^NSString *_Nullable(
YapDatabaseReadTransaction *transaction, NSString *collection, NSString *key, id object) { YapDatabaseReadTransaction *transaction, NSString *collection, NSString *key, id object) {
if ([object isKindOfClass:[OWSDevice class]]) { if (![object isKindOfClass:[OWSDevice class]]) {
OWSDevice *device = (OWSDevice *)object; OWSProdLogAndFail(@"%@ Unexpected entity %@ in collection: %@", self.logTag, [object class], collection);
if (![device isPrimaryDevice]) { return nil;
return TSSecondaryDevicesGroup; }
} OWSDevice *device = (OWSDevice *)object;
if (![device isPrimaryDevice]) {
return TSSecondaryDevicesGroup;
} }
return nil; return nil;
}]; }];
YapDatabaseViewSorting *viewSorting = YapDatabaseViewSorting *viewSorting = [YapDatabaseViewSorting withObjectBlock:^NSComparisonResult(
[YapDatabaseViewSorting withObjectBlock:^NSComparisonResult(YapDatabaseReadTransaction *transaction, YapDatabaseReadTransaction *transaction,
NSString *group, NSString *group,
NSString *collection1, NSString *collection1,
NSString *key1, NSString *key1,
id object1, id object1,
NSString *collection2, NSString *collection2,
NSString *key2, NSString *key2,
id object2) { id object2) {
if ([object1 isKindOfClass:[OWSDevice class]] && [object2 isKindOfClass:[OWSDevice class]]) { if (![object1 isKindOfClass:[OWSDevice class]]) {
OWSDevice *device1 = (OWSDevice *)object1; OWSProdLogAndFail(@"%@ Unexpected entity %@ in collection: %@", self.logTag, [object1 class], collection1);
OWSDevice *device2 = (OWSDevice *)object2; return NSOrderedSame;
}
return [device2.createdAt compare:device1.createdAt]; if (![object2 isKindOfClass:[OWSDevice class]]) {
} OWSProdLogAndFail(@"%@ Unexpected entity %@ in collection: %@", self.logTag, [object2 class], collection2);
return NSOrderedSame; return NSOrderedSame;
}]; }
OWSDevice *device1 = (OWSDevice *)object1;
OWSDevice *device2 = (OWSDevice *)object2;
return [device2.createdAt compare:device1.createdAt];
}];
YapDatabaseViewOptions *options = [YapDatabaseViewOptions new]; YapDatabaseViewOptions *options = [YapDatabaseViewOptions new];
options.isPersistent = YES; options.isPersistent = YES;
@ -371,11 +390,11 @@ NSString *const TSLazyRestoreAttachmentsGroup = @"TSLazyRestoreAttachmentsGroup"
NSString *collection2, NSString *collection2,
NSString *key2, NSString *key2,
id object2) { id object2) {
if (![object1 isKindOfClass:[TSAttachment class]]) { if (![object1 isKindOfClass:[TSAttachmentStream class]]) {
OWSProdLogAndFail(@"%@ Unexpected entity %@ in collection: %@", self.logTag, [object1 class], collection1); OWSProdLogAndFail(@"%@ Unexpected entity %@ in collection: %@", self.logTag, [object1 class], collection1);
return NSOrderedSame; return NSOrderedSame;
} }
if (![object2 isKindOfClass:[TSAttachment class]]) { if (![object2 isKindOfClass:[TSAttachmentStream class]]) {
OWSProdLogAndFail(@"%@ Unexpected entity %@ in collection: %@", self.logTag, [object2 class], collection2); OWSProdLogAndFail(@"%@ Unexpected entity %@ in collection: %@", self.logTag, [object2 class], collection2);
return NSOrderedSame; return NSOrderedSame;
} }

Loading…
Cancel
Save