BDFaceAdjustParamsFileManager.m 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. //
  2. // BDFaceAdjustParamsFileManager.m
  3. // FaceSDKSample_IOS
  4. //
  5. // Created by Zhang,Jian(MBD) on 2020/12/1.
  6. // Copyright © 2020 Baidu. All rights reserved.
  7. //
  8. #import "BDFaceAdjustParamsFileManager.h"
  9. #import "BDFaceAdjustParams.h"
  10. #import "BDFaceCalculateTool.h"
  11. #import "BDFaceAdjustParams.h"
  12. #import "BDFaceAdjustParamsTool.h"
  13. static NSString *const BDFaceAdjustConfigFileName = @"BDFaceParamsConfig";
  14. static NSString *const BDFaceAdjustConfigFileSurfix = @"json";
  15. static NSString *const BDFaceAdjustConfigCustomFileName = @"BDFaceParamsConfigCache.plist";
  16. static NSString *const BDFaceAjustParamsNormalPageJsonKey = @"normal";
  17. static NSString *const BDFaceAjustParamsLoosePageJsonKey = @"loose";
  18. static NSString *const BDFaceAjustParamsStrictPageJsonKey = @"strict";
  19. static NSString *const BDFaceParamsConfigCacheForCustomConfigDicKey = @"BDFaceParamsConfigCacheForCustomConfigDicKey"; /// 保存的自定义参数的key
  20. static NSString *const BDFaceParamsConfigCacheForUserSelectKey = @"BDFaceParamsConfigCacheForUserSelectKey"; /// select key
  21. @interface BDFaceAdjustParamsFileManager()
  22. @end
  23. @implementation BDFaceAdjustParamsFileManager
  24. + (instancetype)sharedInstance {
  25. static BDFaceAdjustParamsFileManager *instance = nil;
  26. static dispatch_once_t onceToken;
  27. dispatch_once(&onceToken, ^{
  28. instance = [[BDFaceAdjustParamsFileManager alloc] init];
  29. });
  30. return instance;
  31. }
  32. - (instancetype)init {
  33. self = [super init];
  34. if (self) {
  35. [self loadConfigFile];
  36. [self readCustomCongfig];
  37. [self createCachePlist];
  38. }
  39. return self;
  40. }
  41. /// 读取配置文件
  42. - (void)loadConfigFile {
  43. NSString *path = [[NSBundle mainBundle] pathForResource:BDFaceAdjustConfigFileName ofType:BDFaceAdjustConfigFileSurfix];
  44. NSDictionary *dic = nil;
  45. @try {
  46. NSData *data = [[NSData alloc] initWithContentsOfFile:path];
  47. dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
  48. if (dic && [dic isKindOfClass:[NSDictionary class]]) {
  49. NSDictionary *normal = dic[BDFaceAjustParamsNormalPageJsonKey];
  50. NSDictionary *loose = dic[BDFaceAjustParamsLoosePageJsonKey];
  51. NSDictionary *strict = dic[BDFaceAjustParamsStrictPageJsonKey];
  52. _normalConfig = [[BDFaceAdjustParams alloc] initWithDic:normal];
  53. _looseConfig = [[BDFaceAdjustParams alloc] initWithDic:loose];
  54. _strictConfig = [[BDFaceAdjustParams alloc] initWithDic:strict];
  55. }
  56. }@catch (NSException *exception) {
  57. dic = nil;
  58. _normalConfig = nil;
  59. _looseConfig = nil;
  60. _strictConfig = nil;
  61. } @finally {
  62. }
  63. }
  64. /// 创建缓存文件
  65. - (void)createCachePlist {
  66. NSFileManager *fileManager = [NSFileManager defaultManager];
  67. NSMutableDictionary *desDic;
  68. NSString *path = [self.class cacheConfigFilePath];
  69. if (![fileManager fileExistsAtPath:path]) {
  70. desDic = [[NSMutableDictionary alloc] init];
  71. [desDic writeToFile:path atomically:YES];
  72. }
  73. }
  74. + (NSString *)cacheConfigFilePath {
  75. NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
  76. NSString *documentsDirectory = [paths objectAtIndex:0];
  77. NSString *path = [documentsDirectory stringByAppendingPathComponent:BDFaceAdjustConfigCustomFileName];
  78. return path;
  79. }
  80. - (NSString *)numberString:(float)value {
  81. NSString *str = [NSString stringWithFormat:@"%0.2f", value];
  82. return [NSString stringWithFormat:@"%@", @(str.floatValue)];
  83. }
  84. - (void)setSelectType:(BDFaceSelectType)selectType {
  85. if (_selectType != selectType) {
  86. _selectType = selectType;
  87. [self saveUserSelection:selectType];
  88. }
  89. }
  90. - (BDFaceAdjustParams *)readCustomCongfig {
  91. BDFaceAdjustParams *config = nil;
  92. NSDictionary *dic = [[NSDictionary alloc] initWithContentsOfFile:[self.class cacheConfigFilePath]];
  93. if ([BDFaceCalculateTool noNullDic:dic]) {
  94. NSDictionary *customDic = dic[BDFaceParamsConfigCacheForCustomConfigDicKey];
  95. if ([BDFaceCalculateTool noNullDic:customDic]) {
  96. config = [[BDFaceAdjustParams alloc] initWithDic:customDic];
  97. }
  98. }
  99. if (config == nil) {
  100. config = [self.normalConfig copy];
  101. }
  102. _customConfig = config;
  103. return config;
  104. }
  105. /// 持久化自定义文件
  106. - (void)saveToCustomConfigFile:(BDFaceAdjustParams *)config {
  107. _customConfig = [config copy];
  108. NSDictionary *dic = config.toDic;
  109. [self createCachePlist];
  110. NSDictionary *beforeDic = [[NSDictionary alloc] initWithContentsOfFile:[self.class cacheConfigFilePath]];
  111. NSMutableDictionary *muDic = nil;
  112. if (beforeDic) {
  113. muDic = [NSMutableDictionary dictionaryWithDictionary:beforeDic];
  114. [muDic setValue:dic forKey:BDFaceParamsConfigCacheForCustomConfigDicKey];
  115. } else {
  116. muDic = [NSMutableDictionary dictionary];
  117. [muDic setValue:dic forKey:BDFaceParamsConfigCacheForCustomConfigDicKey];
  118. }
  119. if ([BDFaceCalculateTool noNullDic:muDic]) {
  120. @try {
  121. [muDic writeToFile:[self.class cacheConfigFilePath] atomically:NO];
  122. } @catch (NSException *exception) {
  123. [muDic writeToFile:[self.class cacheConfigFilePath] atomically:YES];
  124. } @finally {
  125. }
  126. }
  127. }
  128. + (BDFaceSelectType)readCacheSelect {
  129. NSString *select = nil;
  130. BDFaceSelectType selectType;
  131. NSDictionary *dic = [[NSDictionary alloc] initWithContentsOfFile:[self.class cacheConfigFilePath]];
  132. if ([BDFaceCalculateTool noNullDic:dic]) {
  133. select = dic[BDFaceParamsConfigCacheForUserSelectKey];
  134. }
  135. if (select) {
  136. selectType = select.integerValue;
  137. } else {
  138. selectType = BDFaceSelectTypeNormal;
  139. }
  140. return selectType;
  141. }
  142. + (NSString *)currentSelectionText {
  143. BDFaceSelectType type = [BDFaceAdjustParamsFileManager readCacheSelect];
  144. NSString *text = @"";
  145. switch (type) {
  146. case BDFaceSelectTypeLoose:
  147. {
  148. text = @"宽松";
  149. }
  150. break;
  151. case BDFaceSelectTypeNormal:
  152. {
  153. text = @"正常";
  154. }
  155. break;
  156. case BDFaceSelectTypeStrict:
  157. {
  158. text = @"严格";
  159. }
  160. break;
  161. case BDFaceSelectTypeCustom:
  162. {
  163. text = @"自定义";
  164. }
  165. break;
  166. default:
  167. break;
  168. }
  169. return text;
  170. }
  171. - (void)saveUserSelection:(BDFaceSelectType)select {
  172. [self createCachePlist];
  173. NSDictionary *dic = [[NSDictionary alloc] initWithContentsOfFile:[self.class cacheConfigFilePath]];
  174. NSMutableDictionary *muDic = nil;
  175. if (dic) {
  176. muDic = [NSMutableDictionary dictionaryWithDictionary:dic];
  177. [muDic setValue:[NSString stringWithFormat:@"%d", (int)select] forKey:BDFaceParamsConfigCacheForUserSelectKey];
  178. } else {
  179. muDic = [NSMutableDictionary dictionary];
  180. [muDic setValue:[NSString stringWithFormat:@"%d", (int)select] forKey:BDFaceParamsConfigCacheForUserSelectKey];
  181. }
  182. if ([BDFaceCalculateTool noNullDic:muDic]) {
  183. [muDic writeToFile:[self.class cacheConfigFilePath] atomically:YES];
  184. }
  185. }
  186. - (BDFaceAdjustParams *)configBySelection:(BDFaceSelectType)type {
  187. BDFaceAdjustParams *params = [BDFaceAdjustParamsFileManager sharedInstance].normalConfig;
  188. switch (type) {
  189. case BDFaceSelectTypeLoose:
  190. {
  191. params = self.looseConfig;
  192. }
  193. break;
  194. case BDFaceSelectTypeStrict:
  195. {
  196. params = self.strictConfig;
  197. }
  198. break;
  199. case BDFaceSelectTypeCustom:
  200. {
  201. params = self.customConfig;
  202. }
  203. break;
  204. default:
  205. break;
  206. }
  207. return params;
  208. }
  209. @end