DRY up the creation of database views.

// FREEBIE
pull/1/head
Matthew Chen 8 years ago
parent 6e94b3cccb
commit 32d5e52142

@ -27,23 +27,15 @@ NSString *TSSecondaryDevicesDatabaseViewExtensionName = @"TSSecondaryDevicesData
@implementation TSDatabaseView @implementation TSDatabaseView
+ (BOOL)registerUnreadDatabaseView { + (BOOL)registerMessageDatabaseViewWithName:(NSString *)viewName viewGrouping:(YapDatabaseViewGrouping *)viewGrouping
YapDatabaseView *unreadView = {
[[TSStorageManager sharedManager].database registeredExtension:TSUnreadDatabaseViewExtensionName]; OWSAssert(viewName.length > 0);
if (unreadView) { OWSAssert((viewGrouping));
return YES;
}
YapDatabaseViewGrouping *viewGrouping = [YapDatabaseViewGrouping withObjectBlock:^NSString *( YapDatabaseView *existingView = [[TSStorageManager sharedManager].database registeredExtension:viewName];
YapDatabaseReadTransaction *transaction, NSString *collection, NSString *key, id object) { if (existingView) {
if ([object conformsToProtocol:@protocol(OWSReadTracking)]) { return YES;
id<OWSReadTracking> possiblyRead = (id<OWSReadTracking>)object;
if (possiblyRead.read == NO) {
return possiblyRead.uniqueThreadId;
}
} }
return nil;
}];
YapDatabaseViewSorting *viewSorting = [self messagesSorting]; YapDatabaseViewSorting *viewSorting = [self messagesSorting];
@ -55,18 +47,27 @@ NSString *TSSecondaryDevicesDatabaseViewExtensionName = @"TSSecondaryDevicesData
YapDatabaseView *view = YapDatabaseView *view =
[[YapDatabaseView alloc] initWithGrouping:viewGrouping sorting:viewSorting versionTag:@"1" options:options]; [[YapDatabaseView alloc] initWithGrouping:viewGrouping sorting:viewSorting versionTag:@"1" options:options];
return return [[TSStorageManager sharedManager].database registerExtension:view withName:viewName];
[[TSStorageManager sharedManager].database registerExtension:view withName:TSUnreadDatabaseViewExtensionName];
} }
+ (BOOL)registerDynamicMessagesDatabaseView + (BOOL)registerUnreadDatabaseView
{ {
YapDatabaseView *existingView = YapDatabaseViewGrouping *viewGrouping = [YapDatabaseViewGrouping withObjectBlock:^NSString *(
[[TSStorageManager sharedManager].database registeredExtension:TSDynamicMessagesDatabaseViewExtensionName]; YapDatabaseReadTransaction *transaction, NSString *collection, NSString *key, id object) {
if (existingView) { if ([object conformsToProtocol:@protocol(OWSReadTracking)]) {
return YES; id<OWSReadTracking> possiblyRead = (id<OWSReadTracking>)object;
if (possiblyRead.read == NO) {
return possiblyRead.uniqueThreadId;
}
}
return nil;
}];
return [self registerMessageDatabaseViewWithName:TSUnreadDatabaseViewExtensionName viewGrouping:viewGrouping];
} }
+ (BOOL)registerDynamicMessagesDatabaseView
{
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:[TSInteraction class]]) { if ([object isKindOfClass:[TSInteraction class]]) {
@ -80,18 +81,21 @@ NSString *TSSecondaryDevicesDatabaseViewExtensionName = @"TSSecondaryDevicesData
return nil; return nil;
}]; }];
YapDatabaseViewSorting *viewSorting = [self messagesSorting]; return
[self registerMessageDatabaseViewWithName:TSDynamicMessagesDatabaseViewExtensionName viewGrouping:viewGrouping];
YapDatabaseViewOptions *options = [[YapDatabaseViewOptions alloc] init]; }
options.isPersistent = YES;
options.allowedCollections =
[[YapWhitelistBlacklist alloc] initWithWhitelist:[NSSet setWithObject:[TSInteraction collection]]];
YapDatabaseView *view = + (BOOL)registerBuddyConversationDatabaseView
[[YapDatabaseView alloc] initWithGrouping:viewGrouping sorting:viewSorting versionTag:@"1" options:options]; {
YapDatabaseViewGrouping *viewGrouping = [YapDatabaseViewGrouping withObjectBlock:^NSString *(
YapDatabaseReadTransaction *transaction, NSString *collection, NSString *key, id object) {
if ([object isKindOfClass:[TSInteraction class]]) {
return ((TSInteraction *)object).uniqueThreadId;
}
return nil;
}];
return [[TSStorageManager sharedManager].database registerExtension:view return [self registerMessageDatabaseViewWithName:TSMessageDatabaseViewExtensionName viewGrouping:viewGrouping];
withName:TSDynamicMessagesDatabaseViewExtensionName];
} }
+ (BOOL)registerThreadDatabaseView { + (BOOL)registerThreadDatabaseView {
@ -132,35 +136,6 @@ NSString *TSSecondaryDevicesDatabaseViewExtensionName = @"TSSecondaryDevicesData
withName:TSThreadDatabaseViewExtensionName]; withName:TSThreadDatabaseViewExtensionName];
} }
+ (BOOL)registerBuddyConversationDatabaseView {
if ([[TSStorageManager sharedManager].database registeredExtension:TSMessageDatabaseViewExtensionName]) {
return YES;
}
YapDatabaseViewGrouping *viewGrouping = [YapDatabaseViewGrouping
withObjectBlock:^NSString *(
YapDatabaseReadTransaction *transaction, NSString *collection, NSString *key, id object) {
if ([object isKindOfClass:[TSInteraction class]]) {
return ((TSInteraction *)object).uniqueThreadId;
}
return nil;
}];
YapDatabaseViewSorting *viewSorting = [self messagesSorting];
YapDatabaseViewOptions *options = [[YapDatabaseViewOptions alloc] init];
options.isPersistent = YES;
options.allowedCollections =
[[YapWhitelistBlacklist alloc] initWithWhitelist:[NSSet setWithObject:[TSInteraction collection]]];
YapDatabaseView *view =
[[YapDatabaseView alloc] initWithGrouping:viewGrouping sorting:viewSorting versionTag:@"1" options:options];
return
[[TSStorageManager sharedManager].database registerExtension:view withName:TSMessageDatabaseViewExtensionName];
}
/** /**
* Determines whether a thread belongs to the archive or inbox * Determines whether a thread belongs to the archive or inbox
* *

Loading…
Cancel
Save