diff --git a/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/DatabasesManager.mm b/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/DatabasesManager.mm index 3e1b64f00..7447aa551 100644 --- a/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/DatabasesManager.mm +++ b/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/DatabasesManager.mm @@ -9,6 +9,8 @@ #import #import #import +#include +#import "DatabaseDescriptor.h" #import "DatabaseDriver.h" @interface DatabasesManager () @@ -46,11 +48,78 @@ } - (void)listenForCommands { - // TODO(fulvioabrahao) implement commands. [self.connection receive:@"databaseList" + withBlock:^(NSDictionary* params, id responder) { + NSInteger databaseId = 1; + [self.databaseDescriptorHolders removeAllObjects]; + [self.databaseDescriptorHolderSet removeAllObjects]; + + for (id databaseDriver in self.databaseDrivers) { + NSArray>* databaseDescriptorList = + [databaseDriver getDatabases]; + for (id databaseDescriptor in + databaseDescriptorList) { + DatabaseDescriptorHolder* databaseDescriptorHolder = + [[DatabaseDescriptorHolder alloc] + initWithIdentifier:databaseId + databaseDriver:databaseDriver + databaseDescriptor:databaseDescriptor]; + self.databaseDescriptorHolders[@(databaseId)] = + databaseDescriptorHolder; + [self.databaseDescriptorHolderSet + addObject:databaseDescriptorHolder]; + databaseId++; + } + } + + NSDictionary* result = [DatabasesManager + databaseListToDictionary:self.databaseDescriptorHolderSet]; + [responder success:result]; + }]; + + [self.connection + receive:@"getTableData" withBlock:^(NSDictionary* params, id responder){ }]; + + [self.connection + receive:@"getTableStructure" + withBlock:^(NSDictionary* params, id responder){ + }]; + + [self.connection + receive:@"getTableInfo" + withBlock:^(NSDictionary* params, id responder){ + }]; + + [self.connection + receive:@"execute" + withBlock:^(NSDictionary* params, id responder){ + }]; +} + ++ (NSDictionary*)databaseListToDictionary: + (NSSet*)databaseDescriptorHolderSet { + NSMutableDictionary* resultDict = [NSMutableDictionary new]; + + for (DatabaseDescriptorHolder* descriptorHolder in + databaseDescriptorHolderSet) { + NSArray* tableNameList = [descriptorHolder.databaseDriver + getTableNames:descriptorHolder.databaseDescriptor]; + NSArray* sortedTableNames = + [tableNameList sortedArrayUsingSelector:@selector(compare:)]; + NSString* idString = + [NSString stringWithFormat:@"%ld", descriptorHolder.identifier]; + NSDictionary* databaseDict = @{ + @"id" : idString, + @"name" : descriptorHolder.databaseDescriptor.name, + @"tables" : sortedTableNames + }; + [resultDict setObject:databaseDict forKey:idString]; + } + + return resultDict; } @end diff --git a/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin.mm b/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin.mm index 53316e8df..7f6c4da20 100644 --- a/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin.mm +++ b/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin.mm @@ -12,6 +12,7 @@ #import #import "DatabaseDriver.h" #import "DatabasesManager.h" +#import "MockDatabaseDriver.h" @interface FlipperKitDatabasesPlugin () @property(strong, nonatomic) id connection; @@ -22,7 +23,8 @@ - (instancetype)init { if (self = [super init]) { - NSArray>* databaseDrivers = @[]; + NSArray>* databaseDrivers = + @[ [MockDatabaseDriver new] ]; _databasesManager = [[DatabasesManager alloc] initWithDatabaseDrivers:databaseDrivers]; } diff --git a/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/MockDatabaseDescriptor.h b/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/MockDatabaseDescriptor.h new file mode 100644 index 000000000..763c8e092 --- /dev/null +++ b/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/MockDatabaseDescriptor.h @@ -0,0 +1,13 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#import +#import "DatabaseDescriptor.h" + +@interface MockDatabaseDescriptor : NSObject + +@end diff --git a/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/MockDatabaseDescriptor.m b/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/MockDatabaseDescriptor.m new file mode 100644 index 000000000..4dc3d7a0b --- /dev/null +++ b/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/MockDatabaseDescriptor.m @@ -0,0 +1,16 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#import "MockDatabaseDescriptor.h" + +@implementation MockDatabaseDescriptor + +- (NSString*)name { + return @"MockDatabase"; +} + +@end diff --git a/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/MockDatabaseDriver.h b/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/MockDatabaseDriver.h new file mode 100644 index 000000000..bd62e9812 --- /dev/null +++ b/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/MockDatabaseDriver.h @@ -0,0 +1,13 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#import +#import "DatabaseDriver.h" + +@interface MockDatabaseDriver : NSObject + +@end diff --git a/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/MockDatabaseDriver.m b/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/MockDatabaseDriver.m new file mode 100644 index 000000000..d8b8ae324 --- /dev/null +++ b/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/MockDatabaseDriver.m @@ -0,0 +1,26 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#import "MockDatabaseDriver.h" +#import "MockDatabaseDescriptor.h" + +@implementation MockDatabaseDriver + +- (NSArray>*)getDatabases { + MockDatabaseDescriptor* mockDescriptor = + [[MockDatabaseDescriptor alloc] init]; + return @[ mockDescriptor ]; +} + +- (NSArray*)getTableNames: + (id)databaseDescriptor { + return @[ @"MockTable1", @"MockTable2" ]; +} + +@synthesize databaseDescriptor; + +@end