diff --git a/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/DatabaseDescriptor.h b/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/DatabaseDescriptor.h new file mode 100644 index 000000000..e6509a682 --- /dev/null +++ b/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/DatabaseDescriptor.h @@ -0,0 +1,10 @@ +/* + * 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. + */ + +@protocol DatabaseDescriptor +- (NSString*)name; +@end diff --git a/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/DatabaseDriver.h b/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/DatabaseDriver.h new file mode 100644 index 000000000..873d5f6bf --- /dev/null +++ b/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/DatabaseDriver.h @@ -0,0 +1,19 @@ +/* + * 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 + +@protocol DatabaseDescriptor; + +@protocol DatabaseDriver +@property(nonatomic, strong, readonly) id + databaseDescriptor; + +- (NSArray>*)getDatabases; +- (NSArray*)getTableNames:(id)databaseDescriptor; + +@end diff --git a/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/DatabasesManager.h b/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/DatabasesManager.h new file mode 100644 index 000000000..ec850e11b --- /dev/null +++ b/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/DatabasesManager.h @@ -0,0 +1,83 @@ +/* + * 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 + +@protocol DatabaseDriver; +@protocol DatabaseDescriptor; +@protocol FlipperConnection; + +@interface DatabasesManager : NSObject + +@property(nonatomic, strong) id connection; +@property(nonatomic, strong, readonly) + NSArray>* databaseDrivers; + +- (instancetype)initWithDatabaseDrivers: + (NSArray>*)databaseDrivers; +- (void)setConnection:(id)connection; +- (BOOL)isConnected; + +@end + +@interface DatabaseDescriptorHolder : NSObject + +@property(nonatomic, assign, readonly) NSInteger identifier; +@property(nonatomic, strong, readonly) id databaseDriver; +@property(nonatomic, strong, readonly) id + databaseDescriptor; + +- (instancetype)initWithIdentifier:(NSInteger)identifier + databaseDriver:(id)databaseDriver + databaseDescriptor:(id)databaseDescriptor; + +@end + +@interface ExecuteSqlRequest : NSObject + +@property(nonatomic, assign, readonly) NSInteger databaseId; +@property(nonatomic, copy, readonly) NSString* value; + +- (instancetype)initWithDatabaseId:(NSInteger)databaseId value:(NSString*)value; + +@end + +@interface GetTableDataRequest : NSObject + +@property(nonatomic, assign, readonly) NSInteger databaseId; +@property(nonatomic, copy, readonly) NSString* table; +@property(nonatomic, copy, readonly) NSString* order; +@property(nonatomic, assign, readonly) BOOL reverse; +@property(nonatomic, assign, readonly) NSInteger start; +@property(nonatomic, assign, readonly) NSInteger count; + +- (instancetype)initWithDatabaseId:(NSInteger)databaseId + table:(NSString*)table + order:(NSString*)order + reverse:(BOOL)reverse + start:(NSInteger)start + count:(NSInteger)count; + +@end + +@interface GetTableStructureRequest : NSObject + +@property(nonatomic, assign, readonly) NSInteger databaseId; +@property(nonatomic, copy, readonly) NSString* table; + +- (instancetype)initWithDatabaseId:(NSInteger)databaseId table:(NSString*)table; + +@end + +@interface GetTableInfoRequest : NSObject + +@property(nonatomic, assign, readonly) NSInteger databaseId; +@property(nonatomic, copy, readonly) NSString* table; + +- (instancetype)initWithDatabaseId:(NSInteger)databaseId table:(NSString*)table; + +@end diff --git a/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/DatabasesManager.mm b/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/DatabasesManager.mm new file mode 100644 index 000000000..3e1b64f00 --- /dev/null +++ b/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/DatabasesManager.mm @@ -0,0 +1,136 @@ +/* + * 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 "DatabasesManager.h" +#import +#import +#import +#import "DatabaseDriver.h" + +@interface DatabasesManager () + +@property(nonatomic, strong) + NSMutableDictionary* + databaseDescriptorHolders; +@property(nonatomic, strong) + NSMutableSet* databaseDescriptorHolderSet; + +@end + +@implementation DatabasesManager + +- (instancetype)initWithDatabaseDrivers: + (NSArray>*)databaseDrivers { + self = [super init]; + if (self) { + _databaseDrivers = [databaseDrivers copy]; + _databaseDescriptorHolders = [[NSMutableDictionary alloc] init]; + _databaseDescriptorHolderSet = [[NSMutableSet alloc] init]; + } + return self; +} + +- (void)setConnection:(id)connection { + _connection = connection; + if (connection) { + [self listenForCommands]; + } +} + +- (BOOL)isConnected { + return _connection != nil; +} + +- (void)listenForCommands { + // TODO(fulvioabrahao) implement commands. + [self.connection + receive:@"databaseList" + withBlock:^(NSDictionary* params, id responder){ + }]; +} + +@end + +@implementation DatabaseDescriptorHolder + +- (instancetype)initWithIdentifier:(NSInteger)identifier + databaseDriver:(id)databaseDriver + databaseDescriptor:(id)databaseDescriptor { + self = [super init]; + if (self) { + _identifier = identifier; + _databaseDriver = databaseDriver; + _databaseDescriptor = databaseDescriptor; + } + return self; +} + +@end + +@implementation ExecuteSqlRequest + +- (instancetype)initWithDatabaseId:(NSInteger)databaseId + value:(NSString*)value { + self = [super init]; + if (self) { + _databaseId = databaseId; + _value = [value copy]; + } + return self; +} + +@end + +@implementation GetTableDataRequest + +- (instancetype)initWithDatabaseId:(NSInteger)databaseId + table:(NSString*)table + order:(NSString*)order + reverse:(BOOL)reverse + start:(NSInteger)start + count:(NSInteger)count { + self = [super init]; + if (self) { + _databaseId = databaseId; + _table = [table copy]; + _order = [order copy]; + _reverse = reverse; + _start = start; + _count = count; + } + return self; +} + +@end + +@implementation GetTableStructureRequest + +- (instancetype)initWithDatabaseId:(NSInteger)databaseId + table:(NSString*)table { + self = [super init]; + if (self) { + _databaseId = databaseId; + _table = [table copy]; + } + return self; +} + +@end + +@implementation GetTableInfoRequest + +- (instancetype)initWithDatabaseId:(NSInteger)databaseId + table:(NSString*)table { + self = [super init]; + if (self) { + _databaseId = databaseId; + _table = [table copy]; + } + return self; +} + +@end diff --git a/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin.h b/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin.h index db09070de..41f563b27 100644 --- a/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin.h +++ b/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin.h @@ -8,7 +8,11 @@ #import #import +@class DatabasesManager; + @interface FlipperKitDatabasesPlugin : NSObject +@property(nonatomic, strong) DatabasesManager* databasesManager; + - (instancetype)init NS_UNAVAILABLE; + (instancetype)sharedInstance; diff --git a/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin.mm b/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin.mm index a5cfaf72d..53316e8df 100644 --- a/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin.mm +++ b/iOS/Plugins/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin/FlipperKitDatabasesPlugin.mm @@ -10,6 +10,8 @@ #import #import #import +#import "DatabaseDriver.h" +#import "DatabasesManager.h" @interface FlipperKitDatabasesPlugin () @property(strong, nonatomic) id connection; @@ -20,6 +22,9 @@ - (instancetype)init { if (self = [super init]) { + NSArray>* databaseDrivers = @[]; + _databasesManager = + [[DatabasesManager alloc] initWithDatabaseDrivers:databaseDrivers]; } return self; } @@ -37,56 +42,11 @@ - (void)didConnect:(id)connection { self.connection = connection; - - // Define connection event handlers - - // databaseList - [connection - receive:@"databaseList" - withBlock:^(NSDictionary* params, id responder) { - NSMutableDictionary* response = [NSMutableDictionary dictionary]; - - response[@1] = @{ - @"id" : @1, - @"name" : @"Provider1", - @"tables" : @[ @"Table1_1", @"Table1_2", @"Table1_3" ] - }; - response[@2] = @{ - @"id" : @2, - @"name" : @"Provider2", - @"tables" : @[ @"Table2_1", @"Table2_2" ] - }; - response[@3] = - @{@"id" : @3, - @"name" : @"Provider3", - @"tables" : @[ @"Table3_1" ]}; - [responder success:response]; - }]; - - // getTableData - [connection receive:@"getTableData" - withBlock:^(NSDictionary* params, id responder){ - - }]; - - // getTableStructure - [connection receive:@"getTableStructure" - withBlock:^(NSDictionary* params, id responder){ - }]; - - // getTableInfo - [connection receive:@"getTableInfo" - withBlock:^(NSDictionary* params, id responder){ - }]; - - // execute - [connection receive:@"execute" - withBlock:^(NSDictionary*, id responder){ - }]; + [self.databasesManager setConnection:connection]; } - (void)didDisconnect { - self.connection = nil; + [self.databasesManager setConnection:nil]; } - (NSString*)identifier { @@ -94,7 +54,7 @@ } - (BOOL)runInBackground { - return YES; + return NO; } @end