| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378 |
- //
- // Created by Javen on 15/5/11.
- // Copyright (c) 2015 HXHG. All rights reserved.
- //
- #import "JCHATStringUtils.h"
- #import "NSDate+Utilities.h"
- #import "sys/utsname.h"
- @implementation JCHATStringUtils {
- }
- static NSString * const FORMAT_PAST_SHORT = @"yyyy/MM/dd";
- static NSString * const FORMAT_PAST_TIME = @"ahh:mm";
- static NSString * const FORMAT_THIS_WEEK = @"eee ahh:mm";
- static NSString * const FORMAT_THIS_WEEK_SHORT = @"eee";
- static NSString * const FORMAT_YESTERDAY = @"ahh:mm";
- static NSString * const FORMAT_TODAY = @"ahh:mm";
- + (NSString *)errorAlert:(NSError *)error {
- NSString *errorAlert = nil;
-
- switch (error.code) {
- // case JMSG_ERROR_NETWORK_REQUEST_TIMEOUT:
- // errorAlert = @"服务器返回超时";
- // break;
- // case JMSG_ERROR_NETWORK_REQUEST_FAIL:
- // errorAlert = @"服务器请求失败";
- // break;
- // case JMSG_ERROR_NETWORK_SERVER_FAIL:
- // errorAlert = @"服务端错误";
- // break;
- // case JMSG_ERROR_NETWORK_HOST_UNKNOWN:
- // errorAlert = @"地址错误";
- // break;
- case kJMSGErrorSDKNetworkDownloadFailed:
- errorAlert = @"下载失败";
- break;
- case kJMSGErrorSDKNetworkUploadFailed:
- errorAlert = @"上传资源文件失败";
- break;
- case kJMSGErrorSDKNetworkUploadTokenVerifyFailed:
- errorAlert = @"上传资源文件Token验证失败";
- break;
- case kJMSGErrorSDKNetworkUploadTokenGetFailed:
- errorAlert = @"获取服务器Token失败";
- break;
- // case kJMSGErrorNetworkDataFormatInvalid:
- // errorAlert = @"数据格式错误";
- // break;
- case kJMSGErrorSDKDBDeleteFailed:
- errorAlert = @"数据库删除失败";
- break;
- case kJMSGErrorSDKDBUpdateFailed:
- errorAlert = @"数据库更新失败";
- break;
- case kJMSGErrorSDKDBSelectFailed:
- errorAlert = @"数据库查询失败";
- break;
- case kJMSGErrorSDKDBInsertFailed:
- errorAlert = @"数据库插入失败";
- break;
- case kJMSGErrorSDKParamAppkeyInvalid:
- errorAlert = @"appkey不合法";
- break;
- // case kJMSGErrorPartyQiniuUnknown:
- // errorAlert = @"七牛出错";
- // break;
- case kJMSGErrorSDKParamUsernameInvalid:
- errorAlert = @"用户名不合法";
- break;
- case kJMSGErrorSDKParamPasswordInvalid:
- errorAlert = @"用户密码不合法";
- break;
- // case kJMSGErrorSDKParamAvatarNil:
- // errorAlert = @"用户头像属性为空";
- // break;
- case kJMSGErrorSDKUserNotLogin:
- errorAlert = @"用户没有登录";
- break;
- case kJMSGErrorSDKNotMediaMessage:
- errorAlert = @"这不是一条媒体消息";
- break;
- case kJMSGErrorSDKMediaResourceMissing:
- errorAlert = @"下载媒体资源路径或者数据意外丢失";
- break;
- case kJMSGErrorSDKMediaCrcCodeIllegal:
- errorAlert = @"媒体CRC码无效";
- break;
- case kJMSGErrorSDKMediaCrcVerifyFailed:
- errorAlert = @"媒体CRC校验失败";
- break;
- case kJMSGErrorSDKMediaUploadEmptyFile:
- errorAlert = @"上传媒体文件时, 发现文件不存在";
- break;
- case kJMSGErrorSDKParamContentInvalid:
- errorAlert = @"无效的消息内容";
- break;
- case kJMSGErrorSDKParamMessageNil:
- errorAlert = @"空消息";
- break;
- case kJMSGErrorSDKMessageNotPrepared:
- errorAlert = @"消息不符合发送的基本条件检查";
- break;
- case kJMSGErrorSDKParamConversationTypeUnknown:
- errorAlert = @"未知的会话类型";
- break;
- case kJMSGErrorSDKParamConversationUsernameInvalid:
- errorAlert = @"会话 username 无效";
- break;
- case kJMSGErrorSDKParamConversationGroupIdInvalid:
- errorAlert = @"会话 groupId 无效";
- break;
- case kJMSGErrorSDKParamGroupGroupIdInvalid:
- errorAlert = @"groupId 无效";
- break;
- case kJMSGErrorSDKParamGroupGroupInfoInvalid:
- errorAlert = @"group 相关字段无效";
- break;
- case kJMSGErrorSDKMessageNotInGroup:
- errorAlert = @"你已不在该群,无法发送消息";
- break;
- case 810009:
- errorAlert = @"超出群上限";
- break;
- case kJMSGErrorHttpServerInternal:
- errorAlert = @"服务器端内部错误";
- break;
- case kJMSGErrorHttpUserExist:
- errorAlert = @"用户已经存在";
- break;
- case kJMSGErrorHttpUserNotExist:
- errorAlert = @"用户不存在";
- break;
- case kJMSGErrorHttpPrameterInvalid:
- errorAlert = @"参数无效";
- break;
- case kJMSGErrorHttpPasswordError:
- errorAlert = @"密码错误";
- break;
- case kJMSGErrorHttpUidInvalid:
- errorAlert = @"内部UID 无效";
- break;
- case kJMSGErrorHttpMissingAuthenInfo:
- errorAlert = @"Http 请求没有验证信息";
- break;
- case kJMSGErrorHttpAuthenticationFailed:
- errorAlert = @"Http 请求验证失败";
- break;
- case kJMSGErrorHttpAppkeyNotExist:
- errorAlert = @"Appkey 不存在";
- break;
- case kJMSGErrorHttpTokenExpired:
- errorAlert = @"Http 请求 token 过期";
- break;
- case kJMSGErrorHttpServerResponseTimeout:
- errorAlert = @"服务器端响应超时";
- break;
- case kJMSGErrorTcpUserNotRegistered:
- errorAlert = @"用户名还没有被注册过";
- break;
- case kJMSGErrorTcpUserPasswordError:
- errorAlert = @"密码错误";
- break;
- default:
- errorAlert = nil;
- break;
- }
- return errorAlert;
- }
- + (NSString *)getFriendlyDateString:(NSTimeInterval)timeInterval {
- return [JCHATStringUtils getFriendlyDateString:timeInterval forConversation:NO];
- }
- /**
- 下午11:56 (是今天的)
- 会话:同样以上字符 - 下午11:56
- 昨天 上午10:22 (昨天的)
- 会话:只显示 - 昨天
- 星期二 上午08:21 (今天昨天之前的一周显示星期)
- 会话:只显示 - 星期二
- 2015年1月22日 上午11:58 (一周之前显示具体的日期了)
- 会话:显示 - 2015/04/18
- */
- //设置格式 年yyyy 月 MM 日dd 小时hh(HH) 分钟 mm 秒 ss MMM单月 eee周几 eeee星期几 a上午下午
- + (NSString *)getFriendlyDateString:(NSTimeInterval)timeInterval
- forConversation:(BOOL)isShort {
-
- NSString *output = nil;
- NSDate* theDate = [NSDate dateWithTimeIntervalSince1970:timeInterval/1000];
- NSDateFormatter *rk_formatter = [[NSDateFormatter alloc] init];
- NSLocale *rk_locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh"];
- [rk_formatter setLocale:rk_locale];
- [rk_formatter setDateFormat:@"MM-dd HH:mm"];
- output = [rk_formatter stringFromDate:theDate];
-
- return output;
-
-
- /*
- //转为现在时间
- NSDate* theDate = [NSDate dateWithTimeIntervalSince1970:timeInterval/1000];
- NSString *output = nil;
- NSTimeInterval theDiff = -theDate.timeIntervalSinceNow;
- //上述时间差输出不同信息
- if (theDiff < 60) {
- output = @"刚刚";
- } else if (theDiff < 60 * 60) {
- int minute = (int) (theDiff / 60);
- output = [NSString stringWithFormat:@"%d分钟前", minute];
- } else {
- NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
- NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh"];
- [formatter setLocale:locale];
- BOOL isTodayYesterday = NO;
- BOOL isPastLong = NO;
- if ([theDate isToday]) {
- [formatter setDateFormat:FORMAT_TODAY];
- } else if ([theDate isYesterday]) {
- [formatter setDateFormat:FORMAT_YESTERDAY];
- isTodayYesterday = YES;
- } else if ([theDate isThisWeek]) {
- if (isShort) {
- [formatter setDateFormat:FORMAT_THIS_WEEK_SHORT];
- } else {
- [formatter setDateFormat:FORMAT_THIS_WEEK];
- }
- } else {
- if (isShort) {
- [formatter setDateFormat:FORMAT_PAST_SHORT];
- } else {
- [formatter setDateFormat:FORMAT_PAST_TIME];
- isPastLong = YES;
- }
- }
- if (isTodayYesterday) {
- NSString *todayYesterday = [JCHATStringUtils getTodayYesterdayString:theDate];
- if (isShort) {
- output = todayYesterday;
- } else {
- output = [formatter stringFromDate:theDate];
- output = [NSString stringWithFormat:@"%@ %@", todayYesterday, output];
- }
- } else {
- output = [formatter stringFromDate:theDate];
- if (isPastLong) {
- NSString *thePastDate = [JCHATStringUtils getPastDateString:theDate];
- output = [NSString stringWithFormat:@"%@ %@", thePastDate, output];
- }
- }
- }
- return output;
- */
- }
- + (NSString *)getTodayYesterdayString:(NSDate *)theDate {
- NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
- NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh"];
- [formatter setLocale:locale];
- formatter.dateStyle = NSDateFormatterShortStyle;
- formatter.timeStyle = NSDateFormatterNoStyle;
- formatter.doesRelativeDateFormatting = YES;
- return [formatter stringFromDate:theDate];
- }
- + (NSString *)getPastDateString:(NSDate *)theDate {
- NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
- NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh"];
- [formatter setLocale:locale];
- formatter.dateStyle = NSDateFormatterLongStyle;
- formatter.timeStyle = NSDateFormatterNoStyle;
- return [formatter stringFromDate:theDate];
- }
- + (NSString *)dictionary2String:(NSDictionary *)dictionary {
- if (![dictionary count]) {
- return nil;
- }
- NSString *tempStr1 = [[dictionary description] stringByReplacingOccurrencesOfString:@"\\u" withString:@"\\U"];
- NSString *tempStr2 = [tempStr1 stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\""];
- NSString *tempStr3 = [[@"\"" stringByAppendingString:tempStr2] stringByAppendingString:@"\""];
- NSData *tempData = [tempStr3 dataUsingEncoding:NSUTF8StringEncoding];
- NSString *str = [NSPropertyListSerialization propertyListFromData:tempData
- mutabilityOption:NSPropertyListImmutable
- format:NULL
- errorDescription:NULL];
- return str;
- }
- - (NSString *)deviceString {
- struct utsname systemInfo;
- uname(&systemInfo);
- NSString *deviceString = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
-
- if ([deviceString isEqualToString:@"iPhone1,1"]) return @"iPhone 1G";
- if ([deviceString isEqualToString:@"iPhone1,2"]) return @"iPhone 3G";
- if ([deviceString isEqualToString:@"iPhone2,1"]) return @"iPhone 3GS";
- if ([deviceString isEqualToString:@"iPhone3,1"]) return @"iPhone 4";
- if ([deviceString isEqualToString:@"iPhone4,1"]) return @"iPhone 4S";
- if ([deviceString isEqualToString:@"iPhone5,2"]) return @"iPhone 5";
- if ([deviceString isEqualToString:@"iPhone3,2"]) return @"Verizon iPhone 4";
- if ([deviceString isEqualToString:@"iPod1,1"]) return @"iPod Touch 1G";
- if ([deviceString isEqualToString:@"iPod2,1"]) return @"iPod Touch 2G";
- if ([deviceString isEqualToString:@"iPod3,1"]) return @"iPod Touch 3G";
- if ([deviceString isEqualToString:@"iPod4,1"]) return @"iPod Touch 4G";
- if ([deviceString isEqualToString:@"iPad1,1"]) return @"iPad";
- if ([deviceString isEqualToString:@"iPad2,1"]) return @"iPad 2 (WiFi)";
- if ([deviceString isEqualToString:@"iPad2,2"]) return @"iPad 2 (GSM)";
- if ([deviceString isEqualToString:@"iPad2,3"]) return @"iPad 2 (CDMA)";
- if ([deviceString isEqualToString:@"i386"]) return @"Simulator";
- if ([deviceString isEqualToString:@"x86_64"]) return @"Simulator";
- NSLog(@"NOTE: Unknown device type: %@", deviceString);
- return deviceString;
- }
- + (BOOL)isValidatIP:(NSString *)ipAddress {
-
- NSString *urlRegEx =@"^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\."
- "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\."
- "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\."
- "([01]?\\d\\d?|2[0-4]\\d|25[0-5])$";
-
- NSError *error;
- NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:urlRegEx options:0 error:&error];
-
- if (regex != nil) {
- NSTextCheckingResult *firstMatch=[regex firstMatchInString:ipAddress options:0 range:NSMakeRange(0, [ipAddress length])];
-
- if (firstMatch) {
- NSRange resultRange = [firstMatch rangeAtIndex:0];
- NSString *result=[ipAddress substringWithRange:resultRange];
- //输出结果
- NSLog(@"%@",result);
- return YES;
- }
- }
-
- return NO;
- }
- + (NSString *)conversationIdWithConversation:(JMSGConversation *)conversation {
- NSString *conversationId = nil;
- if (conversation.conversationType == kJMSGConversationTypeSingle) {
- JMSGUser *user = conversation.target;
- conversationId = [NSString stringWithFormat:@"%@_%ld",user.username, kJMSGConversationTypeSingle];
- } else {
- JMSGGroup *group = conversation.target;
- conversationId = [NSString stringWithFormat:@"%@_%ld",group.gid,kJMSGConversationTypeGroup];
- }
- return conversationId;
- }
- + (CGSize)stringSizeWithWidthString:(NSString *)string withWidthLimit:(CGFloat)width withFont:(UIFont *)font {
- CGSize maxSize = CGSizeMake(width, 2000);
- // UIFont *font =[UIFont systemFontOfSize:18];
- NSMutableParagraphStyle *paragraphStyle= [[NSMutableParagraphStyle alloc] init];
- CGSize realSize = [string boundingRectWithSize:maxSize options:NSStringDrawingTruncatesLastVisibleLine | NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName:font,NSParagraphStyleAttributeName:paragraphStyle} context:nil].size;
- return realSize;
- }
- @end
|