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

📄 fxdb.cpp

📁 linux-下的fetion-0.8.1。包括所有源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	int len = strlen(base64_msg)+100;	char *sql = (char*)malloc(sizeof(char)*len);	if (!date)		sprintf(sql,"insert into fx%ldusr values(\"%ld\",\"%s\",\"%d\",datetime(CURRENT_TIMESTAMP,'localtime'))",				usr, uid, base64_msg, msg_len);	else		sprintf(sql,"insert into fx%ldusr values(\"%ld\",\"%s\",\"%d\",\"%s\")",				usr, uid, base64_msg, msg_len, date);	if (sqlite3_exec(pdb, sql, 0, 0, 0)!= SQLITE_OK)		printf("it is error %s\n", sql);	if (sql)		free(sql);	if (base64_msg)		free(base64_msg);}int  export_history(long uid, const char* filename){	char **result;	char *perrmsg;	int nrow, ncol;	QString htm_name(filename);	QFile htm(htm_name);	if(!htm.open(QFile::WriteOnly | QFile::Truncate)) {		printf("can not open file \n");		return 2;	}	if (!init_histroy_db(uid)) {		printf("can not find the user \n");		return 1;	}	memset(sql, 0, SQL_MAXLEN);	sprintf(sql,"select * from fx%ldusr", uid);	if(SQLITE_OK != sqlite3_get_table(pdb, sql, &result, &nrow, &ncol, &perrmsg)){		printf("slecet flag  table error!, the sql is...%s\n", sql);		return -1;	} 	QString res=create_result(result, nrow, ncol);	sqlite3_free_table(result);	QTextStream out(&htm);	out << "<html><head><meta http-equiv=Content-Type content=\"text/html;charset=gb2312\"><title>LibFx chatlog</title></head><body>"		<< res << "</body></html>";	return 0;}bool clean_history(long uid){	char **result;	char *perrmsg;	int nrow, ncol;	if(!init_db())		return false;	memset(sql, 0, SQL_MAXLEN);	sprintf(sql,"delete from fx%ldusr", uid);	if(SQLITE_OK != sqlite3_get_table(pdb, sql, &result, &nrow, &ncol, &perrmsg)){		printf("slecet flag  table error!, the sql is...%s\n", sql);		return false;	} 	return true;}#if 0int type = 1 //todayint type = 2 //one weekint type = 3 //two weekint type = 4 //one monthint type = 5 //all#endifchar *create_sql_for_histroy(long usr, long uid, HISTORY_DATE type){	char *sql = (char*)malloc(sizeof(char)*1024);	switch(type)	{		case TODAY_HISTORY:			sprintf(sql,					"select * from fx%ldusr where julianday(date(datetime(CURRENT_TIMESTAMP,'localtime'))) - julianday(date(date_time)) == 0 and uid == \"%ld\" order by date_time asc", usr, uid);			break;		case ONE_WEEK_HISTORY:			sprintf(sql,					"select * from fx%ldusr where julianday(date(datetime(CURRENT_TIMESTAMP,'localtime'))) - julianday(date(date_time)) <= 7 and uid == \"%ld\"  order by date_time asc", usr, uid);			break;		case TWO_WEEK_HISTORY:			sprintf(sql,					"select * from fx%ldusr where julianday(date(datetime(CURRENT_TIMESTAMP,'localtime'))) - julianday(date(date_time)) <= 14  and uid == \"%ld\"  order by date_time asc", usr, uid);			break;		case ONE_MONTH_HISTORY:			sprintf(sql,					"select * from fx%ldusr where julianday(date(datetime(CURRENT_TIMESTAMP,'localtime'))) - julianday(date(date_time)) <= 30  and uid == \"%ld\"  order by date_time asc", usr, uid);			break;		case ALL_DATE_HISTORY:			sprintf(sql,"select * from fx%ldusr where uid == \"%ld\" order by date_time asc", usr, uid);			break;		default:			return NULL;	}	return sql;}QString selectHistroyMsg(long usr, long uid, HISTORY_DATE  type){	QString res;	if (!init_histroy_db(usr))		return NULL;	int ret, nrow, ncol;	char* perrmsg;	char **result;	char *sql = create_sql_for_histroy(usr, uid, type);	if (!sql)		return NULL;	ret = sqlite3_get_table(pdb, sql, &result, &nrow, &ncol, &perrmsg);	if(ret != SQLITE_OK){		printf("slecet flag  table error!, the sql is...%s\n", sql);		return NULL;	} 	res = create_result(result, nrow, ncol);	sqlite3_free_table(result);	if (sql)		free(sql);	return res;}QString create_result(char **result, int nrow, int ncol){	/*	 * uid result[index]	 * msg result[index+1]	 * msg_len result[index+2]	 * date_time result[index+3]	 */	QString res;	int index = ncol;	for(int i = 0; i < nrow; i++)	{		char *msg, *date;		int msg_len = atoi(result [index+2]);		msg = decryptXOR(result[index+1], msg_len, KEY);		date = result[index+4];		/*printf("get the  result %s,msg_len is %d msg is %s \n", result [index+3], msg_len, msg);		char *tmp = (char*)malloc(sizeof(char)* (msg_len+1));		memcpy(tmp, msg, msg_len);		tmp[msg_len] = '\0';		printf("the tmp msg is %s \n", tmp);		if (tmp)			free(tmp);		*/		res += QString::fromUtf8(msg) + "<br>";		if (msg)			free(msg);		index = index +ncol;	}	return res;}bool selectSystemMsg(long usr, long uid, const char* msg){	if (!msg || !init_histroy_db(usr))		return false;	bool ret = false;	int nrow, ncol;	char* perrmsg;	char **result;	int len_msg = strlen(msg);	//fixme: here is simple to compile of the msg's len...	//maybe it is not very good, but for system message(not important) it is enough..	memset(sql, 0, SQL_MAXLEN);	sprintf(sql, "select * from fx%ldusr where msg_len == \"%ld\" and uid == \"%ld\" ", 			usr, len_msg, uid);	if (sqlite3_get_table(pdb, sql, &result, &nrow, &ncol, &perrmsg) != SQLITE_OK) {		printf("slecet system table error!, the sql is...%s\n", sql);		return false;	} 	sqlite3_free_table(result);	if(nrow) 		ret = true;	// when system msg over 20, we will clean system msg	{		memset(sql, 0, SQL_MAXLEN);		sprintf(sql, "select * from fx%ldusr where uid == \"%ld\" ", usr, uid);		if (sqlite3_get_table(pdb, sql, &result, &nrow, &ncol, &perrmsg) != SQLITE_OK) {			return ret;		} 		sqlite3_free_table(result);		if(nrow >= 20) 		{			printf("haha , i will delete all system msg \n");			memset(sql, 0, SQL_MAXLEN);			sprintf(sql,"delete from fx%ldusr where uid == \"%ld\" ", usr, uid);			//exec the delete table sql			sqlite3_exec(pdb, sql, 0, 0, 0); 		}	}	return ret;}BOOL init_storeAccountInfo_db(long usr){	static BOOL have_init = FALSE;	if (!init_db())		return FALSE;	if (have_init)		return TRUE;	char *perrmsg;	memset(sql, 0, SQL_MAXLEN);	sprintf(sql,"DROP TABLE IF EXISTS fxACINFO%ldusr ", usr);	sqlite3_exec(pdb, sql, 0, 0, &perrmsg); 	//create the table	memset(sql, 0, SQL_MAXLEN);	sprintf(sql, "create table fxACINFO%ldusr(uid, online_state, mobilenm, local_name, nickname, impresa, showname)", usr);	//exec the create table sql	if( sqlite3_exec(pdb, sql, 0, 0, &perrmsg) != SQLITE_OK )	{		printf("exel create table %s\n", sql);		return FALSE;	}	//creat index	memset(sql, 0, SQL_MAXLEN);	sprintf(sql,"create index uid_index on fxACINFO%ldusr(uid)", usr);	sqlite3_exec(pdb, sql, 0, 0, &perrmsg); 	have_init = TRUE;	return TRUE;}void saveAccountToDB(Fetion_Account *account, long usr){	if (!account || account->id == usr)		return;	Fetion_Personal *personal = account->personal;	long uid = account->id;	int online_state;	char *local_name;	char *mobilenm;	char *nickname;	char *impresa;	char *showname;	online_state = fx_get_online_status_by_account(account);	if (account->local_name)		local_name =  account->local_name;	else		local_name = "";	if (personal && personal->mobile_no)		mobilenm = personal->mobile_no;	else		mobilenm = "";	if (personal && personal->nickname)		nickname=  personal->nickname;	else		nickname= "";	if (personal && personal->impresa)		impresa =  personal->impresa;	else		impresa = "";	showname = fx_get_account_show_name(account, TRUE);	// insert data to databse 	memset(sql, 0, SQL_MAXLEN);	sprintf(sql,"insert into fxACINFO%ldusr values(\"%ld\", \"%ld\", \"%s\", \"%s\", \"%s\", \"%s\", \"%s\")", 		usr, uid, online_state, mobilenm, local_name, nickname, impresa, showname);	sqlite3_exec(pdb, sql, 0, 0, 0); 	if(showname)		free(showname);}void saveAccountInfo(){	char *perrmsg;	long usr =  (qlonglong)strtol(fx_get_usr_uid(), NULL, 10);	if (!init_db() || !init_storeAccountInfo_db(usr))		return ;	sqlite3_exec(pdb, "begin transaction", 0, 0, &perrmsg ); 	Fetion_Account *account = NULL;	DList *tmp_account = (DList *)fx_get_account();	while(tmp_account) 	{		account = (Fetion_Account *)tmp_account->data; 		if(account)			saveAccountToDB(account, usr);		tmp_account = d_list_next(tmp_account);	}	sqlite3_exec(pdb, "commit transaction", 0, 0, &perrmsg ); }void create_search_result(	QList<QTreeWidgetItem *> *items, char **result, int nrow, int ncol);QList<QTreeWidgetItem *> *searchAccountInfo(char * keyword){	QList<QTreeWidgetItem *> *items = new QList<QTreeWidgetItem *>;	if (!init_db())		return items;	long usr =  (qlonglong)strtol(fx_get_usr_uid(), NULL, 10);		int ret, nrow, ncol;	char* perrmsg;	char **result;	sprintf(sql, "select * from fxACINFO%ldusr where uid like \'%s%%\' or mobilenm like \'%s%%\' or local_name like \'%%%s%%\' or  nickname like \'%%%s%%\' or impresa like \'%%%s%%\'",			usr, keyword, keyword, keyword, keyword, keyword);	ret = sqlite3_get_table(pdb, sql, &result, &nrow, &ncol, &perrmsg);	if(ret != SQLITE_OK){		printf("slecet flag  table error!, the sql is...%s\n", sql);		return items;	} 	create_search_result(items,result, nrow, ncol);	sqlite3_free_table(result);		return items;}void create_search_result(	QList<QTreeWidgetItem *> *items, char **result, int nrow, int ncol){//	QList<QTreeWidgetItem *> items;	/*	long uid;	int online_state;	char *local_name;	char *mobilenm;	char *nickname;	char *impresa;    char *showname;	*/	//uid, online_state, mobilenm, local_name, nickname, impresa	/*	* uid result[index]	* online_state result[index+1]	* mobilenm result[index+2]	* local_name result[index+3]	* nickname result[index+4]	* impresa result[index+5]	* showname result[index+6]	*/	QString res;	int index = ncol;	for(int i = 0; i < nrow; i++)	{		Account_Info * ac_info = new Account_Info;		ac_info->accountID = atol(result [index]);		ac_info->onlinestate = atoi(result [index+1]);		ac_info->accountName = QString::fromUtf8(result[index+6]);		QTreeWidgetItem *accountItem = new QTreeWidgetItem;		accountItem->setText(0, ac_info->accountName);#if MS_VC6		QVariant Var((uint)ac_info);#else		QVariant Var;		Var.setValue (ac_info); //vc7 up#endif		accountItem->setData(0, Qt::UserRole, Var);		accountItem->setIcon(0, getOnlineStatusIcon(ac_info->onlinestate));		QString tips;		QString tmp;		QString info;		if (fx_is_pc_user_by_id(ac_info->accountID)){			info = QObject::tr("fetion_no:");			info += "<b style=\"color:red; \">"+QString("%1").arg(ac_info->accountID)+"</b>";			tips += info +"<br>";		}		tmp = QString::fromUtf8( result[index+2]);		if (!tmp.isEmpty())		{			info = QObject::tr("mobile no:");			info += "<b style=\"color:red; \">" + tmp +"</b>";			tips += info +"<br>";		}		tmp = QString::fromUtf8( result[index+3]);		if (!tmp.isEmpty())		{			info = QObject::tr("local_name:");			info += "<b style=\"color:red; \">" + tmp +"</b>";			tips += info +"<br>";		}		tmp = QString::fromUtf8( result[index+4]);		if (!tmp.isEmpty())		{			info = QObject::tr("nickname:");			info += "<b style=\"color:red; \">" + tmp +"</b>";			tips += info +"<br>";		}		tmp = QString::fromUtf8(result[index+5]);		if (!tmp.isEmpty())		{			info = QObject::tr("impresa:");			info += "<b style=\"color:red; \">" + tmp +"</b>";			tips += info +"<br>";		}		//remov the last "<br>"		tips = tips.remove( tips.size() - strlen("<br>"), strlen("<br>"));		accountItem->setToolTip(0, tips); 		index = index +ncol;		items->append(accountItem);	}//	printf("the nrow is %d ncol is %d \n", nrow, ncol);	//return items;}#if WIN_DEBUG char buf_sd[1024*10];void qt_debug(char* fmt, ...){	int tmp;	va_list  va;	va_start (va, fmt);#ifdef	WIN32	tmp = _vsnprintf  (buf_sd, sizeof(buf_sd) - 1, fmt, va);#else	tmp = vsnprintf  (buf_sd, sizeof(buf_sd) - 1, fmt, va);#endif	buf_sd[tmp] = '\0';	va_end(va);#ifdef	WIN32#if 1 static int isInit = 0; if (!isInit)  {  //	open_log();    AllocConsole();    isInit = 1;  }  HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);  DWORD n, m;  WriteConsoleA(h, buf_sd, strlen(buf_sd), &n, &m);   //call non-unicode // logit(buf_sd);#endif#if	_MSC_VER > 1000//	::OutputDebugString(buf);#endif#endif	printf("%s", buf_sd);	//	printf("--[%s,%s,%d]--%s", __FUNCTION__, __FILE__, __LINE__, buf);	}#endif

⌨️ 快捷键说明

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