JLBubbleManager.m 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303
  1. //
  2. // JLBubbleManager.m
  3. // shiku_im
  4. //
  5. // Created by JayLuo on 2020/4/17.
  6. // Copyright © 2020 Reese. All rights reserved.
  7. //
  8. #import "JLBubbleManager.h"
  9. #import "FMDatabase.h"
  10. static JLBubbleManager *_manager;
  11. @implementation JLBubbleManager
  12. + (instancetype)sharedManager
  13. {
  14. static dispatch_once_t onceToken;
  15. dispatch_once(&onceToken, ^{
  16. _manager = [[self alloc] init];
  17. });
  18. return _manager;
  19. }
  20. + (instancetype)allocWithZone:(struct _NSZone *)zone{
  21. static dispatch_once_t onceToken;
  22. dispatch_once(&onceToken, ^{
  23. _manager = [super allocWithZone:zone];
  24. });
  25. return _manager;
  26. }
  27. - (id)copyWithZone:(NSZone *)zone{
  28. return _manager;
  29. }
  30. // 获取所有图片
  31. - (void)loadImagesData {
  32. }
  33. - (void)didServerResultSucces:(JXConnection*)aDownload dict:(NSDictionary*)dict array:(NSArray*)array1{
  34. }
  35. - (FMDatabase*)openResouceDb {
  36. if(_db && [_db goodConnection]){
  37. return _db;
  38. }
  39. NSString* t = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
  40. NSString* s = [NSString stringWithFormat:@"%@/%@.db",t,@"Resouce"];
  41. _db = [[FMDatabase alloc] initWithPath:s];
  42. if (![_db open]) {
  43. NSLog(@"数据库打开失败");
  44. return nil;
  45. };
  46. NSLog(@"数据库路径:%@",_db.databasePath);
  47. return _db;
  48. }
  49. // 创建所有VIP表
  50. - (BOOL)checkGradeTableCreatedInDb:(FMDatabase *)db {
  51. NSString *createStr=[NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS 'grade' ('gradeIndex' VARCHAR PRIMARY KEY NOT NULL UNIQUE, 'avatarUrl' VARCHAR, 'name' VARCHAR, 'rankUrl' VARCHAR, 'grade' VARCHAR)"];
  52. BOOL worked = [db executeUpdate:createStr];
  53. return worked;
  54. }
  55. // 更新VIP表
  56. - (BOOL)updateGradeTable {
  57. FMDatabase* db = [self openResouceDb];
  58. [self checkGradeTableCreatedInDb:db];
  59. // self.gradeIndex, self.avatarUrl, self.id, self.name, self.rankUrl, self.grade
  60. NSString* sql = [NSString stringWithFormat:@"update grade set avatarUrl=?,name=?,rankUrl=?,grade=? where gradeIndex=?"];
  61. BOOL worked = [db executeUpdate:sql,_avatarUrl,_name, _rankUrl, _grade,_gradeIndex];
  62. if (!worked) {
  63. NSLog(@"update grade set avatarUrl=?,name=?,rankUrl=? 。。 error = %@", [db lastErrorMessage]);
  64. }
  65. return worked;
  66. }
  67. - (BOOL)insertGradeTable {
  68. FMDatabase* db = [self openResouceDb];
  69. [self checkGradeTableCreatedInDb:db];
  70. /// 修改了修改了
  71. // NSString* sql= [NSString stringWithFormat:@"select * from grade where gradeIndex=%@",self.gradeIndex];
  72. // FMResultSet *rs=[db executeQuery:sql];
  73. // while ([rs next]) {
  74. // //不重复保存
  75. // return NO;
  76. // }
  77. NSString *insertStr = [NSString stringWithFormat:@"INSERT INTO 'grade' ('gradeIndex', 'avatarUrl', 'name', 'rankUrl', 'grade') VALUES (?,?,?,?,?);"];
  78. BOOL worked = [db executeUpdate:insertStr,_gradeIndex, self.avatarUrl, self.name, self.rankUrl, _grade];
  79. if (!worked) {
  80. worked = [self updateGradeTable];
  81. }
  82. return worked;
  83. }
  84. - (JLBubbleManager *)fechGradeByGrade:(NSString *)grade {
  85. NSString* sql = [NSString stringWithFormat:@"select * from grade where gradeIndex = '%@'", grade];
  86. FMDatabase* db = [self openResouceDb];
  87. [self checkGradeTableCreatedInDb:db];
  88. FMResultSet *rs=[db executeQuery:sql];
  89. while ([rs next]) {
  90. [self labelFromDataset:self rs:rs];
  91. return self;
  92. }
  93. [rs close];
  94. return nil;
  95. }
  96. - (JLBubbleManager *)fechGradeByBubbleFontId:(NSString *)bubbleFontId {
  97. NSString* sql = [NSString stringWithFormat:@"select * from bubbleFont where id = '%@'", bubbleFontId];
  98. FMDatabase* db = [self openResouceDb];
  99. [self checkBubbleFontTableCreatedInDb:db];
  100. FMResultSet *rs=[db executeQuery:sql];
  101. while ([rs next]) {
  102. [self bubbleFontFromDataset:self rs:rs];
  103. return self;
  104. }
  105. [rs close];
  106. return nil;
  107. }
  108. -(void)labelFromDataset:(JLBubbleManager*)obj rs:(FMResultSet*)rs{
  109. obj.gradeIndex=[rs stringForColumn:@"gradeIndex"];
  110. obj.avatarUrl=[rs stringForColumn:@"avatarUrl"];
  111. obj.name=[rs stringForColumn:@"name"];
  112. obj.rankUrl=[rs stringForColumn:@"rankUrl"];
  113. obj.grade=[rs stringForColumn:@"grade"];
  114. }
  115. -(void)bubbleFontFromDataset:(JLBubbleManager*)obj rs:(FMResultSet*)rs{
  116. obj.iosLeftUrl=[rs stringForColumn:@"iosLeftUrl"];
  117. obj.iosRightUrl=[rs stringForColumn:@"iosRightUrl"];
  118. obj.code=[rs stringForColumn:@"code"];
  119. obj.color=[rs stringForColumn:@"color"];
  120. }
  121. // 创建所有气泡表
  122. - (BOOL)checkBubbleFontTableCreatedInDb:(FMDatabase *)db {
  123. NSString *createStr=[NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS 'bubbleFont' ('id' VARCHAR PRIMARY KEY NOT NULL UNIQUE, 'iosLeftUrl' VARCHAR, 'iosRightUrl' VARCHAR, 'name' VARCHAR, 'code' VARCHAR, 'color' VARCHAR)"];
  124. BOOL worked = [db executeUpdate:createStr];
  125. return worked;
  126. }
  127. // 更新气泡表
  128. - (BOOL)updateBubbleFontTable {
  129. FMDatabase* db = [self openResouceDb];
  130. [self checkBubbleFontTableCreatedInDb:db];
  131. // self.id, self.iosLeftUrl, self.iosRightUrl, self.name, self.code, self.color
  132. NSString* sql = [NSString stringWithFormat:@"update bubbleFont set iosLeftUrl=?,iosRightUrl=?,name=?,code=?,color=? where id=?"];
  133. BOOL worked = [db executeUpdate:sql,self.iosLeftUrl, self.iosRightUrl, self.name, self.code, self.color,self.id];
  134. return worked;
  135. }
  136. // 插入气泡表 修改了气泡
  137. - (BOOL)insertBubbleFontTable {
  138. FMDatabase* db = [self openResouceDb];
  139. [self checkBubbleFontTableCreatedInDb:db];
  140. // self.id, self.iosLeftUrl, self.iosRightUrl, self.name, self.code, self.color
  141. NSString *insertStr = [NSString stringWithFormat:@"INSERT INTO 'bubbleFont' ('id', 'iosLeftUrl', 'iosRightUrl', 'name', 'code', 'color') VALUES (?,?,?,?,?,?);"];
  142. BOOL worked = [db executeUpdate:insertStr,self.id, self.iosLeftUrl, self.iosRightUrl, self.name, self.code, self.color];
  143. if (!worked) {
  144. worked = [self updateBubbleFontTable];
  145. }
  146. return worked;
  147. }
  148. - (void)cacheBubbleImage:(NSArray <NSURL *>*)imageUrls {
  149. [SDWebImagePrefetcher sharedImagePrefetcher].maxConcurrentDownloads = 100;
  150. [[SDWebImagePrefetcher sharedImagePrefetcher] prefetchURLs:imageUrls progress:^(NSUInteger noOfFinishedUrls, NSUInteger noOfTotalUrls) {
  151. } completed:^(NSUInteger noOfFinishedUrls, NSUInteger noOfSkippedUrls) {
  152. // [g_App showAlert:@"图片预下载完成"];
  153. }];
  154. }
  155. - (UIImage *)getBubblePath:(NSString *)path BubbleType:(BubbleType)type {
  156. NSString *key = [[SDWebImageManager sharedManager] cacheKeyForURL:[NSURL URLWithString:path]];
  157. UIImage *image = [[SDImageCache sharedImageCache] imageFromCacheForKey:key];
  158. CGFloat top = image.size.height * 0.5;
  159. CGFloat left = image.size.width * 0.5;
  160. CGFloat bottom = image.size.height * 0.5;
  161. CGFloat right = image.size.width * 0.5;
  162. if (image == nil) {
  163. switch (type) {
  164. case BubbleTypeLeft:
  165. image = [[UIImage imageNamed:@"chat_bg_white"]stretchableImageWithLeftCapWidth:stretch topCapHeight:stretch];
  166. break;
  167. case BubbleTyperight:
  168. image = [[UIImage imageNamed:@"chat_bg_blue"]stretchableImageWithLeftCapWidth:stretch topCapHeight:stretch];
  169. break;
  170. default:
  171. break;
  172. }
  173. }else {
  174. NSLog(@"宽-%f---高%f-缩放-%f前",image.size.width, image.size.height,image.scale);
  175. // NSData * imgData = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://47.57.16.13:8089/temp/20200423/36343824-79e9-48b3-8526-22c963cf80c2.png"]];
  176. // CGDataProviderRef provider = CGImageGetDataProvider(image.CGImage);
  177. // NSData* data = (id)CFBridgingRelease(CGDataProviderCopyData(provider));
  178. // NSData * imgData = UIImagePNGRepresentation(image);
  179. // image = [UIImage imageWithData:imgData scale:3];
  180. image = [UIImage imageWithCGImage:image.CGImage scale:3 orientation:(UIImageOrientationUp)];
  181. NSLog(@"宽-%f---高%f-缩放-%f后",image.size.width, image.size.height,image.scale);
  182. switch (type) {
  183. case BubbleTypeLeft:{
  184. image = [image resizableImageWithCapInsets:(UIEdgeInsetsMake(38/3, 17/3, 50/3, 50/3)) resizingMode:(UIImageResizingModeStretch)];
  185. // image = [image resizableImageWithCapInsets:(UIEdgeInsetsMake(114, 55, 63, 120)) resizingMode:(UIImageResizingModeTile)];
  186. // image = [UIImage imageNamed:@"ios_new_left"];
  187. }
  188. break;
  189. case BubbleTyperight:
  190. image = [image resizableImageWithCapInsets:(UIEdgeInsetsMake(39/3, 39/3, 50/3, 20/3)) resizingMode:(UIImageResizingModeStretch)];
  191. break;
  192. default:
  193. break;
  194. }
  195. }
  196. return image;
  197. }
  198. - (UIFont *)getBubbleFontNameIndex:(int)index {
  199. if (index == -1) {
  200. return [UIFont systemFontOfSize:g_constant.chatFont];
  201. }else {
  202. // 获取本地
  203. NSBundle *bundle = [NSBundle mainBundle];
  204. NSString *plistPath = [bundle pathForResource:@"FontNameList" ofType:@"plist"];
  205. //获取本地文件列表 NSArray
  206. NSDictionary *fontNameList = [[NSDictionary alloc] initWithContentsOfFile:plistPath];
  207. NSString *fontName = [fontNameList valueForKeyPath:[NSString stringWithFormat:@"%d",index]];
  208. return [UIFont fontWithName:fontName size:g_constant.chatFont];
  209. }
  210. }
  211. //(以#开头)转换为UIColor
  212. - (UIColor *)getBubbleFontColor:(NSString *)color
  213. {
  214. NSString *cString = [[color stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString];
  215. // String should be 6 or 8 characters
  216. if ([cString length] < 6) {
  217. return [UIColor blackColor];
  218. }
  219. // 判断前缀并剪切掉
  220. if ([cString hasPrefix:@"0X"])
  221. cString = [cString substringFromIndex:2];
  222. if ([cString hasPrefix:@"#"])
  223. cString = [cString substringFromIndex:1];
  224. if ([cString length] != 6)
  225. return [UIColor blackColor];
  226. // 从六位数值中找到RGB对应的位数并转换
  227. NSRange range;
  228. range.location = 0;
  229. range.length = 2;
  230. //R、G、B
  231. NSString *rString = [cString substringWithRange:range];
  232. range.location = 2;
  233. NSString *gString = [cString substringWithRange:range];
  234. range.location = 4;
  235. NSString *bString = [cString substringWithRange:range];
  236. // Scan values
  237. unsigned int r, g, b;
  238. [[NSScanner scannerWithString:rString] scanHexInt:&r];
  239. [[NSScanner scannerWithString:gString] scanHexInt:&g];
  240. [[NSScanner scannerWithString:bString] scanHexInt:&b];
  241. return [UIColor colorWithRed:((float) r / 255.0f) green:((float) g / 255.0f) blue:((float) b / 255.0f) alpha:1.0f];
  242. }
  243. @end