// // EPConfigStorage.m // YuMi // // Lightweight persistence for client/init data // #import "EPConfigStorage.h" @implementation EPConfigStorage #pragma mark - Public + (BOOL)saveInit:(NSDictionary *)dict { if (![dict isKindOfClass:[NSDictionary class]]) { return NO; } NSMutableDictionary *wrapped = [dict mutableCopy]; wrapped[@"_version"] = @1; wrapped[@"_timestamp"] = @((long long)([[NSDate date] timeIntervalSince1970])); NSData *data = [NSJSONSerialization dataWithJSONObject:wrapped options:0 error:nil]; if (!data) { return NO; } NSString *path = [self initPath]; NSError *error = nil; NSFileManager *fm = [NSFileManager defaultManager]; NSString *dir = [path stringByDeletingLastPathComponent]; if (![fm fileExistsAtPath:dir]) { [fm createDirectoryAtPath:dir withIntermediateDirectories:YES attributes:nil error:&error]; if (error) { return NO; } } return [data writeToFile:path atomically:YES]; } + (NSDictionary * _Nullable)loadInit { NSString *path = [self initPath]; NSData *data = [NSData dataWithContentsOfFile:path]; if (!data) { return nil; } id obj = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; if (![obj isKindOfClass:[NSDictionary class]]) { return nil; } return (NSDictionary *)obj; } + (BOOL)clearInit { NSString *path = [self initPath]; NSFileManager *fm = [NSFileManager defaultManager]; if (![fm fileExistsAtPath:path]) { return YES; } NSError *error = nil; [fm removeItemAtPath:path error:&error]; return (error == nil); } #pragma mark - Helpers + (NSString *)initPath { NSArray *urls = [[NSFileManager defaultManager] URLsForDirectory:NSApplicationSupportDirectory inDomains:NSUserDomainMask]; NSURL *dirURL = urls.firstObject; if (!dirURL) { dirURL = [NSURL fileURLWithPath:[NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES) firstObject]]; } NSURL *fileURL = [dirURL URLByAppendingPathComponent:@"ep_config_init.json"]; return fileURL.path; } @end