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

📄 config.cpp

📁 基于domino系统邮件数据库编写的邮件助手程序
💻 CPP
字号:
// Config.cpp: implementation of the CConfig class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "DominoMinder.h"
#include "Config.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CConfig* CConfig::m_pCfg = NULL;

CConfig::CConfig()
{
	//初始化用户名和密码
	m_strUserName = "";
	m_strPassword = "";

	//根node名
	char sz[MAX_PATH];
	::LoadString(NULL, IDS_APP_NAME, sz, MAX_PATH);
	m_strProfileName.Format( "%s", sz );
	
	//配置文档路径
	::GetCurrentDirectory( MAX_PATH, sz );
	m_strFilePath.Format( "%s", sz );
	m_strFilePath += "\\" + m_strProfileName + ".xml";
	
	//装载配置文档
	loadFile();

	//取客户端文件版本
	char sPath[MAX_PATH];
	GetModuleFileName(NULL,sPath,sizeof(sPath));
	CFileVersion fv;
	fv.Open((LPTSTR)sPath);
	CString sFileVer=fv.GetFileVersion(); 
	fv.Close();
	CString sFileVerN = sFileVer.Left ( sFileVer.Find(',') );
	CString sFileVerF = sFileVer.Right( sFileVer.GetLength() - sFileVer.Find(',') );
	sFileVerF.Replace(", ","");
	m_strFileVersion = sFileVerN + "." + sFileVerF;

	//
	m_nCheckServiceInterval = 30;
}

CConfig::~CConfig()
{
	saveFile();
}

//取客户端版本
CString CConfig::GetVersion()
{
	return m_strFileVersion;
}

//装载配置文档
void CConfig::loadFile()
{
	m_pXMLProfile = new CXMLProfile( m_strProfileName, m_strFilePath );
	m_pXMLProfile->loadProfile();
	//TODO: 修改CXMLProfile支持简单的XPath
	//m_pXMLProfile->writeProfileString("ee", "dd", "短短的");
}
//保存配置文档
void CConfig::saveFile()
{
	if ( m_pXMLProfile != NULL ) {
		m_pXMLProfile->saveProfile();
	}
}
//获得配置对象实例
CConfig* CConfig::GetInstance()
{
	if ( m_pCfg == NULL ) {
		m_pCfg = new CConfig();
	}
	return m_pCfg;
}

//////////////////////////////////////////////////////////////////////
//用户登陆信息
//////////////////////////////////////////////////////////////////////

void CConfig::LoadLoginUserInfo( CDialog* pDlg )
{
	if ( m_strUserName != "" ) {
		pDlg->SetDlgItemText( IDC_EDIT_USERNAME, m_strUserName );
		pDlg->SetDlgItemText( IDC_EDIT_PASSWORD, m_strPassword );
	} else {
		//从XMLProfile文档里装载
		char sz[200]; memset( sz, 0, sizeof(sz) );
		m_pXMLProfile->getProfileString( "user", "name", "", sz, 200 );
		pDlg->SetDlgItemText( IDC_EDIT_USERNAME, sz );
		//给成员变量赋值
		m_strUserName = sz;
		m_strPassword = "";
	}
}
void CConfig::SaveLoginUserInfo( CDialog* pDlg )
{
	//MessageBox( NULL, "save", "", MB_OK );
	//给成员变量赋值
	pDlg->GetDlgItemText( IDC_EDIT_USERNAME, m_strUserName );
	pDlg->GetDlgItemText( IDC_EDIT_PASSWORD, m_strPassword );
	//保存到XMLProfile文档里
	m_pXMLProfile->writeProfileString( "user", "name", m_strUserName );
	m_pXMLProfile->saveProfile();
}
CString CConfig::GetUserName()
{
	return m_strUserName;
}
CString CConfig::GetPassword()
{
	return m_strPassword;
}

//////////////////////////////////////////////////////////////////////
//用户基本配置-消息显示模式
//////////////////////////////////////////////////////////////////////

