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

📄 evaresource.cpp

📁 linux下的eva源代码
💻 CPP
字号:
/*************************************************************************** *   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 "evaresource.h"#include "evasetting.h"#include "evaservers.h"#include "evasocket.h"#include "../evamain.h"#include "evauser.h"#include <stdlib.h>#include <qapplication.h>#include <qhttp.h>#include <qdir.h>#include <qfileinfo.h>#include <qdatastream.h>#include <kaudioplayer.h>#include <kglobal.h>#include <kstandarddirs.h>EvaImageResource::EvaImageResource(){	//imageRoot = qApp->applicationDirPath() + "/images";	themePath = "";	imageRoot = EvaGlobal::getDirPath() + "/image";	isDownloadingQQShow = false;	http = new EvaHttp();	connect ( http, SIGNAL(requestFinished(bool)), SLOT(slotQQShowDone(bool))); }EvaImageResource::~EvaImageResource(){}const QString EvaImageResource::getFacePath() const{	return imageRoot + "/face";}const QString EvaImageResource::getIconPath(){	if(themePath == "" )		themePath = imageRoot + "/theme";	return themePath;}const QString EvaImageResource::getSmileyPath() const{	return imageRoot + "/smiley";}const int EvaImageResource::getFaceID(const int fileIndex) const{	if(fileIndex<=0 || fileIndex> MaxFaceNumber)		return faceId[0];	return faceId[fileIndex-1];}const int EvaImageResource::getFaceFileIndex(const int faceId){	int index = (faceId<0)?1:faceId/3 + 1;	if(index<0 || index> MaxFaceNumber) index = 1;	return index;}QPixmap *EvaImageResource::getFace(const int fileIndex, const bool on){	QString key = QString::number((fileIndex>0)?fileIndex:1);	if(!on) key+="off";	QMap<QString, QPixmap>::Iterator iter = faceList.find(key);	if(iter== faceList.end()) return NULL;	return &(iter.data());}QPixmap *EvaImageResource::getFaceByID( const unsigned short faceId, const bool on){	return getFace(getFaceFileIndex(faceId), on);}QPixmap *EvaImageResource::getIcon(QString name){	QMap<QString, QPixmap>::Iterator iter = iconList.find(name);	if(iter== iconList.end()) return NULL;	return &(iter.data());}const QString EvaImageResource::getIconFullPath(QString name){	QMap<QString, QString>::Iterator iter = iconFileNameMap.find(name);	if(iter== iconFileNameMap.end()) return "";	return getIconPath() + "/" + iter.data();}const QString EvaImageResource::getSmiley(const int fileIndex){	return getSmileyPath() + QString("/%1.gif").arg(fileIndex);	//	QString key = QString::number(fileIndex);//	QMap<QString, QMovie>::Iterator iter = smileyList.find(key);//	if(iter== smileyList.end()) return NULL;//	return &(iter.data());}const QMovie *EvaImageResource::getLoginMovie(){	return &loginMng;}const bool EvaImageResource::loadImage(){	return (loadFace() && loadIcon() );	//return (loadFace() && loadIcon() && loadSmiley());}bool EvaImageResource::loadFace(){	QString path = getFacePath();	QFile file( path + "/face.theme");    	if(!file.open(IO_ReadOnly)){		return false;	}		QTextStream stream(&file);	QString line, imagePath;	QStringList lineList;	while(!stream.atEnd()){		line = stream.readLine().stripWhiteSpace();					lineList = QStringList::split(":", line);		if(lineList.size() != 2)			continue;				lineList[0].stripWhiteSpace();		imagePath = path + "/" + lineList[1].stripWhiteSpace();		QPixmap img(imagePath);		if(!img.isNull())			faceList[lineList[0]] = img;	}		file.close();		for(int i = 0; i < MaxFaceNumber ; i++) {		faceId[i] = i * 3 + 1;	}	return true;	}bool EvaImageResource::loadIcon(){	QString path = getIconPath() + "/eva.theme";	QDir d;	if(!d.exists(path)){		themePath = ""; // if theme not exist, load default one		path = getIconPath() + "/eva.theme";	}	QFile file( path);	if(!file.open(IO_ReadOnly)){		return false;	}		QTextStream stream(&file);	QString line, imagePath;	QStringList lineList;		while(!stream.atEnd()){		line = stream.readLine().stripWhiteSpace();					lineList = QStringList::split(":", line);				if(lineList.size() != 2)			continue;				lineList[0].stripWhiteSpace();		imagePath = getIconPath() + "/" + lineList[1].stripWhiteSpace();		if(lineList[0] == "LOGIN_MNG"){			loginMng = QMovie(imagePath);			continue;		}		QPixmap img(imagePath);		if(!img.isNull()){			iconList[lineList[0]] = img;			iconFileNameMap[lineList[0]] = lineList[1].stripWhiteSpace();		}	}		file.close();	return true;  }bool EvaImageResource::loadSmiley(){	QString path = getSmileyPath();	QFile file( path + "/smiley.theme");    	if(!file.open(IO_ReadOnly)){		return false;	}		QTextStream stream(&file);	QString line, imagePath;	QStringList lineList;		while(!stream.atEnd()){		line = stream.readLine().stripWhiteSpace();					lineList = QStringList::split(":", line);				if(lineList.size() != 2)			continue;				lineList[0].stripWhiteSpace();		imagePath = path + "/" + lineList[1].stripWhiteSpace();		QMovie m(imagePath);		if(!m.isNull())			smileyList[lineList[0]] = m;	}		file.close();	return true;  }const QString EvaImageResource::getQQShowPath() const{	QString evaHome = QDir::homeDirPath() + "/.eva";			QDir d;	if(!d.exists(evaHome)){		return "";	}	if(!d.cd(evaHome)) return "";	if(!d.exists("QQShow")){		if(!d.mkdir("QQShow", false))	return "";	}	return evaHome + "/QQShow";	}QPixmap *EvaImageResource::getQQShow(const unsigned int id){	QString path = getQQShowPath() +"/"+ QString::number(id) + ".gif";	QDir d;	if(d.exists(path))		return new QPixmap(path);		return NULL;}void EvaImageResource::requestQQShow(const unsigned int id){	if(isDownloadingQQShow) return;		QString path = getQQShowPath();	if(path == "") return;	EvaUser *user = EvaMain::user;	if(!user) return;		qqshowFile.setName(path +"/"+ QString::number(id) + ".gif" );	if(qqshowFile.exists()){		qqshowFile.remove();	}		if ( !qqshowFile.open( IO_WriteOnly ) ) {		printf("cannot create the image\n");		return;	}	EvaSetting *sysSetting = EvaMain::global->getEvaSetting();	if(sysSetting->getConnectType(user->getQQ()) == 2){		http->setProxyServer( QHostAddress(sysSetting->getServer( user->getQQ())).toString(), 					sysSetting->getPort( user->getQQ() ));		http->setBase64AuthParam( sysSetting->getProxyParam( user->getQQ()));	}	http->setHost( "qqshow-user.tencent.com" );	unsigned int picNum = rand()*100;	QString remoteFile = "/"+QString::number(id) + "/10/00/" + QString::number(picNum) +".gif";	downloadID = id;		http->get( remoteFile, &qqshowFile  );}void EvaImageResource::slotQQShowDone( bool error ){	qqshowFile.close();	if(error){		printf("download error: %d\n",error);		isDownloadingQQShow = false;		return;	}			isDownloadingQQShow = false;	emit qqShowReady(downloadID);}void EvaImageResource::setUserHeadImage(QMap<unsigned int, QImage> imageOnList, QMap<unsigned int, QImage> imageOffList){	QMap<unsigned int, QImage>::Iterator it = imageOnList.begin();	while(it != imageOnList.end()){		imgOnList[it.key()] = QPixmap(it.data());		++it;	}	it = imageOffList.begin();	while(it != imageOffList.end()){		imgOffList[it.key()] = QPixmap(it.data());		++it;	}}QPixmap *EvaImageResource::getUserHeadPixmap(const unsigned int id, bool isGrayscale){	QPixmap * result;	QMap<int, QPixmap>::Iterator it;	if(isGrayscale){		it = imgOffList.find(id);		if(it == imgOffList.end())			result = NULL;		else			result = &(it.data());	}else{		it = imgOnList.find(id);		if(it == imgOnList.end()){			result = NULL;		}else			result = &(it.data());	}	return result;}void EvaImageResource::addUserHeadImage(const unsigned int id, QImage imgOn, QImage imgOff){	imgOnList[id] = QPixmap(imgOn);	imgOffList[id] = QPixmap(imgOff);}/*  ---------------------------------------------------------------------------------------------- */EvaSoundResource::EvaSoundResource(){	soundRoot = EvaGlobal::getDirPath() + "/sound";}void EvaSoundResource::playNewMessage(){	playSound("msg.wav");}void EvaSoundResource::playSysMessage(){	playSound("system.wav");}void EvaSoundResource::playOnlineSound(){	playSound("online.wav");}void EvaSoundResource::playSound(const QString &filename){	QString absPath = soundRoot + "/" + filename;	QDir d;	if(!d.exists(absPath)){		absPath = EvaGlobal::getDirPath() + "/sound" + "/" + filename;	}		if(!d.exists(absPath))	return;		KAudioPlayer snd(absPath);	snd.play();}/*  ---------------------------------------------------------------------------------------------- */QString EvaGlobal::dirPath = "~/eva";EvaGlobal::EvaGlobal(){	initialize();}EvaGlobal::~EvaGlobal(){	delete imgResource;	delete sndResource;	delete system;	delete servers;}QString &EvaGlobal::getDirPath() { 	return dirPath; }const bool EvaGlobal::loadImage(){	if(!imgResource) return false;	return imgResource->loadImage();}/*const bool EvaGlobal::loadSound(){	if(!sndResource) return false;	return sndResource->loadSound();}*/const bool EvaGlobal::loadEvaSetting(){	if(!system) return false;	return system->loadSetting();}void EvaGlobal::initialize(){	dirPath = KGlobal::dirs()->findResource("data", QString::fromLatin1("eva/servers"));// 	QStringList dirs = KGlobal::dirs()->findDirs("data", QString::fromLatin1("eva"));// 	for(uint i=0; i<dirs.size(); i++){// 		//printf("dir %i:%s\n", i, dirs[i].ascii());// 		//dirPath = dirs[0];// 		break;// 	}	if(dirPath == QString::null){		QFileInfo fi;		fi.setFile(QString(getenv("_")));		dirPath = fi.dirPath(true);	}else		dirPath = dirPath.left(dirPath.length() - strlen("/servers"));	//printf("found data path: %s\n", dirPath.ascii());	initImage();	initSound();	initEvaSetting();	initServers();}void EvaGlobal::initImage(){	imgResource = new EvaImageResource();}void EvaGlobal::initSound(){	sndResource = new EvaSoundResource();}void EvaGlobal::initEvaSetting(){	system = new EvaSetting();}void EvaGlobal::initServers( ){	servers = new EvaServers(dirPath);}

⌨️ 快捷键说明

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