// // Copyright © 2015 dahua. All rights reserved. // #import #import #import #import #import #import #import @implementation DHUserManager @synthesize language = _language, sound = _sound, timeFormat = _timeFormat, timezoneOffset = _timezoneOffset, bAlertBindEmail = _bAlertBindEmail; static DHUserManager *userManager = nil; + (DHUserManager *)shareInstance { if(userManager == nil) { userManager = [[DHUserManager alloc]init]; } return userManager; } - (id)init { if (self = [super init]) { _isAllowCellularPlay = NO; _showExperiencePlanGuide = YES; _messageState = YES; _messageTime = @"00:00-23:59"; _bAlertBindEmail = YES; _showSearchLightGuide = YES; _isShowUserExperiencePlan = NO; _isSupportAd = NO; _openUserExperience = NO; // 默认未开启调试模式 _openDebugModeTime = 0; } return self; } //获取配置 - (void)getUserConfigFile { // config NSString *configfilepath = [DHFileManager userConfigFilePath]; NSString *configStr = [NSString stringWithContentsOfURL:[NSURL fileURLWithPath:configfilepath] encoding:NSUTF8StringEncoding error:NULL]; NSData *desData = [GTMBase64 decodeString:configStr]; NSDictionary *dic = [NSKeyedUnarchiver unarchiveObjectWithData:desData]; id val = [dic objectForKey:@"showExperiencePlanGuide"]; if (val != NULL) { _showExperiencePlanGuide = [val boolValue]; } val = [dic objectForKey:@"isAllowCellularPlay"]; if (val != NULL) { _isAllowCellularPlay = [val boolValue]; } val = [dic objectForKey:@"messageState"]; if (val != NULL) { _messageState = [val boolValue]; } val = [dic objectForKey:@"messageTime"]; if (val != NULL) { _messageTime = val; } val = [dic objectForKey:@"showSearchLightGuide"]; if (val != NULL) { _showSearchLightGuide = [val boolValue]; } val = [dic objectForKey:@"openUserExperience"]; if (val != NULL) { _openUserExperience = [val boolValue]; } val = [dic objectForKey:@"isShowUserExperiencePlan"]; if (val != NULL) { _isShowUserExperiencePlan = [val boolValue]; } val = [dic objectForKey:@"messageTime"]; if (val != NULL) { _messageTime = val; } val = [dic objectForKey:@"isSupportAd"]; if (val != NULL) { _isSupportAd = [val boolValue]; } _countryCode = dic[@"countryCode"]; _avatarUrl = dic[@"avatarUrl"]; _avatarMd5 = dic[@"avatarMd5"]; _nickname = dic[@"nickname"]; _wxNickname = dic[@"wxNickname"]; _fbNickname = dic[@"fbNickname"]; _appleNickname = dic[@"appleNickname"]; _phone = dic[@"phone"]; _email = dic[@"email"]; //时区数据 _beginSummer = dic[@"beginSummer"]; _endSummer = dic[@"endSummer"]; _areaIndex = [dic[@"areaIndex"] intValue]; _timeZoneIndex = [dic[@"timeZoneIndex"] intValue]; _setDefault = [dic[@"setDefault"] boolValue]; _mSSIDMutableArray = dic[@"mSSIDMutableArray"]; _deviceVersionDictionary = dic[@"deviceVersionDictionary"]; _timeFormat = dic[@"timeFormat"]; _sound = dic[@"sound"]; _timezoneOffset = [dic[@"timezoneOffset"] intValue]; _bAlertBindEmail = [dic[@"bAlertBindEmail"] boolValue]; _msgId = [dic[@"msgId"] longLongValue]; _openDebugModeTime = [[dic objectForKey:@"openDebugModeTime"] doubleValue]; } - (void)saveUserConfigFile { // config NSMutableDictionary* dic = [[NSMutableDictionary alloc] initWithCapacity:0]; NSNumber *showExperiencePlanGuide = [NSNumber numberWithBool:_showExperiencePlanGuide]; [dic setObject:showExperiencePlanGuide forKey:@"showExperiencePlanGuide"]; NSNumber *isAllowCellularPlayNumber = [NSNumber numberWithBool:_isAllowCellularPlay]; [dic setObject:isAllowCellularPlayNumber forKey:@"isAllowCellularPlay"]; NSNumber *showSearchLightGuide = [NSNumber numberWithBool:_showSearchLightGuide]; [dic setObject:showSearchLightGuide forKey:@"showSearchLightGuide"]; NSNumber *openUserExperienceNumber = [NSNumber numberWithBool:_openUserExperience]; [dic setObject:openUserExperienceNumber forKey:@"openUserExperience"]; NSNumber *messageState = [NSNumber numberWithBool:_messageState]; [dic setObject:messageState forKey:@"messageState"]; if (_openDebugModeTime > 0) { [dic setObject:[NSNumber numberWithDouble:_openDebugModeTime] forKey:@"openDebugModeTime"]; } NSNumber *isShowUserExperiencePlanNumber = [NSNumber numberWithBool:_isShowUserExperiencePlan]; [dic setObject:isShowUserExperiencePlanNumber forKey:@"isShowUserExperiencePlan"]; NSNumber *isSupportAdNumber = [NSNumber numberWithBool:_isSupportAd]; [dic setObject:isSupportAdNumber forKey:@"isSupportAd"]; if (_openDebugModeTime > 0) { [dic setObject:[NSNumber numberWithDouble:_openDebugModeTime] forKey:@"openDebugModeTime"]; } if(_messageTime.length > 0) { NSString * messageTime = [NSString stringWithFormat:@"%@",_messageTime]; [dic setObject:messageTime forKey:@"messageTime"]; } dic[@"countryCode"] = _countryCode; dic[@"nickname"] = _nickname; dic[@"avatarUrl"] = _avatarUrl; dic[@"avatarMd5"] = _avatarMd5; dic[@"wxNickname"] = _wxNickname; dic[@"fbNickname"] = _fbNickname; dic[@"appleNickname"] = _appleNickname; dic[@"phone"] = _phone; dic[@"email"] = _email; dic[@"language"] = _language; dic[@"timeFormat"] = _timeFormat; dic[@"sound"] = _sound; dic[@"timezoneOffset"] = [NSString stringWithFormat:@"%d",_timezoneOffset]; dic[@"bAlertBindEmail"] = [NSString stringWithFormat:@"%d",_bAlertBindEmail]; //时区设置; [dic setValue:_beginSummer forKey:@"beginSummer"]; [dic setValue:_endSummer forKey:@"endSummer"]; [dic setValue:@(_areaIndex) forKey:@"areaIndex"]; [dic setValue:@(_timeZoneIndex) forKey:@"timeZoneIndex"]; [dic setValue:@(_setDefault) forKey:@"setDefault"]; [dic setValue:_mSSIDMutableArray forKey:@"mSSIDMutableArray"]; [dic setValue:_deviceVersionDictionary forKey:@"deviceVersionDictionary"]; [dic setValue:@(_msgId) forKey:@"msgId"]; NSData *config2Data = [NSKeyedArchiver archivedDataWithRootObject:dic]; NSString *config2Str = [GTMBase64 stringByEncodingData:config2Data]; [config2Str writeToFile:[DHFileManager userConfigFilePath] atomically:YES encoding:NSUTF8StringEncoding error:NULL]; } - (void)syncUserCountryInfo { if(![DHUserManager shareInstance].countryCode || [DHUserManager shareInstance].countryCode.length == 0) { [[NSUserDefaults standardUserDefaults] setValue:@(1) forKey:@"PopCountryInfo"]; [[NSUserDefaults standardUserDefaults] synchronize]; } else { [[NSUserDefaults standardUserDefaults] setValue:@(0) forKey:@"PopCountryInfo"]; [[NSUserDefaults standardUserDefaults] synchronize]; } } - (void)clearCacheAvatar:(NSString *)avatarUrl completion:(void(^)(NSString *acheKey))completion { NSString *cacheKey = [DHImageLoaderManager getImageCacheKey:_avatarUrl]; //旧的头像地址对应的缓存key值 [[SDImageCache sharedImageCache] removeImageForKey:cacheKey withCompletion:^{ NSLog(@"DHUserManager::Delete cache avatar image %@", cacheKey); //为解决新旧头像地址不一致时【未设置时、已设置时,头像地址不同】,缓存key值不同的问题 NSString *newCacheKey = [DHImageLoaderManager getImageCacheKey:avatarUrl]; if (completion) { completion(newCacheKey); } }]; } - (void)clearDiskAndCacheAvatar:(NSString *)avatarUrl completion:(void(^)(NSString *acheKey))completion { NSString *cacheKey = [DHImageLoaderManager getImageCacheKey:_avatarUrl]; [[SDImageCache sharedImageCache] removeImageForKey:cacheKey fromDisk:YES withCompletion:^{ NSLog(@"DHUserManager::Delete cache avatar image %@", cacheKey); //为解决新旧头像地址不一致时【未设置时、已设置时,头像地址不同】,缓存key值不同的问题 NSString *newCacheKey = [DHImageLoaderManager getImageCacheKey:avatarUrl]; if (completion) { completion(newCacheKey); } }]; } - (void)downloadAvatar:(NSString *)avatarUrl { [[SDWebImageDownloader sharedDownloader] downloadImageWithURL:[NSURL URLWithString:avatarUrl] options:0 progress:nil completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) { if (image) { //先清空旧的图片,再进行覆盖写入 NSString *cacheKey = [DHImageLoaderManager getImageCacheKey:avatarUrl]; [[SDImageCache sharedImageCache] removeImageForKey:cacheKey withCompletion:^{ [[SDImageCache sharedImageCache] storeImageDataToDisk:data forKey:cacheKey]; }]; } }]; } -(void)clearData { NSString *userFilePath = [DHFileManager userFolder]; NSFileManager *fm = [NSFileManager defaultManager]; if ([fm fileExistsAtPath:userFilePath]) { [fm removeItemAtPath:userFilePath error:nil]; } userManager = nil; } #pragma mark - Set Properties - (void)setIsSupportAd:(BOOL)isSupportAd { _isSupportAd = isSupportAd; [self saveUserConfigFile]; } - (void)setEmail:(NSString *)email { NSLog(@"🍎🍎🍎 %@:: Set email %@", NSStringFromClass([self class]), email); _email = email; [self saveUserConfigFile]; } - (void)setPhone:(NSString *)phone { NSLog(@"🍎🍎🍎 %@:: Set phone %@", NSStringFromClass([self class]), phone); _phone = phone; [self saveUserConfigFile]; } - (void)setNickname:(NSString *)nickname { _nickname = nickname; [self saveUserConfigFile]; } - (void)setCountryCode:(NSString *)countryCode { _countryCode = countryCode; [self saveUserConfigFile]; } - (void)setAvatarUrl:(NSString *)avatarUrl { _avatarUrl = avatarUrl; [self saveUserConfigFile]; } - (void)setAvatarMd5:(NSString *)avatarMd5 { _avatarMd5 = avatarMd5; [self saveUserConfigFile]; } - (void)setWxNickname:(NSString *)wxNickname { _wxNickname = wxNickname; [self saveUserConfigFile]; } - (void)setFbNickname:(NSString *)fbNickname { _fbNickname = fbNickname; [self saveUserConfigFile]; } - (void)setAppleNickname:(NSString *)appleNickname { _appleNickname = appleNickname; [self saveUserConfigFile]; } - (void)setLanguage:(NSString *)language { _language = language; [self saveUserConfigFile]; } - (void)setTimeFormat:(NSString *)timeFormat { _timeFormat = timeFormat; [self saveUserConfigFile]; } - (void)setSound:(NSString *)sound { _sound = sound; [self saveUserConfigFile]; } - (void)setTimezoneOffset:(int)timezoneOffset { _timezoneOffset = timezoneOffset; [self saveUserConfigFile]; } - (void)setBAlertBindEmail:(BOOL)bAlertBindEmail { _bAlertBindEmail = bAlertBindEmail; [self saveUserConfigFile]; } - (void)setMsgId:(int64_t)msgId{ _msgId = msgId; [self saveUserConfigFile]; } -(void)setIsAllowCellularPlay:(BOOL)isAllowCellularPlay { _isAllowCellularPlay = isAllowCellularPlay; [self saveUserConfigFile]; } - (void)setIsShowUserExperiencePlan:(BOOL)isShowUserExperiencePlan { _isShowUserExperiencePlan = isShowUserExperiencePlan; [self saveUserConfigFile]; } - (void)setOpenDebugModeTime:(NSTimeInterval)openDebugModeTime { _openDebugModeTime = openDebugModeTime; [self saveUserConfigFile]; } - (NSString *)language { NSString *currentLanguage = [NSLocale preferredLanguages].firstObject; if ([currentLanguage hasPrefix:@"zh"]) { currentLanguage = [currentLanguage containsString:@"zh-Hant"] ? @"zh-TW" : @"zh-CN"; } _language = currentLanguage; return _language; } - (NSString *)sound { if (!_sound || [_timeFormat isEqualToString:@""]) { _sound = @""; } return _sound; } - (NSString *)timeFormat { if (!_timeFormat || [_timeFormat isEqualToString:@""]) { _timeFormat = @"yyyy-MM-dd HH:mm:ss"; } return _timeFormat; } - (int)timezoneOffset { if (_timezoneOffset == 0) { NSTimeZone* destinationTimeZone = [NSTimeZone localTimeZone] ;///获取当前时区信息 NSInteger sourceGMTOffset = [destinationTimeZone secondsFromGMT]; _timezoneOffset = (int)sourceGMTOffset; } return _timezoneOffset; } - (BOOL)bAlertBindEmail { if (_bAlertBindEmail) { return !(_email.length > 0); } else { return _bAlertBindEmail; } } - (void)setOpenUserExperience:(BOOL)openUserExperience { _openUserExperience = openUserExperience; [self saveUserConfigFile]; } - (BOOL)openDebugMode { if (_openDebugModeTime <= 0) { // 没有开启时间,直接返回false return false; } NSTimeInterval currentTime = [[NSDate date] timeIntervalSince1970]; NSTimeInterval oneDay = 24*60*60; if (currentTime - _openDebugModeTime > oneDay) { // 超过一天,开关关闭 _openDebugModeTime = 0; return false; }else { // 开关为开启状态 return true; } } #pragma mark - Device - (BOOL)deviceCanUpdateWithDeviceId:(NSString *)deviceId currentVersion:(NSString *)currentVersion newVersion:(NSString *)newVersion { BOOL canUpdate = YES; if(_deviceVersionDictionary == nil) { _deviceVersionDictionary = [NSMutableDictionary dictionaryWithCapacity:1]; } NSString *oldVersion = [_deviceVersionDictionary objectForKey:deviceId]; if (oldVersion == NULL) { oldVersion = currentVersion; [_deviceVersionDictionary setValue:currentVersion forKey:deviceId]; [self saveUserConfigFile]; } if ([oldVersion isEqualToString:newVersion]) { canUpdate = NO; } return canUpdate; } - (void)deviceAddIgnoreVersionWithDeviceId:(NSString *)deviceId version:(NSString *)version { [_deviceVersionDictionary setValue:version forKey:deviceId]; [self saveUserConfigFile]; } #pragma mark - SSID - (BOOL)ssidIsSaved:(NSString *)ssid { if (_mSSIDMutableArray.count == 0) { return NO; } BOOL isSaved = NO; for (NSDictionary *dict in _mSSIDMutableArray) { NSString *mSSID = dict[@"mSSID"]; if ([mSSID isEqualToString:ssid]) { isSaved = YES; break; } } return isSaved; } - (NSString *)ssidPwdBy:(NSString *)ssid { if (_mSSIDMutableArray.count == 0) { return nil; } NSString *ssidPwd = nil; for (NSDictionary *dict in _mSSIDMutableArray) { NSString *mSSID = dict[@"mSSID"]; if ([mSSID isEqualToString:ssid]) { ssidPwd = dict[@"mSSIDPWD"]; break; } } return ssidPwd; } - (void)addSSID:(NSString *)ssid ssidPwd:(NSString *)ssidPwd { if (ssid == nil) { ssid = @""; } if (ssidPwd == nil) { ssidPwd = @""; } NSDictionary *dict = @{@"mSSID":ssid, @"mSSIDPWD":ssidPwd}; if (_mSSIDMutableArray == nil) { _mSSIDMutableArray = [NSMutableArray arrayWithCapacity:3]; } //如果有相同的,先删除旧的 if ([self ssidPwdBy:ssid]) { [self removeSSID:ssid]; } [_mSSIDMutableArray addObject:dict]; [self saveUserConfigFile]; } - (void)removeSSID:(NSString *)ssid { if (_mSSIDMutableArray.count == 0) { return; } NSDictionary *ssidDict = [NSDictionary dictionary]; for (NSDictionary *dict in _mSSIDMutableArray) { NSString *mSSID = dict[@"mSSID"]; if ([mSSID isEqualToString:ssid]) { ssidDict = dict; break; } } [_mSSIDMutableArray removeObject:ssidDict]; [self saveUserConfigFile]; } - (void)clearCachedSSID { [_mSSIDMutableArray removeAllObjects]; [self saveUserConfigFile]; } - (void)resetMemoryCache { _email = @""; _phone = @""; _nickname = @""; _avatarMd5 = @""; _avatarUrl = @""; _countryCode = @""; _fbNickname = @""; _openUserExperience = NO; _isSupportAd = NO; _showExperiencePlanGuide = YES; [_mSSIDMutableArray removeAllObjects]; } @end