int  CConfig::GetShowMode()
{
	int nRet = 0;
	if ( m_pXMLProfile->getProfileInt( "user", "notice_visual", 1 ) == 1 ) {
		nRet = nRet | SHOW_MODE_VISUAL;
	}
	if ( m_pXMLProfile->getProfileInt( "user", "notice_trayballoon", 1 ) == 1 ) {
		nRet = nRet | SHOW_MODE_TRAYBALLOON;
	}
	char sz[MAX_PATH]; memset(sz,0,sizeof(sz));
	m_pXMLProfile->getProfileString("user", "notice_acoustical_file", "", sz, MAX_PATH);
	if ( (m_pXMLProfile->getProfileInt( "user", "notice_acoustical", 0 ) == 1) && (strlen(sz) > 5) ) {
		nRet = nRet | SHOW_MODE_ACOUSTICAL;
	}
	return nRet;
}

CString CConfig::GetWavFile()
{
	char sz[MAX_PATH]; memset(sz,0,sizeof(sz));
	m_pXMLProfile->getProfileString("user", "notice_acoustical_file", "", sz, MAX_PATH);
	CString sRet = sz;
	return sRet;
}

int CConfig::GetCheckServiceInterval()
{
	return m_nCheckServiceInterval;
}

void CConfig::LoadConfigUser( CDialog* pDlg )
{
	if ( pDlg->m_hWnd == NULL ) return;

	char sz[MAX_PATH]; memset(sz,0,sizeof(sz));
	pDlg->SetDlgItemText( IDC_EDIT_WAVFILE, m_pXMLProfile->getProfileString("user", "notice_acoustical_file", "", sz, MAX_PATH) );
	pDlg->CheckDlgButton( IDC_CHECK_VISUAL, m_pXMLProfile->getProfileInt( "user", "notice_visual", 1 ) );
	pDlg->CheckDlgButton( IDC_CHECK_TRAY_BALLOONTIP, m_pXMLProfile->getProfileInt( "user", "notice_trayballoon", 1 ) );
	pDlg->CheckDlgButton( IDC_CHECK_ACOUSTICAL, m_pXMLProfile->getProfileInt( "user", "notice_acoustical", 0 ) );

	//检查服务的时间间隔
	CSpinButtonCtrl *pSpinCtrl=(CSpinButtonCtrl*) pDlg->GetDlgItem(IDC_SPIN_CHECKSRV_INTERVAL);
	pSpinCtrl->SetPos( m_pXMLProfile->getProfileInt("user", "notice_interval", DEF_CHECK_SERVICE_INTERVAL) );
	//pDlg->SetDlgItemInt ( IDC_EDIT_CHECKSRV_INTERVAL, m_pXMLProfile->getProfileInt("user", "notice_interval", MIN_CHECK_SERVICE_INTERVAL) );
	m_nCheckServiceInterval = m_pXMLProfile->getProfileInt( "user", "notice_interval", DEF_CHECK_SERVICE_INTERVAL );
}
void CConfig::SaveConfigUser( CDialog* pDlg )
{
	//时间间隔
	int nInterval = pDlg->GetDlgItemInt( IDC_EDIT_CHECKSRV_INTERVAL );
	if ( nInterval > MAX_CHECK_SERVICE_INTERVAL ) 
		nInterval = MAX_CHECK_SERVICE_INTERVAL;
	if ( nInterval < MIN_CHECK_SERVICE_INTERVAL )
		nInterval = MIN_CHECK_SERVICE_INTERVAL;
	m_nCheckServiceInterval = nInterval;
	m_pXMLProfile->writeProfileInt("user", "notice_interval", nInterval );
	//视觉提示-窗口
	m_pXMLProfile->writeProfileInt( "user", "notice_visual",      pDlg->IsDlgButtonChecked(IDC_CHECK_VISUAL) );
	//视觉提示-托盘气球文字
	m_pXMLProfile->writeProfileInt( "user", "notice_trayballoon", pDlg->IsDlgButtonChecked(IDC_CHECK_TRAY_BALLOONTIP) );
	//声音提示
	m_pXMLProfile->writeProfileInt( "user", "notice_acoustical",  pDlg->IsDlgButtonChecked(IDC_CHECK_ACOUSTICAL) );
	//声音提示wav文件名
	char szPath[MAX_PATH];
	pDlg->GetDlgItemText( IDC_EDIT_WAVFILE, szPath, MAX_PATH );
	m_pXMLProfile->writeProfileString( "user", "notice_acoustical_file", szPath );

	//保存
	m_pXMLProfile->saveProfile();
}

