TIMenuPlistManager.m 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308
  1. //
  2. // TIMenuPlistManager.m
  3. // TiSDKDemo
  4. //
  5. // Created by iMacA1002 on 2019/12/3.
  6. // Copyright © 2020 Tillusory Tech. All rights reserved.
  7. //
  8. #import "TIMenuPlistManager.h"
  9. #import "TIUITool.h"
  10. #import "TISetSDKParameters.h"
  11. @interface TIMenuPlistManager ()
  12. @end
  13. static TIMenuPlistManager *shareManager = NULL;
  14. static dispatch_once_t token;
  15. @implementation TIMenuPlistManager
  16. // MARK: --单例初始化方法--
  17. + (TIMenuPlistManager *)shareManager {
  18. dispatch_once(&token, ^{
  19. shareManager = [[TIMenuPlistManager alloc] init];
  20. });
  21. return shareManager;
  22. }
  23. +(void)releaseShareManager{
  24. token = 0; // 只有置成0,GCD才会认为它从未执行过.它默认为0.这样才能保证下次再次调用shareInstance的时候,再次创建对象.
  25. // [shareManager release];
  26. shareManager = nil;
  27. }
  28. - (instancetype)init
  29. {
  30. self = [super init];
  31. if (self) {
  32. [self getResourceFromJsonName:@"sticker"];
  33. [self getResourceFromJsonName:@"gift"]; //网络下载
  34. [self getResourceFromJsonName:@"watermark"];
  35. [self getResourceFromJsonName:@"mask"];
  36. [self getResourceFromJsonName:@"greenscreen"];
  37. // self.mainModeArr = [TIMenuPlistManager initJsonModeForPath:@"TIMenu"];
  38. //
  39. // self.meiyanModeArr = [TIMenuPlistManager initJsonModeForPath:@"TIMeiYanMenu"];
  40. //
  41. // self.meixingModeArr = [TIMenuPlistManager initJsonModeForPath:@"TIMeiXingMenu"];
  42. //
  43. // self.lvjingModeArr = [TIMenuPlistManager initJsonModeForPath:@"TILvJingMenu"];
  44. //
  45. // self.doudongModeArr = [TIMenuPlistManager initJsonModeForPath:@"TIDouDongMenu"];
  46. //
  47. // self.hahajingModeArr = [TIMenuPlistManager initJsonModeForPath:@"TIHaHaJingMenu"];
  48. //
  49. // self.tiezhiModeArr = [TIMenuPlistManager initJsonModeForPath:@"stickers"];
  50. //
  51. // self.liwuModeArr = [TIMenuPlistManager initJsonModeForPath:@"gifts"];
  52. //
  53. // self.shuiyinModeArr = [TIMenuPlistManager initJsonModeForPath:@"watermarks"];
  54. //
  55. // self.mianjuModeArr = [TIMenuPlistManager initJsonModeForPath:@"masks"];
  56. self.mainModeArr = [self jsonModeForPath:@"TIMenu"];
  57. self.meiyanModeArr = [self jsonModeForPath:@"TIMeiYanMenu"];
  58. self.meixingModeArr = [self jsonModeForPath:@"TIMeiXingMenu"];
  59. self.lvjingModeArr = [self jsonModeForPath:@"TILvJingMenu"];
  60. self.doudongModeArr = [self jsonModeForPath:@"TIDouDongMenu"];
  61. self.hahajingModeArr = [self jsonModeForPath:@"TIHaHaJingMenu"];
  62. self.tiezhiModeArr = [self jsonModeForPath:@"stickers"];
  63. self.liwuModeArr = [self jsonModeForPath:@"gifts"];
  64. self.shuiyinModeArr = [self jsonModeForPath:@"watermarks"];
  65. self.mianjuModeArr = [self jsonModeForPath:@"masks"];
  66. self.lvmuModeArr = [self jsonModeForPath:@"greenscreens"];
  67. [TISetSDKParameters initSDK];
  68. }
  69. return self;
  70. }
  71. -(NSArray *)jsonModeForPath:(NSString *)path
  72. {
  73. NSMutableDictionary *plistDictionary;
  74. //获取配置文件
  75. NSString *plistPath = [[NSBundle mainBundle] pathForResource:path ofType:@"json"];
  76. NSString *filePatch = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.json",path]];
  77. NSFileManager *fileManager = [NSFileManager defaultManager];
  78. // if ([fileManager fileExistsAtPath:filePatch])
  79. // {
  80. // NSLog(ASLocalizedString(@"沙盒中存在 %@"),path);
  81. // plistDictionary = [TIUITool getJsonDataForPath:filePatch];
  82. // }
  83. // else
  84. // {
  85. // NSLog(ASLocalizedString(@"沙盒中不存在 %@"),path);
  86. //// 每次启动默认加载本地配置
  87. plistDictionary = [TIUITool getJsonDataForPath:plistPath];
  88. [TIUITool setWriteJsonDic:plistDictionary toPath:filePatch];
  89. // }
  90. NSArray *plstArr = [plistDictionary objectForKey:@"menu"];
  91. NSMutableArray *modeArr = [NSMutableArray arrayWithCapacity:plstArr.count];
  92. for (NSDictionary *dic in plstArr) {
  93. TIMenuMode *mode = [TIMenuMode applicationWithDic:dic];
  94. if ([path isEqualToString:@"stickers"]||[path isEqualToString:@"gifts"]||[path isEqualToString:@"watermarks"]||[path isEqualToString:@"masks"]||[path isEqualToString:@"greenscreens"]) {
  95. NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
  96. NSString *folderName = [defaults objectForKey:[NSString stringWithFormat:@"%@%ld",mode.name,(long)mode.menuTag]];
  97. [defaults synchronize];
  98. if (folderName&&folderName.length!=0) {
  99. NSString *folderPath = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@",folderName]];
  100. if ([fileManager fileExistsAtPath:folderPath])
  101. {
  102. mode.downloaded = TI_DOWNLOAD_STATE_CCOMPLET;
  103. [self modifyObject:@(TI_DOWNLOAD_STATE_CCOMPLET) forKey:@"downloaded" In:mode.menuTag WithPath:[NSString stringWithFormat:@"%@.json",path]];
  104. }
  105. }
  106. }
  107. [modeArr addObject:mode];
  108. }
  109. return modeArr;
  110. }
  111. -(NSArray *)modifyObject:(id)obj forKey:(NSString *)key In:(NSUInteger)index WithPath:(NSString *)path{
  112. NSString *filePatch = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@",path]];
  113. NSMutableDictionary *plistDictionary = [TIUITool getJsonDataForPath:filePatch];
  114. // //修改字典里面的内容,先按照结构取到你想修改内容的小字典
  115. NSMutableArray *nmArr = [NSMutableArray arrayWithArray:[plistDictionary objectForKey:@"menu"]];
  116. NSMutableDictionary *nmDic = [NSMutableDictionary dictionaryWithDictionary:nmArr[index]];
  117. [nmDic setObject:obj forKey:key];
  118. //修改完成组建成大字典写入本地
  119. [nmArr setObject:nmDic atIndexedSubscript:index];
  120. [plistDictionary setValue:nmArr forKey:@"menu"];
  121. [TIUITool setWriteJsonDic:plistDictionary toPath:filePatch];
  122. //修改mode数组
  123. NSMutableArray *modeArr;
  124. if([@"TIMenu.json" rangeOfString:path].location !=NSNotFound)//_roaldSearchText
  125. {
  126. modeArr = [NSMutableArray arrayWithArray:self.mainModeArr];
  127. }
  128. else if([@"TIMeiYanMenu.json" rangeOfString:path].location !=NSNotFound)
  129. {
  130. modeArr = [NSMutableArray arrayWithArray:self.meiyanModeArr];
  131. }
  132. else if([@"TIMeiXingMenu.json" rangeOfString:path].location !=NSNotFound)
  133. {
  134. modeArr = [NSMutableArray arrayWithArray:self.meixingModeArr];
  135. }
  136. else if([@"TILvJingMenu.json" rangeOfString:path].location !=NSNotFound)
  137. {
  138. modeArr = [NSMutableArray arrayWithArray:self.lvjingModeArr];
  139. }
  140. else if([@"TIDouDongMenu.json" rangeOfString:path].location !=NSNotFound)
  141. {
  142. modeArr = [NSMutableArray arrayWithArray:self.doudongModeArr];
  143. }
  144. else if([@"TIHaHaJingMenu.json" rangeOfString:path].location !=NSNotFound)
  145. {
  146. modeArr = [NSMutableArray arrayWithArray:self.hahajingModeArr];
  147. }
  148. else if([@"stickers.json" rangeOfString:path].location !=NSNotFound)
  149. {
  150. modeArr = [NSMutableArray arrayWithArray:self.tiezhiModeArr];
  151. }
  152. else if([@"gifts.json" rangeOfString:path].location !=NSNotFound)
  153. {
  154. modeArr = [NSMutableArray arrayWithArray:self.liwuModeArr];
  155. }
  156. else if([@"watermarks.json" rangeOfString:path].location !=NSNotFound)
  157. {
  158. modeArr = [NSMutableArray arrayWithArray:self.shuiyinModeArr];
  159. }
  160. else if([@"masks.json" rangeOfString:path].location !=NSNotFound)
  161. {
  162. modeArr = [NSMutableArray arrayWithArray:self.mianjuModeArr];
  163. }
  164. else if([@"greenscreens.json" rangeOfString:path].location !=NSNotFound)
  165. {
  166. modeArr = [NSMutableArray arrayWithArray:self.lvmuModeArr];
  167. }
  168. if (modeArr.count) {
  169. TIMenuMode *dome = [TIMenuMode applicationWithDic:nmDic];
  170. [modeArr setObject:dome atIndexedSubscript:index];
  171. }
  172. return modeArr;
  173. }
  174. -(void)getResourceFromJsonName:(NSString *)name{
  175. NSString *stickerPath = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:name];
  176. if (![[NSFileManager defaultManager] fileExistsAtPath:stickerPath]) {
  177. [[NSFileManager defaultManager] createDirectoryAtPath:stickerPath withIntermediateDirectories:NO attributes:nil error:nil];
  178. }
  179. NSString *bundleJson = @"";
  180. if ([name isEqualToString:@"sticker"])
  181. {
  182. bundleJson = @"stickers.json";
  183. }
  184. else if([name isEqualToString:@"gift"])
  185. {
  186. bundleJson = @"gifts.json";
  187. }
  188. else if ([name isEqualToString:@"watermark"])
  189. {
  190. bundleJson = @"watermarks.json";
  191. }
  192. else if([name isEqualToString:@"mask"])
  193. {
  194. bundleJson = @"masks.json";
  195. }
  196. else if([name isEqualToString:@"greenscreen"])
  197. {
  198. bundleJson = @"greenscreens.json";
  199. }
  200. NSString *configPath = [[NSBundle mainBundle].bundlePath stringByAppendingPathComponent:bundleJson];
  201. if (![[NSFileManager defaultManager] fileExistsAtPath:configPath isDirectory:NULL]) {
  202. NSLog(@"The general configuration file for the json in the resource directory does not exist");
  203. return ;
  204. }
  205. NSError *error = nil;
  206. NSData *data = [NSData dataWithContentsOfFile:configPath];
  207. NSDictionary *oldDict = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
  208. if (!oldDict || error) {
  209. NSLog(@"Resource directory under the general configuration file to read the jsonS failed:%@",error);
  210. return ;
  211. }
  212. //拷贝本地贴纸到沙盒
  213. NSString *localPath =
  214. [[[NSBundle mainBundle] pathForResource:@"TiSDKResource" ofType:@"bundle"] stringByAppendingPathComponent:name];
  215. NSArray *dirArr = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:localPath error:NULL];
  216. for (NSString *stickerName in dirArr) {
  217. if (![[NSFileManager defaultManager] fileExistsAtPath:[stickerPath stringByAppendingPathComponent:stickerName]]) {
  218. //判断bundle中是否含有json文件 如果有 将json文件赋值给UITool 配置json文件
  219. if ([stickerName containsString:@".json"]) {
  220. NSLog(@"bundle.json-----%@",stickerName);
  221. }
  222. [[NSFileManager defaultManager] copyItemAtPath:[localPath stringByAppendingPathComponent:stickerName] toPath:[stickerPath stringByAppendingPathComponent:stickerName] error:NULL];
  223. }
  224. //修改配置文件json
  225. }
  226. }
  227. @end
  228. @implementation TIMenuMode
  229. - (instancetype)initWithDic:(NSDictionary *)dic
  230. {
  231. if (self = [super init]) {
  232. // KVC
  233. [self setValuesForKeysWithDictionary:dic];
  234. }
  235. return self;
  236. }
  237. +(instancetype)applicationWithDic:(NSDictionary*)dic
  238. {
  239. TIMenuMode * mode = [[TIMenuMode alloc] initWithDic:dic];
  240. return mode;
  241. }
  242. @end