JLBubbleManager.m 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299
  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,self.avatarUrl, self.name, self.rankUrl, self.grade,self.gradeIndex];
  62. return worked;
  63. }
  64. - (BOOL)insertGradeTable {
  65. FMDatabase* db = [self openResouceDb];
  66. [self checkGradeTableCreatedInDb:db];
  67. //
  68. // NSString* sql= [NSString stringWithFormat:@"select gradeIndex from grade where gradeIndex=%@",self.gradeIndex];
  69. // FMResultSet *rs=[db executeQuery:sql];
  70. //
  71. // while ([rs next]) {
  72. // //不重复保存
  73. // return NO;
  74. // }
  75. NSString *insertStr = [NSString stringWithFormat:@"INSERT INTO 'grade' ('gradeIndex', 'avatarUrl', 'name', 'rankUrl', 'grade') VALUES (?,?,?,?,?);"];
  76. BOOL worked = [db executeUpdate:insertStr,self.gradeIndex, self.avatarUrl, self.name, self.rankUrl, self.grade];
  77. if (!worked) {
  78. worked = [self updateGradeTable];
  79. }
  80. return worked;
  81. }
  82. - (JLBubbleManager *)fechGradeByGrade:(NSString *)grade {
  83. NSString* sql = [NSString stringWithFormat:@"select * from grade where gradeIndex = '%@'", grade];
  84. FMDatabase* db = [self openResouceDb];
  85. [self checkGradeTableCreatedInDb:db];
  86. FMResultSet *rs=[db executeQuery:sql];
  87. while ([rs next]) {
  88. [self labelFromDataset:self rs:rs];
  89. return self;
  90. }
  91. [rs close];
  92. return nil;
  93. }
  94. - (JLBubbleManager *)fechGradeByBubbleFontId:(NSString *)bubbleFontId {
  95. NSString* sql = [NSString stringWithFormat:@"select * from bubbleFont where id = '%@'", bubbleFontId];
  96. FMDatabase* db = [self openResouceDb];
  97. [self checkBubbleFontTableCreatedInDb:db];
  98. FMResultSet *rs=[db executeQuery:sql];
  99. while ([rs next]) {
  100. [self bubbleFontFromDataset:self rs:rs];
  101. return self;
  102. }
  103. [rs close];
  104. return nil;
  105. }
  106. -(void)labelFromDataset:(JLBubbleManager*)obj rs:(FMResultSet*)rs{
  107. obj.gradeIndex=[rs stringForColumn:@"gradeIndex"];
  108. obj.avatarUrl=[rs stringForColumn:@"avatarUrl"];
  109. obj.name=[rs stringForColumn:@"name"];
  110. obj.rankUrl=[rs stringForColumn:@"rankUrl"];
  111. obj.grade=[rs stringForColumn:@"grade"];
  112. }
  113. -(void)bubbleFontFromDataset:(JLBubbleManager*)obj rs:(FMResultSet*)rs{
  114. obj.iosLeftUrl=[rs stringForColumn:@"iosLeftUrl"];
  115. obj.iosRightUrl=[rs stringForColumn:@"iosRightUrl"];
  116. obj.code=[rs stringForColumn:@"code"];
  117. obj.color=[rs stringForColumn:@"color"];
  118. }
  119. // 创建所有气泡表
  120. - (BOOL)checkBubbleFontTableCreatedInDb:(FMDatabase *)db {
  121. 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)"];
  122. BOOL worked = [db executeUpdate:createStr];
  123. return worked;
  124. }
  125. // 更新气泡表
  126. - (BOOL)updateBubbleFontTable {
  127. FMDatabase* db = [self openResouceDb];
  128. [self checkBubbleFontTableCreatedInDb:db];
  129. // self.id, self.iosLeftUrl, self.iosRightUrl, self.name, self.code, self.color
  130. NSString* sql = [NSString stringWithFormat:@"update bubbleFont set iosLeftUrl=?,iosRightUrl=?,name=?,code=?,color=? where id=?"];
  131. BOOL worked = [db executeUpdate:sql,self.iosLeftUrl, self.iosRightUrl, self.name, self.code, self.color,self.id];
  132. return worked;
  133. }
  134. // 插入气泡表 修改了气泡
  135. - (BOOL)insertBubbleFontTable {
  136. FMDatabase* db = [self openResouceDb];
  137. [self checkBubbleFontTableCreatedInDb:db];
  138. // self.id, self.iosLeftUrl, self.iosRightUrl, self.name, self.code, self.color
  139. NSString *insertStr = [NSString stringWithFormat:@"INSERT INTO 'bubbleFont' ('id', 'iosLeftUrl', 'iosRightUrl', 'name', 'code', 'color') VALUES (?,?,?,?,?,?);"];
  140. BOOL worked = [db executeUpdate:insertStr,self.id, self.iosLeftUrl, self.iosRightUrl, self.name, self.code, self.color];
  141. if (!worked) {
  142. worked = [self updateBubbleFontTable];
  143. }
  144. return worked;
  145. }
  146. - (void)cacheBubbleImage:(NSArray <NSURL *>*)imageUrls {
  147. [SDWebImagePrefetcher sharedImagePrefetcher].maxConcurrentDownloads = 100;
  148. [[SDWebImagePrefetcher sharedImagePrefetcher] prefetchURLs:imageUrls progress:^(NSUInteger noOfFinishedUrls, NSUInteger noOfTotalUrls) {
  149. } completed:^(NSUInteger noOfFinishedUrls, NSUInteger noOfSkippedUrls) {
  150. // [g_App showAlert:@"图片预下载完成"];
  151. }];
  152. }
  153. - (UIImage *)getBubblePath:(NSString *)path BubbleType:(BubbleType)type {
  154. NSString *key = [[SDWebImageManager sharedManager] cacheKeyForURL:[NSURL URLWithString:path]];
  155. UIImage *image = [[SDImageCache sharedImageCache] imageFromCacheForKey:key];
  156. CGFloat top = image.size.height * 0.5;
  157. CGFloat left = image.size.width * 0.5;
  158. CGFloat bottom = image.size.height * 0.5;
  159. CGFloat right = image.size.width * 0.5;
  160. if (image == nil) {
  161. switch (type) {
  162. case BubbleTypeLeft:
  163. image = [[UIImage imageNamed:@"chat_bg_white"]stretchableImageWithLeftCapWidth:stretch topCapHeight:stretch];
  164. break;
  165. case BubbleTyperight:
  166. image = [[UIImage imageNamed:@"chat_bg_blue"]stretchableImageWithLeftCapWidth:stretch topCapHeight:stretch];
  167. break;
  168. default:
  169. break;
  170. }
  171. }else {
  172. NSLog(@"宽-%f---高%f-缩放-%f前",image.size.width, image.size.height,image.scale);
  173. // NSData * imgData = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://47.57.16.13:8089/temp/20200423/36343824-79e9-48b3-8526-22c963cf80c2.png"]];
  174. // CGDataProviderRef provider = CGImageGetDataProvider(image.CGImage);
  175. // NSData* data = (id)CFBridgingRelease(CGDataProviderCopyData(provider));
  176. // NSData * imgData = UIImagePNGRepresentation(image);
  177. // image = [UIImage imageWithData:imgData scale:3];
  178. image = [UIImage imageWithCGImage:image.CGImage scale:3 orientation:(UIImageOrientationUp)];
  179. NSLog(@"宽-%f---高%f-缩放-%f后",image.size.width, image.size.height,image.scale);
  180. switch (type) {
  181. case BubbleTypeLeft:{
  182. image = [image resizableImageWithCapInsets:(UIEdgeInsetsMake(38/3, 17/3, 50/3, 50/3)) resizingMode:(UIImageResizingModeStretch)];
  183. // image = [image resizableImageWithCapInsets:(UIEdgeInsetsMake(114, 55, 63, 120)) resizingMode:(UIImageResizingModeTile)];
  184. // image = [UIImage imageNamed:@"ios_new_left"];
  185. }
  186. break;
  187. case BubbleTyperight:
  188. image = [image resizableImageWithCapInsets:(UIEdgeInsetsMake(39/3, 39/3, 50/3, 20/3)) resizingMode:(UIImageResizingModeStretch)];
  189. break;
  190. default:
  191. break;
  192. }
  193. }
  194. return image;
  195. }
  196. - (UIFont *)getBubbleFontNameIndex:(int)index {
  197. if (index == -1) {
  198. return [UIFont systemFontOfSize:g_constant.chatFont];
  199. }else {
  200. // 获取本地
  201. NSBundle *bundle = [NSBundle mainBundle];
  202. NSString *plistPath = [bundle pathForResource:@"FontNameList" ofType:@"plist"];
  203. //获取本地文件列表 NSArray
  204. NSDictionary *fontNameList = [[NSDictionary alloc] initWithContentsOfFile:plistPath];
  205. NSString *fontName = [fontNameList valueForKeyPath:[NSString stringWithFormat:@"%d",index]];
  206. return [UIFont fontWithName:fontName size:g_constant.chatFont];
  207. }
  208. }
  209. //(以#开头)转换为UIColor
  210. - (UIColor *)getBubbleFontColor:(NSString *)color
  211. {
  212. NSString *cString = [[color stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString];
  213. // String should be 6 or 8 characters
  214. if ([cString length] < 6) {
  215. return [UIColor blackColor];
  216. }
  217. // 判断前缀并剪切掉
  218. if ([cString hasPrefix:@"0X"])
  219. cString = [cString substringFromIndex:2];
  220. if ([cString hasPrefix:@"#"])
  221. cString = [cString substringFromIndex:1];
  222. if ([cString length] != 6)
  223. return [UIColor blackColor];
  224. // 从六位数值中找到RGB对应的位数并转换
  225. NSRange range;
  226. range.location = 0;
  227. range.length = 2;
  228. //R、G、B
  229. NSString *rString = [cString substringWithRange:range];
  230. range.location = 2;
  231. NSString *gString = [cString substringWithRange:range];
  232. range.location = 4;
  233. NSString *bString = [cString substringWithRange:range];
  234. // Scan values
  235. unsigned int r, g, b;
  236. [[NSScanner scannerWithString:rString] scanHexInt:&r];
  237. [[NSScanner scannerWithString:gString] scanHexInt:&g];
  238. [[NSScanner scannerWithString:bString] scanHexInt:&b];
  239. return [UIColor colorWithRed:((float) r / 255.0f) green:((float) g / 255.0f) blue:((float) b / 255.0f) alpha:1.0f];
  240. }
  241. @end