//////////////////////////////////////////////////////////////////////
//服务配置
//////////////////////////////////////////////////////////////////////

//装载服务配置到配置窗口 和 DominoMessage队列
//TODO: 装载策略可以优化(DominoMinderDlg2.cpp-OnShowWindow->LoadConfig->.)
void CConfig::LoadConfigServer( CDialog* pDlg, CString strServerName )
{
	//可以的话,直接从DominoMsg队列中装载
	CDominoMessage* pDominoMsg = CDominoMessage::GetInstance();
	if ( pDominoMsg->GetCount() > 0 ) {
		pDominoMsg->LoadConfigServer( pDlg, strServerName );
		return;
	}

	char szTxt[101];
	char szSec[101];
	char szServiceSec[101];
	CComboBox* pCombSeverList = (pDlg->m_hWnd==NULL) ? NULL : (CComboBox*) pDlg->GetDlgItem(IDC_COMBO_SERVER_LIST);
	int nSrvCnt = m_pXMLProfile->getProfileInt( "server", "count", 0 );

	//从配置文档装载所有服务器名
	if ( strServerName == "" ) {
		//添加到服务配置Dialog
		if ( pCombSeverList != NULL ) {
			pCombSeverList->ResetContent();
			for ( int i=0; i<nSrvCnt; i++ ) {
				sprintf( szSec, "server/server_%d\0", i );
				memset( szTxt, 0, sizeof(szTxt) );
				m_pXMLProfile->getProfileString( szSec, "host", "", szTxt, 100 );
				pCombSeverList->AddString(szTxt);
			}
		}
		//添加服务到DominoMsg队列
		CString strSrvName;
		for ( int i=0; i<nSrvCnt; i++ ) {
			//添加服务器
			sprintf( szSec, "server/server_%d\0", i );
			memset( szTxt, 0, sizeof(szTxt) );
			m_pXMLProfile->getProfileString( szSec, "host", "", szTxt, 100 );
			pDominoMsg->AddServer( szTxt );
			strSrvName = szTxt;
			//pCombSeverList->GetLBText( i, strSrvName );
			//pDominoMsg->AddServer( strSrvName );
			//添加服务
			int nServiceCnt = m_pXMLProfile->getProfileInt( szSec, "count", 0 );
			sprintf( szSec, "%s/service_\0", szSec );
			for ( int j=0; j<nServiceCnt; j++ ) {
				memset( szTxt,0,sizeof(szTxt) );
				sprintf( szServiceSec, "%s%d\0", szSec, j );
				m_pXMLProfile->getProfileString( szServiceSec, "name", "", szTxt, 100 );
				if ( m_pXMLProfile->getProfileInt(szServiceSec,"enabled",0) == 1 ) {
					pDominoMsg->AddServiceToServer( strSrvName, szTxt, true );
				} else {
					pDominoMsg->AddServiceToServer( strSrvName, szTxt, false );
				}
			}
		}
	}
	//从配置文档装载某一服务器的服务配置 到 服务配置Dialog
	else {
		for ( int i=0; i<nSrvCnt; i++ ) {
			sprintf( szSec, "server/server_%d\0", i );
			memset( szTxt, 0, sizeof(szTxt) );
			m_pXMLProfile->getProfileString( szSec, "host", "", szTxt, 100 );
			if ( strServerName == szTxt ) break;
		}
		int nServiceCnt = m_pXMLProfile->getProfileInt( szSec, "count", 0 );
		sprintf( szSec, "%s/service_\0", szSec );
		//
		CListBox* pListEnabled  = (CListBox*) pDlg->GetDlgItem( IDC_LIST_SERVICE_ENABLED  );
		CListBox* pListDisabled = (CListBox*) pDlg->GetDlgItem( IDC_LIST_SERVICE_DISABLED );
		pListEnabled->ResetContent();
		pListDisabled->ResetContent();
		for ( i=0; i<nServiceCnt; i++ ) {
			memset( szTxt,0,sizeof(szTxt) );
			sprintf( szServiceSec, "%s%d\0", szSec, i );
			m_pXMLProfile->getProfileString( szServiceSec, "name", "", szTxt, 100 );
			if ( m_pXMLProfile->getProfileInt(szServiceSec,"enabled",0) == 1 ) {
				pListEnabled->AddString(szTxt);
			} else {
				pListDisabled->AddString(szTxt);
			}
		}
	}
	//TODO: 从服务器更新配置(暂不做,需要更新时先删除服务器)
}

