Files
eqn.ios/Sources/Earthquake Network/Models/EQNUser.m
T
2020-11-21 15:50:37 +01:00

165 lines
5.3 KiB
Objective-C

//
// EQNUser.m
// Earthquake Network
//
// Created by Luca Beretta on 20/09/18.
// Copyright © 2018 Luca Beretta. All rights reserved.
//
#import "EQNUser.h"
#import "Costanti.h"
#import "EQMAccelerometroManager.h"
#import "ServerRequest.h"
#import "EQNGeneratoreURLServer.h"
#import "EQNUtility.h"
#import "EQNManager.h"
@implementation EQNUser
#pragma mark - Singleton
+ (instancetype)defaultUser
{
static EQNUser *sharedInstance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [[self alloc] init];
});
return sharedInstance;
}
#pragma mark - Init
- (instancetype)init
{
self = [super init];
if (self) {
self.tokenUser = [[NSUserDefaults standardUserDefaults] objectForKey:TOKEN_USER];
id savedUserId = [[NSUserDefaults standardUserDefaults] objectForKey:USER_ID];
self.user_ID = [self convertUserIdIntoString:savedUserId];
NSArray *lastPosArray = [EQNUtility loadArrayOfClass:[CLLocation class] fromUserDefaultsForKey:EQNUserDefaultLastLocation];
if (lastPosArray.count > 0) {
self.lastPosition = [lastPosArray lastObject];
}
self.registrato = NO;
if (self.user_ID) {
self.registrato = YES;
}
[[EQMAccelerometroManager sharedInstance] addObserver:(id)self
forKeyPath:@"currentLocation"
options:NSKeyValueObservingOptionNew
context:nil];
[[EQMAccelerometroManager sharedInstance] startUpdatingLocationBackground];
}
return self;
}
#pragma mark - Public
- (void)saveUserInfo
{
[[NSUserDefaults standardUserDefaults] setObject:self.tokenUser forKey:TOKEN_USER];
[[NSUserDefaults standardUserDefaults] setObject:self.user_ID forKey:USER_ID];
NSArray *lastPosiArray = @[self.lastPosition];
[EQNUtility storeArray:lastPosiArray toUserDefaultForKey:EQNUserDefaultLastLocation];
}
- (void)removeUser
{
[[NSUserDefaults standardUserDefaults] removeObjectForKey:TOKEN_USER];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:USER_ID];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:EQNUserDefaultLastLocation];
[[NSUserDefaults standardUserDefaults] synchronize];
self.tokenUser = nil;
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if ([keyPath isEqualToString:@"currentLocation"]) {
// do some stuff
if (self.lastPosition) {
self.distanza = [self.lastPosition distanceFromLocation:[EQMAccelerometroManager sharedInstance].currentLocation];
}
self.lastPosition = [EQMAccelerometroManager sharedInstance].currentLocation;
[self verificaRegistrazione];
if (![EQNManager defaultManager].isBackground)
[[EQMAccelerometroManager sharedInstance] stopUpdatingLocation];
}
}
- (void)verificaRegistrazione
{
if (!self.user_ID && self.tokenUser)
[self inviaregistrazioneServer:self.tokenUser withPosition:self.lastPosition];
else
[self inviaPosizioneServer];
}
- (void)inviaregistrazioneServer:(NSString *)token withPosition:(CLLocation *)location
{
[[ServerRequest defaultServerConnectionSingleton] inviaInformazioniAlServerWithURL:[EQNGeneratoreURLServer urlRegistrazione] richiesta:EQNTipoChiamataRegistrazione success:^(id result) {
self.user_ID = [self convertUserIdIntoString:result];
[self saveUserInfo];
} failure:^(NSError *errore) {
NSLog(@"USER_ID Error %@", errore);
}];
}
- (void)inviaPosizioneServer
{
NSLog(@"URLPosizione %@", [EQNGeneratoreURLServer urlPosizione]);
[[ServerRequest defaultServerConnectionSingleton] inviaInformazioniAlServerWithURL:[EQNGeneratoreURLServer urlPosizione] richiesta:EQNTipoChiamataPosizione success:^(id result) {
NSLog(@"inviato");
} failure:^(NSError *errore) {
}];
}
- (void)downloadOfferTimeRemainingWithCompletion:(_Nonnull timeRemainingCompletion)completionHandler
{
NSURL *url = [EQNGeneratoreURLServer urlDownloadOfferTimeRemaining];
[[ServerRequest defaultServerConnectionSingleton] inviaInformazioniAlServerWithURL:url richiesta:EQNTipoChiamataOfferTimeRemaining success:^(id result) {
NSInteger timeRemaining = 0;
if ([result isKindOfClass:[NSNumber class]]) {
NSNumber *timeRemainingNumber = (NSNumber *)result;
timeRemaining = [timeRemainingNumber integerValue];
} else if ([result isKindOfClass:[NSString class]]) {
NSString *timeRemainingString = (NSString *)result;
timeRemaining = [timeRemainingString integerValue];
}
completionHandler(timeRemaining);
} failure:^(NSError *error) {
completionHandler(0);
}];
}
#pragma mark - Private
/// user_id saved as a Number, but is used as a NSString
- (NSString *)convertUserIdIntoString:(id)userId
{
if ([userId isKindOfClass:[NSString class]]) {
return (NSString *)userId;
} else if ([userId isKindOfClass:[NSNumber class]]) {
NSNumber *userIdNumber = (NSNumber *)userId;
return [userIdNumber stringValue];
} else {
return userId;
}
}
@end