You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

238 lines
6.4 KiB

//
// CLTimezoneData.m
// Clocker
//
// Created by Abhishek Banthia on 12/22/15.
//
//
#import "CLAPIConnector.h"
#import "CLTimezoneData.h"
#import "CommonStrings.h"
#import "DateTools.h"
#import "PanelController.h"
#include <CoreFoundation/CoreFoundation.h>
#include <IOKit/IOKitLib.h>
#import "CLTimezoneDataOperations.h"
@interface CLTimezoneData ()
@property (copy, nonatomic) NSString *customLabel;
@property (copy, nonatomic) NSString *formattedAddress;
@property (copy, nonatomic) NSString *place_id;
@property (copy, nonatomic) NSString *timezoneID;
@property (copy, nonatomic) NSString *latitude;
@property (copy, nonatomic) NSString *longitude;
@property (strong, nonatomic) NSDate *nextUpdate;
@property (strong, nonatomic) NSNumber *isFavourite;
@property (strong, nonatomic) NSDate *sunriseTime;
@property (strong, nonatomic) NSDate *sunsetTime;
@property (assign, nonatomic) BOOL sunriseOrSunset; //YES for Sunrise, NO for Sunset
@property (assign, nonatomic) CLSelection selectionType;
@end
@implementation CLTimezoneData
-(instancetype)initWithDictionary:(NSDictionary *)dictionary
{
self = [super init];
if (self)
{
self.customLabel = dictionary[CLCustomLabel];
self.timezoneID = dictionary[CLTimezoneID];
self.latitude = dictionary[@"latitude"];
self.longitude = dictionary[@"longitude"];
self.place_id = dictionary[CLPlaceIdentifier];
self.formattedAddress = dictionary[CLTimezoneName];
self.isFavourite = @(NSOffState);
self.selectionType = CLCitySelection;
}
return self;
}
-(instancetype)init
{
self = [super init];
if (self)
{
self.selectionType = CLTimezoneSelection;
self.isFavourite = @(NSOffState);
}
return self;
}
+ (instancetype)getCustomObject:(NSData *)encodedData
{
if (encodedData)
{
if ([encodedData isKindOfClass:[NSDictionary class]])
{
CLTimezoneData *newObject = [[self alloc] initWithDictionary:(NSDictionary *)encodedData];
return newObject;
}
CLTimezoneData *object = [NSKeyedUnarchiver unarchiveObjectWithData:encodedData];
return object;
}
return nil;
}
- (void)encodeWithCoder:(NSCoder *)coder
{
[coder encodeObject:self.place_id forKey:@"place_id"];
[coder encodeObject:self.formattedAddress forKey:@"formattedAddress"];
[coder encodeObject:self.customLabel forKey:@"customLabel"];
[coder encodeObject:self.timezoneID forKey:@"timezoneID"];
[coder encodeObject:self.nextUpdate forKey:@"nextUpdate"];
[coder encodeObject:self.latitude forKey:@"latitude"];
[coder encodeObject:self.longitude forKey:@"longitude"];
[coder encodeObject:self.isFavourite forKey:@"isFavourite"];
[coder encodeObject:self.sunriseTime forKey:@"sunriseTime"];
[coder encodeObject:self.sunsetTime forKey:@"sunsetTime"];
[coder encodeInteger:self.selectionType forKey:@"selectionType"];
}
- (instancetype)initWithCoder:(NSCoder *)coder
{
self = [super init];
if (self)
{
self.place_id = [coder decodeObjectForKey:@"place_id"];
self.formattedAddress = [coder decodeObjectForKey:@"formattedAddress"];
self.customLabel = [coder decodeObjectForKey:@"customLabel"];
self.timezoneID = [coder decodeObjectForKey:@"timezoneID"];
self.nextUpdate = [coder decodeObjectForKey:@"nextUpdate"];
self.latitude = [coder decodeObjectForKey:@"latitude"];
self.longitude = [coder decodeObjectForKey:@"longitude"];
self.isFavourite = [coder decodeObjectForKey:@"isFavourite"];
self.sunriseTime = [coder decodeObjectForKey:@"sunriseTime"];
self.sunsetTime = [coder decodeObjectForKey:@"sunsetTime"];
self.selectionType = [coder decodeIntegerForKey:@"selectionType"];
}
return self;
}
-(NSString *)description
{
return [NSString stringWithFormat:@"TimezoneID: %@\nFormatted Address: %@\nCustom Label: %@\nLatitude: %@\nLongitude:%@\nPlaceID: %@\nisFavourite: %@\nSunrise Time: %@\nSunset Time: %@\nSelection Type: %zd", self.timezoneID,
self.formattedAddress,
self.customLabel,
self.latitude,
self.longitude,
self.place_id,
self.isFavourite,
self.sunriseTime,
self.sunsetTime,
self.selectionType];
}
- (NSString *)getFormattedTimezoneLabel
{
if (self.customLabel.length > 0)
{
return self.customLabel;
}
if ([self.formattedAddress length] > 0)
{
return self.formattedAddress;
}
else if (self.timezoneID)
{
NSString *timezoneID = self.timezoneID;
NSRange range = [timezoneID rangeOfString:@"/"];
if (range.location != NSNotFound)
{
timezoneID = [timezoneID substringWithRange:NSMakeRange(range.location+1, timezoneID.length-1 - range.location)];
}
return timezoneID;
}
else
{
return @"Error";
}
}
- (void)setLabelForTimezone:(NSString *)customLabel
{
self.customLabel = customLabel.length > 0 ? customLabel : CLEmptyString;
}
- (void)setIDForTimezone:(NSString *)uniqueID
{
self.timezoneID = uniqueID;
}
-(void)setFormattedAddressForTimezone:(NSString *)address
{
self.formattedAddress = address;
}
-(void)setFavouriteValueForTimezone:(NSNumber *)favouriteValue
{
self.isFavourite = favouriteValue;
}
-(void)setNextUpdateForSunriseSet:(NSDate *)nextUpdate
{
self.nextUpdate = nextUpdate;
}
-(void)setSunsetTimeForTimezone:(NSDate *)sunsetTime
{
self.sunsetTime = sunsetTime;
}
-(void)setSunriseTimeForTimezone:(NSDate *)sunriseTime
{
self.sunriseTime = sunriseTime;
}
- (void)setSunriseOrSunsetForTimezone:(BOOL)sunriseOrSunset
{
self.sunriseOrSunset = sunriseOrSunset;
}
- (void)setLatitudeForTimezone:(NSString *)latitude
{
self.latitude = latitude;
}
- (void)setLongitudeForTimezone:(NSString *)longitude
{
self.longitude = longitude;
}
- (BOOL)isEmpty
{
if ([self checkPropertyForNil:self.timezoneID] || [self checkPropertyForNil:self.place_id] ||
[self checkPropertyForNil:self.formattedAddress] || [self checkPropertyForNil:self.latitude] || [self checkPropertyForNil:self.longitude]) {
return YES;
}
return NO;
}
- (BOOL)checkPropertyForNil:(id)property
{
if (property == nil || property == [NSNull null]) {
return YES;
}
return NO;
}
@end