void CConfig::SaveConfigServer( CDialog* pDlg )
{
	//保存服务器到DominoMsg队列先
	CDominoMessage* pDominoMsg = CDominoMessage::GetInstance();
	pDominoMsg->SaveConfigServer( pDlg );

	//保存服务器到XML配置文档
	char szTxt[101];
	char szSec[101];
	char szServiceSec[101];
	CComboBox* pCombSeverList = (CComboBox*) pDlg->GetDlgItem(IDC_COMBO_SERVER_LIST);

	//删除原服务器配置
	int nServerCntOld = m_pXMLProfile->getProfileInt( "server", "count", 0 );
	for ( int i=0; i<nServerCntOld; i++ ) {
		sprintf( szSec, "server_%d\0", i );
		m_pXMLProfile->deleteProfileEntry( "server", szSec );
	}
	//服务器数目
	int nServerCnt = pCombSeverList->GetCount();
	m_pXMLProfile->writeProfileInt( "server", "count", nServerCnt );
	//保存所有服务器 server/server_n/*
	for ( i=0; i<nServerCnt; i++ ) {
		//服务器
		pCombSeverList->GetLBText(i,szTxt);
		sprintf( szSec, "server/server_%d\0", i );
		m_pXMLProfile->writeProfileString( szSec, "host", szTxt);
		//服务
		m_pXMLProfile->writeProfileInt( szSec, "count", pDominoMsg->GetServiceCnt(szTxt) );
		CString* rgstrServiceEnabled  = pDominoMsg->GetServiceList( szTxt, true );
		CString* rgstrServiceDisabled = pDominoMsg->GetServiceList( szTxt, false );
		int nCnt = 0;
		for ( int j=0; j<MAX_DOMINO_SERVICE; j++ ) {
			if ( rgstrServiceEnabled[j] != "" ) {
				sprintf( szServiceSec, "%s/service_%d\0", szSec, nCnt );
				m_pXMLProfile->writeProfileString( szServiceSec, "name", rgstrServiceEnabled[j] );
				m_pXMLProfile->writeProfileString( szServiceSec, "enabled", "1" );
				nCnt ++;
			}
		}
		for ( j=0; j<MAX_DOMINO_SERVICE; j++ ) {
			if ( rgstrServiceDisabled[j] != "" ) {
				sprintf( szServiceSec, "%s/service_%d\0", szSec, nCnt );
				m_pXMLProfile->writeProfileString( szServiceSec, "name", rgstrServiceDisabled[j] );
				m_pXMLProfile->writeProfileString( szServiceSec, "enabled", "0" );
				nCnt ++;
			}
		}
	}

	//保存配置文档
	m_pXMLProfile->saveProfile();
}

⌨️ 快捷键说明

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