1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505 |
- //
- // JXMessageObject.m
- //
- // Created by Reese on 13-8-11.
- // Copyright (c) 2013年 Reese. All rights reserved.
- //
- #import "JXMessageObject.h"
- #import "FMDatabase.h"
- #import "FMResultSet.h"
- #import "JXFriendObject.h"
- #import "JXBlogObject.h"
- #import "NSData+XMPP.h"
- #import "versionManage.h"
- //#import "ChatCacheFileUtil.h"
- #import "FileInfo.h"
- #import "JXRoomRemind.h"
- #import "GDataXMLNode.h"
- #ifdef Live_Version
- #import "JXLiveJidManager.h"
- #endif
- #define SameResource [g_myself.multipleDevices intValue] > 0 ? @"ios" : @"youjob"
- #import "JXBaseChatCell.h"
- #import "JXMessageCell.h"
- #import "JXImageCell.h"
- #import "JXFaceCustomCell.h"
- #import "JXEmojiCell.h"
- #import "JXFileCell.h"
- #import "JXVideoCell.h"
- #import "JXAudioCell.h"
- #import "JXLocationCell.h"
- #import "JXCardCell.h"
- #import "JXRedPacketCell.h"
- #import "JXRemindCell.h"
- #import "JXGifCell.h"
- #import "JXSystemImage1Cell.h"
- #import "JXSystemImage2Cell.h"
- #import "JXAVCallCell.h"
- #import "JXLinkCell.h"
- #import "JXShakeCell.h"
- #import "JXMergeRelayCell.h"
- #import "JXShareCell.h"
- #import "JXTransferCell.h"
- #import "JXReplyCell.h"
- #import "JXUserPublicKeyObj.h"
- #import "JLGroupActivityModel.h"
- @implementation JXMessageObject
- MJCodingImplementation
- @synthesize content,timeSend,fromUserId,toUserId,type,messageNo, messageId,timeReceive,fileName,fileData,fileSize,location_x,location_y,timeLen,isSend,isRead,progress,dictionary,index,fromUserName,objectId,toUserName,isReceive,fromId,toId,isEncrypt;
- @synthesize isUpload;
- NSString* current_chat_userId = nil;
- NSString* current_meeting_no=nil;
- static JXMessageObject *shared;
- +(JXMessageObject*)sharedInstance{
- static dispatch_once_t onceToken;
- dispatch_once(&onceToken, ^{
- shared=[[JXMessageObject alloc]init];
- });
- return shared;
- }
- -(id)init{
- self = [super init];
- if(self){
- dictionary = [[NSMutableDictionary alloc] init];
- fileData = nil;
- self.isReceive = [NSNumber numberWithInt:transfer_status_yes];
- self.isSend = [NSNumber numberWithInt:transfer_status_yes];
- self.isRead = [NSNumber numberWithBool:YES];
- self.type = [NSNumber numberWithInt:0];
- self.isUpload = [NSNumber numberWithBool:YES];
- self.fromId = nil;
- self.toId = nil;
- self.fromUserId = nil;
- self.toUserId = nil;
- self.location_x = nil;
- self.location_y = nil;
- self.isEncrypt = nil;
- self.isReadDel = nil;
- self.readTime = nil;
- self.readPersons= nil;
- self.chatMsgHeight = nil;
- self.isShowTime = NO;
- self.sendCount = 0;
- self.isDelay = 0;
- self.updateLastContent = 1;
- _isGroup = NO;
- _isMySend = 0;
- self.signature = nil;
- self.isVerifySignatureFailed = nil;
- }
- return self;
- }
- -(void)dealloc{
- // NSLog(@"JXMessageObject.dealloc");
- [dictionary removeAllObjects];
- // [dictionary release];
-
- self.fromUserId = nil;
- self.toUserId = nil;
- self.content = nil;
- self.timeSend = nil;
- self.timeReceive = nil;
- self.type = nil;
- self.messageNo = nil;
- self.messageId = nil;
- self.fileName = nil;
- self.fileSize = nil;
- self.fileData = nil;
- self.location_x = nil;
- self.location_y = nil;
- self.isSend = nil;
- self.isRead = nil;
- self.timeLen = nil;
- self.isReceive = nil;
- self.isUpload = nil;
- self.imageHeight = nil;
- self.imageWidth = nil;
- self.deleteTime = nil;
- // [downloads release];
-
- // [super dealloc];
- }
- -(void)fromDictionary:(NSMutableDictionary*)p
- {
- if(p==nil)
- p = dictionary;
- NSDateFormatter* f=[[NSDateFormatter alloc]init];
- [f setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
-
-
- self.fromUserId = [NSString stringWithFormat:@"%@",[p objectForKey:kMESSAGE_FROM]];
- self.toUserId = [NSString stringWithFormat:@"%@",[p objectForKey:kMESSAGE_TO]];
- self.fromUserName = [p objectForKey:kMESSAGE_FROM_NAME];
- self.toUserName = [p objectForKey:kMESSAGE_TO_NAME];
- if ([p objectForKey:@"to"]) {
- self.toId = [p objectForKey:@"to"];
- }
-
- if ([p objectForKey:kMESSAGE_ID]) {
- self.messageId = [p objectForKey:kMESSAGE_ID];
- }
-
- NSDictionary *messageHead = [p objectForKey:@"messageHead"];
- if ([messageHead objectForKey:kMESSAGE_ID]) {
- self.messageId = [messageHead objectForKey:kMESSAGE_ID];
- }
-
- if ([p objectForKey:kMESSAGE_isReadDel]) {
- self.isReadDel = [p objectForKey:kMESSAGE_isReadDel];
- }else{
- self.isReadDel = [NSNumber numberWithInt:NO];
- }
- // self.timeReceive = [f dateFromString:[p objectForKey:kMESSAGE_TIMERECEIVE]];
- self.timeSend = [NSDate dateWithTimeIntervalSince1970:[[p objectForKey:kMESSAGE_TIMESEND] doubleValue]];
- self.deleteTime = [NSDate dateWithTimeIntervalSince1970:[[p objectForKey:kMESSAGE_DELETETIME] doubleValue]];
-
- NSString * messCont = [p objectForKey:kMESSAGE_CONTENT];
-
- self.isEncrypt = [p objectForKey:kMESSAGE_isEncrypt];
- if (self.isEncrypt == nil) {
- self.isEncrypt = [NSNumber numberWithBool:NO];
- }
-
- self.timeReceive = [NSDate dateWithTimeIntervalSince1970:[[p objectForKey:kMESSAGE_TIMERECEIVE] longLongValue]];
- self.type = [p objectForKey:kMESSAGE_TYPE];
- self.messageNo = [p objectForKey:kMESSAGE_No];
- self.fileName = [p objectForKey:kMESSAGE_FILENAME];
- self.fileData = [NSData dataWithBase64EncodedString:[p objectForKey:kMESSAGE_FILEDATA]];
- // [fileData release];
- self.location_x = [p objectForKey:kMESSAGE_LOCATION_X];
- self.location_y = [p objectForKey:kMESSAGE_LOCATION_Y];
- self.timeLen = [p objectForKey:kMESSAGE_TIMELEN];
- self.fileSize = [p objectForKey:kMESSAGE_FILESIZE];
- self.objectId = [p objectForKey:kMESSAGE_OBJECTID];
-
- //放入图片宽高
- // self.location_x = [p objectForKey:KMESSAGE_imHeight];
- // self.location_y = [p objectForKey:kMESSAGE_imWidth];
-
- self.isReceive = [NSNumber numberWithInt:transfer_status_yes];
- self.isSend = [NSNumber numberWithInt:transfer_status_yes];
- self.isRead = [p objectForKey:kMESSAGE_ISREAD];
- if (self.isRead == nil) {
- self.isRead = [NSNumber numberWithBool:NO];
- }
- self.isUpload = [NSNumber numberWithBool:YES];
-
- self.readPersons = [p objectForKey:kMESSAGE_readPersons];
- self.readTime = [NSDate dateWithTimeIntervalSince1970:[[p objectForKey:kMESSAGE_readTime] longValue]];
- self.chatMsgHeight = [p objectForKey:kMESSAGE_chatMsgHeight];
- self.isShowTime = [[p objectForKey:kMESSAGE_isShowTime] boolValue];
- self.isVerifySignatureFailed = [p objectForKey:kMESSAGE_isVerifySignatureFailed];
-
- // 其他的一些群设置
- self.other = [p objectForKey:@"other"];
- // [f release];
-
-
-
-
- #ifdef IS_MsgEncrypt
-
- // 消息验签字段
- self.signature = [p objectForKey:@"signature"];
- // 从朋友表拿出好友DH公钥
- JXUserObject *user = [[JXUserObject sharedInstance]getUserById:self.fromUserId];
- if ([self.fromUserId isEqualToString:MY_USER_ID] || self.isGroup) {
- user = [[JXUserObject sharedInstance]getUserById:self.toUserId];
- }
-
- if (self.isGroup) {
- if (!user.roomId || user.roomId.length <= 0 || messCont.length <= 0 || !messCont) {
- return;
- }
- NSString *chatKeyGroup = [g_msgUtil decryptRoomMsgKey:user.roomId randomKey:user.chatKeyGroup];
-
- NSData *contentData = [[NSData alloc] initWithBase64EncodedString:messCont options:NSDataBase64DecodingIgnoreUnknownCharacters];
- NSData *deContentData = [AESUtil decryptAESData:contentData key:[chatKeyGroup dataUsingEncoding:NSUTF8StringEncoding]];
- NSString *deContent = [[NSString alloc] initWithData:deContentData encoding:NSUTF8StringEncoding];
-
- NSString *signature = [g_msgUtil getRoomMsgMacWithContent:messCont fromUserId:fromUserId isEncrypt:[isEncrypt integerValue] msgId:messageId randomKey:chatKeyGroup];
-
- if ([signature isEqualToString:self.signature]) {
- // 验签成功
- self.content = deContent;
- }else {
- self.isVerifySignatureFailed = [NSNumber numberWithBool:YES]; // 将消息标明为验签失败消息
-
- // 将消息放入缓存队列
- NSMutableArray *arr = [g_msgUtil.verifyFailedDic objectForKey:user.userId];
- if (!arr) {
- arr = [NSMutableArray array];
- }
-
- self.content = messCont;
-
- JXMessageObject *msg = [[JXMessageObject alloc] init];
- [msg copy:self];
-
- [arr addObject:msg];
- [g_msgUtil.verifyFailedDic setObject:arr forKey:user.userId];
-
- if (![g_msgUtil.getDHListIds containsObject:user.userId]) {
-
- [g_msgUtil.getDHListIds addObject:user.userId];
- // 获取服务器公钥表
- [g_msgUtil getDHPublicKeyWithUserId:user.userId];
- }
- }
- }else {
- if (user.publicKeyDH && user.publicKeyDH.length > 0) {
- // 签名
- NSString *signature = [g_msgUtil getChatMsgMacWithContent:messCont fromUserId:fromUserId toUserId:toUserId isEncrypt:[isEncrypt integerValue] msgId:messageId publicKey:user.publicKeyDH];
- if ([signature isEqualToString:self.signature]) {
- // 验签成功
- self.content = [g_msgUtil decryptContentWithPublicKey:user.publicKeyDH content:messCont msgId:self.messageId];
- }else { // 验签失败
-
- // 获取好友公钥表
- NSMutableArray *keys = [[JXUserPublicKeyObj sharedManager] fetchPublicKeyWithUserId:user.userId];
- BOOL flag = NO;
- // 公钥表里公钥依次解密
- for (NSInteger i = 0; i < keys.count; i ++) {
- JXUserPublicKeyObj *obj = keys[i];
- if (obj.publicKey && obj.publicKey.length > 0) {
- NSString *signature = [g_msgUtil getChatMsgMacWithContent:messCont fromUserId:fromUserId toUserId:toUserId isEncrypt:[isEncrypt integerValue] msgId:messageId publicKey:obj.publicKey];
- if ([signature isEqualToString:self.signature]) {
- flag = YES;
- self.content = [g_msgUtil decryptContentWithPublicKey:obj.publicKey content:messCont msgId:self.messageId];
- break;
- }
- }
- }
-
- if (!flag) { // 解密失败,调用获取服务器公钥表接口
- self.isVerifySignatureFailed = [NSNumber numberWithBool:YES]; // 将消息标明为验签失败消息
-
- // 将消息放入缓存队列
- NSMutableArray *arr = [g_msgUtil.verifyFailedDic objectForKey:user.userId];
- if (!arr) {
- arr = [NSMutableArray array];
- }
-
- self.content = messCont;
-
- JXMessageObject *msg = [[JXMessageObject alloc] init];
- [msg copy:self];
-
- [arr addObject:msg];
- [g_msgUtil.verifyFailedDic setObject:arr forKey:user.userId];
-
- if (![g_msgUtil.getDHListIds containsObject:user.userId]) {
-
- [g_msgUtil.getDHListIds addObject:user.userId];
- // 获取服务器公钥表
- [g_msgUtil getDHPublicKeyWithUserId:user.userId];
- }
-
- }
- }
- }else { // 朋友表没有此用户公钥
-
- if (user) {
- self.isVerifySignatureFailed = [NSNumber numberWithBool:YES]; // 将消息标明为验签失败消息
-
- // 将消息放入缓存队列
- NSMutableArray *arr = [g_msgUtil.verifyFailedDic objectForKey:user.userId];
- if (!arr) {
- arr = [NSMutableArray array];
- }
-
- self.content = messCont;
-
- JXMessageObject *msg = [[JXMessageObject alloc] init];
- [msg copy:self];
-
- [arr addObject:msg];
- [g_msgUtil.verifyFailedDic setObject:arr forKey:user.userId];
-
- if (![g_msgUtil.getDHListIds containsObject:user.userId]) {
-
- [g_msgUtil.getDHListIds addObject:user.userId];
- // 获取服务器公钥表
- [g_msgUtil getDHPublicKeyWithUserId:user.userId];
- }
- }else {
- self.content = messCont;
- }
-
- }
- }
-
-
-
- #else
- if ([self.isEncrypt boolValue]) {
- // self.content = [DESUtil decryptDESStr:messCont key:[NSString stringWithFormat:@"%@",[p objectForKey:kMESSAGE_TIMESEND]]];
- NSMutableString *str = [NSMutableString string];
- [str appendString:APIKEY];
- [str appendString:[NSString stringWithFormat:@"%ld",(long)[self.timeSend timeIntervalSince1970]]];
- [str appendString:self.messageId];
- NSString *keyStr = [g_server getMD5String:str];
- self.content = [DESUtil decryptDESStr:messCont key:keyStr];
- if (IsStringNull(self.content)) {
- self.content = messCont;
- }
-
- }else{
- self.content = messCont;
- }
- #endif
- }
- - (void)fromXmlDict:(NSDictionary *)xmlDict{
- SBJsonParser *parser = [[SBJsonParser alloc] init];
- //body
- NSString * repr = [xmlDict objectForKey:@"body"];
- //"替换成\"
- repr = [repr stringByReplacingOccurrencesOfString:@""" withString:@"\""];
- NSDictionary *bodyDict = [parser objectWithString:repr];
-
- //message
- NSString * reprM = [xmlDict objectForKey:@"message"];
- //"替换成\"
- reprM = [reprM stringByReplacingOccurrencesOfString:@""" withString:@"\""];
- GDataXMLElement * xmlElement = [[GDataXMLElement alloc]initWithXMLString:reprM error:nil];
- NSString * xmlFrom = [[[xmlElement attributeForName:@"from"] stringValue]componentsSeparatedByString:@"@"][0];
- NSString * xmlTo = [[[xmlElement attributeForName:@"to"] stringValue]componentsSeparatedByString:@"@"][0];
-
-
- if (xmlDict[@"messageId"]) {
- self.messageId = xmlDict[@"messageId"];
- }
- [self fromDictionary:bodyDict];
- if (xmlFrom) {
- if (!self.fromUserId || self.fromUserId.length <= 0) {
- self.fromUserId = [NSString stringWithFormat:@"%lld",[xmlFrom longLongValue]];
- }
- }
- if (xmlTo) {
- if (!self.toUserId || self.toUserId.length <= 0) {
- self.toUserId = [NSString stringWithFormat:@"%lld",[xmlTo longLongValue]];
- }
- }
- }
- // 群聊
- -(void)fromGroupXmlDict:(NSDictionary *)xmlDict {
-
- SBJsonParser *parser = [[SBJsonParser alloc] init];
- //body
- NSString * repr = [xmlDict objectForKey:@"body"];
- //"替换成\"
- repr = [repr stringByReplacingOccurrencesOfString:@""" withString:@"\""];
- NSDictionary *bodyDict = [parser objectWithString:repr];
-
- [self fromDictionary:bodyDict];
-
- }
- //将对象转换为字典
- -(NSMutableDictionary*)toDictionary
- {
- NSDateFormatter* f=[[NSDateFormatter alloc]init];
- [f setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
-
- //离线消息,单聊时ID可能在<message>里传过来,但群聊的离线或者历史消息,<Message>的ID为NULL
- //方案:单聊的messageId放在<message>的ID里,群聊除此之外,messageId也放在<body>的MessageID里
- if(self.messageId.length > 0)
- [dictionary setValue:messageId forKey:kMESSAGE_ID];
- [dictionary setValue:fromUserName forKey:kMESSAGE_FROM_NAME];
- [dictionary setValue:toUserName forKey:kMESSAGE_TO_NAME];
- [dictionary setValue:[NSNumber numberWithDouble:[self.timeSend timeIntervalSince1970]] forKey:kMESSAGE_TIMESEND];
- [dictionary setValue:[NSNumber numberWithLongLong:[self.deleteTime timeIntervalSince1970]] forKey:kMESSAGE_DELETETIME];
- [dictionary setValue:type forKey:kMESSAGE_TYPE];
- // if([self getIsGroup])
- [dictionary setValue:fromUserId forKey:kMESSAGE_FROM];
- [dictionary setValue:toUserId forKey:kMESSAGE_TO];
- if(self.fileData)
- [dictionary setValue:[fileData xmpp_base64Encoded] forKey:kMESSAGE_FILEDATA];
- if(self.objectId)
- [dictionary setValue:objectId forKey:kMESSAGE_OBJECTID];
- if(self.fileName)
- [dictionary setValue:fileName forKey:kMESSAGE_FILENAME];
- if(self.fileSize)
- [dictionary setValue:fileSize forKey:kMESSAGE_FILESIZE];
- if(self.location_x)
- [dictionary setValue:location_x forKey:kMESSAGE_LOCATION_X];
- if(self.location_y)
- [dictionary setValue:location_y forKey:kMESSAGE_LOCATION_Y];
- if(self.timeLen)
- [dictionary setValue:timeLen forKey:kMESSAGE_TIMELEN];
- if ([self.isReadDel boolValue])
- [dictionary setObject:_isReadDel forKey:kMESSAGE_isReadDel];
- if (self.isShowTime) {
- [dictionary setObject:[NSNumber numberWithBool:self.isShowTime] forKey:kMESSAGE_isShowTime];
- }
-
- #ifdef IS_MsgEncrypt
-
- JXUserObject *user = [[JXUserObject sharedInstance]getUserById:toUserId];
- if (self.isGroup) {
-
- NSString *chatKeyGroup = [g_msgUtil decryptRoomMsgKey:user.roomId randomKey:user.chatKeyGroup];
- NSData *encryptData = [AESUtil encryptAESData:[content dataUsingEncoding:NSUTF8StringEncoding] key:[chatKeyGroup dataUsingEncoding:NSUTF8StringEncoding]];
- NSString *encryptStr = [encryptData base64EncodedStringWithOptions:0];
- NSString *signature = [g_msgUtil getRoomMsgMacWithContent:encryptStr fromUserId:fromUserId isEncrypt:[isEncrypt integerValue] msgId:messageId randomKey:chatKeyGroup];
-
- [dictionary setValue:encryptStr forKey:kMESSAGE_CONTENT];
- [dictionary setValue:signature forKey:kMESSAGE_signature];
-
- }else {
- if (user.publicKeyDH && user.publicKeyDH.length > 0) {
- NSString *encryptStr = [g_msgUtil encryptContentWithPublicKey:user.publicKeyDH content:content msgId:messageId ];
- NSString *signature = [g_msgUtil getChatMsgMacWithContent:encryptStr fromUserId:fromUserId toUserId:toUserId isEncrypt:[isEncrypt integerValue] msgId:messageId publicKey:user.publicKeyDH];
-
- [dictionary setValue:encryptStr forKey:kMESSAGE_CONTENT];
- [dictionary setValue:signature forKey:kMESSAGE_signature];
- }
- }
-
-
-
- #else
- if([self.isEncrypt boolValue]){
- [dictionary setValue:isEncrypt forKey:kMESSAGE_isEncrypt];
- // NSString * keyStr = [NSString stringWithFormat:@"%f",[self.timeSend timeIntervalSince1970]];
- NSMutableString *str = [NSMutableString string];
- [str appendString:APIKEY];
- [str appendString:[NSString stringWithFormat:@"%@",[NSNumber numberWithLongLong:[self.timeSend timeIntervalSince1970]]]];
- [str appendString:self.messageId];
- NSString *keyStr = [g_server getMD5String:str];
- [dictionary setValue:[DESUtil encryptDESStr:content key:keyStr] forKey:kMESSAGE_CONTENT];
- }
- else
- [dictionary setValue:content forKey:kMESSAGE_CONTENT];
-
- #endif
-
- if (self.timeReceive) {
- [dictionary setValue:[NSNumber numberWithDouble:[self.timeReceive timeIntervalSince1970]] forKey:kMESSAGE_TIMERECEIVE];
- }
- if ([self.isRead boolValue])
- [dictionary setObject:self.isRead forKey:kMESSAGE_ISREAD];
- if ([self.isSend boolValue])
- [dictionary setObject:self.isSend forKey:kMESSAGE_ISSEND];
- if ([self.isReceive boolValue])
- [dictionary setObject:self.isReceive forKey:kMESSAGE_isReceive];
- if ([self.isUpload boolValue])
- [dictionary setObject:[NSNumber numberWithInt:[self.isUpload intValue]] forKey:kMESSAGE_isUpload];
- if (self.fromId)
- [dictionary setObject:self.fromId forKey:kMESSAGE_FROMID];
- if (self.toId)
- [dictionary setObject:self.toId forKey:kMESSAGE_TOID];
- if (self.readPersons)
- [dictionary setObject:self.readPersons forKey:kMESSAGE_readPersons];
- if (self.readTime) {
- [dictionary setValue:[NSNumber numberWithDouble:[self.readTime timeIntervalSince1970]] forKey:kMESSAGE_readTime];
- }
- if (self.chatMsgHeight) {
- [dictionary setObject:self.chatMsgHeight forKey:kMESSAGE_chatMsgHeight];
- }
- if (self.isShowTime)
- [dictionary setObject:[NSNumber numberWithBool:self.isShowTime] forKey:kMESSAGE_isShowTime];
- if (self.isGroup)
- [dictionary setObject:[NSNumber numberWithBool:self.isGroup] forKey:@"isGroup"];
- if ([self.isVerifySignatureFailed boolValue]) {
- [dictionary setObject:self.isVerifySignatureFailed forKey:kMESSAGE_isVerifySignatureFailed];
- }
-
- return dictionary;
- }
- -(void)fromRs:(FMResultSet*)rs{
- self.fromUserId = [rs stringForColumn:kMESSAGE_FROM];
- self.fromUserName = [rs stringForColumn:kMESSAGE_FROM_NAME];
- self.toUserId = [rs stringForColumn:kMESSAGE_TO];
- self.content = [rs stringForColumn:kMESSAGE_CONTENT];
- self.timeSend = [rs dateForColumn:kMESSAGE_TIMESEND];
- self.deleteTime = [rs dateForColumn:kMESSAGE_DELETETIME];
- self.timeReceive = [rs dateForColumn:kMESSAGE_TIMERECEIVE];
- self.type = [rs objectForColumnName:kMESSAGE_TYPE];
-
-
- self.messageId = [rs stringForColumn:kMESSAGE_ID];
- self.messageNo = [rs objectForColumnName:kMESSAGE_No];
- self.fileName = [rs stringForColumn:kMESSAGE_FILENAME];
-
-
- if([rs objectForColumnName:kMESSAGE_FILEDATA] != [NSNull null]){
- self.fileData = [NSData dataWithBase64EncodedString:[rs objectForColumnName:kMESSAGE_FILEDATA]];
- // [self.fileData release];
- }
-
- //聊天图片宽高
- // self.location_x = [rs objectForColumnName:kMESSAGE_imWidth];
- // self.location_y = [rs objectForColumnName:KMESSAGE_imHeight];
-
-
-
- self.location_x = [rs objectForColumnName:kMESSAGE_LOCATION_X];
- self.location_y = [rs objectForColumnName:kMESSAGE_LOCATION_Y];
- self.isSend = [rs objectForColumnName:kMESSAGE_ISSEND];
- self.isRead = [rs objectForColumnName:kMESSAGE_ISREAD];
- self.timeLen = [rs objectForColumnName:kMESSAGE_TIMELEN];
- self.fileSize = [rs objectForColumnName:kMESSAGE_FILESIZE];
- self.objectId = [rs stringForColumn:kMESSAGE_OBJECTID];
- self.isReceive = [rs objectForColumnName:kMESSAGE_isReceive];
- self.isUpload = [rs objectForColumnName:kMESSAGE_isUpload];
- self.isReadDel = [NSNumber numberWithBool:[rs boolForColumn:kMESSAGE_isReadDel]];
- self.isGroup = [self getIsGroup];
- // if([isSend intValue]==transfer_status_ing)
- // self.isSend = [NSNumber numberWithInt:transfer_status_no];
- if([isReceive intValue]==transfer_status_ing)
- self.isReceive = [NSNumber numberWithInt:transfer_status_no];
- self.fromId = [rs stringForColumn:@"fromId"];
- self.toId = [rs stringForColumn:@"toId"];
-
- self.readPersons = [rs objectForColumnName:kMESSAGE_readPersons];
- self.readTime = [rs dateForColumn:kMESSAGE_readTime];
- self.chatMsgHeight = [rs stringForColumn:kMESSAGE_chatMsgHeight];
- self.isShowTime = [rs boolForColumn:kMESSAGE_isShowTime];
- self.signature = [rs stringForColumn:kMESSAGE_signature];
- self.isVerifySignatureFailed = [rs objectForColumnName:kMESSAGE_isVerifySignatureFailed];
- #ifdef IS_MsgEncrypt
- // if (!self.isGroup) {
- self.content = [g_msgUtil decryptInsertChatMsgContent:self.content msgId:self.messageId];
- // }
- #endif
- }
- -(BOOL)delete{
- NSString* sql= [NSString stringWithFormat:@"delete from msg_%@ where messageId=?",[self getTableName]];
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:MY_USER_ID];
- BOOL worked=[db executeUpdate:sql,self.messageId];
-
- [g_App copyDbWithUserId:MY_USER_ID];
- return worked;
- }
- -(BOOL)deleteAll{
- NSString* sql= [NSString stringWithFormat:@"delete from msg_%@",[self getTableName]];
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:MY_USER_ID];
- BOOL worked=[db executeUpdate:sql];
- return worked;
- }
- -(BOOL)deleteWithFromUser:(NSString*)userId roomId:(NSString*)roomId{
- NSString* sql= [NSString stringWithFormat:@"delete from msg_%@ where fromUserId=?",roomId];
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:MY_USER_ID];
- BOOL worked=[db executeUpdate:sql,userId];
- return worked;
- }
- //增删改查
- -(BOOL)insert:(NSString*)room
- {
-
- if(_isMySend){//发送
-
- if ([self.isSend integerValue] == 0) {
- // 消息发送时间更新
- NSTimeInterval time = [self.timeSend timeIntervalSince1970];
- self.timeSend = [NSDate dateWithTimeIntervalSince1970:(time *1000 + g_server.timeDifference)/1000];
- }
- JXUserObject *user = [[JXUserObject sharedInstance] getUserById:self.toUserId];
- if ([user.chatRecordTimeOut doubleValue] <= 0) {
- self.deleteTime = nil;
- }else {
- double n = [user.chatRecordTimeOut doubleValue] * 24 * 3600;
- double m = [[NSDate date] timeIntervalSince1970];
- self.deleteTime = [NSDate dateWithTimeIntervalSince1970:n + m];
- }
-
- if([self isRoomControlMsg]){
- room = self.objectId;
- if ([self.type intValue] == kRoomRemind_NeedVerify) {
- SBJsonParser * resultParser = [[SBJsonParser alloc] init] ;
- NSDictionary *resultObject = [resultParser objectWithString:self.objectId];
- if (resultObject) {
- room = [resultObject objectForKey:@"roomJid"];
- }
- }
-
- // 重复收到控制消息不做处理
- if ([self getMsgWithMsgId:self.messageId toUserId:room]) {
- return NO;
- }
- [self doReceiveRoomRemind];//必须在前面
- if (![self doNewRemindMsg]) {
- return NO;
- }
- }
- if([messageId length]<=0){
- [self setMsgId];
- if (!self.isGroup) {
- self.fromUserName = MY_USER_NAME;
- }
- }
- // 发送的阅后即焚情况下的截屏消息不存到数据库
- if ([self.type intValue] == kWCMessageTypeDelMsgScreenshots) {
- return NO;
- }
- }else{//接收
- if([self isRoomControlMsg]){
-
- room = self.objectId;
- if ([self.type intValue] == kRoomRemind_NeedVerify) {
- SBJsonParser * resultParser = [[SBJsonParser alloc] init] ;
- NSDictionary *resultObject = [resultParser objectWithString:self.objectId];
- if (resultObject) {
- room = [resultObject objectForKey:@"roomJid"];
- }
- }
-
- // 重复收到控制消息不做处理
- if ([self getMsgWithMsgId:self.messageId toUserId:room]) {
- return NO;
- }
-
- [self doReceiveRoomRemind];//必须在前面
- NSNumber *type = self.type;
- if (![self doNewRemindMsg]) {
- return NO;
- }
- // 更改为toId
- // room = self.objectId;
- room = self.toId;
- if ([type intValue] == kRoomRemind_NeedVerify) {
- SBJsonParser * resultParser = [[SBJsonParser alloc] init] ;
- NSDictionary *resultObject = [resultParser objectWithString:self.objectId];
- if (resultObject) {
- room = [resultObject objectForKey:@"roomJid"];
- }
- }
- }
- if([self.type intValue]==kWCMessageTypeTransferReceive){// 转账被领取
- self.type = [NSNumber numberWithInt:kWCMessageTypeRemind];
-
- JXMessageObject *msg = [[JXMessageObject alloc] init];
- msg.objectId = self.content;
- msg.toUserId = self.fromUserId;
- NSMutableArray *msgs = [msg getMsgWithObjectId:msg.objectId];
- for (int i = 0; i < msgs.count; i++) {
- JXMessageObject *msg1 = msgs[i];
- msg1.fileSize = [NSNumber numberWithInt:2];
- [msg1 updateFileSize];
- }
- [g_notify postNotificationName:kUpdateTransferMsgFileSize object:self.content];
- self.content = [NSString stringWithFormat:@"%@%@",self.fromUserName,Localized(@"JX_ReceivedYourTransfer")];
- self.isShowRemind = YES;
- }
- if([self.type intValue]==kWCMessageTypeTransferBack){// 转账被退回
- // self.type = [NSNumber numberWithInt:kWCMessageTypeRemind];
- // self.content = [NSString stringWithFormat:@"%@%@",self.fromUserName,@"转账过期,金额已退回零钱"];
- // self.isShowRemind = YES;
- }
- if([self.type intValue]==kWCMessageTypeRedPacketReceive){// 红包被领取
- if ([self.toUserId isEqualToString:self.fromUserId]) {
- return NO;
- }
- self.type = [NSNumber numberWithInt:kWCMessageTypeRemind];
- self.isShowRemind = YES;
- if(self.objectId.length > 0){//群聊红包
- self.toUserId = self.objectId;
- room = self.objectId;
- self.isGroup = YES;
- }
- self.objectId = self.content;
- NSString *overStr = [NSString string];
- if ([self.fileSize intValue] == 1) {
-
- overStr = [NSString stringWithFormat:Localized(@"JX_,YourRedEnvelopeIsAt%@"),[self getTimeForRow:self.fileName overTime:self.timeSend]];
- }
- self.content = [NSString stringWithFormat:@"%@%@%@",self.fromUserName,Localized(@"JXRed_whoGet"),overStr];
- }
- if([self.type intValue]==kWCMessageTypeRedPacketReturn){// 红包退回
- self.type = [NSNumber numberWithInt:kWCMessageTypeRemind];
- self.isShowRemind = YES;
- if(self.objectId.length > 0){//群聊红包
- self.toUserId = self.objectId;
- room = self.objectId;
- self.isGroup = YES;
- }
- self.objectId = self.content;
- self.content = [NSString stringWithFormat:@"%@",Localized(@"JX_ RedEnvelopeExpired")];
- }
- if([self.type intValue]==kWCMessageTypeDelMsgScreenshots){// 截屏消息(对方在聊天中进行了截屏)
- self.type = [NSNumber numberWithInt:kWCMessageTypeRemind];
- self.isShowRemind = YES;
- }
- if([messageId length]<=0){
- [self setMsgId];
- }
- }
- if([type intValue]==kWCMessageTypeTransferReceive){// 转账被领取
- self.type = [NSNumber numberWithInt:kWCMessageTypeRemind];
- JXMessageObject *msg = [[JXMessageObject alloc] init];
- msg.objectId = self.content;
- msg.toUserId = self.fromUserId;
- NSMutableArray *msgs = [msg getMsgWithObjectId:msg.objectId];
- for (int i = 0; i < msgs.count; i++) {
- JXMessageObject *msg1 = msgs[i];
- msg1.fileSize = [NSNumber numberWithInt:2];
- [msg1 updateFileSize];
- }
- [g_notify postNotificationName:kUpdateTransferMsgFileSize object:self.content];
- self.content = [NSString stringWithFormat:@"%@%@",self.fromUserName,Localized(@"JX_ReceivedYourTransfer")];
- self.isShowRemind = YES;
- }
-
- if([type intValue]==kWCMessageTypeRedPacketReceive){// 红包被领取
- if ([self.toUserId isEqualToString:self.fromUserId]) {
- return NO;
- }
- self.type = [NSNumber numberWithInt:kWCMessageTypeRemind];
- self.isShowRemind = YES;
- if(self.objectId){//群聊红包
- self.toUserId = self.objectId;
- room = self.objectId;
- self.isGroup = YES;
- }
- self.objectId = self.content;
- NSString *overStr = [NSString string];
- if ([self.fileSize intValue] == 1) {
-
- overStr = [NSString stringWithFormat:Localized(@"JX_,YourRedEnvelopeIsAt%@"),[self getTimeForRow:self.fileName overTime:self.timeSend]];
- }
- self.content = [NSString stringWithFormat:@"%@%@%@",self.fromUserName,Localized(@"JXRed_whoGet"),overStr];
- }
- [self changeVideoChatContent];
-
- // 普通消息最终存数据库
- if([self isVisible] || [type intValue] == kWCMessageTypeIsRead || [self isAddFriendMsg]){//消息可见才保存
- if([room length]>0 || _isGroup) {
- //将image宽高存入数据库
- return [self doInsertRoomMsg:room];
- }
- else{
- return [self doInsertMsg:MY_USER_ID tableName:[self getTableName]];
- }
- }
- [g_App copyDbWithUserId:MY_USER_ID];
- return NO;
- }
- - (NSString *)getTimeForRow:(NSString *)createTime overTime:(NSDate *)overTime {
- // 时间差
- NSTimeInterval time = [overTime timeIntervalSince1970] - [createTime integerValue];
-
- if (time < 60) {
- return [NSString stringWithFormat:@"%d%@",(int)time,Localized(@"JX_second")];
- }
-
- NSInteger sec = time/60;
- if (sec<60) {
- return [NSString stringWithFormat:@"%ld%@",(long)sec,Localized(@"JX_Min")];
- }
-
- // 秒转小时
- NSInteger hours = time/3600;
- if (hours<24) {
- return [NSString stringWithFormat:@"%ld%@",(long)hours,Localized(@"JX_Hour")];
- }
- return nil;
- }
- -(BOOL)doInsertRoomMsg:(NSString*)room
- {
- if(room==nil)
- room = [self getTableName];
- NSString* myUserId = MY_USER_ID;
- self.isGroup = YES;
- return [self doInsertMsg:myUserId tableName:room];
- }
- -(BOOL)doInsertMsg:(NSString*)dbName tableName:(NSString*)tableName{
- if([dbName length]<=0)
- return NO;
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:dbName];
- //添加了image宽高2参数
- NSString *createStr=[NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS 'msg_%@' ('messageNo' INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE , 'fromUserId' VARCHAR, 'toUserId' VARCHAR, 'content' VARCHAR, 'timeSend' DATETIME,'timeReceive' DATETIME,'type' INTEGER, 'messageId' VARCHAR, 'fileData' VARCHAR, 'fileName' VARCHAR,'fileSize' INTEGER,'location_x' INTEGER,'location_y' INTEGER,'timeLen' INTEGER,'isRead' INTEGER,'isSend' INTEGER,'objectId' INTEGER,'isReceive' INTEGER,'isUpload' INTEGER,'fromUserName' VARCHAR,'toUserName' VARCHAR,'isReadDel' INTEGER,'fromId' VARCHAR,'toId' VARCHAR,'readPersons' INTEGER,'readTime' DATETIME, 'deleteTime' DATETIME,'chatMsgHeight' VARCHAR,'isShowTime' INTEGER,'signature' VARCHAR,'isVerifySignatureFailed' INTEGER)",tableName];
-
-
- // NSString *createStr=[NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS 'msg_%@' ('messageNo' INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE , 'fromUserId' VARCHAR, 'toUserId' VARCHAR, 'content' VARCHAR, 'timeSend' DATETIME,'timeReceive' DATETIME,'type' INTEGER, 'messageId' VARCHAR, 'fileData' VARCHAR, 'fileName' VARCHAR,'fileSize' INTEGER,'location_x' INTEGER,'location_y' INTEGER,'timeLen' INTEGER,'isRead' INTEGER,'isSend' INTEGER,'objectId' INTEGER,'isReceive' INTEGER,'isUpload' INTEGER,'fromUserName' VARCHAR,'toUserName' VARCHAR,'isReadDel' INTEGER,'fromId' VARCHAR,'toId' VARCHAR,'readPersons' INTEGER,'readTime' DATETIME, 'deleteTime' DATETIME,'chatMsgHeight' VARCHAR,'isShowTime' INTEGER,'signature' VARCHAR,'isVerifySignatureFailed' INTEGER,'groupType' VARCHAR,)",tableName];
-
- BOOL worked = [db executeUpdate:createStr];
- // FMDBQuickCheck(worked);
-
- NSString* sql= [NSString stringWithFormat:@"select messageId from msg_%@ where messageId=?",tableName];
- FMResultSet *rs=[db executeQuery:sql,self.messageId];
- while ([rs next]) {
- // NSLog(@"不必重复保存:%@",self.messageId);
- return NO;
- }
-
- if ([self.type intValue] == kWCMessageTypeIsRead && self.isGroup){
- NSString *content = self.content;
- #ifdef IS_MsgEncrypt
- // if (!self.isGroup) {
- content = [g_msgUtil encryptInsertChatMsgContent:self.content msgId:self.messageId];
- // }
- #endif
-
- NSString* sql= [NSString stringWithFormat:@"select messageId from msg_%@ where content=? and fromUserId=?",tableName];
- FMResultSet *rs=[db executeQuery:sql,content,self.fromUserId];
- while ([rs next])
- //已读回执消息不重复保存
- return NO;
- }
-
- NSString *content = self.content;
- #ifdef IS_MsgEncrypt
- // if (!self.isGroup) {
- content = [g_msgUtil encryptInsertChatMsgContent:self.content msgId:self.messageId];
- // }
- #endif
-
- // 如果是系统推送消息
- if (self.isGroup && [self.fromId containsString:@"/Server"]) {
- self.toUserId = toId;
- tableName = toId;
- }
-
- NSString *insertStr=[NSString stringWithFormat:@"INSERT INTO msg_%@ (fromUserId,toUserId,content,type,messageId,timeSend,timeReceive,fileData,fileName,fileSize,location_x,location_y,timeLen,isRead,isSend,objectId,isReceive,isUpload,fromUserName,toUserName,isReadDel,fromId,toId,readPersons,readTime,deleteTime,chatMsgHeight,isShowTime,signature,isVerifySignatureFailed) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)",tableName];
- worked = [db executeUpdate:insertStr,self.fromUserId,self.toUserId,content,self.type,self.messageId,self.timeSend,self.timeReceive,[self.fileData xmpp_base64Encoded],self.fileName,self.fileSize,self.location_x,self.location_y,self.timeLen,self.isRead,self.isSend,self.objectId,self.isReceive,self.isUpload,self.fromUserName,self.toUserName,self.isReadDel,self.fromId,self.toId,self.readPersons, self.readTime,self.deleteTime,self.chatMsgHeight,[NSNumber numberWithBool:self.isShowTime],self.signature,self.isVerifySignatureFailed];
- // FMDBQuickCheck(worked);
-
-
- return worked;
- }
- -(void)updateLastSend:(UpdateLastSendType)newMsgType{
- if(!self.isVisible && ![self isAddFriendMsg])//加好友消息要更新
- return;
- if(!self.updateLastContent)
- return;
- NSString* tableName = [self getTableName];
-
- if(self.isMySend)//假如是自己发送的
- newMsgType = UpdateLastSendType_None;
- if([current_chat_userId isEqualToString:tableName])//假如正在这个界面
- newMsgType = UpdateLastSendType_None;
- if([self.type intValue] == kWCMessageTypeRemind)//假如是提示消息,新数量总是0
- newMsgType = UpdateLastSendType_None;
- if([self.type intValue] == kWCMessageTypeAudioMeetingInvite || [self.type intValue] == kWCMessageTypeVideoMeetingInvite)//一律不提醒
- newMsgType = UpdateLastSendType_None;
- // if([current_meeting_no isEqualToString:self.fileName])//如果是邀请会议消息,且正在开会,则不提醒
- if([self.type intValue] == kWCMessageTypeGroupActivity)//假如是提示消息,新数量总是0
- newMsgType = UpdateLastSendType_None;
- // kRoomRemind_RoomIsOpenIntegral
- if([self.type intValue] == kRoomRemind_RoomChangeOpenIntegral)//假如是提示消息,新数量总是0
- newMsgType = UpdateLastSendType_None;
- if([self.type intValue] == kRoomRemind_RoomIsOpenIntegral)//假如是提示消息,新数量总是0
- newMsgType = UpdateLastSendType_None;
-
-
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:MY_USER_ID];
- NSString* s=[self getLastContent];
-
- BOOL worked;
- NSString* sql;
- if(self.timeSend == nil)
- self.timeSend = [NSDate date];
- NSString* t=nil;
-
- switch (newMsgType) {
- case UpdateLastSendType_Add:
- t = @",newMsgs=ifnull(newMsgs,0)+1";//此处更新内容,数量+1,ifnull很重要
- break;
- case UpdateLastSendType_None:
- t = @""; //此处只更新内容,数量不变
- break;
- case UpdateLastSendType_Dec:
- t = @",newMsgs=ifnull(newMsgs,1)-1"; //此处更新内容,数量置0
- break;
-
- default:
- break;
- }
- JXUserObject *user = [[JXUserObject sharedInstance] getUserById:tableName];
- // 如果downloadTime 跟timeSend一致表示没有要同步的消息,所以可以更新downloadTime 否则不更新
- if ([user.downloadTime timeIntervalSince1970] == [user.timeSend timeIntervalSince1970]) {
-
- sql = [NSString stringWithFormat:@"update friend set content=?,type=?,timeSend=?,downloadTime=?%@ where userId=?",t];
- worked=[db executeUpdate:sql,s,self.type,self.timeSend,self.timeSend,tableName];
- }else {
-
- sql = [NSString stringWithFormat:@"update friend set content=?,type=?,timeSend=?%@ where userId=?",t];
- worked=[db executeUpdate:sql,s,self.type,self.timeSend,tableName];
- }
- return;
- }
- // 更新新消息数量
- -(void)updateNewMsgCount:(int)count withUserId:(NSString *)userId {
- NSString *sql = [NSString stringWithFormat:@"update friend set newMsgs=? where userId=?"];
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:MY_USER_ID];
- [db executeUpdate:sql,[NSNumber numberWithInt:count],userId];
- }
- -(NSString*)getTableName{
- if([self isAddFriendMsg])
- return FRIEND_CENTER_USERID;
- if(self.isGroup)//假如是群聊
- return self.toUserId;
-
- NSString* tableName;
- NSString* myUserId = MY_USER_ID;
- if([self.toUserId isEqualToString:myUserId])//如果是发给我,取发送者作为表名
- tableName = self.fromUserId;
- else
- tableName = self.toUserId;
- if (!tableName) {
- if(fromId)
- return fromId;
- }
- return tableName;
- }
- -(BOOL)checkSystemMsg:(NSString*)dbName tableName:(NSString*)tableName{
- return NO;
- }
- -(NSString*)getTypeName{
- NSString* s;
- int n = [self.type intValue];
- switch (n) {
- case kWCMessageTypeLink:
- s = [NSString stringWithFormat:@"[%@]",Localized(@"JXLink")];
- break;
- case kWCMessageTypeSystemImage1:
- case kWCMessageTypeSystemImage2:
- s = [NSString stringWithFormat:@"[%@]",Localized(@"JXGraphic")];
- break;
- case kWCMessageTypeImage:
- s = [NSString stringWithFormat:@"[%@]",Localized(@"JX_Image")];
- break;
- case kWCMessageTypeCustomFace:
- case kWCMessageTypeEmoji:
- s = [NSString stringWithFormat:@"[%@]",Localized(@"emojiVC_Emoji")];
- break;
- case kWCMessageTypeGif:
- s = [NSString stringWithFormat:@"[%@]",Localized(@"emojiVC_Emoji")];
- break;
- case kWCMessageTypeVoice:
- s = [NSString stringWithFormat:@"[%@]",Localized(@"JX_Voice")];
- break;
- case kWCMessageTypeLocation:
- s = [NSString stringWithFormat:@"[%@]",Localized(@"JX_Location")];
- break;
- case kWCMessageTypeVideo:
- s = [NSString stringWithFormat:@"[%@]",Localized(@"JX_Video")];
- break;
- case kWCMessageTypeAudio:
- s = [NSString stringWithFormat:@"[%@]",Localized(@"JXAudio")];
- break;
- case kWCMessageTypeFile:
- s = [NSString stringWithFormat:@"[%@]",Localized(@"JX_File")];
- break;
- case kWCMessageTypeCard:
- s = [NSString stringWithFormat:@"[%@]",Localized(@"JX_Card")];
- break;
- case kWCMessageTypeRedPacket:
- s = [NSString stringWithFormat:@"[%@]",Localized(@"JX_RED")];
- break;
- case kWCMessageTypeTransfer:
- s = [NSString stringWithFormat:@"[%@]",Localized(@"JX_Transfer")];
- break;
- default:
- s = self.content;
- break;
- }
-
- return s;
- }
- -(NSString*)getLastContent{
- NSString* s;
- int n = [self.type intValue];
- switch (n) {
- case kWCMessageTypeLink:
- s = [NSString stringWithFormat:@"[%@]",Localized(@"JXLink")];
- break;
- case kWCMessageTypeSystemImage1:
- case kWCMessageTypeSystemImage2:
- s = [NSString stringWithFormat:@"[%@]",Localized(@"JXGraphic")];
- break;
- case kWCMessageTypeImage:
- s = [NSString stringWithFormat:@"[%@]",Localized(@"JX_Image")];
- break;
- case kWCMessageTypeEmoji:
- case kWCMessageTypeCustomFace:
- s = [NSString stringWithFormat:@"[%@]",Localized(@"emojiVC_Emoji")];
- break;
- case kWCMessageTypeGif:
- s = [NSString stringWithFormat:@"[%@]",Localized(@"emojiVC_Emoji")];
- break;
- case kWCMessageTypeVoice:
- s = [NSString stringWithFormat:@"[%@]",Localized(@"JX_Voice")];
- break;
- case kWCMessageTypeLocation:
- s = [NSString stringWithFormat:@"[%@]",Localized(@"JX_Location")];
- break;
- case kWCMessageTypeVideo:
- s = [NSString stringWithFormat:@"[%@]",Localized(@"JX_Video")];
- break;
- case kWCMessageTypeAudio:
- s = [NSString stringWithFormat:@"[%@]",Localized(@"JXAudio")];
- break;
- case kWCMessageTypeFile:
- s = [NSString stringWithFormat:@"[%@]",Localized(@"JX_File")];
- break;
- case kWCMessageTypeCard:
- s = [NSString stringWithFormat:@"[%@]",Localized(@"JX_Card")];
- break;
- case kWCMessageTypeRedPacket:
- s = [NSString stringWithFormat:@"[%@]",Localized(@"JX_RED")];
- break;
- case kWCMessageTypeTransfer:
- s = [NSString stringWithFormat:@"[%@]%@",Localized(@"JX_Transfer"),self.isMySend ? Localized(@"JX_WaitForYourFriend'sConfirmation") : @""];
- break;
- case kWCMessageTypeTransferReceive:
- s = [NSString stringWithFormat:@"[%@]%@",Localized(@"JX_Transfer"),Localized(@"JX_TheFriendHasConfirmedTheCharge")];
- break;
- case kWCMessageTypeTransferBack:
- s = [NSString stringWithFormat:@"%@",Localized(@"JX_RefundNoticeOfOverdueTransfer")];
- break;
- case kWCMessageTypeShake: //Localized(@"JX_Shake")
- s = [NSString stringWithFormat:@"[%@]",@"抖TA"];
- break;
- case kWCMessageTypeMergeRelay:
- s = [NSString stringWithFormat:@"[%@]",Localized(@"JX_ChatRecord")];
- break;
- case kWCMessageTypeShare:
- s = [NSString stringWithFormat:@"[%@]",Localized(@"JXLink")];
- break;
- case kWCMessageTypePaymentOut:
- case kWCMessageTypeReceiptOut:
- case kWCMessageTypeOpenPaySuccess:
- s = [NSString stringWithFormat:@"%@",Localized(@"JX_NoticeOfPayment")];
- break;
- case kWCMessageTypePaymentGet:
- case kWCMessageTypeReceiptGet:
- s = [NSString stringWithFormat:@"%@",Localized(@"JX_ReceiptNotice")];
- break;
- /*
- case XMPP_TYPE_SAYHELLO:
- // s = [NSString stringWithFormat:@"有人打招呼:%@",self.content];
- s = self.content;
- break;
- case XMPP_TYPE_PASS:
- if(self.isMySend)
- s = Localized(@"JXFriendObject_Passed");
- else
- s = Localized(@"JXFriendObject_PassGo");
- break;
- case XMPP_TYPE_FEEDBACK:
- s = self.content;
- break;
- case XMPP_TYPE_NEWSEE:
- if(self.isMySend)
- s = Localized(@"JXFriendObject_Followed");
- else
- s = Localized(@"JXFriendObject_FollowYour");
- break;
- case XMPP_TYPE_DELSEE:
- if(self.isMySend)
- s = Localized(@"JXFriendObject_CencalFollowed");
- else
- s = Localized(@"JXFriendObject_CancelFollow");
- break;
- case XMPP_TYPE_RECOMMEND:
- s = Localized(@"JXFriendObject_RecomYou");
- */
- default:
- s = self.content;
- break;
- }
-
- if ([self.isReadDel boolValue]) {
- s = [NSString stringWithFormat:@"[%@]", Localized(@"JX_ReadDelMsg")];
- }
-
- if (self.isGroup && [self.type intValue] != kWCMessageTypeRemind) {
-
- JXUserObject *allUser = [[JXUserObject alloc] init];
- allUser = [allUser getUserById:self.fromUserId];
-
- JXUserObject *roomUser = [[JXUserObject sharedInstance] getUserById:self.toUserId];
- NSDictionary * groupDict = [roomUser toDictionary];
-
-
- memberData *data = [[memberData alloc] init];
- data.roomId = roomUser.roomId;
- data = [data getCardNameById:self.fromUserId];
-
- roomData * roomdata = [[roomData alloc] init];
- [roomdata getDataFromDict:groupDict];
- NSArray * allMem = [memberData fetchAllMembers:roomUser.roomId];
- roomdata.members = [allMem mutableCopy];
- memberData *data1 = [roomdata getMember:MY_USER_ID];
- NSString *nickName;
- if ([data1.role intValue] == 1) {
- nickName = data.lordRemarkName.length > 0 ? data.lordRemarkName : allUser.remarkName.length > 0 ? allUser.remarkName : data.userNickName.length > 0 ? data.userNickName : self.fromUserName;
- }else {
- nickName = allUser.remarkName.length > 0 ? allUser.remarkName : data.userNickName.length > 0 ? data.userNickName : self.fromUserName;
- }
-
-
- NSRange range = [s rangeOfString:[NSString stringWithFormat:@"%@:",nickName]];
- if (range.location == 0 || !self.fromUserName) {
- return s;
- }else {
- return [NSString stringWithFormat:@"%@:%@",nickName,s];
- }
- }
- return s;
- }
- /*
- -(BOOL)updateIsRead:(BOOL)b{//单聊更新已读标志,弃用
- if(!self.isReceive)
- return NO;
- self.isRead = [NSNumber numberWithBool:b];
- self.readTime = [NSDate date];
- NSString* sql= [NSString stringWithFormat:@"update msg_%@ set isRead=?,readTime=? where messageId=?",[self getTableName]];
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:MY_USER_ID];
- BOOL worked=[db executeUpdate:sql,self.isRead,self.readTime,self.messageId];
- // FMDBQuickCheck(worked);
- return worked;
- }
- */
- -(void)updateIsReadWithContent{//更新已读类型消息的Content即MsgId指向的消息的已读
- if(self.isGroup)
- [self updateReadPersons:self.content];
- else
- [self updateIsRead:self.timeSend msgId:self.content];
- }
- -(BOOL)updateIsRead:(NSDate *)time msgId:(NSString*)msgId{//更新已读时间
- // if(!self.isReceive)
- // return NO;
- if (time==nil)
- time = [NSDate date];
- self.isRead = [NSNumber numberWithBool:YES];
- self.isSend = [NSNumber numberWithBool:YES];
- self.readTime = time;
-
- NSString* sql= [NSString stringWithFormat:@"update msg_%@ set isSend=1,isRead=1,readTime=? where messageId=?",[self getTableName]];
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:MY_USER_ID];
- BOOL worked=[db executeUpdate:sql,self.readTime, msgId];
- // FMDBQuickCheck(worked);
- return worked;
- }
- -(BOOL)updateReadPersons:(NSString*)msgId{//更新群聊已读人数
- NSString *tableName = [self getTableName];
- if(self.isMySend){
- self.isRead = [NSNumber numberWithBool:YES];
- self.isSend = [NSNumber numberWithBool:YES];
- }
- self.readPersons = [NSNumber numberWithInt:[self.readPersons intValue]+1];
-
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:MY_USER_ID];
- NSString* sql,* s;
- if(self.isMySend)
- s = @"isRead=1,";
- else
- s = @"";
- sql= [NSString stringWithFormat:@"update msg_%@ set %@ isSend=1,readPersons=ifnull(readPersons,0)+1 where messageId=?",tableName,s];//ifnull很重要
- BOOL worked = [db executeUpdate:sql,msgId];
- return worked;
- }
- -(BOOL)updateIsUpload:(BOOL)b{
- if(!self.isSend)
- return NO;
- NSString *content = self.content;
- #ifdef IS_MsgEncrypt
- // if (!self.isGroup) {
- content = [g_msgUtil encryptInsertChatMsgContent:self.content msgId:self.messageId];
- // }
- #endif
- self.isUpload = [NSNumber numberWithBool:b];
- NSString* sql= [NSString stringWithFormat:@"update msg_%@ set isUpload=?,content=? where messageId=?",[self getTableName]];
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:MY_USER_ID];
- BOOL worked=[db executeUpdate:sql,self.isUpload,content,self.messageId];
- // FMDBQuickCheck(worked);
- return worked;
- }
- -(BOOL)updateIsReceive:(int)n{
- self.isReceive = [NSNumber numberWithInt:n];
- NSString* sql= [NSString stringWithFormat:@"update msg_%@ set isReceive=?,fileName=? where messageId=?",[self getTableName]];
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:MY_USER_ID];
- BOOL worked=[db executeUpdate:sql,self.isReceive,self.fileName,self.messageId];
- // FMDBQuickCheck(worked);
-
- return worked;
- }
- -(BOOL)updateIsSend:(int)n{
- self.isSend = [NSNumber numberWithInt:n];
- self.timeReceive = [NSDate date];
- NSString* sql= [NSString stringWithFormat:@"update msg_%@ set isSend=?,timeReceive=? where messageId=?",[self getTableName]];
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:MY_USER_ID];
- BOOL worked=[db executeUpdate:sql,self.isSend,self.timeReceive,self.messageId];
- // FMDBQuickCheck(worked);
- return worked;
- }
- //获取某联系人聊天记录
- -(NSMutableArray *)fetchMessageListWithUser:(NSString *)userId byAllNum:(NSInteger)num pageCount:(int)pageCount startTime:(NSDate *)startTime
- {
- // NSLog(@"fetchMessageListWithUser.begin");
- NSString* myUserId = MY_USER_ID;
- if([myUserId length]<=0)
- return nil;
-
- JXUserObject *user = [[JXUserObject sharedInstance] getUserById:userId];
-
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
- NSMutableArray *messageList=[[NSMutableArray alloc]init];
-
- NSString *queryString=[NSString stringWithFormat:@"select * from msg_%@ where (fromUserId=? or toUserId=?) and type<>26 and timeSend >= ? order by timeSend desc,messageNo desc limit %ld,%d",userId,num,pageCount];
-
- // NSString *queryString=[NSString stringWithFormat:@"select * from msg_%@ order by timeSend desc,messageNo desc limit ?*%d,%d",userId,PAGE_SHOW_COUNT,PAGE_SHOW_COUNT];
-
- CGFloat chatAllHeight = 0;
-
- NSMutableArray* temp = [[NSMutableArray alloc]init];
- FMResultSet *rs=[db executeQuery:queryString,userId,userId,startTime];
- while ([rs next]) {
- JXMessageObject *p=[[JXMessageObject alloc] init];
- p.isGroup = [user.roomFlag boolValue];
- [p fromRs:rs];
-
- p.isGroup = [user.roomFlag boolValue];
- // 去除文本阅后即焚计时结束的消息
- if ([p.type intValue] == 1 && !p.isMySend && [p.fileName isKindOfClass:[NSString class]] && [p.fileName length] > 0 && [p.fileName intValue] > 0) {
-
- NSString *messageR = [p.content stringByReplacingOccurrencesOfString:@"\r" withString:@""]; //去掉回车键
- NSString *messageN = [messageR stringByReplacingOccurrencesOfString:@"\n" withString:@""]; //去掉回车键
- NSString *messageText = [messageN stringByReplacingOccurrencesOfString:@" " withString:@""]; //去掉空格
- CGSize size = [messageText boundingRectWithSize:CGSizeMake(JX_SCREEN_WIDTH-INSETS-HEAD_SIZE - 100 + 5, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:SYSFONT(g_constant.chatFont)} context:nil].size;
- NSInteger count = size.height / g_constant.chatFont;
- NSLog(@"countcount === %ld-----%f-----%@",count,[[NSDate date] timeIntervalSince1970],p.fileName);
- // NSLog(@"countcount === %ld,,,,%f,,,,%@",count,[[NSDate date] timeIntervalSince1970], self.msg.fileName);
- count = count * 10 - ([[NSDate date] timeIntervalSince1970] - [p.fileName longLongValue]);
- if (count <= 0) {
- [p delete];
- continue;
- }
- }
-
- // CGFloat height = [self getMsgChatHeight:p];
- // p.chatMsgHeight = [NSString stringWithFormat:@"%f",height];
- // chatAllHeight += height;
- //
- // if (num <= 0) {
- //
- // if (chatAllHeight < JX_SCREEN_HEIGHT || temp.count <= 5) {
- // [temp addObject:p];
- // }
- //
- // }else {
-
- [temp addObject:p];
- // }
- }
- // NSLog(@"聊天记录第%d页:%d",pageIndex,temp.count);
- [rs close];
-
- for(NSInteger i=[temp count]-1;i>=0;i--){
- [messageList addObject:[temp objectAtIndex:i]];
- }
- if([messageList count]==0)
- messageList = nil;
- return messageList;
- }
- - (CGFloat)getMsgChatHeight:(JXMessageObject *)msg {
-
- switch ([msg.type intValue]) {
- case kWCMessageTypeText:
- return [JXMessageCell getChatCellHeight:msg];
- break;
- case kWCMessageTypeImage:
- return [JXImageCell getChatCellHeight:msg];
- break;
- case kWCMessageTypeCustomFace:
- return [JXFaceCustomCell getChatCellHeight:msg];
- break;
- case kWCMessageTypeEmoji:
- return [JXEmojiCell getChatCellHeight:msg];
- break;
- case kWCMessageTypeVoice:
- return [JXAudioCell getChatCellHeight:msg];
- break;
- case kWCMessageTypeLocation:
- return [JXLocationCell getChatCellHeight:msg];
- break;
- case kWCMessageTypeGif:
- return [JXGifCell getChatCellHeight:msg];
- break;
- case kWCMessageTypeVideo:
- return [JXVideoCell getChatCellHeight:msg];
- break;
- case kWCMessageTypeAudio:
- return [JXVideoCell getChatCellHeight:msg];
- break;
- case kWCMessageTypeCard:
- return [JXCardCell getChatCellHeight:msg];
- break;
- case kWCMessageTypeFile:
- return [JXFileCell getChatCellHeight:msg];
- break;
- case kWCMessageTypeRemind:
- return [JXRemindCell getChatCellHeight:msg];
- break;
- case kWCMessageTypeRedPacket:
- return [JXRedPacketCell getChatCellHeight:msg];
- break;
- case kWCMessageTypeTransfer:
- return [JXTransferCell getChatCellHeight:msg];
- break;
- case kWCMessageTypeSystemImage1:
- return [JXSystemImage1Cell getChatCellHeight:msg];
- break;
- case kWCMessageTypeSystemImage2:
- return [JXSystemImage2Cell getChatCellHeight:msg];
- break;
- case kWCMessageTypeAudioMeetingInvite:
- case kWCMessageTypeVideoMeetingInvite:
- case kWCMessageTypeAudioChatCancel:
- case kWCMessageTypeAudioChatEnd:
- case kWCMessageTypeVideoChatCancel:
- case kWCMessageTypeVideoChatEnd:
- case kWCMessageTypeAVBusy:
- return [JXAVCallCell getChatCellHeight:msg];
- break;
- case kWCMessageTypeLink:
- return [JXLinkCell getChatCellHeight:msg];
- break;
- case kWCMessageTypeShake:
- return [JXShakeCell getChatCellHeight:msg];
- break;
- case kWCMessageTypeMergeRelay:
- return [JXMergeRelayCell getChatCellHeight:msg];
- break;
- case kWCMessageTypeShare:
- return [JXShareCell getChatCellHeight:msg];
- break;
- case kWCMessageTypeReply:
- return [JXReplyCell getChatCellHeight:msg];
- break;
- default:
- return [JXBaseChatCell getChatCellHeight:msg];
- break;
- }
- }
- //获取某联系人所有聊天记录
- -(NSMutableArray*)fetchAllMessageListWithUser:(NSString *)userId {
-
- NSString* myUserId = MY_USER_ID;
- if([myUserId length]<=0)
- return nil;
-
- JXUserObject *user = [[JXUserObject sharedInstance] getUserById:userId];
-
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
-
- NSMutableArray *messageList=[[NSMutableArray alloc]init];
-
- NSString *queryString=[NSString stringWithFormat:@"select * from msg_%@ where (fromUserId=? or toUserId=?) and type<>26 order by timeSend desc,messageNo desc",userId];
- // NSString *queryString=[NSString stringWithFormat:@"select * from msg_%@ order by timeSend desc,messageNo desc",userId];
-
- NSMutableArray* temp = [[NSMutableArray alloc]init];
- FMResultSet *rs=[db executeQuery:queryString,userId,userId];
- while ([rs next]) {
- JXMessageObject *p=[[JXMessageObject alloc]init];
- [p fromRs:rs];
- p.isGroup = [user.roomFlag boolValue];
- // 去除文本阅后即焚计时结束的消息
- if ([p.type intValue] == 1 && !p.isMySend && [p.fileName isKindOfClass:[NSString class]] && [p.fileName length] > 0 && [p.fileName intValue] > 0) {
-
- NSString *messageR = [p.content stringByReplacingOccurrencesOfString:@"\r" withString:@""]; //去掉回车键
- NSString *messageN = [messageR stringByReplacingOccurrencesOfString:@"\n" withString:@""]; //去掉回车键
- NSString *messageText = [messageN stringByReplacingOccurrencesOfString:@" " withString:@""]; //去掉空格
- CGSize size = [messageText boundingRectWithSize:CGSizeMake(JX_SCREEN_WIDTH-INSETS-HEAD_SIZE - 100 + 5, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:SYSFONT(g_constant.chatFont)} context:nil].size;
- NSInteger count = size.height / g_constant.chatFont;
- NSLog(@"countcount === %ld-----%f-----%@",count,[[NSDate date] timeIntervalSince1970],p.fileName);
- // NSLog(@"countcount === %ld,,,,%f,,,,%@",count,[[NSDate date] timeIntervalSince1970], self.msg.fileName);
- count = count * 10 - ([[NSDate date] timeIntervalSince1970] - [p.fileName longLongValue]);
- if (count <= 0) {
- [p delete];
- continue;
- }
- }
-
- // CGFloat height = [self getMsgChatHeight:p];
- // p.chatMsgHeight = [NSString stringWithFormat:@"%f",height];
-
- [temp addObject:p];
- }
- // NSLog(@"聊天记录第%d页:%d",pageIndex,temp.count);
- [rs close];
-
- for(NSInteger i=[temp count]-1;i>=0;i--){
- [messageList addObject:[temp objectAtIndex:i]];
- }
-
- if([messageList count]==0)
- messageList = nil;
- return messageList;
- }
- //获取某联系人某个type的所有聊天记录
- -(NSMutableArray*)fetchAllMessageListWithUser:(NSString *)userId withTypes:(NSArray *)types {
-
- NSString* myUserId = MY_USER_ID;
- if([myUserId length]<=0)
- return nil;
- JXUserObject *user = [[JXUserObject sharedInstance] getUserById:userId];
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
-
- NSMutableString *typeStr = [NSMutableString string];
- for (NSInteger i = 0; i < types.count; i ++) {
- NSNumber *type = types[i];
- if (i == 0) {
- [typeStr appendString:[NSString stringWithFormat:@"type = %@",type]];
- }else {
-
- [typeStr appendString:[NSString stringWithFormat:@" or type = %@",type]];
- }
- }
-
- NSMutableArray *messageList=[[NSMutableArray alloc]init];
-
- NSString *queryString=[NSString stringWithFormat:@"select * from msg_%@ where (fromUserId=? or toUserId=?) and (%@) order by timeSend desc,messageNo desc",userId,typeStr];
- // NSString *queryString=[NSString stringWithFormat:@"select * from msg_%@ order by timeSend desc,messageNo desc",userId];
-
- NSMutableArray* temp = [[NSMutableArray alloc]init];
- FMResultSet *rs=[db executeQuery:queryString,userId,userId,type];
- while ([rs next]) {
- JXMessageObject *p=[[JXMessageObject alloc]init];
- [p fromRs:rs];
- p.isGroup = [user.roomFlag boolValue];
-
- // 去除文本阅后即焚计时结束的消息
- if ([p.type intValue] == 1 && !p.isMySend && [p.fileName isKindOfClass:[NSString class]] && [p.fileName length] > 0 && [p.fileName intValue] > 0) {
-
- NSString *messageR = [p.content stringByReplacingOccurrencesOfString:@"\r" withString:@""]; //去掉回车键
- NSString *messageN = [messageR stringByReplacingOccurrencesOfString:@"\n" withString:@""]; //去掉回车键
- NSString *messageText = [messageN stringByReplacingOccurrencesOfString:@" " withString:@""]; //去掉空格
- CGSize size = [messageText boundingRectWithSize:CGSizeMake(JX_SCREEN_WIDTH-INSETS-HEAD_SIZE - 100 + 5, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:SYSFONT(g_constant.chatFont)} context:nil].size;
- NSInteger count = size.height / g_constant.chatFont;
- NSLog(@"countcount === %ld-----%f-----%@",count,[[NSDate date] timeIntervalSince1970],p.fileName);
- // NSLog(@"countcount === %ld,,,,%f,,,,%@",count,[[NSDate date] timeIntervalSince1970], self.msg.fileName);
- count = count * 10 - ([[NSDate date] timeIntervalSince1970] - [p.fileName longLongValue]);
- if (count <= 0) {
- [p delete];
- continue;
- }
- }
-
- [temp addObject:p];
- }
- // NSLog(@"聊天记录第%d页:%d",pageIndex,temp.count);
- [rs close];
-
- // for(NSInteger i=[temp count]-1;i>=0;i--){
- // [messageList addObject:[temp objectAtIndex:i]];
- // }
-
- // if([messageList count]==0)
- // messageList = nil;
- return temp;
- }
- // 获取某个时间段聊天记录
- - (NSMutableArray *) fetchMessageListUserId:(NSString *)userId StartTime:(NSDate *)startTime endTime:(NSDate *)endTime {
- NSString* myUserId = MY_USER_ID;
- if([myUserId length]<=0)
- return nil;
-
- JXUserObject *user = [[JXUserObject sharedInstance] getUserById:userId];
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
-
- NSMutableArray *messageList=[[NSMutableArray alloc]init];
-
- NSString *queryString=[NSString stringWithFormat:@"select * from msg_%@ where (fromUserId=? or toUserId=?) and type<>26 and timeSend > ? and timeSend < ? order by timeSend desc,messageNo desc",userId];
-
- NSMutableArray* temp = [[NSMutableArray alloc]init];
- FMResultSet *rs=[db executeQuery:queryString,userId,userId,startTime,endTime];
- while ([rs next]) {
- JXMessageObject *p=[[JXMessageObject alloc] init];
- [p fromRs:rs];
- p.isGroup = [user.roomFlag boolValue];
- [temp addObject:p];
- }
- [rs close];
-
- for(NSInteger i=[temp count]-1;i>=0;i--){
- [messageList addObject:[temp objectAtIndex:i]];
- }
-
- return messageList;
- }
- //获取客服号,公众号内容
- -(NSMutableArray *)getSystemChatByPage:(int)pageIndex types:(NSString*)types
- {
- NSString* myUserId = MY_USER_ID;
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
-
- NSMutableArray *messageList=[[NSMutableArray alloc]init];
-
- NSString *queryString=[NSString stringWithFormat:@"select * from msg_%@ where type in (%@) order by timeSend desc,messageNo desc limit ?*%d,%d",CALL_CENTER_USERID,types,PAGE_SHOW_COUNT,PAGE_SHOW_COUNT];
- FMResultSet *rs=[db executeQuery:queryString,[NSNumber numberWithInt:pageIndex]];
- while ([rs next]) {
- JXMessageObject *p=[[JXMessageObject alloc]init];
- [p fromRs:rs];
- [messageList addObject:p];
- // [p release];
- }
- // NSLog(@"最近聊天人第%d页:%d",pageIndex,messageList.count);
-
- if([messageList count]==0)
- messageList = nil;
- return messageList;
- }
- //获取最近联系人
- -(NSMutableArray *)fetchRecentChatByPage:(int)pageIndex
- {
- NSString* myUserId = MY_USER_ID;
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
-
- NSMutableArray *messageList=[[NSMutableArray alloc]init];
- NSString *queryString=[NSString stringWithFormat:@"select * from friend where status<=8 and length(content)>0 order by timeSend desc limit ?*%d,%d",PAGE_SHOW_COUNT,PAGE_SHOW_COUNT];
- FMResultSet *rs=[db executeQuery:queryString,[NSNumber numberWithInt:pageIndex]];
- while ([rs next]) {
- JXMessageObject *p=[[JXMessageObject alloc]init];
- // [p fromRs:rs];
- p.content = [rs stringForColumn:kMESSAGE_CONTENT];
- p.type = [rs objectForColumnName:kMESSAGE_TYPE];
- p.timeSend = [rs dateForColumn:kMESSAGE_TIMESEND];
- p.fromUserId = [rs stringForColumn:kUSER_ID];
- p.toUserId = myUserId;
-
-
- JXUserObject *user=[[JXUserObject alloc]init];
- [user userFromDataset:user rs:rs];
-
- JXMsgAndUserObject *unionObject=[JXMsgAndUserObject unionWithMessage:p andUser:user ];
- [messageList addObject:unionObject];
- }
- db = nil;
- if([messageList count]==0)
- messageList = nil;
- // NSLog(@"最近聊天人第%d页:%d",pageIndex,messageList.count);
- return messageList;
- }
- -(NSMutableArray *)fetchRecentChat
- {
- NSString* myUserId = MY_USER_ID;
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
-
- NSMutableArray *messageList=[[NSMutableArray alloc]init];
- // NSString *queryString=[NSString stringWithFormat:@"select * from friend where (status=8 or status=2 or status=0) and userId != %@ order by timeSend desc", FRIEND_CENTER_USERID];
- // NSString *queryString=[NSString stringWithFormat:@"select * from friend where (status=8 or status=2 or status=0) and topTime > 0 and userId != %@ order by timeSend desc", FRIEND_CENTER_USERID];
- NSString *queryString=[NSString stringWithFormat:@"select * from friend where (status=8 or status=2 or status=0 or status=10) and length(content)>0 and topTime > 0 and userId != %@ order by timeSend desc", FRIEND_CENTER_USERID];
- FMResultSet *rs=[db executeQuery:queryString];
- while ([rs next]) {
- JXMessageObject *p=[[JXMessageObject alloc]init];
- // [p fromRs:rs];
- p.content = [rs stringForColumn:kMESSAGE_CONTENT];
- p.type = [rs objectForColumnName:kMESSAGE_TYPE];
- p.timeSend = [rs dateForColumn:kMESSAGE_TIMESEND];
- p.fromUserId = [rs stringForColumn:kUSER_ID];
- p.toUserId = myUserId;
-
- JXUserObject *user=[[JXUserObject alloc]init];
- [user userFromDataset:user rs:rs];
-
- // if (user.roomFlag || user.roomId.length > 0) {
- // p.isGroup = YES;
- // }
-
- JXMsgAndUserObject *unionObject=[JXMsgAndUserObject unionWithMessage:p andUser:user ];
- [messageList addObject:unionObject];
- }
-
- // queryString=[NSString stringWithFormat:@"select * from friend where (status=8 or status=2 or status=0) and (topTime is null or topTime = 0) and userId != %@ order by timeSend desc", FRIEND_CENTER_USERID];
- queryString=[NSString stringWithFormat:@"select * from friend where (status=8 or status=2 or status=0 or status=10) and length(content)>0 and (topTime is null or topTime = 0) and userId != %@ order by timeSend desc", FRIEND_CENTER_USERID];
- rs=[db executeQuery:queryString];
- while ([rs next]) {
- JXMessageObject *p=[[JXMessageObject alloc]init];
- // [p fromRs:rs];
- p.content = [rs stringForColumn:kMESSAGE_CONTENT];
- p.type = [rs objectForColumnName:kMESSAGE_TYPE];
- p.timeSend = [rs dateForColumn:kMESSAGE_TIMESEND];
- p.fromUserId = [rs stringForColumn:kUSER_ID];
- p.toUserId = myUserId;
-
- JXUserObject *user=[[JXUserObject alloc]init];
- [user userFromDataset:user rs:rs];
-
- // if (user.roomFlag || user.roomId.length > 0) {
- // p.isGroup = YES;
- // }
-
- JXMsgAndUserObject *unionObject=[JXMsgAndUserObject unionWithMessage:p andUser:user ];
- [messageList addObject:unionObject];
- }
- db = nil;
- if([messageList count]==0)
- messageList = nil;
- return messageList;
- }
- //只获取某联系人图片聊天记录
- -(NSMutableArray*)fetchImageMessageListWithUser:(NSString *)userId
- {
- NSLog(@"fetchMessageListWithUser.begin");
- NSString* myUserId = MY_USER_ID;
- if([myUserId length]<=0)
- return nil;
-
- JXUserObject *user = [[JXUserObject sharedInstance] getUserById:userId];
-
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
- NSMutableArray *messageList=[[NSMutableArray alloc]init];
-
- NSString *queryString = nil;
-
- queryString = [NSString stringWithFormat:@"select * from msg_%@ where type=2 order by timeSend asc,messageNo asc",userId];
-
- FMResultSet *rs=[db executeQuery:queryString];
- while ([rs next]) {
- JXMessageObject *p=[[JXMessageObject alloc]init];
- p.isGroup = [user.roomFlag boolValue];
- [p fromRs:rs];
- [messageList addObject:p];
- p = nil;
- }
- [rs close];
- db = nil;
-
- NSLog(@"fetchMessageListWithUser.end");
- if([messageList count]==0)
- messageList = nil;
- return messageList;
- }
- //获取某联系人聊天记录
- -(NSMutableArray*)fetchBlogMsgListWithUser:(int)pageIndex
- {
- NSString* myUserId = MY_USER_ID;
- if([myUserId length]<=0)
- return nil;
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
- NSString *queryString=[NSString stringWithFormat:@"select objectId,type,sum(timeLen) from msg_%@ group by objectId,type order by objectId desc limit 0,1",BLOG_CENTER_USERID];
-
- FMResultSet *rs=[db executeQuery:queryString];
- NSMutableArray *messageList=[[NSMutableArray alloc]init];
- while ([rs next]) {
- JXMessageObject *p=[[JXMessageObject alloc]init];
- [p fromRs:rs];
- [messageList addObject:p];
- // [p release];
- }
- [rs close];
- db = nil;
-
- if([messageList count]==0)
- messageList = nil;
- return messageList;
- }
- // 搜索聊天记录
- -(NSArray <JXMessageObject *>*)fetchSearchMessageWithUserId:(NSString *)userId String:(NSString *)str {
- NSString* myUserId = MY_USER_ID;
- if([myUserId length]<=0)
- return nil;
- JXUserObject *user = [[JXUserObject sharedInstance] getUserById:userId];
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
- NSString *queryString=[NSString stringWithFormat:@"select * from msg_%@ where content like '%%%@%%' and type = 1 and isReadDel != 1 order by timeSend desc",userId, str];
- FMResultSet *rs=[db executeQuery:queryString];
-
- NSMutableArray * resultArray = [NSMutableArray array];
- while ([rs next]) {
- JXMessageObject *p=[[JXMessageObject alloc]init];
- p.isGroup = [user.roomFlag boolValue];
- [p fromRs:rs];
- [resultArray addObject:p];
- }
- return resultArray;
- }
- -(NSArray <JXMessageObject *>*)fetchDelMessageWithUserId:(NSString *)userId {
- NSString* myUserId = MY_USER_ID;
- if([myUserId length]<=0)
- return nil;
-
- JXUserObject *user = [[JXUserObject sharedInstance] getUserById:userId];
-
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
- NSString *queryString=[NSString stringWithFormat:@"select * from msg_%@ where isReadDel = 1 and fromUserId != %@ order by timeSend desc",userId,myUserId];
- FMResultSet *rs=[db executeQuery:queryString];
-
- NSMutableArray * resultArray = [NSMutableArray array];
- while ([rs next]) {
- JXMessageObject *p=[[JXMessageObject alloc]init];
- p.isGroup = [user.roomFlag boolValue];
- [p fromRs:rs];
- [resultArray addObject:p];
- }
- return resultArray;
- }
- // 根据content获取最新行
- - (int) getLineNumWithUserId:(NSString *)userId {
- NSString* myUserId = MY_USER_ID;
- if([myUserId length]<=0)
- return 0;
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
- NSString *queryString=[NSString stringWithFormat:@"select count(*) num from msg_%@ where timeSend <= %lf and type<>26",userId, [self.timeSend timeIntervalSince1970]];
- FMResultSet *rs=[db executeQuery:queryString];
- int p = 0;
- while ([rs next]) {
- p = [[rs objectForColumnName:@"num"] intValue];
- break;
- }
- return p;
- }
- -(CGPoint)getLocation{
- return CGPointMake([location_x floatValue],[location_y floatValue]);
- }
- -(BOOL)updateNewMsgsTo0{
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:MY_USER_ID];
- BOOL worked=[db executeUpdate:[NSString stringWithFormat:@"update friend set newMsgs=0 where userId=?"],[self getTableName]];
- return worked;
- }
- -(void)notifyNewMsg{
- if([self.type intValue] == kWCMessageTypeNone)//如果是被踢出群或解散群时,type为0
- return;
- if([self.type intValue] == kWCMessageTypeGroupActivity)//如果群活动信息,type为2100
- return;
- if([self.type intValue] == kRoomRemind_RoomChangeOpenIntegral)//如果是修改群组显示头衔时,type为2003
- return;
- if([self.type intValue] == kRoomRemind_RoomIsOpenIntegral)//如果是群组显示头衔时,type为2002
- return;
- // NSString* s;
- // s = [self getTableName];
-
- // BOOL isMeeting = [self.type intValue] == kWCMessageTypeAudioMeetingInvite || [self.type intValue] == kWCMessageTypeVideoMeetingInvite;
- // if(g_xmpp.newMsgAfterLogin==0 && ![current_chat_userId isEqualToString:s] && self.isVisible && !isMeeting){ //假如不在和目标对象的聊天记录界面里,则延迟统一一次性刷新:
- // g_xmpp.lastNewMsgTime = [[NSDate date] timeIntervalSince1970];
- // [g_xmpp performSelector:@selector(notifyNewMsg) withObject:nil afterDelay:0.7];
- //// }else{
- // g_xmpp.newMsgAfterLogin++;
- // [g_notify postNotificationName:kXMPPNewMsgNotifaction object:nil userInfo:nil];//刷新首页
- // }
-
- if (g_xmpp.msgTimer) {
- dispatch_cancel(g_xmpp.msgTimer);
- g_xmpp.msgTimer = nil;
- g_xmpp.lastMsgTime = 0.00;
- }
- dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
- g_xmpp.msgTimer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
- dispatch_time_t start = DISPATCH_TIME_NOW;
- dispatch_time_t interval = 0.25 * NSEC_PER_SEC;
- dispatch_source_set_timer(g_xmpp.msgTimer, start, interval, 0);
- dispatch_source_set_event_handler(g_xmpp.msgTimer, ^{
- g_xmpp.lastMsgTime = g_xmpp.lastMsgTime + 0.25;
- });
- dispatch_resume(g_xmpp.msgTimer);
-
- [g_xmpp performSelector:@selector(notifyNewMsg) withObject:nil afterDelay:0.75];
-
-
- [g_notify postNotificationName:kXMPPNewMsgNotifaction object:self userInfo:nil];//刷新聊天详情页
- if ([[UIApplication sharedApplication] applicationState] == UIApplicationStateActive)
- {
-
- }else{//如果程序在后台运行,收到消息以通知类型来显示
- UILocalNotification *localNotification = [[UILocalNotification alloc] init];
- localNotification.alertAction = @"Ok";
-
- // NSLog(@"%@", self.toUserId);
- JXUserObject *user;
- if ([self.toUserId isEqualToString:MY_USER_ID]) {
- // 单聊
- user = [[JXUserObject sharedInstance] getUserById: self.fromUserId];
- }else {
- // 群聊
- user = [[JXUserObject sharedInstance] getUserById: self.toUserId];
- }
-
-
- if ([user.offlineNoPushMsg intValue] == 1) {
- return;
- }
-
- if ([self.fromUserId isEqualToString:@"10000"]){
- NSString *msg = [NSString stringWithFormat:@"[%@]",self.fromUserName];
- localNotification.alertBody = msg;//通知主体
- }else {
- NSString *msg = [NSString stringWithFormat:@"%@:%@",self.fromUserName,self.getTypeName];
- localNotification.alertBody = msg;//通知主体
- }
-
- // localNotification.soundName = @"newmsg2.mp3";//通知声音
- // localNotification.applicationIconBadgeNumber = 1;//标记数
- [[UIApplication sharedApplication] presentLocalNotificationNow:localNotification];//发送通知
- }
- }
- -(void)notifyReceipt{
- [g_notify postNotificationName:kXMPPReceiptNotifaction object:self userInfo:nil];
- }
- -(void)notifyReceive{
- [g_notify postNotificationName:kXMPPReceiveFileNotifaction object:self userInfo:nil];
- }
- -(void)notifyTimeout{
- [g_notify postNotificationName:kXMPPSendTimeOutNotifaction object:self userInfo:nil];
- if (self.isGroupSend) {
- [g_notify postNotificationName:kKeepOnSendGroupSendMessage object:self];
- }
- }
- -(void)notifyMyLastSend{
- [g_notify postNotificationName:kXMPPMyLastSendNotifaction object:self userInfo:nil];
- }
- -(BOOL)getIsGroup{
- // return toUserId.length>12 || _isGroup || _roomJid != nil;
- // return toUserId.length>12 || _isGroup;
- return _isGroup;
- }
- -(int)getMaxWaitTime{
- int maxTime = 20;//图片或视频在上传完成之后,才调SendMessage,才开始计时
- /*
- if([self.type intValue] == kWCMessageTypeImage || [self.type intValue] == kWCMessageTypeVideo)
- maxTime = 60;
- if([self.type intValue] == kWCMessageTypeVoice){
- maxTime = [self.timeLen intValue];
- if(maxTime < 20)
- maxTime = 20;
- if(maxTime > 60)
- maxTime = 60;
- }
- */
- return maxTime;
- }
- //-(void)doReceiveRemind{
- // if(![self.fromId isEqualToString:REMIND_CENTER_USERID])
- // return;
- // JXRemindObject* p = [[JXRemindObject alloc]init];
- // [p fromObject:self];
- // [p insert];
- // [p notify];
- //// [p release];
- //}
- -(void)doReceiveRoomRemind{
- if(![self isRoomControlMsg])
- return;
- JXRoomRemind* p = [[JXRoomRemind alloc] init];
- [p fromObject:self];
- // [p insert];
- [p notify];
- // [p release];
- }
- -(void)doReceiveNewBlog{
- if(![self.fromId isEqualToString:BLOG_CENTER_USERID])
- return;
- if([self.type intValue] != XMPP_TYPE_NEWBLOG)
- return;
- JXBlogObject* p = [[JXBlogObject alloc] init];
- [p fromObject:self];
- [p insert];
- // [p release];
- }
- -(BOOL)getIsMySend{
- // if(fromId)
- // return [self.fromId isEqualToString:MY_USER_ID];
- // else
- if (self.changeMySend == 1) {
- return NO;
- }else if (self.changeMySend == 2) {
- return YES;
- }
- //此处不能转换成intValue,多点登录userid,无法比较
- return [self.fromUserId isEqualToString:MY_USER_ID];
- }
- -(void)setMsgId{
- self.messageId = [[[NSUUID UUID].UUIDString stringByReplacingOccurrencesOfString:@"-" withString:@""] lowercaseString];
- }
- -(void)setFileName:(NSString *)value{
- if(value == fileName){
- return;
- }
- // if(value == nil){
- // [fileName release];
- // }
- // fileName = [value retain];
- fileName = value;
- if ([type intValue] == kWCMessageTypeRedPacket || [type intValue] == kWCMessageTypeTransfer) {
- self.fileSize = [NSNumber numberWithInt:1];
- return;
- }
- if(self.isMySend)
- self.fileSize = [NSNumber numberWithLongLong:[FileInfo getFileSize:value]];
- }
- -(BOOL)doNewRemindMsg{
-
- NSString* room = self.objectId;
- if ([self.type intValue] == kRoomRemind_NeedVerify) {
- SBJsonParser * resultParser = [[SBJsonParser alloc] init] ;
- NSDictionary *resultObject = [resultParser objectWithString:self.objectId];
- if (resultObject) {
- room = [resultObject objectForKey:@"roomJid"];
- }
- }
- JXMessageObject* msg = self;
- // bool是否是直播间
- BOOL isLiveMsg = NO;
- #ifdef Live_Version
- isLiveMsg = [[JXLiveJidManager shareArray] contains:msg.objectId];
- #endif
- NSString* s=nil;BOOL b=1;
- JXUserObject* user = [[JXUserObject sharedInstance] getUserById:msg.objectId];
-
- memberData *data = [[memberData alloc] init];
- data.roomId = user.roomId;
- memberData *cardData = [data getCardNameById:msg.fromUserId];
- if (cardData.cardName) {
- msg.fromUserName = cardData.cardName;
- }
- switch ([msg.type intValue]) {
- case kRoomRemind_RoomName:
- s = [NSString stringWithFormat:@"%@%@%@",msg.fromUserName,Localized(@"JXMessageObject_UpdateRoomName"),msg.content];
- break;
- case kRoomRemind_NickName:{
- s = [NSString stringWithFormat:@"%@%@%@",msg.fromUserName,Localized(@"JXMessageObject_UpdateNickName"),msg.content];
- [self updateFromUserName];
- data.userId = [msg.fromUserId longLongValue];
- data.cardName = msg.content;
- [data updateCardName];
- }
- break;
- case kRoomRemind_DelRoom:
- if ([msg.toUserId isEqualToString:MY_USER_ID]) {
- s = [NSString stringWithFormat:Localized(@"JX_DissolutionGroup"),msg.fromUserName];
- }else {
- s = [NSString stringWithFormat:@"%@%@:%@",msg.fromUserName,Localized(@"JXMessage_delRoom"),msg.content];
- }
-
- // b = 0;//假如是解散了房间,则不发通知,不显示提醒文字 (现在注释,解散房间后也提醒)
-
- // if (![msg.fromUserId isEqualToString:MY_USER_ID]) {
- // // 删除房间弹框提醒
- // [g_App showAlert:[NSString stringWithFormat:@"%@%@",msg.content,Localized(@"JX_DissolutionGroup")]];
- // }
-
-
- break;
- case kRoomRemind_AddMember:
- if([msg.toUserId isEqualToString:msg.fromUserId] || IS_OTHER_DEVICE(msg.toUserId))
- s = [NSString stringWithFormat:@"%@%@",msg.fromUserName,Localized(@"JXMessageObject_GroupChat")];
- else
- s = [NSString stringWithFormat:@"%@%@%@",msg.fromUserName,Localized(@"JXMessageObject_InterFriend"),msg.toUserName];
- break;
- case kLiveRemind_ExitRoom:
- if([msg.toUserId isEqualToString:msg.fromUserId]){
- s = [NSString stringWithFormat:@"%@%@",msg.fromUserName,Localized(@"EXITED_LIVE_ROOM")];//退出
- }else{
- s = [NSString stringWithFormat:@"%@%@",msg.toUserName,Localized(@"JX_LiveVC_kickLive")];//被踢出
- }
- break;
- case kRoomRemind_DelMember:
- if([msg.toUserId isEqualToString:msg.fromUserId]){
- if(isLiveMsg){
- s = [NSString stringWithFormat:@"%@%@",msg.fromUserName,Localized(@"EXITED_LIVE_ROOM")];//退出
- }else{
- s = [NSString stringWithFormat:@"%@%@",msg.fromUserName,Localized(@"JXMessageObject_OutGroupChat")];
- }
- }else{
- if(isLiveMsg){
- s = [NSString stringWithFormat:@"%@%@",msg.toUserName,Localized(@"JX_LiveVC_kickLive")];//被踢出
- }else{
- if ([msg.toUserId isEqualToString:MY_USER_ID]) {
- s = [NSString stringWithFormat:Localized(@"JX_OutOfTheGroup"),msg.fromUserName];
- }else {
- if ([msg.fromUserName isEqualToString:msg.toUserName]) {
- s = [NSString stringWithFormat:@"%@%@",msg.fromUserName,Localized(@"JXRoomMemberVC_OutPutRoom")];
- }else {
- #pragma mark -- 踢人不显示
- // s = [NSString stringWithFormat:@"%@%@%@",msg.fromUserName,Localized(@"JXMessageObject_KickOut"),msg.toUserName];
- return NO;
- }
- }
-
- // if (![msg.fromUserId isEqualToString:MY_USER_ID]) {
- // // 被踢出房间弹框提醒
- // [g_App showAlert:[NSString stringWithFormat:@"%@:%@",Localized(@"JX_OutOfTheGroup"),msg.content]];
- // }
-
- }
- }
- // if([self.toUserId isEqualToString:MY_USER_ID])//假如是自己被踢出了房间,则不发通知,不显示提醒文字(现在注释,踢出房间也提醒)
- // b = 0;
- break;
- case kRoomRemind_NewNotice:
- case kRoomRemind_editNotice:
- s = [NSString stringWithFormat:@"%@%@%@",msg.fromUserName,Localized(@"JXMessageObject_AddNewAdv"),msg.content];
- break;
- case kLiveRemind_ShatUp:
- case kRoomRemind_DisableSay:{
- if([msg.content longLongValue]==0){
- s = [NSString stringWithFormat:@"%@%@%@%@",msg.fromUserName,Localized(@"JXMessageObject_Yes"),msg.toUserName,Localized(@"JXMessageObject_CancelGag")];
- }else{
- NSDate* d = [NSDate dateWithTimeIntervalSince1970:[msg.content longLongValue]];
- NSString* t = [TimeUtil formatDate:d format:@"MM-dd HH:mm"];
- s = [NSString stringWithFormat:@"%@%@%@%@%@",msg.fromUserName,Localized(@"JXMessageObject_Yes"),msg.toUserName,Localized(@"JXMessageObject_SetGagWithTime"),t];
- d = nil;
- }
- break;
- }
- case kLiveRemind_SetManager:
- case kRoomRemind_SetManage:{
- if ([msg.content integerValue] == 1) {
- s = [NSString stringWithFormat:@"%@%@%@%@",Localized(@"JXGroup_Owner"),Localized(@"JXSettingVC_Set"),msg.toUserName,Localized(@"JXMessage_admin")];
- }else {
- s = [NSString stringWithFormat:@"%@%@%@",Localized(@"JXGroup_Owner"),Localized(@"CANCEL_ADMINISTRATOR"),msg.toUserName];
- }
- break;
- }
- case kRoomRemind_EnterLiveRoom:{
- s = [NSString stringWithFormat:@"%@%@",msg.toUserName,Localized(@"Enter_LiveRoom")];//加入房间消息
- break;
- }
- case kRoomRemind_ShowRead:{
- if ([msg.content integerValue] == 1)
- s = [NSString stringWithFormat:@"%@%@%@",Localized(@"JXGroup_Owner"),Localized(@"JX_Enable"),Localized(@"JX_RoomReadMode")];
- else
- s = [NSString stringWithFormat:@"%@%@%@",Localized(@"JXGroup_Owner"),Localized(@"JX_Disable"),Localized(@"JX_RoomReadMode")];
- break;
- }
- case kRoomRemind_NeedVerify:{
-
- if (!msg.content || msg.content.length <= 0) {
- SBJsonParser * resultParser = [[SBJsonParser alloc] init] ;
- NSDictionary *resultObject = [resultParser objectWithString:self.objectId];
- NSString *userIdStr = [resultObject objectForKey:@"userIds"];
- BOOL isInvite = [[resultObject objectForKey:@"isInvite"] boolValue];
- if (isInvite) {
- s = [NSString stringWithFormat:@"%@%@",msg.fromUserName,Localized(@"JX_JoinTheGroupToConfirm")];
- }else {
- NSArray *userIds = [userIdStr componentsSeparatedByString:@","];
- s = [NSString stringWithFormat:@"\"%@\"%@%ld%@",self.fromUserName,Localized(@"JX_WouldLikeToInvite"),userIds.count,Localized(@"JX_JoinGroupToConfirm")];
- }
- }else {
- if ([msg.content integerValue] == 1)
- s = Localized(@"JX_GroupOwnersOpenValidation");
- else
- s = Localized(@"JX_GroupOwnersCloseValidation");
- }
-
- break;
- }
- case kRoomRemind_IsLook:{
- if ([msg.content integerValue] == 0)
- s = Localized(@"JX_GroupOwnersPublicGroup");
- else
- s = Localized(@"JX_GroupOwnersPrivateGroup");
- break;
- }
-
- case kRoomRemind_ShowMember:{
- if ([msg.content integerValue] == 1)
- s = Localized(@"JX_GroupOwnersShowMembers");
- else
- s = Localized(@"JX_GroupOwnersNotShowMembers");
- break;
- }
-
- case kRoomRemind_allowSendCard:{
- if ([msg.content integerValue] == 1)
- s = Localized(@"JX_ManagerOpenChat");
- else
- s = Localized(@"JX_ManagerOffChat");
- break;
- }
-
- case kRoomRemind_RoomAllBanned:{
- if ([msg.content integerValue] > 0)
- s = Localized(@"JX_ManagerOpenSilence");
- else
- s = Localized(@"JX_ManagerOffSilence");
- break;
- }
-
- case kRoomRemind_RoomAllowInviteFriend:{
- if ([msg.content integerValue] > 0)
- s = Localized(@"JX_ManagerOpenInviteFriends");
- else
- s = Localized(@"JX_ManagerOffInviteFriends");
- break;
- }
-
- case kRoomRemind_RoomAllowUploadFile:{
- if ([msg.content integerValue] > 0)
- s = Localized(@"JX_ManagerOpenSharedFiles");
- else
- s = Localized(@"JX_ManagerOffSharedFiles");
- break;
- }
-
- case kRoomRemind_RoomAllowConference:{
- if ([msg.content integerValue] > 0)
- s = Localized(@"JX_ManagerOpenMeetings");
- else
- s = Localized(@"JX_ManagerOffMeetings");
- break;
- }
-
- case kRoomRemind_RoomAllowSpeakCourse:{
- if ([msg.content integerValue] > 0)
- s = Localized(@"JX_ManagerOpenLectures");
- else
- s = Localized(@"JX_ManagerOffLectures");
- break;
- }
-
- case kRoomRemind_RoomTransfer:{
- s = [NSString stringWithFormat:@"\"%@\"%@", msg.toUserName,Localized(@"JX_NewGroupManager")];
- break;
- }
- case kRoomRemind_SetInvisible:{
-
- // 自己设置隐身人 和 别人设置自己为隐身人显示
- if ([msg.toUserId isEqualToString:g_myself.userId] || [msg.fromUserId isEqualToString:g_myself.userId]){
- if ([msg.content integerValue] == 1) {
- s = [NSString stringWithFormat:@"%@%@%@%@",msg.fromUserName,Localized(@"JXSettingVC_Set"),msg.toUserName,Localized(@"JX_ForTheInvisibleMan")];
- }else if ([msg.content integerValue] == -1){
- s = [NSString stringWithFormat:@"%@%@%@",msg.fromUserName,Localized(@"JX_EliminateTheInvisible"),msg.toUserName];
- }else if ([msg.content integerValue] == 2){
- s = [NSString stringWithFormat:@"%@%@%@%@",msg.fromUserName,Localized(@"JXSettingVC_Set"),msg.toUserName,@"为监控人"];
- }else if ([msg.content integerValue] == 0){
- s = [NSString stringWithFormat:@"%@%@%@",msg.fromUserName,@"取消监控人",msg.toUserName];
- }
- break;
- }else {
- if ([msg.content integerValue] == 1) {
- // s = [NSString stringWithFormat:@"%@%@%@%@",msg.fromUserName,Localized(@"JXSettingVC_Set"),msg.toUserName,Localized(@"JX_ForTheInvisibleMan")];
- return NO;
- }else if ([msg.content integerValue] == -1){
- // s = [NSString stringWithFormat:@"%@%@%@",msg.fromUserName,Localized(@"JX_EliminateTheInvisible"),msg.toUserName];
- return NO;
- }else if ([msg.content integerValue] == 2){
- // s = [NSString stringWithFormat:@"%@%@%@%@",msg.fromUserName,Localized(@"JXSettingVC_Set"),msg.toUserName,@"为监控人"];
- return NO;
- }else if ([msg.content integerValue] == 0){
- // s = [NSString stringWithFormat:@"%@%@%@",msg.fromUserName,@"取消监控人",msg.toUserName];
- return NO;
- }
- break;
- }
-
- }
-
- case kRoomRemind_RoomDisable:{
- if ([msg.content integerValue] == 1) {
- s = [NSString stringWithFormat:@"%@",Localized(@"JX_ThisGroupHasBeenDisabled")];
- }else {
- s = [NSString stringWithFormat:@"%@",Localized(@"JX_GroupNotUse")];
- }
- break;
- }
-
- case kRoomRemind_SetRecordTimeOut:{
- NSArray *pickerArr = @[Localized(@"JX_Forever"), Localized(@"JX_OneHour"), Localized(@"JX_OneDay"), Localized(@"JX_OneWeeks"), Localized(@"JX_OneMonth"), Localized(@"JX_OneQuarter"), Localized(@"JX_OneYear")];
- double outTime = [msg.content doubleValue];
- NSString *str;
- if (outTime <= 0) {
- str = pickerArr[0];
- }else if (outTime == 0.04) {
- str = pickerArr[1];
- }else if (outTime == 1) {
- str = pickerArr[2];
- }else if (outTime == 7) {
- str = pickerArr[3];
- }else if (outTime == 30) {
- str = pickerArr[4];
- }else if (outTime == 90) {
- str = pickerArr[5];
- }else{
- str = pickerArr[6];
- }
- s = [NSString stringWithFormat:@"%@%@",Localized(@"JX_GroupManagerSetMsgDelTime"),str];
- }
- }
- if(b)
- msg.type = [NSNumber numberWithInt:kWCMessageTypeRemind];
- else
- msg.type = [NSNumber numberWithInt:kWCMessageTypeNone];
-
- msg.fromId = nil;
- msg.toId = nil;
- msg.fromUserId = msg.fromUserId;
- msg.toUserId = room;
- msg.content = s;
- if ([msg haveTheMessage]) {
- return NO;
- }
- return b;
- }
- -(void)copy:(JXMessageObject*)p{
-
- self.messageNo = p.messageNo;//序列号,数值型
- self.type = p.type;//消息类型
- self.messageId = p.messageId;//消息标识号,字符串
- self.fromId = p.fromId;//源
- self.toId = p.toId;//目标
- self.fromUserName = p.fromUserName;//源
- self.fromUserId = p.fromUserId;//源
- self.toUserId = p.toUserId;//目标
- self.toUserName = p.toUserName;//目标
- self.content = p.content;//内容
- self.fileName = p.fileName;//文件名
- self.objectId = p.objectId;//对象ID
- self.fileSize = p.fileSize;//文件尺寸
- self.timeLen = p.timeLen;//录音时长
- self.isSend = p.isSend;//是否已送达
- self.isRead = p.isRead;//是否已读
- self.isReceive = p.isReceive;//是否下载
- self.isUpload = p.isUpload;//是否上传完成
- self.location_x = p.location_x;//位置经度
- self.location_y = p.location_y;//位置纬度
- self.timeSend = p.timeSend;//发送的时间
- self.deleteTime = p.deleteTime; // 消息过期时间
- self.timeReceive = p.timeReceive;//收到回执的时间
- self.fileData = p.fileData;//文件内容
- self.isMySend = p.isMySend;//是否是自己发送
- self.isGroup = p.isGroup;//是否群聊
- self.isReadDel = p.isReadDel;//是否阅后即焚
- self.readTime = p.readTime; // 已读时间
- self.readPersons = p.readPersons; // 已读人数
- self.chatMsgHeight = p.chatMsgHeight; // 聊天消息行高
- self.isShowTime = p.isShowTime;
- self.signature = p.signature;
- self.isVerifySignatureFailed = p.isVerifySignatureFailed;
- }
- +(void)msgWithFriendStatus:(NSString*)userId status:(int)status{
- JXMessageObject *msg=[[JXMessageObject alloc] init];
-
- BOOL isRoom = [userId length]>15;
- int n = kWCMessageTypeRemind;
- NSString* s=nil;
- switch (status) {
- case friend_status_black:
- if(isRoom)
- s = Localized(@"JXMessageObject_ShieldMessage");
- else
- s = Localized(@"JXMessageObject_AddBlack");
- break;
- case friend_status_none:
- s = Localized(@"JXMessageObject_NotFriend");
- break;
- case friend_status_see:
- s = Localized(@"JXMessageObject_FollowHim");
- break;
- case friend_status_friend:
- if(isRoom)
- s = Localized(@"JXMessageObject_ReceMessage");
- else{
- // s = Localized(@"JXFriendObject_StartChat");
- // n = kWCMessageTypeText;
- s = Localized(@"JXMessageObject_BeFriendAndChat");
- }
- break;
- }
-
- msg.type = [NSNumber numberWithInt:n];
- msg.toUserId = userId;
- msg.fromUserId = MY_USER_ID;
- msg.fromUserName = MY_USER_NAME;
- msg.content = s;
- msg.timeSend = [NSDate date];
- [msg insert:nil];
- [msg updateLastSend:UpdateLastSendType_None];
- [msg notifyNewMsg];
- }
- -(NSString*)getContentValue:(NSString*)key{
- SBJsonParser * resultParser = [[SBJsonParser alloc] init];
- NSDictionary* resultObject = [resultParser objectWithString:self.content];
- // [resultParser release];
-
- return [resultObject objectForKey:key];
- }
- -(NSString*)getContentValue:(NSString*)key subKey:(NSString*)subKey{
- SBJsonParser * resultParser = [[SBJsonParser alloc] init];
- NSDictionary* resultObject = [resultParser objectWithString:self.content];
- // [resultParser release];
-
- return [(NSDictionary *)[resultObject objectForKey:key] objectForKey:subKey];
- }
- -(NSString*)getContentValue:(NSString*)key index:(int)i{
- SBJsonParser * resultParser = [[SBJsonParser alloc] init];
- NSDictionary* resultObject = [resultParser objectWithString:self.content];
- // [resultParser release];
-
- return [[resultObject objectForKey:key] objectAtIndex:i];
- }
- //-(void)downloadFile:(JXImageView*)iv{
- // if([content length]<=0)
- // return;
- // if(self.isMySend && [[NSFileManager defaultManager] fileExistsAtPath:fileName] ){//如本地文件存在
- // if([[fileName pathExtension] isEqualToString:@"jpg"] && iv!=nil){
- // UIImage* p = [[UIImage alloc] initWithContentsOfFile:fileName];
- // iv.image = p;
- // }
- // return;
- // }
- //
- // NSString* ext = [[content lastPathComponent] pathExtension];
- // NSString *filepath = [myTempFilePath stringByAppendingPathComponent:[content lastPathComponent]];
- //
- // if( ![[NSFileManager defaultManager] fileExistsAtPath:filepath]){
- // [g_server addTask:content param:iv toView:self];
- // }
- // else{
- // if([ext isEqualToString:@"jpg"] && iv!=nil){
- // UIImage* p = [[UIImage alloc] initWithContentsOfFile:filepath];
- // iv.image = p;
- // }
- // [self doSaveOK];
- // }
- //
- // filepath = nil;
- // ext = nil;
- //}
- - (void)didServerResultSucces:(JXConnection *)task dict:(NSDictionary *)dict array:(NSArray *)array1{
-
- [self doSaveOK];
- }
- -(int) didServerResultFailed:(JXConnection*)aDownload dict:(NSDictionary*)dict{
- [self doSaveError];
- return hide_error;
- }
- -(int) didServerConnectError:(JXConnection*)aDownload error:(NSError *)error{
- [self doSaveError];
- return hide_error;
- }
- -(void) didServerConnectStart:(JXConnection*)aDownload{
- }
- -(void)doSaveError{
- NSLog(@"http失败");
- [self updateIsReceive:transfer_status_no];
- [g_notify postNotificationName:kMsgDrawIsReceiveNotifaction object:self];
- }
- -(void)doSaveOK{
- self.fileName = [myTempFilePath stringByAppendingPathComponent:[content lastPathComponent]];
- [self updateIsReceive:transfer_status_yes];
- [g_notify postNotificationName:kMsgDrawIsReceiveNotifaction object:self];
- }
- -(void)sendAlreadyReadMsg{//发送“已读”消息
- if(![self.isSend boolValue])//消息未送达,不发
- return;
- if(self.isGroup && !self.showRead)//单聊消息,未@我,showRead为假,均不发;语音消息,发
- return;
- if(![self isVisible])
- return;
- if ([self.isRead intValue] == 0 && !self.isMySend){//未读并且不是我发送的
- if(self.messageId==nil)
- [self setMsgId];
-
- JXMessageObject * p = [[JXMessageObject alloc]init];
- NSString* room=nil;
- p.content = self.messageId;
- p.type = [NSNumber numberWithInt:kWCMessageTypeIsRead];
- if(self.isGroup){
- p.toUserId = self.toUserId;
- room = p.toUserId;
- }
- else
- p.toUserId = self.fromUserId;
- p.fromUserId = MY_USER_ID;
- p.fromUserName = MY_USER_NAME;
- p.isRead = [NSNumber numberWithInt:1];
- p.timeSend = [NSDate date];
- p.sendCount = 10;
- p.isGroup = self.isGroup;
- //获取msgID
- [p setMsgId];
-
- [p insert:nil];
- [g_xmpp sendMessage:p roomName:room];
- }
- }
- // 更新消息
- -(BOOL)update{
- NSString* myUserId = MY_USER_ID;
- if([myUserId length]<=0)
- return NO;
-
- NSString *content = self.content;
- #ifdef IS_MsgEncrypt
- // if (!self.isGroup) {
- content = [g_msgUtil encryptInsertChatMsgContent:self.content msgId:self.messageId];
- // }
- #endif
-
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
-
- NSString *sql=[NSString stringWithFormat:@"update msg_%@ set content=?,type=? where messageId=?",[self getTableName]];
-
- BOOL worked=[db executeUpdate:sql,content, self.type, self.messageId];
- // FMDBQuickCheck(worked);
- db = nil;
- [g_App copyDbWithUserId:MY_USER_ID];
-
- return worked;
- }
- -(BOOL)queryIsRead{
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:MY_USER_ID];
- NSString* sql= [NSString stringWithFormat:@"select isRead from msg_%@ where messageId=?",[self getTableName]];
- FMResultSet *rs=[db executeQuery:sql,self.messageId];
- while ([rs next]) {
- return [[rs objectForColumnName:kMESSAGE_ISREAD] boolValue];
- }
- return NO;
- }
- -(NSTimeInterval)queryReadTime{
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:MY_USER_ID];
- NSString* sql= [NSString stringWithFormat:@"select readTime from msg_%@ where messageId=?",[self getTableName]];
- FMResultSet *rs=[db executeQuery:sql,self.messageId];
- while ([rs next]) {
- return [[rs objectForColumnName:kMESSAGE_readTime] doubleValue];
- }
- return 0;
- }
- -(void)doGroupFileMsg{
- NSString* room = self.objectId;
- JXMessageObject* msg = self;
-
- NSString* s=nil;
- switch ([msg.type intValue]) {
- case kWCMessageTypeGroupFileUpload:
- s = [NSString stringWithFormat:@"%@%@:%@",msg.fromUserName,Localized(@"JXMessage_fileUpload"),msg.fileName];
- break;
- case kWCMessageTypeGroupFileDelete:
- s = [NSString stringWithFormat:@"%@%@:%@",msg.fromUserName,Localized(@"JXMessage_fileDelete"),msg.fileName];
- break;
- case kWCMessageTypeGroupFileDownload:
- s = [NSString stringWithFormat:@"%@%@:%@",msg.fromUserName,Localized(@"JXMessage_fileDownload"),msg.fileName];
- break;
- default:
- break;
- }
- msg.type = [NSNumber numberWithInt:kWCMessageTypeRemind];
- msg.fromId = nil;
- msg.toId = nil;
- msg.fromUserId = msg.fromUserId;
- msg.toUserId = room;
- msg.content = s;
- if ([msg insert:room]){
- [msg updateLastSend:UpdateLastSendType_Add];
- }else {
- msg.isRepeat = YES;
- }
- [msg notifyNewMsg];
- }
- -(void)changeVideoChatContent{//改变音视频通话消息的content
- if(([type intValue]<100 || [type intValue]>120) && [type intValue] != kWCMessageTypeAVBusy)
- return;
- switch ([type intValue]) {
- //以下不可见消息,不需要赋值
- case kWCMessageTypeAudioChatAsk:
- content = [NSString stringWithFormat:@"%@%@",Localized(@"JXSip_invite"),Localized(@"JXSip_Audiocall")];
- break;
- case kWCMessageTypeVideoChatAsk:
- content = [NSString stringWithFormat:@"%@%@",Localized(@"JXSip_invite"),Localized(@"JXSip_Videocall")];
- break;
- case kWCMessageTypeAudioChatReady:
- content = [NSString stringWithFormat:@"%@%@",Localized(@"JXSip_ready"),Localized(@"JXSip_Audiocall")];
- break;
- case kWCMessageTypeVideoChatReady:
- content = [NSString stringWithFormat:@"%@%@",Localized(@"JXSip_ready"),Localized(@"JXSip_Videocall")];
- break;
- case kWCMessageTypeAudioChatAccept:
- content = [NSString stringWithFormat:@"%@%@",Localized(@"JXSip_Accepted"),Localized(@"JXSip_Audiocall")];
- break;
- case kWCMessageTypeVideoChatAccept:
- content = [NSString stringWithFormat:@"%@%@",Localized(@"JXSip_Accepted"),Localized(@"JXSip_Videocall")];
- break;
- //以上不可见消息,不需要赋值
- case kWCMessageTypeAudioChatCancel:
- if([timeLen intValue]>0){
- content = [NSString stringWithFormat:@"%@",@"对方无应答"];
- }
- // else if([timeLen intValue]>0&&[timeLen intValue]<31){
- // content = self.isMySend ? Localized(@"JX_MeetingHangUpToMe") : Localized(@"JXSip_noanswer"); }
- else{
-
- content = [NSString stringWithFormat:@"%@%@",Localized(@"JXSip_Canceled"),Localized(@"JXSip_Audiocall")];
- }
- break;
- case kWCMessageTypeVideoChatCancel:
- if([timeLen intValue]>0)
- content = self.isMySend ? Localized(@"JX_MeetingHangUpToMe") : Localized(@"JXSip_noanswer");
- else
- content = [NSString stringWithFormat:@"%@%@",Localized(@"JXSip_Canceled"),Localized(@"JXSip_Videocall")];
- break;
- case kWCMessageTypeAudioChatEnd:{
- NSString *timeLenStr = [TimeUtil getTimeShort1:[timeLen longLongValue]];
- content = [NSString stringWithFormat:@"%@%@,%@:%@",Localized(@"JXSip_finished"),Localized(@"JXSip_Audiocall"),Localized(@"JXSip_timeLenth"),timeLenStr];
- }
- break;
- case kWCMessageTypeVideoChatEnd:{
-
- NSString *timeLenStr = [TimeUtil getTimeShort1:[timeLen longLongValue]];
- content = [NSString stringWithFormat:@"%@%@,%@:%@",Localized(@"JXSip_finished"),Localized(@"JXSip_Videocall"),Localized(@"JXSip_timeLenth"),timeLenStr];
- }
- break;
- case kWCMessageTypeAudioMeetingInvite:
- content = Localized(@"JXMeeting_InviteAudioMeeting");
- break;
- case kWCMessageTypeVideoMeetingInvite:
- content = Localized(@"JXMeeting_InviteVideoMeeting");
- break;
- case kWCMessageTypeAVBusy:{
- if ([self.fromUserId isEqualToString:MY_USER_ID]) {
- self.fromUserId = [self.toUserId copy];
- self.toUserId = MY_USER_ID;
- content = @"忙线未接听";
- }else {
- self.toUserId = [self.fromUserId copy];
- self.fromUserId = MY_USER_ID;
- content = @"对方忙线中";
- }
- }
- break;
- }
- }
- -(BOOL)isVisible{//如果为NO则不发送已读消息,且不更新最近聊天内容字段,且发通知和可见消息分开,走另一通知
- switch ([self.type intValue]) {
- case kWCMessageTypeNone:
- case kWCMessageTypeIsRead:
- case kWCMessageTypeAudioChatAsk:
- case kWCMessageTypeAudioChatReady:
- case kWCMessageTypeAudioChatAccept:
- case kWCMessageTypeVideoChatAsk:
- case kWCMessageTypeVideoChatReady:
- case kWCMessageTypeVideoChatAccept:
- case kWCMessageTypeRelay:
- case kWCMessageTypeAudioMeetingInvite:
- case kWCMessageTypeVideoMeetingInvite:
- case kWCMessageTypeTalkInvite:
- case kWCMessageTypeTalkJoin:
- case kWCMessageTypeTalkQuit:
- case kWCMessageTypeAudioMeetingSetSpeaker:
- case kWCMessageTypeAudioMeetingAllSpeaker:
- case kWCMessageTypeTalkOnline:
- case kWCMessageTypeTalkOut:
- case kWCMessageTypeDelMsgTwoSides:
- // case kWCMessageTypeWithdraw:
- return NO;
- case kWCMessageTypeAudioChatCancel:
- case kWCMessageTypeAudioChatEnd:
- case kWCMessageTypeVideoChatCancel:
- case kWCMessageTypeVideoChatEnd:
- case kWCMessageTypeWithdraw:
- case kWCMessageTypeSuperDelete:
- case kWCMessageTypeAVBusy:
- return YES;
- default:
- return [self.type intValue]<100;
- }
- }
- -(BOOL)isPinbaMsg{
- switch ([self.type intValue]) {
- // case kWCMessageTypeEnterpriseJob:
- case kWCMessageTypePersonJob:
- // case kWCMessageTypeResume:
- case kWCMessageTypePhoneAsk:
- case kWCMessageTypePhoneAnswer:
- case kWCMessageTypeResumeAsk:
- case kWCMessageTypeResumeAnswer:
- case kWCMessageTypeExamSend:
- case kWCMessageTypeExamAccept:
- case kWCMessageTypeExamEnd:
- return YES;
- break;
- default:
- return NO;
- }
- }
- -(BOOL)isRoomControlMsg{//房间控制消息
- return [self.type intValue]/100==9;
- // switch ([self.type intValue]) {
- // case kRoomRemind_RoomName:
- // case kRoomRemind_NickName:
- // case kRoomRemind_DelRoom:
- // case kRoomRemind_DelMember:
- // case kRoomRemind_NewNotice:
- // case kRoomRemind_DisableSay:
- // case kRoomRemind_AddMember:
- // case kRoomRemind_LiveBarrage:
- // case kRoomRemind_LiveGift:
- // case kRoomRemind_LivePraise:
- // case kRoomRemind_SetManage:
- // case kRoomRemind_EnterLiveRoom:
- // case kRoomRemind_ShowRead:
- // return YES;
- // break;
- // default:
- // return NO;
- // }
- }
- -(BOOL)isAudioMeetingMsg{//语音会议消息
- switch ([self.type intValue]) {
- case kWCMessageTypeAudioMeetingInvite:
- case kWCMessageTypeAudioMeetingJoin:
- case kWCMessageTypeAudioMeetingQuit:
- // case kWCMessageTypeAudioMeetingKick:
- // case kWCMessageTypeAudioMeetingSetSpeaker:
- // case kWCMessageTypeAudioMeetingAllSpeaker:
- return YES;
- break;
- default:
- return NO;
- }
- }
- -(BOOL)isAddFriendMsg{
- return [self.type intValue]/100==5;
- }
- // 获取已读列表
- - (NSMutableArray *)fetchReadList {
- NSString* myUserId = MY_USER_ID;
- if([myUserId length]<=0)
- return nil;
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
- NSMutableArray *messageList=[[NSMutableArray alloc]init];
- NSString *queryString = nil;
-
- NSString *messageId = self.messageId;
- #ifdef IS_MsgEncrypt
- // if (!self.isGroup) {
- messageId = [g_msgUtil encryptInsertChatMsgContent:self.messageId msgId:self.messageId];
- // }
- #endif
- queryString = [NSString stringWithFormat:@"select * from msg_%@ where content=?",[self getTableName]];
-
- FMResultSet *rs=[db executeQuery:queryString,messageId];
- while ([rs next]) {
- JXUserObject *user = [[JXUserObject alloc] init];
- user.userId = [rs objectForColumnName:kMESSAGE_FROM];
- user.userNickname = [rs objectForColumnName:kMESSAGE_FROM_NAME];
- user.timeSend = [rs dateForColumn:kMESSAGE_TIMESEND];
- [messageList addObject:user];
- }
- [rs close];
- db = nil;
-
- return messageList;
- }
- -(void)getHistory:(NSArray*)array userId:(NSString*)userId{//获取聊天历史记录
- for (NSInteger i = 0; i < array.count; i ++) {
- NSDictionary *dict = array[i];
-
- NSString *jsonMsg = dict[@"message"];
- SBJsonParser * resultParser = [[SBJsonParser alloc] init] ;
- NSDictionary *jsonDic = [resultParser objectWithString:jsonMsg];
-
-
- JXMessageObject *msg = [[JXMessageObject alloc] init];
- [msg fromDictionary:jsonDic];
-
- if ([msg.type isEqual: @2100]) {
- NSString *str = jsonDic[@"content"];
- JLGroupActivityModel *model = [JLGroupActivityModel mj_objectWithKeyValues:str];
- model.roomJid = userId;
- if (model.type == 2) {
- msg.type = @1;
- msg.content = model.content;
- msg.toUserId = model.roomJid;
- }
-
- }
-
- msg.timeSend = [NSDate dateWithTimeIntervalSince1970:[[jsonDic objectForKey:kMESSAGE_TIMESEND] doubleValue] / 1000.0];
- msg.messageId = [(NSDictionary *)[jsonDic objectForKey:@"messageHead"] objectForKey:@"messageId"];
- // if([userId length]>15){
- // [msg fromDictionary:jsonDic];
- // msg.isGroup = YES;
- // }
- // else
- // [msg fromXmlDict:jsonDic];
-
- [self setRemindMsg:msg];
-
- msg.toUserId = userId;
-
- // if(![msg isVisible] && [msg.type intValue]!=kWCMessageTypeIsRead)
- // continue;
-
- //调整是不是自己发的
- if ([msg.fromUserId isEqualToString:MY_USER_ID])
- msg.isMySend = YES;
-
- if (jsonDic[@"isRead"] && msg.isMySend) {
- msg.isRead = jsonDic[@"isRead"];
- }else {
- msg.isRead = [NSNumber numberWithInt:1];
- }
- msg.updateLastContent = 0;//临时不更新的标志
- [msg insert:userId];
- msg.updateLastContent = 1;//恢复
-
- // msg.chatMsgHeight = [NSString stringWithFormat:@"%f",[self getMsgChatHeight:msg]];
- // [msg updateChatMsgHeight];
- }
- }
- - (void)setRemindMsg:(JXMessageObject *)msg {
- NSString *content;
- NSString *fromUserId = msg.fromUserId;
- NSString *fromUserName = msg.fromUserName;
- if (!fromUserName) {
- fromUserName = @"";
- }
- NSString *toUserId = msg.toUserId;
- NSString *toUserName = msg.toUserName;
- if (IsStringNull(toUserName)) {
- toUserName = @"";
- }
-
- switch ([msg.type integerValue]) {
- case kWCMessageTypeWithdraw:{
- if (msg.isGroup) {
-
- if ([fromUserId isEqualToString:MY_USER_ID]) {
- content = Localized(@"JX_AlreadyWithdraw");
- }else {
- content = [NSString stringWithFormat:@"%@ %@",fromUserName, Localized(@"JX_OtherWithdraw")];
-
- }
- }else {
- if ([fromUserId isEqualToString:MY_USER_ID]) {
-
- content = Localized(@"JX_AlreadyWithdraw");
- }else {
- content = [NSString stringWithFormat:@"%@ %@",fromUserName, Localized(@"JX_OtherWithdraw")];
- }
- }
- }
- break;
-
- case kWCMessageTypeRedPacketReceive:
- if (![fromUserId isEqualToString:MY_USER_ID]) {
- content = [NSString stringWithFormat:@"%@%@",fromUserName,Localized(@"JXRed_whoGet")];
- }else {
- content = [NSString stringWithFormat:Localized(@"JX_GetRedPacketFromFriend"),toUserName];
- }
- break;
- case kWCMessageTypeRedPacketReturn:
- content = [NSString stringWithFormat:@"%@",Localized(@"JX_ RedEnvelopeExpired")];
- break;
- case kWCMessageTypeGroupFileUpload:
-
- content = [NSString stringWithFormat:@"%@%@:%@",msg.fromUserName,Localized(@"JXMessage_fileUpload"),msg.fileName];
- // content = [NSString stringWithFormat:@"%@%@",fromUserName,Localized(@"JXMessage_fileUpload")];
- break;
- case kWCMessageTypeGroupFileDelete:
-
- content = [NSString stringWithFormat:@"%@%@:%@",msg.fromUserName,Localized(@"JXMessage_fileDelete"),msg.fileName];
- // content = [NSString stringWithFormat:@"%@%@",fromUserName,Localized(@"JXMessage_fileDelete")];
- break;
- case kWCMessageTypeGroupFileDownload:
-
- content = [NSString stringWithFormat:@"%@%@:%@",msg.fromUserName,Localized(@"JXMessage_fileDownload"),msg.fileName];
- // content = [NSString stringWithFormat:@"%@%@",fromUserName,Localized(@"JXMessage_fileDownload")];
- break;
- case kRoomRemind_RoomName:
- content = [NSString stringWithFormat:@"%@%@%@",fromUserName,Localized(@"JXMessageObject_UpdateRoomName"),msg.content];
- break;
- case kRoomRemind_NickName:{
- content = [NSString stringWithFormat:@"%@%@%@",fromUserName,Localized(@"JXMessageObject_UpdateNickName"),msg.content];
- }
- break;
- case kRoomRemind_DelRoom:
- if ([toUserId isEqualToString:MY_USER_ID]) {
- content = [NSString stringWithFormat:Localized(@"JX_DissolutionGroup"),fromUserName];
- }else {
- content = [NSString stringWithFormat:@"%@%@:%@",fromUserName,Localized(@"JXMessage_delRoom"),msg.content];
- }
-
- break;
- case kRoomRemind_AddMember:
- if([toUserId isEqualToString:fromUserId] || IS_OTHER_DEVICE(toUserId) || IS_OTHER_DEVICE(fromUserId))
- content = [NSString stringWithFormat:@"%@%@",fromUserName,Localized(@"JXMessageObject_GroupChat")];
- else
- content = [NSString stringWithFormat:@"%@%@%@",fromUserName,Localized(@"JXMessageObject_InterFriend"),toUserName];
- break;
- case kLiveRemind_ExitRoom:
- if([toUserId isEqualToString:fromUserId]){
- content = [NSString stringWithFormat:@"%@%@",fromUserName,Localized(@"EXITED_LIVE_ROOM")];//退出
-
- }else{
- content = [NSString stringWithFormat:@"%@%@",toUserName,Localized(@"JX_LiveVC_kickLive")];//被踢出
- }
- break;
- case kRoomRemind_DelMember:
- if([toUserId isEqualToString:fromUserId]){
- content = [NSString stringWithFormat:@"%@%@",fromUserName,Localized(@"JXMessageObject_OutGroupChat")];
- }else{
- if ([toUserId isEqualToString:MY_USER_ID]) {
- content = [NSString stringWithFormat:Localized(@"JX_OutOfTheGroup"),fromUserName];
- }else {
- if ([fromUserName isEqualToString:toUserName]) {
- content = [NSString stringWithFormat:@"%@%@",fromUserName,Localized(@"JXRoomMemberVC_OutPutRoom")];
- }else {
- content = [NSString stringWithFormat:@"%@%@%@",fromUserName,Localized(@"JXMessageObject_KickOut"),toUserName];
- }
- }
- }
-
- break;
- case kRoomRemind_NewNotice:
- case kRoomRemind_editNotice:
- content = [NSString stringWithFormat:@"%@%@%@",fromUserName,Localized(@"JXMessageObject_AddNewAdv"),msg.content];
- break;
- case kLiveRemind_ShatUp:
- case kRoomRemind_DisableSay:{
- if([msg.content longLongValue]==0){
- content = [NSString stringWithFormat:@"%@%@%@%@",fromUserName,Localized(@"JXMessageObject_Yes"),toUserName,Localized(@"JXMessageObject_CancelGag")];
- }else{
- NSDate* d = [NSDate dateWithTimeIntervalSince1970:[msg.content longLongValue]];
- NSString* t = [TimeUtil formatDate:d format:@"MM-dd HH:mm"];
- content = [NSString stringWithFormat:@"%@%@%@%@%@",fromUserName,Localized(@"JXMessageObject_Yes"),toUserName,Localized(@"JXMessageObject_SetGagWithTime"),t];
- d = nil;
- }
- break;
- }
- case kLiveRemind_SetManager:
- case kRoomRemind_SetManage:{
- if ([msg.content integerValue] == 1) {
- content = [NSString stringWithFormat:@"%@%@%@%@",Localized(@"JXGroup_Owner"),Localized(@"JXSettingVC_Set"),toUserName,Localized(@"JXMessage_admin")];
- }else {
- content = [NSString stringWithFormat:@"%@%@%@",Localized(@"JXGroup_Owner"),Localized(@"CANCEL_ADMINISTRATOR"),toUserName];
- }
- break;
- }
- case kRoomRemind_EnterLiveRoom:{
- content = [NSString stringWithFormat:@"%@%@",toUserName,Localized(@"Enter_LiveRoom")];//加入房间消息
- break;
- }
- case kRoomRemind_ShowRead:{
- if ([msg.content integerValue] == 1)
- content = [NSString stringWithFormat:@"%@%@%@",Localized(@"JXGroup_Owner"),Localized(@"JX_Enable"),Localized(@"JX_RoomReadMode")];
- else
- content = [NSString stringWithFormat:@"%@%@%@",Localized(@"JXGroup_Owner"),Localized(@"JX_Disable"),Localized(@"JX_RoomReadMode")];
- break;
- }
- case kRoomRemind_NeedVerify:{
-
- if (!msg.content || msg.content.length <= 0) {
- content = Localized(@"JX_GroupInvitationConfirmation");
- }else {
- if ([msg.content integerValue] == 1)
- content = Localized(@"JX_GroupOwnersOpenValidation");
- else
- content = Localized(@"JX_GroupOwnersCloseValidation");
- }
-
- break;
- }
- case kRoomRemind_IsLook:{
- if ([msg.content integerValue] == 0)
- content = Localized(@"JX_GroupOwnersPublicGroup");
- else
- content = Localized(@"JX_GroupOwnersPrivateGroup");
- break;
- }
-
- case kRoomRemind_ShowMember:{
- if ([msg.content integerValue] == 1)
- content = Localized(@"JX_GroupOwnersShowMembers");
- else
- content = Localized(@"JX_GroupOwnersNotShowMembers");
- break;
- }
-
- case kRoomRemind_allowSendCard:{
- if ([msg.content integerValue] == 1)
- content = Localized(@"JX_ManagerOpenChat");
- else
- content = Localized(@"JX_ManagerOffChat");
- break;
- }
-
- case kRoomRemind_RoomAllBanned:{
- if ([msg.content integerValue] > 0)
- content = Localized(@"JX_ManagerOpenSilence");
- else
- content = Localized(@"JX_ManagerOffSilence");
- break;
- }
-
- case kRoomRemind_RoomAllowInviteFriend:{
- if ([msg.content integerValue] > 0)
- content = Localized(@"JX_ManagerOpenInviteFriends");
- else
- content = Localized(@"JX_ManagerOffInviteFriends");
- break;
- }
-
- case kRoomRemind_RoomAllowUploadFile:{
- if ([msg.content integerValue] > 0)
- content = Localized(@"JX_ManagerOpenSharedFiles");
- else
- content = Localized(@"JX_ManagerOffSharedFiles");
- break;
- }
-
- case kRoomRemind_RoomAllowConference:{
- if ([msg.content integerValue] > 0)
- content = Localized(@"JX_ManagerOpenMeetings");
- else
- content = Localized(@"JX_ManagerOffMeetings");
- break;
- }
-
- case kRoomRemind_RoomAllowSpeakCourse:{
- if ([msg.content integerValue] > 0)
- content = Localized(@"JX_ManagerOpenLectures");
- else
- content = Localized(@"JX_ManagerOffLectures");
- break;
- }
-
- case kRoomRemind_RoomTransfer:{
- content = [NSString stringWithFormat:@"\"%@\"%@", toUserName,Localized(@"JX_NewGroupManager")];
- break;
- }
- case kRoomRemind_SetInvisible:{
- // 自己设置隐身人 和 别人设置自己为隐身人显示
- if ([msg.toUserId isEqualToString:g_myself.userId] || [msg.fromUserId isEqualToString:g_myself.userId]) {
- if ([msg.content integerValue] == 1) {
- content = [NSString stringWithFormat:@"%@%@%@%@",fromUserName,Localized(@"JXSettingVC_Set"),toUserName,Localized(@"JX_ForTheInvisibleMan")];
- }else if ([msg.content integerValue] == -1){
- content = [NSString stringWithFormat:@"%@%@%@",fromUserName,Localized(@"JX_EliminateTheInvisible"),toUserName];
- }else if ([msg.content integerValue] == 2){
- content = [NSString stringWithFormat:@"%@%@%@%@",fromUserName,Localized(@"JXSettingVC_Set"),toUserName,@"为监控人"];
- }else if ([msg.content integerValue] == 0){
- content = [NSString stringWithFormat:@"%@%@%@",fromUserName,@"取消监控人",toUserName];
- }
- break;
- }else {
- if ([msg.content integerValue] == 1) {
- // content = [NSString stringWithFormat:@"%@%@%@%@",fromUserName,Localized(@"JXSettingVC_Set"),toUserName,Localized(@"JX_ForTheInvisibleMan")];
- return;
- }else if ([msg.content integerValue] == -1){
- // content = [NSString stringWithFormat:@"%@%@%@",fromUserName,Localized(@"JX_EliminateTheInvisible"),toUserName];
- return;
- }else if ([msg.content integerValue] == 2){
- // content = [NSString stringWithFormat:@"%@%@%@%@",fromUserName,Localized(@"JXSettingVC_Set"),toUserName,@"为监控人"];
- return;
- }else if ([msg.content integerValue] == 0){
- // content = [NSString stringWithFormat:@"%@%@%@",fromUserName,@"取消监控人",toUserName];
- return;
- }
- break;
- }
-
- }
-
- case kRoomRemind_RoomDisable:{
- if ([msg.content integerValue] == 1) {
- content = [NSString stringWithFormat:@"%@",Localized(@"JX_ThisGroupHasBeenDisabled")];
- }else {
- content = [NSString stringWithFormat:@"%@",Localized(@"JX_GroupNotUse")];
- }
- break;
- }
-
- case kRoomRemind_SetRecordTimeOut:{
- NSArray *pickerArr = @[Localized(@"JX_Forever"), Localized(@"JX_OneHour"), Localized(@"JX_OneDay"), Localized(@"JX_OneWeeks"), Localized(@"JX_OneMonth"), Localized(@"JX_OneQuarter"), Localized(@"JX_OneYear")];
- double outTime = [msg.content doubleValue];
- NSString *str;
- if (outTime <= 0) {
- str = pickerArr[0];
- }else if (outTime == 0.04) {
- str = pickerArr[1];
- }else if (outTime == 1) {
- str = pickerArr[2];
- }else if (outTime == 7) {
- str = pickerArr[3];
- }else if (outTime == 30) {
- str = pickerArr[4];
- }else if (outTime == 90) {
- str = pickerArr[5];
- }else{
- str = pickerArr[6];
- }
- content = [NSString stringWithFormat:@"%@%@",Localized(@"JX_GroupManagerSetMsgDelTime"),str];
- }
- default:
- break;
- }
-
- if (content.length > 0) {
- msg.type = [NSNumber numberWithInt:kWCMessageTypeRemind];
- msg.content = content;
- }
-
- }
- -(BOOL)isAtMe{//是否@了我
- if(!self.isGroup || self.objectId==nil)
- return 0;
- if (![self.objectId isKindOfClass:[NSString class]]) {
- self.objectId = [NSString stringWithFormat:@"%@",self.objectId];
- }
- if([self.objectId isEqualToString:self.toUserId] && [self.type intValue] == 1)
- return 1;
- return [self.objectId rangeOfString:MY_USER_ID].location != NSNotFound;
- }
- - (BOOL)updateFromUserName{
- NSString* myUserId = MY_USER_ID;
- if([myUserId length]<=0)
- return NO;
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
-
- NSString *sql=[NSString stringWithFormat:@"update msg_%@ set fromUserName=? where fromUserId=?",self.objectId];
-
- BOOL worked=[db executeUpdate:sql,self.content, self.fromUserId];
- // FMDBQuickCheck(worked);
- db = nil;
- return worked;
- }
- - (id)copyWithZone:(NSZone *)zone
- {
- JXMessageObject* newMsg = [[JXMessageObject allocWithZone:zone] init];
- newMsg.messageId = self.messageId;
- newMsg.fromId = self.fromId;
- newMsg.toId = self.toId;
- newMsg.type = self.type;
- newMsg.fromUserId = self.fromUserId;
- newMsg.fromUserName = self.fromUserName;
- newMsg.toUserId = self.toUserId;
- newMsg.toUserName = self.toUserName;
- newMsg.content = self.content;
- newMsg.fileName = self.fileName;
- newMsg.objectId = self.objectId;
- newMsg.fileSize = self.fileSize;
- newMsg.timeLen = self.timeLen;
- newMsg.location_x = self.location_x;
- newMsg.location_y = self.location_y;
- newMsg.isReadDel = self.isReadDel;
- newMsg.isEncrypt = self.isEncrypt;
- newMsg.timeSend = self.timeSend;
- newMsg.deleteTime = self.deleteTime;
- newMsg.messageNo = self.messageNo;
- newMsg.isSend = self.isSend;
- newMsg.isRead = self.isRead;
- newMsg.isReceive = self.isReceive;
- newMsg.isUpload = self.isUpload;
- newMsg.timeReceive = self.timeReceive;
- newMsg.fileData = self.fileData;
- newMsg.readPersons = self.readPersons;
- newMsg.readTime = self.readTime;
- newMsg.isMySend = self.isMySend;
- newMsg.isGroup = self.isGroup;
- newMsg.isShowTime = self.isShowTime;
- newMsg.isDelay = self.isDelay;
- newMsg.imageWidth = self.imageWidth;
- newMsg.imageHeight = self.imageHeight;
- newMsg.dictionary = self.dictionary;
- newMsg.progress = self.progress;
- newMsg.index = self.index;
- newMsg.sendCount = self.sendCount;
- newMsg.updateLastContent = self.updateLastContent;
- newMsg.showRead = self.showRead;
- newMsg.chatMsgHeight = self.chatMsgHeight;
- newMsg.isShowTime = self.isShowTime;
- newMsg.signature = self.signature;
- newMsg.isVerifySignatureFailed = self.isVerifySignatureFailed;
-
- return newMsg;
- }
- - (BOOL)haveTheMessage {
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:MY_USER_ID];
- NSString* sql= [NSString stringWithFormat:@"select messageId from msg_%@ where messageId=?",[self getTableName]];
- FMResultSet *rs=[db executeQuery:sql,self.messageId];
- while ([rs next]) {
- // NSLog(@"不必重复保存:%@",self.messageId);
- return YES;
- }
- return NO;
- }
- - (BOOL)updateFileName {
- NSString* myUserId = MY_USER_ID;
- if([myUserId length]<=0)
- return NO;
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
-
- NSString *sql=[NSString stringWithFormat:@"update msg_%@ set fileName=? where messageId=?",[self getTableName]];
-
- BOOL worked=[db executeUpdate:sql,self.fileName, self.messageId];
- // FMDBQuickCheck(worked);
- db = nil;
- return worked;
-
- }
- - (BOOL)updateFileSize {
- NSString* myUserId = MY_USER_ID;
- if([myUserId length]<=0)
- return NO;
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
-
- NSString *sql=[NSString stringWithFormat:@"update msg_%@ set fileSize=? where messageId=?",[self getTableName]];
-
- BOOL worked=[db executeUpdate:sql,self.fileSize, self.messageId];
- // FMDBQuickCheck(worked);
- db = nil;
- return worked;
- }
- // 更新邀请群好友验证文件名,用于判断是否已确认验证
- - (BOOL)updateNeedVerifyFileName; {
- NSString* myUserId = MY_USER_ID;
- if([myUserId length]<=0)
- return NO;
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
-
- SBJsonParser * resultParser = [[SBJsonParser alloc] init] ;
- NSDictionary *resultObject = [resultParser objectWithString:self.objectId];
- NSString *roomJid = [resultObject objectForKey:@"roomJid"];
-
- NSString *sql=[NSString stringWithFormat:@"update msg_%@ set fileName=? where messageId=?",roomJid];
-
- BOOL worked=[db executeUpdate:sql,self.fileName, self.messageId];
- // FMDBQuickCheck(worked);
- db = nil;
- return worked;
- }
- // 更新消息行高
- - (BOOL)updateChatMsgHeight {
- NSString* myUserId = MY_USER_ID;
- if([myUserId length]<=0)
- return NO;
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
-
- NSString *sql=[NSString stringWithFormat:@"update msg_%@ set chatMsgHeight=? where messageId=? and type=?",[self getTableName]];
-
- BOOL worked=[db executeUpdate:sql,self.chatMsgHeight, self.messageId, self.type];
-
- return worked;
- }
- // 根据objectId获取消息
- - (NSMutableArray *)getMsgWithObjectId:(NSString *)objectId {
- NSString* myUserId = MY_USER_ID;
-
- NSMutableArray *resultArr = [NSMutableArray array];
-
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
-
- NSString *sql=[NSString stringWithFormat:@"select * from msg_%@ where objectId=?",[self getTableName]];
-
- FMResultSet *rs=[db executeQuery:sql,objectId];
- while ([rs next]) {
- JXMessageObject *p=[[JXMessageObject alloc] init];
- [p fromRs:rs];
- [resultArr addObject:p];
- }
-
- [rs close];
- if([resultArr count]==0){
- resultArr = nil;
- }
-
- return resultArr;
- }
- // 更新所有消息行高
- - (BOOL)updateAllChatMsgHeight {
- NSString* myUserId = MY_USER_ID;
- if([myUserId length]<=0)
- return NO;
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
-
- NSString *sql=[NSString stringWithFormat:@"select * from sqlite_master where type='table'"];
-
- FMResultSet *rs=[db executeQuery:sql];
- while ([rs next]) {
- NSString *name = [rs stringForColumn:@"name"];
- if ([name rangeOfString:@"msg_"].location != NSNotFound) {
- NSString *sql=[NSString stringWithFormat:@"update %@ set chatMsgHeight=? ",name];
- [db executeUpdate:sql,@"0"];
- }
- }
-
- return YES;
- }
- // 更新是否显示时间
- - (BOOL)updateIsShowTime {
- NSString* myUserId = MY_USER_ID;
- if([myUserId length]<=0)
- return NO;
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
-
- NSString *sql=[NSString stringWithFormat:@"update msg_%@ set isShowTime=? where messageId=?",[self getTableName]];
-
- BOOL worked=[db executeUpdate:sql,[NSNumber numberWithBool:self.isShowTime], self.messageId];
-
- return worked;
- }
- // 删除过期聊天记录
- - (BOOL)deleteTimeOutMsg:(NSString *)userId chatRecordTimeOut:(NSString *)ChatRecordTimeOut {
- NSString* myUserId = MY_USER_ID;
- if([myUserId length]<=0)
- return NO;
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:myUserId];
-
- NSString *sql=[NSString stringWithFormat:@"delete from msg_%@ where deleteTime < %f and deleteTime > 0",userId,[[NSDate date] timeIntervalSince1970]];
-
- BOOL worked=[db executeUpdate:sql];
- // FMDBQuickCheck(worked);
- db = nil;
- return worked;
- }
- - (JXMessageObject *)getMsgWithMsgId:(NSString *)msgId {
-
- JXUserObject *user = [[JXUserObject sharedInstance] getUserById:[self getTableName]];
-
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:MY_USER_ID];
- NSString* sql= [NSString stringWithFormat:@"select * from msg_%@ where messageId=?",[self getTableName]];
- FMResultSet *rs=[db executeQuery:sql,msgId];
- while ([rs next]) {
- JXMessageObject *p=[[JXMessageObject alloc] init];
- p.isGroup = [user.roomFlag boolValue];
- [p fromRs:rs];
-
- return p;
- }
-
- return nil;
- }
- - (JXMessageObject *)getMsgWithMsgId:(NSString *)msgId toUserId:(NSString *)toUserId {
-
- JXUserObject *user = [[JXUserObject sharedInstance] getUserById:toUserId];
-
- FMDatabase* db = [[JXXMPP sharedInstance] openUserDb:MY_USER_ID];
- NSString* sql= [NSString stringWithFormat:@"select * from msg_%@ where messageId=?",toUserId];
- FMResultSet *rs=[db executeQuery:sql,msgId];
- while ([rs next]) {
- JXMessageObject *p=[[JXMessageObject alloc] init];
- p.isGroup = [user.roomFlag boolValue];
- [p fromRs:rs];
-
- return p;
- }
-
- return nil;
- }
- // Message.pbobjc 转 JXMessageObject
- + (JXMessageObject *)getMsgObjWithPbobjc:(ChatMessage *)message {
-
- JXMessageObject *msg = [[JXMessageObject alloc] init];
-
- msg.fromId = message.messageHead.from;
- msg.toId = message.messageHead.to;
- msg.messageId = message.messageHead.messageId;
-
- msg.fromUserId = message.fromUserId;
- msg.fromUserName = message.fromUserName;
- if (message.toUserId && message.toUserId.length > 0) {
- msg.toUserId = message.toUserId;
- }else {
- msg.toUserId = MY_USER_ID;
- }
- msg.toUserName = message.toUserName;
- msg.timeSend = [NSDate dateWithTimeIntervalSince1970:message.timeSend / 1000.0];
- msg.type = [NSNumber numberWithInt:message.type];
- msg.objectId = message.objectId;
- msg.fileName = message.fileName;
- msg.isEncrypt = [NSNumber numberWithBool:message.isEncrypt];
- msg.deleteTime = [NSDate dateWithTimeIntervalSince1970:message.deleteTime];
- msg.isReadDel = [NSNumber numberWithBool:message.isReadDel];
- msg.fileSize = [NSNumber numberWithLongLong:message.fileSize];
- msg.location_x = [NSNumber numberWithDouble:message.locationX];
- msg.location_y = [NSNumber numberWithDouble:message.locationY];
- msg.chatType = message.messageHead.chatType;
- msg.isDelay = message.messageHead.offline;
- msg.isRead = [NSNumber numberWithInt:0];
- msg.timeLen = [NSNumber numberWithLongLong:message.fileTime];
-
- if ([msg.isEncrypt boolValue]) {
- // self.content = [DESUtil decryptDESStr:messCont key:[NSString stringWithFormat:@"%@",[p objectForKey:kMESSAGE_TIMESEND]]];
- NSMutableString *str = [NSMutableString string];
- [str appendString:APIKEY];
- [str appendString:[NSString stringWithFormat:@"%lld",message.timeSend]];
- [str appendString:msg.messageId];
- NSString *keyStr = [g_server getMD5String:str];
- msg.content = [DESUtil decryptDESStr:message.content key:keyStr];
- if (IsStringNull(msg.content)) {
- msg.content = message.content;
- }
-
- }else{
- msg.content = message.content;
- }
-
- return msg;
- }
- // JXMessageObject 转 Message.pbobjc
- - (ChatMessage *)getPbobjcObjWithMsg:(JXMessageObject *)msg {
-
-
- ChatMessage *message = [[ChatMessage alloc] init];
- if ( msg.tempChat==11) {
- message.messageHead.from = [NSString stringWithFormat:@"%@/%@/1",msg.fromUserId,SameResource];
- }else{
- message.messageHead.from = [NSString stringWithFormat:@"%@/%@",msg.fromUserId,SameResource];
- }
-
- message.messageHead.to = msg.toUserId ? msg.toUserId : @"";
- message.messageHead.messageId = msg.messageId ? msg.messageId : @"";
- message.messageHead.chatType = msg.chatType;
- message.messageHead.offline = msg.isDelay;
-
- //message.useInfoTempChat = msg.tempChat ? msg.tempChat : 0;
-
- message.fromUserId = msg.fromUserId ? msg.fromUserId : @"";
- message.fromUserName = msg.fromUserName ? msg.fromUserName : @"";
- message.toUserId = msg.toUserId ? msg.toUserId : @"";
- message.toUserName = msg.toUserName ? msg.toUserName : @"";
- message.timeSend = [msg.timeSend timeIntervalSince1970] * 1000;
- message.type = [msg.type intValue];
- message.objectId = msg.objectId ? msg.objectId : @"";
- message.fileName = [NSString stringWithFormat:@"%@",msg.fileName ? msg.fileName : @""];
- message.isEncrypt = [msg.isEncrypt boolValue];
- message.deleteTime = [msg.deleteTime timeIntervalSince1970];
- message.isReadDel = [msg.isReadDel boolValue];
- message.fileSize = [msg.fileSize longLongValue];
- message.locationX = [msg.location_x doubleValue];
- message.locationY = [msg.location_y doubleValue];
- message.fileTime = [msg.timeLen intValue];
-
- if([self.isEncrypt boolValue]){
- NSMutableString *str = [NSMutableString string];
- [str appendString:APIKEY];
- [str appendString:[NSString stringWithFormat:@"%@",[NSNumber numberWithLongLong:message.timeSend]]];
- [str appendString:msg.messageId];
- NSString *keyStr = [g_server getMD5String:str];
- message.content = [DESUtil encryptDESStr:msg.content key:keyStr];
- // [dictionary setValue:[DESUtil encryptDESStr:msg.content key:keyStr] forKey:kMESSAGE_CONTENT];
- }
- else
- message.content = msg.content ? msg.content : @"";
-
- return message;
- }
- @end
|