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

📄 epgdeal.cpp

📁 得到本周内的电视节目预告! f
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// EpgDeal.cpp: implementation of the CEpgDeal class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "TmEpg.h"
#include "EpgDeal.h"
#include "httpsocket.h"
#include "PackManage.h"
#include "shared/filemisc.h"

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

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

CEpgDeal::CEpgDeal()
{
	m_nChan = 0;
	m_nEpg = 0;
	m_listEpg = NULL;
	m_listChan = NULL;
	bdownloading = FALSE;
	m_curstatus = 1;
	m_pfn = NULL;
	ZeroMemory(&m_initParam, sizeof(InitParam));

	Init();
}

CEpgDeal::~CEpgDeal()
{
	DeInit();
}
BOOL CEpgDeal::Init()
{
	bOpenRecord = FALSE;
	HRESULT hr;
	TCHAR szPath[255];
	DWORD dwRet;
	dwRet = GetModuleFileName(NULL, szPath, 255);
	if(dwRet<1)
		return FALSE;
	CString s, source;
	s = szPath;
	dwRet = s.ReverseFind('\\');
	s = s.Left(dwRet);
	
	strcpy(m_initParam.szZipPath, s.LockBuffer());
	strcpy(m_initParam.szDownPath, "http://www.cctv.com/download/showtime.zip");

	s += "\\tm.epg";

	source.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s", s.LockBuffer());
	try
	{
		hr = m_pConnection.CreateInstance("ADODB.Connection");
		if(FAILED(hr))
			return FALSE;
		hr = m_pConnection->Open(source.AllocSysString(),
			"","",adModeUnknown);///连接数据库
		if(FAILED(hr))
			return FALSE;
		hr = m_pRecordset.CreateInstance("ADODB.RecordSet");
		if(FAILED(hr))
			return FALSE;

	}
	catch(_com_error e)
	{
		CString s;
		s.Format("%s", e.ErrorMessage());
		AfxMessageBox(s);
	}
	Chancel ch;
	strcpy(ch.szName, "CCTV 2");
	ch.lfrequent = 23434;

//	DealBuildEpg();
//	DealLocateTodayEpg();
// 	DealLocateCur5Epg();
//	CheckCurChan();
	CheckDownLoad();
//	DealBuildEpgFromFile("01.txt");

//	DealDbDelChancel(NULL);
//	DealDbAddChancel(&ch);
//	DealDbAddChancel(&ch);
	return TRUE;
}
BOOL CEpgDeal::DeInit()
{
	if(bOpenRecord)
		m_pRecordset->Close();
	if(m_pConnection->State)
		m_pConnection->Close(); 

	ReleaseListChan();
	ReleaseListEpg();

	return TRUE;
}
void CEpgDeal::ReleaseListChan()
{
	if(m_listChan)
	{
		delete []m_listChan;
		m_listChan = NULL;
		m_nChan = 0;
	}
}
void CEpgDeal::AllocListChan(int n)
{
	ReleaseListChan();
	m_listChan = new Chancel[n];
	ZeroMemory(m_listChan, sizeof(Chancel) * n);
	m_nChan = 0;
}
void CEpgDeal::ReleaseListEpg()
{
	if(m_listEpg)
	{
		delete []m_listEpg;
		m_listEpg = NULL;
		m_nEpg = 0;
	}
}
void CEpgDeal::AllocListEpg(int n)
{
	ReleaseListEpg();
	m_listEpg = new EpgInfo[n];
	ZeroMemory(m_listEpg, sizeof(EpgInfo) * n);
	m_nChan = 0;
}
LRESULT CEpgDeal::MsgProc(UINT msg, UINT nID, WPARAM wParam, LPARAM lParam)
{
	LRESULT lRet;
	if(msg == WM_MSG_EPG)
	{
		WORD hiwd, liwd;
		hiwd = HIWORD(nID);
		liwd = LOWORD(nID);
		switch(hiwd)
		{
		case WM_EPG_GET:
			lRet = DealGetProp(liwd, wParam, lParam);
			break;
		case WM_EPG_SET:
			lRet = DealSetProp(liwd, wParam, lParam);
			break;
		case WM_EPG_DONE:
			lRet = DealDone(liwd, wParam, lParam);
			break;

		}
	}

	return lRet;
}
LRESULT CEpgDeal::DealDone(UINT nID, WPARAM wParam, LPARAM lParam)
{
	LRESULT lRet;
	switch(nID)
	{
	case WM_BAK_CUR:
		lRet = DealAddBak();
		break;
	case WM_CHAN_EDIT:
		DealEnterEditChan();
		lRet = DealDbEditChancel((LPChancel)lParam);
		break;
	case WM_CHAN_DEL:
		DealEnterEditChan();
		lRet = DealDbDelChancel((LPChancel)lParam);
		break;
	case WM_CHAN_ADD:
		DealEnterEditChan();
		lRet = DealDbAddChancel((LPChancel)lParam);
		break;
	case WM_CHAN_UP:
		DealEnterEditChan();
		lRet = DealDbChancelUpDown(-1, (LPChancel)lParam);
		break;
	case WM_CHAN_DOWN:
		DealEnterEditChan();
		lRet = DealDbChancelUpDown(1, (LPChancel)lParam);
		break;
	case WM_DEL_BAK:
		lRet = DealDelBakTv((int)wParam);
		break;
	case WM_REVSER_CHAN:
		lRet = DealCopyAsCur((int)wParam, (int)lParam);
		break;
	case WM_SEARCH_START:
		m_curstatus = 2;
		lRet = DealSearchStart();
		break;
	case WM_SEARCH_END:
		lRet = DealSearchEnd();
		break;
	case WM_SEARCH_CANCEL:
		lRet = DealSearchCance();
		break;
	case WM_SEARCH_ONE:
		lRet = DealSearchOne((long)lParam);
		break;
	case WM_CHAN_CANCEL:
	case WM_CHAN_UPDATE:
		lRet = DealLeaveEditChan(nID);
		break;
	case WM_DOWN_EPG:
		bdownloading = TRUE;
		lRet = DownLoadEpg();
		break;
	}
	switch(nID)
	{
	case WM_CHAN_EDIT:
	case WM_CHAN_DEL:
	case WM_CHAN_ADD:
	case WM_CHAN_UP:
	case WM_CHAN_DOWN:
		m_curstatus = 3;
		break;
	case WM_SEARCH_END:
	case WM_SEARCH_CANCEL:
		m_curstatus = 1;
		break;
	case WM_CHAN_UPDATE:
	case WM_CHAN_CANCEL:
		m_curstatus = 1;
		break;
	}
	return lRet;
}
LRESULT CEpgDeal::DealGetProp(UINT nID, WPARAM wParam, LPARAM lParam)
{
	LRESULT lRet = -1;

	switch(nID)
	{
	case WM_CHAN_LIST_LIB:
		DealDbLocateAllChancel(0);
		*(int*)wParam = m_nChan;
		*(LPChancel*)lParam = m_listChan;
		break;
	case WM_CHAN_LIST:
		m_curChan.tvFav = (BOOL)wParam;
		DealDbLocateAllChancel(1);
		lRet = m_nChan;
		*(LPChancel*)lParam = m_listChan;
		break;		
	case WM_LIST_CHAN:
		DealDbLocateAllChancel((int)wParam);
		lRet = m_nChan;
		*(LPChancel*)lParam = m_listChan;
		break;		
	case WM_EPG_CUR:
		lRet = DealLocateCur5Epg((LPChancel)wParam);
		lRet = m_nEpg;	
		*(LPEpgInfo*)lParam = m_listEpg;
		break;
	case WM_EPG_CUR_DAY:
		DealLocateTodayEpg((LPChancel)wParam);
		lRet = m_nEpg;	
		*(LPEpgInfo*)lParam = m_listEpg;
		break;
	case WM_BAKCHAN_LIST:
		lRet = DealDbGetAllBak((CStringList*)lParam);
		break;
	case WM_BAKCHAN_CUR:
		lRet = DealGetNumBak((int)wParam, (LPBakTv)lParam);
		break;
	case WM_DOWN_ADDR:
		strcpy((CHAR *)lParam, m_initParam.szDownPath);
		break;
	case WM_DOWN_FOLD:
		strcpy((CHAR*)lParam, m_initParam.szZipPath);
		break;
	case WM_EPG_FILE:
		lRet = DealGetEpgFile((LPVOID*)lParam, (int)wParam);
		break;
	}
	return lRet;
}
LRESULT CEpgDeal::DealSetProp(UINT nID, WPARAM wParam, LPARAM lParam)
{
	LRESULT lRet =1l ;
	switch(nID)
	{
	case WM_DEFINE_CALLBACK:
		m_pfn = (MsgCallbackProc)lParam;
		break;
	case WM_DESOTRY_CALLBACK:
		m_pfn = NULL;
		break;
	case WM_DOWN_ADDR:
		strcpy(m_initParam.szDownPath, (CHAR *)lParam);
		break;
	case WM_DOWN_FOLD:
		strcpy(m_initParam.szZipPath, (CHAR*)lParam);
		break;
	}
	return lRet;
}
BOOL CEpgDeal::DealDbOpenChan()
{
	HRESULT hr;
	try
	{
		if(bOpenRecord)
			m_pRecordset->Close();
		hr = m_pRecordset->Open("SELECT * FROM tv ORDER BY tvnum",
		_variant_t((IDispatch*)m_pConnection,true),
		adOpenStatic,adLockOptimistic,adCmdText);
		if(FAILED(hr))
		{
			bOpenRecord = FALSE;
			return FALSE;
		}
		bOpenRecord = TRUE;
	}
	catch(_com_error e)
	{
		AfxMessageBox(e.ErrorMessage());
		return FALSE;
	}
	return TRUE;
}
BOOL CEpgDeal::DealDbOpenEpg()
{
	HRESULT hr;
	try
	{
		if(bOpenRecord)
			m_pRecordset->Close();

		hr = m_pRecordset->Open("SELECT * FROM EpgInf ORDER BY tvnum",
		_variant_t((IDispatch*)m_pConnection,true),
		adOpenStatic,adLockOptimistic,adCmdText);
		if(FAILED(hr))
		{
			bOpenRecord = FALSE;
			return FALSE;
		}
		bOpenRecord = TRUE;
	}
	catch(_com_error e)
	{
		AfxMessageBox(e.ErrorMessage());
		return FALSE;
	}
	return TRUE;
}
BOOL CEpgDeal::DealDbOpenBakTv()
{
	HRESULT hr;
	try
	{
		if(bOpenRecord)
			m_pRecordset->Close();
	
		hr = m_pRecordset->Open("SELECT * FROM Baktv order by nLNum",
		_variant_t((IDispatch*)m_pConnection,true),
		adOpenStatic,adLockOptimistic,adCmdText);
		if(FAILED(hr))
		{
			bOpenRecord = FALSE;
			return FALSE;
		}
		bOpenRecord = TRUE;
	}catch(_com_error e)
	{
		AfxMessageBox(e.ErrorMessage());
		return FALSE;
	}
	return TRUE;
}
BOOL CEpgDeal::DealDbAddChancel(LPChancel pChan)
{
	if(DealDbOpenChan())
	{
		CString s;
		s.Format("select * from tv where RegCode = %d", pChan->RegCode);
		
		LONG l = DealDbLocate(s);
		if(pChan->m_nNum == -1)
		{
			pChan->m_nNum = l++;
			s.Format("TV-%ld", l);
			strcpy(pChan->szName, s.LockBuffer());
			if(pChan->RegCode == 0)
				pChan->m_nEpgNum = l;
		}	
		try
		{
			m_pRecordset->AddNew();

			m_pRecordset->PutCollect("tvName", _variant_t(pChan->szName));
			m_pRecordset->PutCollect("tvfrq", pChan->lfrequent);
			m_pRecordset->PutCollect("tvnum", (long)pChan->m_nEpgNum);
			m_pRecordset->PutCollect("tvFName", _variant_t(pChan->tvFName));
			m_pRecordset->PutCollect("RegCode", (long)pChan->RegCode);
			m_pRecordset->PutCollect("nNum", (long)pChan->m_nNum );
			m_pRecordset->PutCollect("tvSel", (long)pChan->tvSel);
			m_pRecordset->PutCollect("tvFav", (long)pChan->tvFav);
			m_pRecordset->Update();
			return TRUE;
		}catch(_com_error e)
		{
			AfxMessageBox(e.ErrorMessage());
		}
	}
	return FALSE;
}
BOOL CEpgDeal::DealDbDelChancel(LPChancel pChan)
{
	if(DealDbOpenChan())
	{
		try
		{
		LONG l;		// = m_pRecordset->GetRecordCount();
		if(pChan)
		{
			CString s;
			s.Format("select * from tv where RegCode=%d and nNum = %d",
				pChan->RegCode, pChan->m_nNum);
			l = DealDbLocate(s);
			if(l == 1)
			{
				m_pRecordset->MoveFirst();
				m_pRecordset->Delete(adAffectCurrent);
				//将后面的编号往前移
				s.Format("Select * from tv where RegCode=%d and nNum > %d",
					pChan->RegCode, pChan->m_nNum);
				if(DealDbLocate(s)>0)
				{	
					m_pRecordset->MoveFirst();
					l = pChan->m_nNum ;
					while(!m_pRecordset->adoEOF)
					{
						m_pRecordset->PutCollect("nNum", l++);
						m_pRecordset->Update();
						m_pRecordset->MoveNext();
					}		
				}
				return TRUE;

			}
			else
				return FALSE;
		}
		else
		{
			if(l>0)
			{
				if(!m_pRecordset->BOF)
					m_pRecordset->MoveFirst();
				while(!m_pRecordset->adoEOF)
				{
					m_pRecordset->Delete(adAffectCurrent);	
					m_pRecordset->MoveNext();
				}
				return TRUE;
			}
		}
		}catch(_com_error e)
		{
			AfxMessageBox(e.ErrorMessage());
		}
	}
	return FALSE;
}
BOOL CEpgDeal::DealDbChancelUpDown(int pos, LPChancel pChan)
{
	CString s;
	LONG lRet;

	s.Format("select * from tv where RegCode =%d order by nNum",
		pChan->RegCode);
	lRet = DealDbLocate(s);
	if(lRet > 0 && pChan->m_nNum>=0 && pChan->m_nNum < lRet)
	{
		pos += pChan->m_nNum;
		if(pos<0)
			pos += lRet;
		pos %= lRet;
		try{
		
			m_pRecordset->Move((long)pos);
			m_pRecordset->PutCollect("nNum", (long)pChan->m_nNum);
			m_pRecordset->Update();			
			m_pRecordset->Move((long)(pChan->m_nNum - pos));
			m_pRecordset->PutCollect("nNum", (long)pos);
			m_pRecordset->Update();	
			return TRUE;
		}catch(_com_error e)
		{	
			AfxMessageBox(e.ErrorMessage());
		}

	}
	return FALSE;
}
BOOL CEpgDeal::DealDbEditChancel(LPChancel pChan)
{
	if(DealDbOpenChan())
	{
		//找到编号所在记录,然后,更新记录即可
		CString s;
		LONG lRet;
		BOOL bRept = TRUE;;
again:
		s.Format("select * from tv where RegCode= %d and nNum = %d", 
			pChan->RegCode, pChan->m_nNum);
		lRet = DealDbLocate(s);
		try
		{
		if(lRet == 1)
		{
			m_pRecordset->MoveFirst();
			m_pRecordset->PutCollect("tvName", _variant_t(pChan->szName));
			m_pRecordset->PutCollect("tvNum", (long)pChan->m_nEpgNum);
			m_pRecordset->PutCollect("tvFav", (long)pChan->tvFav);
			m_pRecordset->PutCollect("tvFrq", pChan->lfrequent);
			m_pRecordset->PutCollect("tvFName", _variant_t(pChan->tvFName));
			m_pRecordset->Update();
	
			if(bRept)
			{
				//如果文件名为空的话,就退出

⌨️ 快捷键说明

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