Files
eqn.ios/Sources/Earthquake Network/Models/EQNSisma.m
T
Andrea Busi 708e6dd92f feat: Add cache mechanism for seismic data
- download data only after 2 minutes after the previous download
- download data when app returns from the background
- user can force data download

Resolves: https://gitlab.steamware.net/eqn/eqn.ios/-/issues/18
2020-10-08 21:36:28 +02:00

120 lines
5.1 KiB
Objective-C

//
// EQNSisma.m
// Earthquake Network
//
// Refactored by Andrea Busi
// Copyright © 2020 Earthquake Network. All rights reserved.
//
#import "EQNSisma.h"
#import "EQNUser.h"
#import "EQNUtility.h"
#import "NSDictionary+EQNExtensions.h"
@implementation EQNSisma
#pragma mark - Init
- (instancetype)initWithInfo:(NSDictionary *)info
{
self = [super init];
if (self) {
double latitude = [info[@"la"] doubleValue];
double longitude = [info[@"lo"] doubleValue];
self.coordinate = [[CLLocation alloc] initWithLatitude:latitude longitude:longitude];
CLLocationDistance distance = [[EQNUser defaultUser].lastPosition distanceFromLocation:self.coordinate];
self.userDistance = distance/1000;
self.depth = info[@"de"];
self.magnitude = info[@"ma"];
self.magnitudeType = info[@"mt"];
// convert from log base 10
double pop100 = [info[@"p1"] doubleValue];
self.population100km = pow(10, pop100 / 1000);
self.intensity = info[@"it"];
self.place = info[@"pl"];
self.provider = info[@"pr"];
self.date = [EQNUtility getDateFromString:info[@"dt"]];
self.timeDifference = [info[@"di"] doubleValue];
self.magnitudeRange = info[@"mr"];
self.preliminary = info[@"py"];
self.smartphoneNumber = info[@"sm"];
self.userNumber = info[@"rp"];
self.weatherCode = [info eqn_safeObjectForKey:@"wc"];
self.weatherIcon = info[@"ic"];
self.weatherCloud = info[@"cl"];
self.weatherWindSpeed = info[@"ws"];
self.weatherPressure = info[@"pe"];
self.weatherHumidity = info[@"hu"];
self.weatherTemperature = info[@"te"];
self.pictureCount = info[@"pc"];
}
return self;
}
#pragma mark - NSCoding
- (void)encodeWithCoder:(NSCoder *)encoder
{
[encoder encodeObject:self.coordinate forKey:@"coordinate"];
[encoder encodeDouble:self.userDistance forKey:@"userDistance"];
[encoder encodeObject:self.depth forKey:@"depth"];
[encoder encodeObject:self.magnitude forKey:@"magnitude"];
[encoder encodeObject:self.magnitudeType forKey:@"magnitudeType"];
[encoder encodeDouble:self.population100km forKey:@"population100km"];
[encoder encodeObject:self.intensity forKey:@"intensity"];
[encoder encodeObject:self.place forKey:@"place"];
[encoder encodeObject:self.provider forKey:@"provider"];
[encoder encodeObject:self.date forKey:@"date"];
[encoder encodeDouble:self.timeDifference forKey:@"timeDifference"];
[encoder encodeObject:self.magnitudeRange forKey:@"magnitudeRange"];
[encoder encodeObject:self.preliminary forKey:@"preliminary"];
[encoder encodeObject:self.smartphoneNumber forKey:@"smartphoneNumber"];
[encoder encodeObject:self.userNumber forKey:@"userNumber"];
[encoder encodeObject:self.weatherCode forKey:@"weatherCode"];
[encoder encodeObject:self.weatherIcon forKey:@"weatherIcon"];
[encoder encodeObject:self.weatherCloud forKey:@"weatherCloud"];
[encoder encodeObject:self.weatherWindSpeed forKey:@"weatherWindSpeed"];
[encoder encodeObject:self.weatherPressure forKey:@"weatherPressure"];
[encoder encodeObject:self.weatherHumidity forKey:@"weatherHumidity"];
[encoder encodeObject:self.weatherTemperature forKey:@"weatherTemperature"];
[encoder encodeObject:self.pictureCount forKey:@"pictureCount"];
}
- (instancetype)initWithCoder:(NSCoder *)decoder
{
self = [super init];
if(self) {
self.coordinate = [decoder decodeObjectForKey:@"coordinate"];
self.userDistance = [decoder decodeDoubleForKey:@"userDistance"];
self.depth = [decoder decodeObjectForKey:@"depth"];
self.magnitude = [decoder decodeObjectForKey:@"magnitude"];
self.magnitudeType = [decoder decodeObjectForKey:@"magnitudeType"];
self.population100km = [decoder decodeDoubleForKey:@"population100km"];
self.intensity = [decoder decodeObjectForKey:@"intensity"];
self.place = [decoder decodeObjectForKey:@"place"];
self.provider = [decoder decodeObjectForKey:@"provider"];
self.date = [decoder decodeObjectForKey:@"date"];
self.timeDifference = [decoder decodeDoubleForKey:@"timeDifference"];
self.magnitudeRange = [decoder decodeObjectForKey:@"magnitudeRange"];
self.preliminary = [decoder decodeObjectForKey:@"preliminary"];
self.smartphoneNumber = [decoder decodeObjectForKey:@"smartphoneNumber"];
self.userNumber = [decoder decodeObjectForKey:@"userNumber"];
self.weatherCode = [decoder decodeObjectForKey:@"weatherCode"];
self.weatherIcon = [decoder decodeObjectForKey:@"weatherIcon"];
self.weatherCloud = [decoder decodeObjectForKey:@"weatherCloud"];
self.weatherWindSpeed = [decoder decodeObjectForKey:@"weatherWindSpeed"];
self.weatherPressure = [decoder decodeObjectForKey:@"weatherPressure"];
self.weatherHumidity = [decoder decodeObjectForKey:@"weatherHumidity"];
self.weatherTemperature = [decoder decodeObjectForKey:@"weatherTemperature"];
self.pictureCount = [decoder decodeObjectForKey:@"pictureCount"];
}
return self;
}
@end