📄 evaqtutil.cpp
字号:
/*************************************************************************** * Copyright (C) 2005 by yunfan * * yunfan_zg@163.com * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/#include "evaqtutil.h"#include "evautil.h"#include "evausersetting.h"#include "evamemo.h"#include <qtextstream.h>#include <qimage.h>#include <qdir.h>#include <qfile.h>#include <qfileinfo.h>#include <qapplication.h>const QString EvaTextFilter::filter( const QString & source ){ QChar ch; QString result; QTextStream stream(&result, IO_WriteOnly); for(uint i=0; i< source.length(); i++){ ch = source.at(i); if(ch.isPrint()) stream << ch; } return result;} /* ***********************************************************/QMutex EvaHelper::mutex;void EvaHelper::run(){ mutex.lock(); switch(type){ case LoadGroupedUsers: doGroupedUserLoading(); break; case SaveGroupedUsers: doGroupedUserSaving(); break; case LoadQunUsers: doQunUserLoading(); break; case SaveQunUsers: doQunUserSaving(); case LoadSys: doSysLoading(); break; case ScaleImage: doImageScaling(); } mutex.unlock();}void EvaHelper::doSysLoading( ){}void EvaHelper::doImageScaling( ){ QImage img(pic.convertToImage().smoothScale(size)); pic = img; EvaScaleEvent *event = new EvaScaleEvent(pic); QApplication::postEvent(receiver, event);}void EvaHelper::setLoadGroupedUsersArgs( QFile * file ){ this->file = file;}void EvaHelper::doGroupedUserLoading( ){ if(type != LoadGroupedUsers) return; if(!file->isOpen()) return; std::list<std::string> groupNames; ContactInfo myInfo; FriendList list; Q_UINT32 numGroups=0; MemoItem memo; QDataStream stream(file); // check version first char *flag = new char[3]; stream.readRawBytes(flag, 3); Q_UINT32 version = 0; stream>>version; if(!(flag[0]=='E' && flag[1]=='V' && flag[2]=='A' && version == profileVersion)){ file->close(); file->remove(); delete flag; return; } delete []flag; // load my details first Q_UINT32 size=0; std::string item; std::vector<std::string> strlist; stream>>size; char *str = new char[512]; for(uint i=0; i<size; i++){ stream>>str; item = str; strlist.push_back(item); } myInfo.setDetails(strlist); // read my extra info Q_UINT16 myExtraInfo; stream>>myExtraInfo; // read signature & time std::string signature; stream>>str; signature = str; Q_UINT32 sigTime; stream>>sigTime; // read in how many groups stream>>numGroups; std::string name; // read all groups in for(uint i=0; i<numGroups; i++){ stream>>str; name = str; groupNames.push_back(name); } Q_UINT32 id; Q_UINT16 face; Q_UINT8 age; Q_UINT8 gender; std::string nick; Q_UINT8 extFlag; Q_UINT8 commonFlag; Q_UINT32 groupIndex; Q_UINT16 extraInfo; std::string frdSig; Q_UINT32 frdSigTime; Q_UINT32 fontSize; Q_UINT32 fontColor; // read in all friends while(!stream.atEnd()){ stream>>id; stream>>face; stream>>age; stream>>gender; stream>>str; nick = str; stream>>extFlag; stream>>commonFlag; stream>>groupIndex; stream>>extraInfo; stream>>str; frdSig = str; stream>>frdSigTime; strlist.clear(); stream>>size; for(uint i=0; i<size; i++){ stream>>str; item = str; strlist.push_back(item); } stream>>str;memo.name = str; stream>>str;memo.mobile = str; stream>>str;memo.telephone = str; stream>>str;memo.address = str; stream>>str;memo.email = str; stream>>str;memo.zipcode = str; stream>>str;memo.note = str; stream>>fontSize>>fontColor; QQFriend f(id, face); f.setAge(age); f.setGender(gender); f.setNick(nick); f.setExtFlag(extFlag); f.setCommonFlag(commonFlag); f.setGroupIndex(groupIndex); f.setExtraInfo(extraInfo); f.setSignature(frdSig, frdSigTime); ContactInfo info; info.setDetails(strlist); f.setUserInformation(info); f.setMemo(memo); f.setChatFontSize(fontSize); f.setChatFontColor(fontColor); list.addFriend(f); } delete str; file->close(); EvaBuddyListEvent *event = new EvaBuddyListEvent(); event->setGroupNames(groupNames); event->setDetails(myInfo); event->setFriendList(list); event->setExtraInfo(myExtraInfo); event->setSignature(signature, sigTime); QApplication::postEvent(receiver, event);}void EvaHelper::setSaveGroupedUsersArgs( QFile * file, std::list<std::string> myGroups, ContactInfo &info, FriendList &myList, unsigned short extraInfo, std::string signature, unsigned int sigModiTime){ this->file = file; groups = myGroups; myInfo = info; list = myList; mExtraInfo = extraInfo; mSignature = signature; mSigModiTime = sigModiTime;}void EvaHelper::doGroupedUserSaving(){ if(type != SaveGroupedUsers) return; if(!file->isOpen()) return; QDataStream stream(file); // save Eva flag and Version stream.writeRawBytes("EVA", 3); stream<<profileVersion; std::string detailItem; // save my info first Q_UINT32 myCount = myInfo.count(); stream<<myCount; for(int i=0; i<(int)myCount; i++){ detailItem = myInfo.at(i); stream<<detailItem.c_str(); } // save my extra info stream<<mExtraInfo; // save my signature stream<<mSignature.c_str()<< mSigModiTime; // save group names std::list<std::string>::iterator itr; // save the number of customized groups (including buddy list) Q_UINT32 size = groups.size(); stream<<size; for(itr=groups.begin(); itr!=groups.end(); ++itr){ stream<<itr->c_str(); } std::list<QQFriend> flist = list.getAllFriends(); std::list<QQFriend>::iterator iter; Q_UINT32 id; Q_UINT16 face; Q_UINT8 age; Q_UINT8 gender; std::string nick; Q_UINT8 extFlag; Q_UINT8 commonFlag; Q_UINT32 groupIndex; Q_UINT16 bExtraInfo; std::string signature; Q_UINT32 sigModiTime; ContactInfo userDetails; MemoItem memo; Q_UINT32 fontSize; Q_UINT32 fontColor; // save all buddy details for(iter = flist.begin(); iter!= flist.end(); ++iter){ id = iter->getQQ(); face = iter->getFace(); age = iter->getAge(); gender = iter->getGender(); nick = iter->getNick(); extFlag = iter->getExtFlag(); commonFlag = iter->getCommonFlag(); groupIndex = iter->getGroupIndex(); bExtraInfo = iter->getExtraInfo(); signature = iter->getSignature(); sigModiTime = iter->getSignatureModifyTime(); userDetails = iter->getUserInformation(); stream<<id<<face<<age<<gender<<nick.c_str()<<extFlag<<commonFlag<<groupIndex<<bExtraInfo<<signature.c_str()<<sigModiTime; Q_UINT32 count = userDetails.count(); stream<<count; for(int i=0; i<(int)count; i++){ detailItem = userDetails.at(i); stream<<detailItem.c_str(); } memo = iter->getMemo(); stream<<memo.name.c_str()<<memo.mobile.c_str()<<memo.telephone.c_str(); stream<<memo.address.c_str()<<memo.email.c_str()<<memo.zipcode.c_str()<<memo.note.c_str(); fontSize = iter->getChatFontSize(); fontColor = iter->getChatFontColor(); stream << fontSize << fontColor; } file->flush(); file->close();}void EvaHelper::setSaveQunListArgs( QFile * file, QunList & list ){ this->file = file; qunList = list;}void EvaHelper::doQunUserSaving( ){ if(type != SaveQunUsers) return; if(!file->isOpen()) return; QDataStream stream(file); // save Eva flag and Version stream.writeRawBytes("EVA", 3); stream<<profileVersion; std::list<Qun>::iterator qunIter; std::list<Qun>list = qunList.getQunList(); QunInfo info; std::list<FriendItem>::iterator memberIter; std::list<FriendItem> memberList; for(qunIter = list.begin(); qunIter!= list.end(); ++qunIter){ // save qun info info = qunIter->getDetails(); Q_UINT32 qunID = qunIter->getQunID(); Q_UINT32 extID = info.getExtID(); Q_UINT8 type = info.getType(); Q_UINT32 creator = info.getCreator(); Q_UINT8 authType = info.getAuthType(); Q_UINT16 unknown1 = info.getUnknown1(); Q_UINT16 category = info.getCategory(); Q_UINT32 versionID = info.getVersionID(); std::string name = info.getName(); Q_UINT16 unknown2 = info.getUnknown2(); std::string description = info.getDescription(); std::string notice = info.getNotice(); stream<<qunID<<extID<<type<<creator<<authType<<unknown1<<category<< versionID<<name.c_str()<<unknown2<<description.c_str()<<notice.c_str(); Q_UINT32 fontSize = qunIter->getChatFontSize();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -