Files
eqn.ios/Sources/Earthquake Network/model/EQNUser.m
T
2020-07-30 21:09:03 +02:00

192 lines
6.0 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 <CoreLocation/CoreLocation.h>
#import "EQMAccelerometroManager.h"
#import "ServerRequest.h"
#import "EQNGeneratoreURLServer.h"
#import "EQNUtility.h"
#import "EQNManager.h"
//#import <UIKit/UIKit.h>
@implementation EQNUser
static EQNUser *_sharedInstance = nil;
+(EQNUser *)defaultUser{
static EQNUser *instance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instance = [[self alloc]init];
[instance initSingleton];
});
return instance;
}
-(void)initSingleton{
self.tokenUser = [[NSUserDefaults standardUserDefaults] objectForKey:TOKEN_USER];
id savedUserId = [[NSUserDefaults standardUserDefaults] objectForKey:USER_ID];
self.user_ID = [self convertUserIdIntoString:savedUserId];
NSArray *lastPosArray = [EQNUtility readArrayWithCustomObjFromUserDefaults:LAST_LOCATION];
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];
// [self registerforDeviceLockNotif];
}
-(void)saveUserInfo{
[[NSUserDefaults standardUserDefaults] setObject:self.tokenUser forKey:TOKEN_USER];
[[NSUserDefaults standardUserDefaults] setObject:self.user_ID forKey:USER_ID];
NSArray *lastPosiArray = @[self.lastPosition];
[EQNUtility writeArrayWithCustomObjToUserDefaults:LAST_LOCATION withArray:lastPosiArray];
}
-(void)removeUser{
[[NSUserDefaults standardUserDefaults] removeObjectForKey:TOKEN_USER];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:USER_ID];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:LAST_LOCATION];
[[NSUserDefaults standardUserDefaults] synchronize];
self.tokenUser = nil;
}
/*
-(void)writeArrayWithCustomObjToUserDefaults:(NSString *)keyName withArray:(NSArray *)myArray
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:myArray];
[defaults setObject:data forKey:keyName];
[defaults synchronize];
[[NSUserDefaults standardUserDefaults] synchronize];
}
-(NSArray *)readArrayWithCustomObjFromUserDefaults:(NSString*)keyName
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *data = [defaults objectForKey:keyName];
NSArray *myArray = [NSKeyedUnarchiver unarchiveObjectWithData:data];
[defaults synchronize];
return myArray;
}
*/
- (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:registrazione 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:posizione success:^(id result) {
NSLog(@"inviato");
} failure:^(NSError *errore) {
}];
}
- (void)downloadOfferTimeRemainingWithCompletion:(_Nonnull timeRemainingCompletion)completionHandler
{
NSURL *url = [EQNGeneratoreURLServer urlDownloadOfferTimeRemaining];
[[ServerRequest defaultServerConnectionSingleton] inviaInformazioniAlServerWithURL:url richiesta:offerTimeRemaining 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