// // JLBubbleManager.m // shiku_im // // Created by JayLuo on 2020/4/17. // Copyright © 2020 Reese. All rights reserved. // #import "JLBubbleManager.h" #import "FMDatabase.h" static JLBubbleManager *_manager; @implementation JLBubbleManager + (instancetype)sharedManager { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _manager = [[self alloc] init]; }); return _manager; } + (instancetype)allocWithZone:(struct _NSZone *)zone{ static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _manager = [super allocWithZone:zone]; }); return _manager; } - (id)copyWithZone:(NSZone *)zone{ return _manager; } // 获取所有图片 - (void)loadImagesData { } - (void)didServerResultSucces:(JXConnection*)aDownload dict:(NSDictionary*)dict array:(NSArray*)array1{ } - (FMDatabase*)openResouceDb { if(_db && [_db goodConnection]){ return _db; } NSString* t = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0]; NSString* s = [NSString stringWithFormat:@"%@/%@.db",t,@"Resouce"]; _db = [[FMDatabase alloc] initWithPath:s]; if (![_db open]) { NSLog(@"数据库打开失败"); return nil; }; NSLog(@"数据库路径:%@",_db.databasePath); return _db; } // 创建所有VIP表 - (BOOL)checkGradeTableCreatedInDb:(FMDatabase *)db { 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)"]; BOOL worked = [db executeUpdate:createStr]; return worked; } // 更新VIP表 - (BOOL)updateGradeTable { FMDatabase* db = [self openResouceDb]; [self checkGradeTableCreatedInDb:db]; // self.gradeIndex, self.avatarUrl, self.id, self.name, self.rankUrl, self.grade NSString* sql = [NSString stringWithFormat:@"update grade set avatarUrl=?,name=?,rankUrl=?,grade=? where gradeIndex=?"]; BOOL worked = [db executeUpdate:sql,_avatarUrl,_name, _rankUrl, _grade,_gradeIndex]; if (!worked) { NSLog(@"update grade set avatarUrl=?,name=?,rankUrl=? 。。 error = %@", [db lastErrorMessage]); } return worked; } - (BOOL)insertGradeTable { FMDatabase* db = [self openResouceDb]; [self checkGradeTableCreatedInDb:db]; /// 修改了修改了 // NSString* sql= [NSString stringWithFormat:@"select * from grade where gradeIndex=%@",self.gradeIndex]; // FMResultSet *rs=[db executeQuery:sql]; // while ([rs next]) { // //不重复保存 // return NO; // } NSString *insertStr = [NSString stringWithFormat:@"INSERT INTO 'grade' ('gradeIndex', 'avatarUrl', 'name', 'rankUrl', 'grade') VALUES (?,?,?,?,?);"]; BOOL worked = [db executeUpdate:insertStr,_gradeIndex, self.avatarUrl, self.name, self.rankUrl, _grade]; if (!worked) { worked = [self updateGradeTable]; } return worked; } - (JLBubbleManager *)fechGradeByGrade:(NSString *)grade { NSString* sql = [NSString stringWithFormat:@"select * from grade where gradeIndex = '%@'", grade]; FMDatabase* db = [self openResouceDb]; [self checkGradeTableCreatedInDb:db]; FMResultSet *rs=[db executeQuery:sql]; while ([rs next]) { [self labelFromDataset:self rs:rs]; return self; } [rs close]; return nil; } - (JLBubbleManager *)fechGradeByBubbleFontId:(NSString *)bubbleFontId { NSString* sql = [NSString stringWithFormat:@"select * from bubbleFont where id = '%@'", bubbleFontId]; FMDatabase* db = [self openResouceDb]; [self checkBubbleFontTableCreatedInDb:db]; FMResultSet *rs=[db executeQuery:sql]; while ([rs next]) { [self bubbleFontFromDataset:self rs:rs]; return self; } [rs close]; return nil; } -(void)labelFromDataset:(JLBubbleManager*)obj rs:(FMResultSet*)rs{ obj.gradeIndex=[rs stringForColumn:@"gradeIndex"]; obj.avatarUrl=[rs stringForColumn:@"avatarUrl"]; obj.name=[rs stringForColumn:@"name"]; obj.rankUrl=[rs stringForColumn:@"rankUrl"]; obj.grade=[rs stringForColumn:@"grade"]; } -(void)bubbleFontFromDataset:(JLBubbleManager*)obj rs:(FMResultSet*)rs{ obj.iosLeftUrl=[rs stringForColumn:@"iosLeftUrl"]; obj.iosRightUrl=[rs stringForColumn:@"iosRightUrl"]; obj.code=[rs stringForColumn:@"code"]; obj.color=[rs stringForColumn:@"color"]; } // 创建所有气泡表 - (BOOL)checkBubbleFontTableCreatedInDb:(FMDatabase *)db { 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)"]; BOOL worked = [db executeUpdate:createStr]; return worked; } // 更新气泡表 - (BOOL)updateBubbleFontTable { FMDatabase* db = [self openResouceDb]; [self checkBubbleFontTableCreatedInDb:db]; // self.id, self.iosLeftUrl, self.iosRightUrl, self.name, self.code, self.color NSString* sql = [NSString stringWithFormat:@"update bubbleFont set iosLeftUrl=?,iosRightUrl=?,name=?,code=?,color=? where id=?"]; BOOL worked = [db executeUpdate:sql,self.iosLeftUrl, self.iosRightUrl, self.name, self.code, self.color,self.id]; return worked; } // 插入气泡表 修改了气泡 - (BOOL)insertBubbleFontTable { FMDatabase* db = [self openResouceDb]; [self checkBubbleFontTableCreatedInDb:db]; // self.id, self.iosLeftUrl, self.iosRightUrl, self.name, self.code, self.color NSString *insertStr = [NSString stringWithFormat:@"INSERT INTO 'bubbleFont' ('id', 'iosLeftUrl', 'iosRightUrl', 'name', 'code', 'color') VALUES (?,?,?,?,?,?);"]; BOOL worked = [db executeUpdate:insertStr,self.id, self.iosLeftUrl, self.iosRightUrl, self.name, self.code, self.color]; if (!worked) { worked = [self updateBubbleFontTable]; } return worked; } - (void)cacheBubbleImage:(NSArray *)imageUrls { [SDWebImagePrefetcher sharedImagePrefetcher].maxConcurrentDownloads = 100; [[SDWebImagePrefetcher sharedImagePrefetcher] prefetchURLs:imageUrls progress:^(NSUInteger noOfFinishedUrls, NSUInteger noOfTotalUrls) { } completed:^(NSUInteger noOfFinishedUrls, NSUInteger noOfSkippedUrls) { // [g_App showAlert:@"图片预下载完成"]; }]; } - (UIImage *)getBubblePath:(NSString *)path BubbleType:(BubbleType)type { NSString *key = [[SDWebImageManager sharedManager] cacheKeyForURL:[NSURL URLWithString:path]]; UIImage *image = [[SDImageCache sharedImageCache] imageFromCacheForKey:key]; CGFloat top = image.size.height * 0.5; CGFloat left = image.size.width * 0.5; CGFloat bottom = image.size.height * 0.5; CGFloat right = image.size.width * 0.5; if (image == nil) { switch (type) { case BubbleTypeLeft: image = [[UIImage imageNamed:@"chat_bg_white"]stretchableImageWithLeftCapWidth:stretch topCapHeight:stretch]; break; case BubbleTyperight: image = [[UIImage imageNamed:@"chat_bg_blue"]stretchableImageWithLeftCapWidth:stretch topCapHeight:stretch]; break; default: break; } }else { NSLog(@"宽-%f---高%f-缩放-%f前",image.size.width, image.size.height,image.scale); // NSData * imgData = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://47.57.16.13:8089/temp/20200423/36343824-79e9-48b3-8526-22c963cf80c2.png"]]; // CGDataProviderRef provider = CGImageGetDataProvider(image.CGImage); // NSData* data = (id)CFBridgingRelease(CGDataProviderCopyData(provider)); // NSData * imgData = UIImagePNGRepresentation(image); // image = [UIImage imageWithData:imgData scale:3]; image = [UIImage imageWithCGImage:image.CGImage scale:3 orientation:(UIImageOrientationUp)]; NSLog(@"宽-%f---高%f-缩放-%f后",image.size.width, image.size.height,image.scale); switch (type) { case BubbleTypeLeft:{ image = [image resizableImageWithCapInsets:(UIEdgeInsetsMake(38/3, 17/3, 50/3, 50/3)) resizingMode:(UIImageResizingModeStretch)]; // image = [image resizableImageWithCapInsets:(UIEdgeInsetsMake(114, 55, 63, 120)) resizingMode:(UIImageResizingModeTile)]; // image = [UIImage imageNamed:@"ios_new_left"]; } break; case BubbleTyperight: image = [image resizableImageWithCapInsets:(UIEdgeInsetsMake(39/3, 39/3, 50/3, 20/3)) resizingMode:(UIImageResizingModeStretch)]; break; default: break; } } return image; } - (UIFont *)getBubbleFontNameIndex:(int)index { if (index == -1) { return [UIFont systemFontOfSize:g_constant.chatFont]; }else { // 获取本地 NSBundle *bundle = [NSBundle mainBundle]; NSString *plistPath = [bundle pathForResource:@"FontNameList" ofType:@"plist"]; //获取本地文件列表 NSArray NSDictionary *fontNameList = [[NSDictionary alloc] initWithContentsOfFile:plistPath]; NSString *fontName = [fontNameList valueForKeyPath:[NSString stringWithFormat:@"%d",index]]; return [UIFont fontWithName:fontName size:g_constant.chatFont]; } } //(以#开头)转换为UIColor - (UIColor *)getBubbleFontColor:(NSString *)color { NSString *cString = [[color stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString]; // String should be 6 or 8 characters if ([cString length] < 6) { return [UIColor blackColor]; } // 判断前缀并剪切掉 if ([cString hasPrefix:@"0X"]) cString = [cString substringFromIndex:2]; if ([cString hasPrefix:@"#"]) cString = [cString substringFromIndex:1]; if ([cString length] != 6) return [UIColor blackColor]; // 从六位数值中找到RGB对应的位数并转换 NSRange range; range.location = 0; range.length = 2; //R、G、B NSString *rString = [cString substringWithRange:range]; range.location = 2; NSString *gString = [cString substringWithRange:range]; range.location = 4; NSString *bString = [cString substringWithRange:range]; // Scan values unsigned int r, g, b; [[NSScanner scannerWithString:rString] scanHexInt:&r]; [[NSScanner scannerWithString:gString] scanHexInt:&g]; [[NSScanner scannerWithString:bString] scanHexInt:&b]; return [UIColor colorWithRed:((float) r / 255.0f) green:((float) g / 255.0f) blue:((float) b / 255.0f) alpha:1.0f]; } @end