123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299 |
- //
- // 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,self.avatarUrl, self.name, self.rankUrl, self.grade,self.gradeIndex];
- return worked;
- }
- - (BOOL)insertGradeTable {
- FMDatabase* db = [self openResouceDb];
- [self checkGradeTableCreatedInDb:db];
-
- //
- // NSString* sql= [NSString stringWithFormat:@"select gradeIndex 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,self.gradeIndex, self.avatarUrl, self.name, self.rankUrl, self.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 <NSURL *>*)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
|