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

📄 pluginmgr.cpp

📁 QQ2009组件管理源码
💻 CPP
字号:
#include "stdafx.h"
#include "PluginMgr.h"

CPluginSet::CPluginSet()
{
	m_bDirty=FALSE;
	InitializeCriticalSection(&m_cs);
}

CPluginSet::~CPluginSet()
{
	DeleteCriticalSection(&m_cs);
}

BOOL CPluginSet::Init()
{
	COMINFO ci;
	CMarkup xml;
	//加载名称映射
	if (xml.LoadFromRes(g_hInstance,MAKEINTRESOURCE(IDR_XML1),_T("XML")))
	{
		m_pluginlist.clear();
		xml.ResetMainPos();
		xml.FindElem(_T("component"));
		xml.IntoElem();
		xml.ResetMainPos();
		for (;;)
		{
			if (!xml.FindElem())	break;
			ci.strname=xml.GetAttrib(_T("name"));
//			DbgPrintW(L"添加,插件名称:%s",ci.strname.c_str());
			ci.strfriendlyname=xml.GetAttrib(_T("friendlyname"));
//			DbgPrintW(L"添加,插件名称2:%s",ci.strfriendlyname.c_str());
			ci.strdescription=xml.GetAttrib(_T("description"));
//			DbgPrintW(L"添加,插件描述:%s",ci.strdescription.c_str());
			ci.strwarning=xml.GetAttrib(_T("warningondisabled"));
//			DbgPrintW(L"添加,插件警告:%s",ci.strwarning.c_str());
			ci.bDisable=FALSE;
			m_pluginlist.push_back(ci);
		}
	}
	QQinterface::StartPluginHook(static_cast<IPluginSetCallback*>(this));
	return TRUE;
}

void CPluginSet::Delete()
{
	QQinterface::StopPluginHook();
}
// IPluginSetCallback 接口
BOOL CPluginSet::OnEnablePlugIn(LPCWSTR lpszPluginName)
{
	return OnEnableDisablePlugin(lpszPluginName);
}

BOOL CPluginSet::OnDisablePlugIn(LPCWSTR lpszPluginName)
{
	return OnEnableDisablePlugin(lpszPluginName);
}

BOOL CPluginSet::OnEnableDisablePlugin(LPCWSTR lpszPluginName)
{
	BOOL bResult=TRUE;//修正:对于未知插件总应该返回TRUE
	AquireDataLock();
	for (COMLIST::iterator it=m_pluginlist.begin();it!=m_pluginlist.end();it++)
	{
		if (lstrcmpi(lpszPluginName,it->strname.c_str())==0)
		{
			if (it->bDisable)
			{
//				DbgPrintW(L"禁用,插件名称:%s",lpszPluginName);
				bResult=QQinterface::DisablePlugIn(lpszPluginName);
			}
			else
			{
//				DbgPrintW(L"启用,插件名称:%s",lpszPluginName);
				bResult=QQinterface::EnablePlugIn(lpszPluginName);
			}
			break;
		}
	}
	ReleaseDataLock();
	return bResult;
}

// 用于数据管理
void CPluginSet::AquireDataLock(void)
{
	EnterCriticalSection(&m_cs);
}

void CPluginSet::ReleaseDataLock(void)
{
	LeaveCriticalSection(&m_cs);
}

//下面这些操作都不带锁,所以操作前需要先获取锁
DWORD CPluginSet::GetPluginCount(void)
{
	return m_pluginlist.size();
}

DWORD CPluginSet::GetPlugInEnabledCount(void)
{
	DWORD dwenable=0;
	for (COMLIST::iterator it=m_pluginlist.begin();it!=m_pluginlist.end();it++)
	{
		if (!it->bDisable) dwenable++;
	}
	return dwenable;
}

const COMINFO& CPluginSet::GetPlugin(DWORD dwIndex)
{
	if (dwIndex>=m_pluginlist.size()) dwIndex=0;
	return m_pluginlist[dwIndex];
}

BOOL CPluginSet::UpdatePluginStatus(DWORD dwIndex,BOOL bDisable)
{
	m_bDirty=TRUE;
	if (dwIndex>=m_pluginlist.size()) dwIndex=0;
	m_pluginlist[dwIndex].bDisable=bDisable;
	return TRUE;
}

BOOL CPluginSet::LoadPersonalData(LPCTSTR szDataFile)
{
	CMarkup xml;
	std_str stmp;
	m_DataFile=szDataFile;
	if (xml.Load(szDataFile))
	{
		xml.ResetMainPos();
		xml.FindElem(_T("component"));
		xml.IntoElem();
		xml.ResetMainPos();
		for (;;)
		{
			if (!xml.FindElem())	break;
			stmp=xml.GetAttrib(_T("name"));
//			DbgPrintW(L"添加,插件名称:%s",stmp.c_str());
			for (COMLIST::iterator it=m_pluginlist.begin();it!=m_pluginlist.end();it++)
			{
				if (lstrcmpi(stmp.c_str(),it->strname.c_str())==0)
				{
					stmp=xml.GetAttrib(_T("disable"));
					it->bDisable=_ttoi(stmp.c_str())?1:0;
					break;
				}
			}
		}
		return TRUE;
	}
	return FALSE;
}

BOOL CPluginSet::SavePersonalData(BOOL bFource)
{
	if (!bFource && !m_bDirty) return TRUE;
	if (m_DataFile.empty()) return FALSE;
	m_bDirty=FALSE;

	CMarkup xml;
	xml.SetDoc(_T("<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n"));
	xml.ResetMainPos();
	xml.AddElem(_T("component"));
	xml.IntoElem();
	for (COMLIST::iterator it=m_pluginlist.begin();it!=m_pluginlist.end();it++)
	{
		xml.AddElem(_T("plugin"));
		xml.AddAttrib(_T("name"),it->strname);
		xml.AddAttrib(_T("disable"),it->bDisable?1:0);
	}
	return xml.Save(m_DataFile);
}

⌨️ 快捷键说明

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