From 32d5e52142564a30143b6781cab798abd897ac9e Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Wed, 24 May 2017 09:45:34 -0400 Subject: [PATCH] DRY up the creation of database views. // FREEBIE --- src/Storage/TSDatabaseView.m | 97 +++++++++++++----------------------- 1 file changed, 36 insertions(+), 61 deletions(-) diff --git a/src/Storage/TSDatabaseView.m b/src/Storage/TSDatabaseView.m index 229ede593..d31d70962 100644 --- a/src/Storage/TSDatabaseView.m +++ b/src/Storage/TSDatabaseView.m @@ -27,13 +27,31 @@ NSString *TSSecondaryDevicesDatabaseViewExtensionName = @"TSSecondaryDevicesData @implementation TSDatabaseView -+ (BOOL)registerUnreadDatabaseView { - YapDatabaseView *unreadView = - [[TSStorageManager sharedManager].database registeredExtension:TSUnreadDatabaseViewExtensionName]; - if (unreadView) { ++ (BOOL)registerMessageDatabaseViewWithName:(NSString *)viewName viewGrouping:(YapDatabaseViewGrouping *)viewGrouping +{ + OWSAssert(viewName.length > 0); + OWSAssert((viewGrouping)); + + YapDatabaseView *existingView = [[TSStorageManager sharedManager].database registeredExtension:viewName]; + if (existingView) { return YES; } + 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:viewName]; +} + ++ (BOOL)registerUnreadDatabaseView +{ YapDatabaseViewGrouping *viewGrouping = [YapDatabaseViewGrouping withObjectBlock:^NSString *( YapDatabaseReadTransaction *transaction, NSString *collection, NSString *key, id object) { if ([object conformsToProtocol:@protocol(OWSReadTracking)]) { @@ -45,28 +63,11 @@ NSString *TSSecondaryDevicesDatabaseViewExtensionName = @"TSSecondaryDevicesData 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:TSUnreadDatabaseViewExtensionName]; + return [self registerMessageDatabaseViewWithName:TSUnreadDatabaseViewExtensionName viewGrouping:viewGrouping]; } + (BOOL)registerDynamicMessagesDatabaseView { - YapDatabaseView *existingView = - [[TSStorageManager sharedManager].database registeredExtension:TSDynamicMessagesDatabaseViewExtensionName]; - if (existingView) { - return YES; - } - YapDatabaseViewGrouping *viewGrouping = [YapDatabaseViewGrouping withObjectBlock:^NSString *( YapDatabaseReadTransaction *transaction, NSString *collection, NSString *key, id object) { if ([object isKindOfClass:[TSInteraction class]]) { @@ -80,18 +81,21 @@ NSString *TSSecondaryDevicesDatabaseViewExtensionName = @"TSSecondaryDevicesData return nil; }]; - YapDatabaseViewSorting *viewSorting = [self messagesSorting]; - - YapDatabaseViewOptions *options = [[YapDatabaseViewOptions alloc] init]; - options.isPersistent = YES; - options.allowedCollections = - [[YapWhitelistBlacklist alloc] initWithWhitelist:[NSSet setWithObject:[TSInteraction collection]]]; + return + [self registerMessageDatabaseViewWithName:TSDynamicMessagesDatabaseViewExtensionName viewGrouping:viewGrouping]; +} - YapDatabaseView *view = - [[YapDatabaseView alloc] initWithGrouping:viewGrouping sorting:viewSorting versionTag:@"1" options:options]; ++ (BOOL)registerBuddyConversationDatabaseView +{ + 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 - withName:TSDynamicMessagesDatabaseViewExtensionName]; + return [self registerMessageDatabaseViewWithName:TSMessageDatabaseViewExtensionName viewGrouping:viewGrouping]; } + (BOOL)registerThreadDatabaseView { @@ -132,35 +136,6 @@ NSString *TSSecondaryDevicesDatabaseViewExtensionName = @"TSSecondaryDevicesData 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 *