192 lines
6.0 KiB
Objective-C
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
|