⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 evausersetting.cpp

📁 linux下的eva源代码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
/*************************************************************************** *   Copyright (C) 2004 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 "evausersetting.h"#include "evaqtutil.h"#include "../evamain.h"#include <vector>#include <stdlib.h>#include <qdatastream.h>#include <qtextstream.h>#include <qstringlist.h>#include <qfile.h>#include <qdir.h>#include <kconfig.h>#include <klocale.h>EvaUserSetting::EvaUserSetting(const int id){	qqNum = id;	isUserDirExisted=false;	pictureCacheDir = getEvaUserDir() + "/customCaches";	customSmileyDir = getEvaUserDir() + "/CustomFace";	userHeadDir = getEvaUserDir() + "/UserHead";	loadDefaultSettings();	buddyListFileName = "user.dat";	qunListFileName = "qun.dat";	chatMsgFileName = "chat.msg";	qunMsgFileName = "qun.msg";	sysMsgFileName = "sys.msg";	userProfileFileName = "user.profile";	userConfigFileName = "user.cfg";		if(!createDefaultDirs())		printf("error, cannot create user directory!\n");}EvaUserSetting::~EvaUserSetting(){}const bool EvaUserSetting::saveBuddyList(QObject *receiver, std::list<std::string> groups, ContactInfo &myInfo, FriendList &list,				unsigned short extraInfo, std::string sig, unsigned int sigTime){	if(!isDirExisted(getEvaUserDir())){		QDir d;		if(!d.mkdir(getEvaUserDir()))			return false;	}		QString fullName = getEvaUserDir() + "/" + buddyListFileName;	QFile file(fullName);	if(file.exists()) file.remove();	if(!file.open(IO_WriteOnly)){		return false;	}	EvaMain::helper->setCategory(EvaHelper::SaveGroupedUsers, receiver);	EvaMain::helper->setSaveGroupedUsersArgs(&file, groups, myInfo, list, extraInfo, sig, sigTime);	EvaMain::helper->run();	return true;}const bool EvaUserSetting::loadBuddyList( QObject * receiver){	if(!isDirExisted(getEvaUserDir()))		return false;		QString fullName = getEvaUserDir() + "/" + buddyListFileName;	QFile file(fullName);	if(!file.open(IO_ReadOnly)){		return false;	}	if(!isVersionCorrect(fullName)){		file.close();		return false;	}		EvaMain::helper->setCategory(EvaHelper::LoadGroupedUsers, receiver);	EvaMain::helper->setLoadGroupedUsersArgs(&file);	EvaMain::helper->run();	return true;}const bool EvaUserSetting::saveMessage(const int buddy, const int sender, QString sNick, 			const int receiver, QString rNick,			const bool isNormal, 			const QString message, 			const QDateTime time, const char fontSize, 			const bool u, const bool i, const bool b, 			const char blue, const char green, const char red, const bool isQunMsg){	if(!isDirExisted(getEvaUserDir())){		QDir d;		if(!d.mkdir(getEvaUserDir()))			return false;	}		QString fullName = getEvaUserDir() + "/" + (isQunMsg?qunMsgFileName:chatMsgFileName);	QFile file(fullName);	if(!file.open(IO_WriteOnly | IO_Append)){		return false;	}		QDataStream stream(&file);		Q_UINT32 s_buddy = buddy;	Q_UINT32 s_sender = sender;	Q_UINT32 s_receiver = receiver;	Q_UINT8  s_isNormal = isNormal?1:0;	Q_UINT32 s_time = time.toTime_t();	Q_UINT8  s_fontSize = fontSize;	Q_UINT8  s_flag = (u?1:0)|( (i?1:0)<<1 ) | ( (b?1:0)<<2 );	Q_UINT8  s_blue = blue;	Q_UINT8  s_green = green;	Q_UINT8  s_red = red;		stream<<s_buddy;	stream<<s_sender;	stream<<sNick;	stream<<s_receiver;	stream<<rNick;	stream<<s_isNormal;	stream<<message;	stream<<s_time;	stream<<s_fontSize;	stream<<s_flag;	stream<<s_blue;	stream<<s_green;	stream<<s_red;		file.close();	return true;}std::list<EvaUserSetting::chatMessage> EvaUserSetting::getMessages( const int buddy, const int page, const bool isQunMsg){	std::list<chatMessage>list;	if(!isDirExisted(getEvaUserDir())){		return list;	}		QString fullName = getEvaUserDir() + "/" + (isQunMsg?qunMsgFileName:chatMsgFileName);	QFile file(fullName);	if(!file.open(IO_ReadOnly)){		return list;	}	Q_UINT32 r_buddy;	Q_UINT32 sender;	QString  sNick;	Q_UINT32 receiver;	QString  rNick; 	Q_UINT8  type; // 0 auto reply,  1 normal	QString  message;	Q_UINT32  intTime;	QDateTime time;	Q_UINT8   fontSize;	Q_UINT8   flag; // start from right.  bit 0: u, bit 1: i, bit 2: b	Q_UINT8   blue;	Q_UINT8   green;	Q_UINT8   red;		QDataStream stream(&file);	std::list<chatMessage>srclist;		while(!stream.atEnd()){		stream>>r_buddy;		stream>>sender;		stream>>sNick;		stream>>receiver;		stream>>rNick;		stream>>type;		stream>>message;		stream>>intTime;		stream>>fontSize;		stream>>flag;		stream>>blue;		stream>>green;		stream>>red;		if(r_buddy == (uint)buddy){				chatMessage m;			m.sender = sender;			m.sNick = sNick;			m.receiver = receiver;			m.rNick = rNick;			m.type = type;			m.message = message;			time.setTime_t(intTime);			m.time = time;			m.fontSize = fontSize; 			m.flag = flag; // start from right.  bit 0: u, bit 1: i, bit 2: b			m.blue = blue;			m.green = green;			m.red = red;			srclist.push_back(m);		}	}	file.close();		srclist.reverse();		std::list<chatMessage>::iterator iter;		int current=0;	int start = page * pageSize;	int end = start + pageSize; // note that this value is always one more than we want	for(iter=srclist.begin(); iter!=srclist.end(); iter++){		if(current >= end) break;		if(current>=start && current < end){			list.push_back(*iter);		}		current++;	}	return list;}std::list<EvaUserSetting::chatMessage> EvaUserSetting::getMessages(const int buddy, const int page, 							const QDateTime starttime, const QDateTime endtime, const bool isQunMsg){	std::list<chatMessage>list;	if(!isDirExisted(getEvaUserDir())){		return list;	}		QString fullName = getEvaUserDir() + "/" + (isQunMsg?qunMsgFileName:chatMsgFileName);	QFile file(fullName);	if(!file.open(IO_ReadOnly)){		return list;	}	Q_UINT32 r_buddy;	Q_UINT32 sender;	QString  sNick;	Q_UINT32 receiver;	QString  rNick; 	Q_UINT8  type; // 0 auto reply,  1 normal	QString  message;	Q_UINT32  intTime;	QDateTime time;	Q_UINT8   fontSize;	Q_UINT8   flag; // start from right.  bit 0: u, bit 1: i, bit 2: b	Q_UINT8   blue;	Q_UINT8   green;	Q_UINT8   red;	int start = starttime.toTime_t();	int end = endtime.toTime_t();		std::list<chatMessage>srclist;	QDataStream stream(&file);		while(!stream.atEnd()){		stream>>r_buddy;		stream>>sender;		stream>>sNick;		stream>>receiver;		stream>>rNick;		stream>>type;		stream>>message;		stream>>intTime;		stream>>fontSize;		stream>>flag;		stream>>blue;		stream>>green;		stream>>red;		if(r_buddy == (uint)buddy){			if(intTime>=(uint)start && intTime < (uint)end){				chatMessage m;				m.sender = sender;				m.sNick = sNick;				m.receiver = receiver;				m.rNick = rNick;				m.type = type;				m.message = message;				time.setTime_t(intTime);				m.time = time;				m.fontSize = fontSize; 				m.flag = flag; // start from right.  bit 0: u, bit 1: i, bit 2: b				m.blue = blue;				m.green = green;				m.red = red;				srclist.push_back(m);			}		}	}	file.close();	srclist.reverse();		std::list<chatMessage>::iterator iter;		int current=0;	start = page * pageSize;	end = start + pageSize; // note that this value is always one more than we want	for(iter=srclist.begin(); iter!=srclist.end(); iter++){		if(current >= end) break;		if(current>=start && current < end){			list.push_back(*iter);		}		current++;	}		return list;}const bool EvaUserSetting::saveSysMessage(const short msgType, const unsigned char type, const int fromQQ, const int toQQ, 					const QString message, const int internalQunID, const unsigned int commander,					const unsigned char *code, const unsigned short codeLen,					const unsigned char *token, const unsigned short tokenLen){	if(!isDirExisted(getEvaUserDir())){		QDir d;		if(!d.mkdir(getEvaUserDir()))			return false;	}	QString fullName = getEvaUserDir() + "/" + sysMsgFileName;	QFile file(fullName);	bool needHeader = false;	if(file.open(IO_ReadOnly)){		QDataStream chkStream(&file);		// check version first, if not matched, delete it		char *flag = new char[3];		chkStream.readRawBytes(flag, 3);		Q_UINT32 version = 0;		chkStream>>version;		if(!(flag[0]=='E' && flag[1]=='V' && flag[2]=='A' && version == profileVersion)){			file.close();			file.remove();			needHeader = true;		}		delete []flag;	} else {		needHeader = true;	}	file.close();	if(!file.open(IO_WriteOnly | IO_Append)){		return false;	}	QDataStream stream(&file);	if(needHeader){		// save Eva flag and Version		stream.writeRawBytes("EVA", 3);		stream<<profileVersion;	}	sysMessage m;	m.messageType = msgType;	m.type = type;	m.from = fromQQ;	m.to = toQQ;	m.message = message;	m.internalQunID = internalQunID;	m.commander = commander;	m.setCode( code, codeLen);	m.setToken( token, tokenLen);		Q_UINT16 len = (Q_UINT16)(strlen((m.message.utf8().data())));	//printf("saving type: %d, from: %d, to: %d, cmder: %d, msg: %s\n", type, fromQQ, toQQ, commander, message.local8Bit().data());	stream<<m.messageType;	stream<<m.type;	stream<<m.from;	stream<<m.to;	stream<<m.commander;	stream<<m.internalQunID;	stream<< len;	stream.writeRawBytes(m.message.utf8().data(), len);	stream<<m.codeLen;	stream.writeRawBytes( (const char *)(m.code), m.codeLen);	stream<<m.tokenLen;	stream.writeRawBytes( (const char *)(m.token), m.tokenLen);	file.close();		sysStack.push(m);	return true;}std::list<EvaUserSetting::sysMessage> EvaUserSetting::getSysMessages( const int page) // page number starts from 0{	std::list<sysMessage>list;	if(!isDirExisted(getEvaUserDir())){		return list;	}		QString fullName = getEvaUserDir() + "/" + sysMsgFileName;	QFile file(fullName);	if(!file.open(IO_ReadOnly)){		return list;	}	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 list;	}	delete []flag;	Q_UINT16 msgType;	Q_UINT8 type;	Q_UINT32 from;	Q_UINT32 to;	Q_UINT32 commander;	Q_UINT32 internalQunID;	QString  message;	Q_UINT16 len;	unsigned char *tmp;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -