267 lines
7.9 KiB
Objective-C
267 lines
7.9 KiB
Objective-C
#import "RCTStatus.h"
|
|
#import "React/RCTBridge.h"
|
|
#import "React/RCTEventDispatcher.h"
|
|
#import "Statusgo.h"
|
|
#import "StatusBackendClient.h"
|
|
#import "Utils.h"
|
|
|
|
static RCTBridge *bridge;
|
|
|
|
@implementation Status
|
|
|
|
+ (Status *)sharedInstance {
|
|
static Status *sharedInstance = nil;
|
|
static dispatch_once_t onceToken;
|
|
dispatch_once(&onceToken, ^{
|
|
sharedInstance = [[self alloc] init];
|
|
});
|
|
return sharedInstance;
|
|
}
|
|
|
|
- (instancetype)init {
|
|
self = [super init];
|
|
if (!self) {
|
|
return nil;
|
|
}
|
|
// Subscribing to the signals from Status-Go
|
|
StatusgoSetMobileSignalHandler(self);
|
|
return self;
|
|
}
|
|
|
|
-(RCTBridge *)bridge
|
|
{
|
|
return bridge;
|
|
}
|
|
|
|
-(void)setBridge:(RCTBridge *)newBridge
|
|
{
|
|
bridge = newBridge;
|
|
}
|
|
|
|
- (void)handleSignal:(NSString *)signal
|
|
{
|
|
if(!signal){
|
|
#if DEBUG
|
|
NSLog(@"SignalEvent nil");
|
|
#endif
|
|
return;
|
|
}
|
|
|
|
[bridge.eventDispatcher sendAppEventWithName:@"gethEvent"
|
|
body:@{@"jsonEvent": signal}];
|
|
|
|
return;
|
|
}
|
|
|
|
RCT_EXPORT_MODULE();
|
|
|
|
#pragma mark - shouldMoveToInternalStorage
|
|
|
|
RCT_EXPORT_METHOD(shouldMoveToInternalStorage:(RCTResponseSenderBlock)onResultCallback) {
|
|
// Android only
|
|
onResultCallback(@[[NSNull null]]);
|
|
}
|
|
|
|
#pragma mark - moveToInternalStorage
|
|
|
|
RCT_EXPORT_METHOD(moveToInternalStorage:(RCTResponseSenderBlock)onResultCallback) {
|
|
// Android only
|
|
onResultCallback(@[[NSNull null]]);
|
|
}
|
|
|
|
RCT_EXPORT_METHOD(exportLogs:(RCTResponseSenderBlock)callback) {
|
|
#if DEBUG
|
|
NSLog(@"exportLogs() method called");
|
|
#endif
|
|
NSString *result = StatusgoExportNodeLogs();
|
|
callback(@[result]);
|
|
}
|
|
|
|
RCT_EXPORT_METHOD(deleteImportedKey:(NSString *)keyUID
|
|
address:(NSString *)address
|
|
password:(NSString *)password
|
|
callback:(RCTResponseSenderBlock)callback) {
|
|
#if DEBUG
|
|
NSLog(@"DeleteImportedKeyV2() method called");
|
|
#endif
|
|
NSURL *multiaccountKeystoreDir = [Utils getKeyStoreDirForKeyUID:keyUID];
|
|
NSString *jsonParams = [NSString stringWithFormat:@"{\"address\":\"%@\",\"password\":\"%@\",\"keyStoreDir\":\"%@\"}",
|
|
address, password, multiaccountKeystoreDir.path];
|
|
[StatusBackendClient executeStatusGoRequestWithCallback:@"DeleteImportedKeyV2"
|
|
body:jsonParams
|
|
statusgoFunction:^NSString *{
|
|
return StatusgoDeleteImportedKeyV2(jsonParams);
|
|
}
|
|
callback:callback];
|
|
}
|
|
|
|
#pragma mark - GetNodeConfig
|
|
|
|
RCT_EXPORT_METHOD(getNodeConfig:(RCTResponseSenderBlock)callback) {
|
|
#if DEBUG
|
|
NSLog(@"GetNodeConfig() method called");
|
|
#endif
|
|
[StatusBackendClient executeStatusGoRequestWithCallback:@"GetNodeConfig"
|
|
body:@""
|
|
statusgoFunction:^NSString *{
|
|
return StatusgoGetNodeConfig();
|
|
}
|
|
callback:callback];
|
|
}
|
|
|
|
RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(fleets) {
|
|
return [StatusBackendClient executeStatusGoRequestWithResult:@"Fleets"
|
|
body:@""
|
|
statusgoFunction:^NSString *{
|
|
return StatusgoFleets();
|
|
}];
|
|
}
|
|
|
|
RCT_EXPORT_METHOD(closeApplication) {
|
|
exit(0);
|
|
}
|
|
|
|
RCT_EXPORT_METHOD(connectionChange:(NSString *)type
|
|
isExpensive:(BOOL)isExpensive) {
|
|
#if DEBUG
|
|
NSLog(@"ConnectionChange() method called");
|
|
#endif
|
|
NSDictionary *params = @{
|
|
@"type": type,
|
|
@"expensive": @(isExpensive)
|
|
};
|
|
NSError *error;
|
|
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:params
|
|
options:0
|
|
error:&error];
|
|
if (error) {
|
|
NSLog(@"Error creating JSON: %@", error);
|
|
return;
|
|
}
|
|
|
|
if (jsonData) {
|
|
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
|
|
[StatusBackendClient executeStatusGoRequest:@"ConnectionChangeV2"
|
|
body:jsonString
|
|
statusgoFunction:^NSString *{
|
|
return StatusgoConnectionChangeV2(jsonString);
|
|
}];
|
|
} else {
|
|
NSLog(@"Failed to create JSON data");
|
|
}
|
|
}
|
|
|
|
RCT_EXPORT_METHOD(appStateChange:(NSString *)state) {
|
|
#if DEBUG
|
|
NSLog(@"AppStateChange() method called");
|
|
#endif
|
|
NSDictionary *params = @{@"state": state};
|
|
NSError *error;
|
|
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:params
|
|
options:0
|
|
error:&error];
|
|
if (error) {
|
|
NSLog(@"Error creating JSON: %@", error);
|
|
return;
|
|
}
|
|
|
|
if (jsonData) {
|
|
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
|
|
[StatusBackendClient executeStatusGoRequest:@"AppStateChangeV2"
|
|
body:jsonString
|
|
statusgoFunction:^NSString *{
|
|
return StatusgoAppStateChangeV2(jsonString);
|
|
}];
|
|
} else {
|
|
NSLog(@"Failed to create JSON data");
|
|
}
|
|
}
|
|
|
|
RCT_EXPORT_METHOD(addCentralizedMetric:(NSString *)request
|
|
callback:(RCTResponseSenderBlock)callback) {
|
|
#if DEBUG
|
|
NSLog(@"addCentralizedMetric() method called");
|
|
#endif
|
|
[StatusBackendClient executeStatusGoRequestWithCallback:@"AddCentralizedMetric"
|
|
body:request
|
|
statusgoFunction:^NSString *{
|
|
return StatusgoAddCentralizedMetric(request);
|
|
}
|
|
callback:callback];
|
|
}
|
|
|
|
RCT_EXPORT_METHOD(toggleCentralizedMetrics:(NSString *)request
|
|
callback:(RCTResponseSenderBlock)callback) {
|
|
#if DEBUG
|
|
NSLog(@"toggleCentralizedMetrics() method called");
|
|
#endif
|
|
[StatusBackendClient executeStatusGoRequestWithCallback:@"ToggleCentralizedMetrics"
|
|
body:request
|
|
statusgoFunction:^NSString *{
|
|
return StatusgoToggleCentralizedMetrics(request);
|
|
}
|
|
callback:callback];
|
|
}
|
|
|
|
RCT_EXPORT_METHOD(startLocalNotifications) {
|
|
#if DEBUG
|
|
NSLog(@"StartLocalNotifications() method called");
|
|
#endif
|
|
[StatusBackendClient executeStatusGoRequest:@"StartLocalNotifications"
|
|
body:@""
|
|
statusgoFunction:^NSString *{
|
|
return StatusgoStartLocalNotifications();
|
|
}];
|
|
}
|
|
|
|
#pragma mark - deviceinfo
|
|
|
|
- (bool) is24Hour
|
|
{
|
|
NSString *format = [NSDateFormatter dateFormatFromTemplate:@"j" options:0 locale:[NSLocale currentLocale]];
|
|
return ([format rangeOfString:@"a"].location == NSNotFound);
|
|
}
|
|
|
|
- (NSString *)getBuildId {
|
|
return @"not available";
|
|
}
|
|
|
|
- (NSString*) deviceId
|
|
{
|
|
struct utsname systemInfo;
|
|
|
|
uname(&systemInfo);
|
|
|
|
NSString* deviceId = [NSString stringWithCString:systemInfo.machine
|
|
encoding:NSUTF8StringEncoding];
|
|
|
|
if ([deviceId isEqualToString:@"i386"] || [deviceId isEqualToString:@"x86_64"] ) {
|
|
deviceId = [NSString stringWithFormat:@"%s", getenv("SIMULATOR_MODEL_IDENTIFIER")];
|
|
}
|
|
|
|
return deviceId;
|
|
}
|
|
|
|
- (NSString*) deviceName
|
|
{
|
|
return [[UIDevice currentDevice] name];
|
|
}
|
|
|
|
- (NSDictionary *)constantsToExport
|
|
{
|
|
return @{
|
|
@"is24Hour": @(self.is24Hour),
|
|
@"model": self.deviceName ?: [NSNull null],
|
|
@"brand": @"Apple",
|
|
@"buildId": [self getBuildId],
|
|
@"deviceId": self.deviceId ?: [NSNull null],
|
|
};
|
|
}
|
|
|
|
+ (BOOL)requiresMainQueueSetup
|
|
{
|
|
return NO;
|
|
}
|
|
|
|
@end
|