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

📄 epgdeal.cpp

📁 得到本周内的电视节目预告! f
💻 CPP
📖 第 1 页 / 共 3 页
字号:

	TCHAR szDir[255];
	int nLen;
	nLen = GetModuleFileName(NULL, szDir, 255);
	CString strFileName;
	strFileName = pWnd->m_initParam.szZipPath;
	if(!strFileName.IsEmpty())
	{
		strFileName +=  "\\epg.zip";
	}
	else
	{
		pWnd->bdownloading = FALSE;
		return 0;
	}
	
	CHttpSocket HttpSocket;
	CString strServer,strObject;
	unsigned short nPort;
	DWORD dwServiceType;
	long nLength;
	const char *pRequestHeader = NULL;
	CString strRequest = pWnd->m_initParam.szDownPath;
	if(strRequest.IsEmpty())
		strRequest = _T("http://www.cctv.com/download/showtime.zip");

	AfxParseURL(strRequest,dwServiceType,strServer,strObject,nPort);
	
	pRequestHeader = HttpSocket.FormatRequestHeader((LPTSTR)(LPCTSTR)strServer,(LPTSTR)(LPCTSTR)strObject,nLength);	
	HttpSocket.Socket();
	BOOL bRes = FALSE;
	bRes = HttpSocket.Connect((LPTSTR)(LPCTSTR)strServer);
	if(!bRes)
	{
		pWnd->bdownloading = FALSE;
		pWnd->DealCallBackDownPercent(-1);	
		return 0;
	}
	
	HttpSocket.SendRequest();
	HttpSocket.SetTimeout(20000,0);
	
	char szValue[30];
	HttpSocket.GetField("content-length",szValue,30);
	int nSvrState = HttpSocket.GetServerState();
	int nFileSize = atoi(szValue);
	
	int nCompletedSize = 0;
	CFile DownloadFile;
	DownloadFile.Open(strFileName,CFile::modeCreate | CFile::modeWrite);
	char pData[1024];
	int nReceSize = 0;
	DWORD dwStartTime,dwEndTime;
	
	while(nCompletedSize < nFileSize)
	{
		dwStartTime = GetTickCount();
		nReceSize = HttpSocket.Receive(pData,1024);
		if(nReceSize == 0)
		{
			break;
		}
		if(nReceSize == -1)
		{
			break;
		}
		dwEndTime = GetTickCount();
		DownloadFile.Write(pData,nReceSize);
		nCompletedSize += nReceSize;
		if(nCompletedSize != nFileSize)
			pWnd->DealCallBackDownPercent((100.0*nCompletedSize)/nFileSize);
	}

	DownloadFile.Close();
	CPackManage pack;
	BOOL bRet;
	if(nCompletedSize == nFileSize)
	{
		//删除原来的epg目录
		if(pack.LoadResourcePack(strFileName))
			bRet = pack.ExtractPack();
		
	}
	if(bRet)
		pWnd->DealCallBackDownPercent(100);
	else
		pWnd->DealCallBackDownPercent(-1);
	
	pWnd->bdownloading = FALSE;
	return 0;
}

BOOL CEpgDeal::DownLoadEpg()
{
	//删除掉原来的epg文件目录

	bdownloading = TRUE;
	AfxBeginThread(DownloadThread,(void *)this);
	return TRUE;
}
BOOL CEpgDeal::DealDbLocateAllChancel(int ncode)
{
	CString s;
	LONG lRet;

	ReleaseListChan();

	if(m_curChan.tvFav && ncode == 1)
	{
		CString ss;
		ss = "FALSE";
		s.Format("select * from tv where RegCode = %d and tvFav=true order by nNum"
		, ncode);
	}
	else
		s.Format("select * from tv where RegCode = %d order by nNum"
		, ncode);
	lRet = DealDbLocate(s);
	if(lRet > 0)
		m_pRecordset->MoveFirst();
	else
		return FALSE;
	AllocListChan(lRet);
//	m_listChan = new Chancel[lRet];
//	m_nChan = 0;
	for(int i=0;i< lRet; i++)
	{
		DealDbGetCurChanRecrod();
		m_pRecordset->MoveNext();
	}
	return TRUE;
}

BOOL CEpgDeal::DealCopyAsCur(int nRegCode, int srcReg)
{
	CString s;
	LONG lRet;
	int i;

	s.Format("delete * from tv where RegCode =%d", nRegCode);
	lRet = DealDbDelete(s);

	s.Format("select * from tv where RegCode = %d order by tvNum", srcReg);
	lRet = DealDbLocate(s);
	if(lRet > 0)
		m_pRecordset->MoveFirst();
	else 
		return FALSE;
	ReleaseListChan();

	AllocListChan(lRet);

	for(i= 0;i < lRet ; i++)
	{
		DealDbGetCurChanRecrod();
		m_listChan[i].RegCode = nRegCode;
		m_pRecordset->MoveNext();
	}
	for(i= 0;i < lRet; i++)
	{
		DealDbAddChancel(&m_listChan[i]);
	}
	return TRUE;
}
BOOL CEpgDeal::DealDbCheckHasEpg(LPChancel pChan)
{
	CString s, s1;
	LONG lRet;
	BOOL bRet = TRUE;
	//更新频道编号
	DealDbChancelXX(pChan);

	//先简单判断有无内部编号
	s.Format("select * from tv where RegCode = %d and nNum = %d",
		pChan->RegCode,pChan->m_nNum);
	lRet = DealDbLocate(s);
	if(lRet == 1)		//有内部编号
	{
		ReleaseListChan();
		AllocListChan(1);
		DealDbGetCurChanRecrod();
		pChan->m_nEpgNum = m_listChan[0].m_nEpgNum;
		strcpy(pChan->tvFName, m_listChan[0].tvFName);
	}
	else	//查找库存中的与之
	{
		//先找到电台内部编号
		s.Format("select * from tv where tvFName= \"%s\" and RegCode= 0", pChan->tvFName);
		lRet = DealDbLocate(s);
		if(lRet == 1)
		{
			ReleaseListChan();
			AllocListChan(1);
			DealDbGetCurChanRecrod();
			pChan->m_nEpgNum = m_listChan[0].m_nEpgNum;
			strcpy(pChan->tvFName, m_listChan[0].tvFName);
		}
		else
			return FALSE;
	}
	//判断有无Epg信息
	CTime t = CTime::GetCurrentTime();
	s1 = t.Format("%m/%d/%Y");
	s.Format("select * from epginf where tvNum =%d and datediff(\"d\", tvStartT, #%s#)=0 order by tvStartT"
		, pChan->m_nEpgNum,  s1.LockBuffer());
	int ncnt =2;
again:
	lRet = DealDbLocate(s);
	
	if(lRet == 0)
	{
		//无Epg信息,则查找文件,将Epg信息写入到数据库中
		bRet = DealBuildEpgFromFile(pChan->m_nEpgNum, pChan->tvFName);
		ncnt --;
		if(ncnt == 1)
			goto again;
	}

	return bRet;
}
BOOL CEpgDeal::DealAddBak()
{
	CString s;
	LONG lRet;
	BakTv bakls;
	//取得最大编号,
	s.Format("select * from Baktv order by nLNum");
	lRet = DealDbLocate(s);
	if(lRet > 0)
		m_pRecordset->MoveLast();
	else
	{
		bakls.nRegCode = 100;
		goto con;
	}
	DealDbGetCurrentBak(&bakls);

	if(bakls.nRegCode < 100)
		bakls.nRegCode = 100;
	else
		bakls.nRegCode ++;
con:
	//加入信息到tv表中
	DealCopyAsCur(bakls.nRegCode, 1);

	//加入信息到baktv表中。
	COleDateTime oledt = COleDateTime::GetCurrentTime();
	oledt.GetAsSystemTime(bakls.startTime);

	if(DealDbOpenBakTv())
	{
		_variant_t vtdate;
		vtdate.vt = VT_DATE;
		vtdate.date = oledt;

		m_pRecordset->AddNew();
		m_pRecordset->PutCollect("nLNum", (long)bakls.nRegCode);
		m_pRecordset->PutCollect("BakDate", vtdate);
		m_pRecordset->Update();
	}
	else
	{
		s.Format("delete * from tv where RegCode = %d", bakls.nRegCode);
		DealDbDelete(s);
	}
	return TRUE;
}
BOOL CEpgDeal::DealDbGetCurrentBak(LPBakTv pbak)
{
	VARIANT var;
	COleDateTime oledt;
	var = m_pRecordset->GetCollect("nLNum");
	pbak->nRegCode = var.iVal;
	
	var = m_pRecordset->GetCollect("BakDate");
	oledt = var.date;
	oledt.GetAsSystemTime(pbak->startTime);
	return TRUE;
}
BOOL CEpgDeal::DealDbGetAllBak(CStringList *slist)
{
	CString s;
	LONG lRet;
	BakTv bktv;

	s.Format("select * from Baktv order by BakDate");
	lRet = DealDbLocate(s);
	if(lRet<1)
		return FALSE;
	m_pRecordset->MoveFirst();

	for(int i= 0;i < lRet ;i ++)
	{
		DealDbGetCurrentBak(&bktv);
		CTime t(bktv.startTime);
		s = t.Format("%Y-%m-%d %H:%M:%S");
		slist->AddTail(s);
		m_pRecordset->MoveNext();
	}
	return TRUE;
}
BOOL CEpgDeal::DealGetNumBak(int nNum, LPBakTv ptv)
{
	CString s;
	LONG lRet;

	
	s.Format("select * from Baktv order by BakDate");
	lRet = DealDbLocate(s);
	if(lRet<1)
		return FALSE;
	if(nNum<0 || nNum >= lRet)
		return FALSE;
	m_pRecordset->Move(nNum);

	DealDbGetCurrentBak(ptv);

	return TRUE;
}
BOOL CEpgDeal::DealDelBakTv(int nRegcode)
{
	BOOL bRet;
	CString s;
	s.Format("delete * from tv where RegCode = %d", nRegcode);
	bRet = DealDbDelete(s);
	if(bRet)
	{
		s.Format("delete * from baktv where nLNum = %d", nRegcode);
		bRet = DealDbDelete(s);
	}
	return bRet;
}
LRESULT CEpgDeal::DealCallBack(UINT nID, WPARAM wParam, LPARAM lParam)
{
	if(m_pfn)
		return m_pfn(WM_MSG_EPG, nID, wParam, lParam);
	else
		return -1l;
}
BOOL CEpgDeal::DealSearchStart()
{
	CString s;
	s = "delete * from tv where regcode = 1";
	if(!DealDbDelete(s))
		return FALSE;
	DealCallBack(MAKELONG(WM_SEARCH_START, WM_EPG_DONE), 0, 0);
	return TRUE;
}
BOOL CEpgDeal::DealSearchCance()
{
	DealCallBack(MAKELONG(WM_SEARCH_CANCEL, WM_EPG_DONE), 0, 0);
	return TRUE;
}
BOOL CEpgDeal::DealSearchEnd()
{
//	if(!DealCopyAsCur(1, 4))
//		return FALSE;
	DealCallBack(MAKELONG(WM_SEARCH_END, WM_EPG_DONE), 0, 0);
	return TRUE;	
}
BOOL CEpgDeal::DealSearchOne(long freq)
{
	Chancel ch;
	ZeroMemory(&ch, sizeof(Chancel));
	ch.RegCode = 1;
	ch.lfrequent = freq;
	ch.m_nNum = -1;
	if(DealDbAddChancel(&ch))
	{
		DealCallBack(MAKELONG(WM_SEARCH_ONE, WM_EPG_DONE), 0, (LPARAM)&ch);
		return TRUE;
	}
	return FALSE;
}
BOOL CEpgDeal::DealEnterEditChan()
{
	//判断是否为第一次进入
	if(m_curstatus== 3)
		return TRUE;
	//备份当前记录
	return DealCopyAsCur(5, 1);
}
BOOL CEpgDeal::DealLeaveEditChan(int nID)
{
	//如果当前为取消更新
	switch(nID)
	{
	case WM_CHAN_CANCEL:
		return DealCopyAsCur(1, 5);
	case WM_CHAN_UPDATE:
		return DealCopyAsCur(5, 1);
	}
	return FALSE;
}
void CEpgDeal::DealCallBackDownPercent(int nPos)
{
	if(nPos == 100)	//下载完成
	{
		DealCallBack(MAKELONG(WM_DOWN_SUCCES, WM_EPG_GET), 0, (LPARAM)nPos);
		return;
	}
	if(nPos == -1)	//下载失败
	{
		DealCallBack(MAKELONG(WM_DOWN_FAILED, WM_EPG_GET), 0, (LPARAM)nPos);
		return;
	}
	//下载进度
	DealCallBack(MAKELONG(WM_DOWN_PERCENT, WM_EPG_GET), 0, (LPARAM)nPos);
}
BOOL CEpgDeal::DealGetEpgFile(LPVOID *pVoid, int n)
{
	CString s = m_initParam.szZipPath;
	if(!pVoid)
		return FALSE;

	s += "\\节目单";
	WIN32_FILE_ATTRIBUTE_DATA *attrdata;
	WIN32_FIND_DATA fdata;
	BYTE *pBt = new BYTE [1024];
	BOOL bRet;

	HANDLE hFile;
	
	fvec.clear();
	bRet = GetFileAttributesEx (s, GetFileExInfoStandard, (void *)pBt);
	if(!bRet)
	{
		delete []pBt;
		return FALSE;
	}
	attrdata = (WIN32_FILE_ATTRIBUTE_DATA *)pBt;
	if(attrdata->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
	{
		s += "\\*.txt";
		hFile = FindFirstFile(s, &fdata);
		if(hFile)
		{
			fvec.push_back(fdata.cFileName);
			while(FindNextFile(hFile, &fdata))
				fvec.push_back(fdata.cFileName);
		}
	}
	*pVoid = &fvec;
	delete []pBt;
	return bRet;
}
BOOL CEpgDeal::DealDbChancelXX(LPChancel pChan)
{
	CString s;
	LONG lRet;

	if(pChan->lfrequent == -2)
		return true;
	if(!pChan->tvFav)		//没有使用喜好
	{
		switch(pChan->lfrequent)
		{
		case -3	://down
			pChan->m_nNum--;
			break;
		case -1: //up:
			pChan->m_nNum++;
			break;
		default:
			pChan->m_nNum+= pChan->lfrequent;
		}

		s.Format("select * from tv where RegCode =%d order by nNum",
			pChan->RegCode);
		lRet = DealDbLocate(s);
		if(pChan->m_nNum<0)
			pChan->m_nNum += lRet;
		pChan->m_nNum %= lRet;
		return true;
	}
	else		//使用喜好
	{
		VARIANT var;
		bool bfind = false;
		int i;
		s.Format("select * from tv where RegCode =%d tvFav =%d order by nNum",
			pChan->RegCode, pChan->tvFav);
		lRet = DealDbLocate(s);
		try
		{
			if(lRet>0)
			{
				//如果是切换到某一个频道	
				if(pChan->lfrequent>-1 && pChan->lfrequent<lRet)
				{
					m_pRecordset->Move(pChan->lfrequent);
					var = m_pRecordset->GetCollect("nNum");
					pChan->m_nNum = var.iVal;
					return true;
				}
				m_pRecordset->MoveFirst();
			}
			for(i=0;i<lRet;i++)
			{
				var = m_pRecordset->GetCollect("nNum");
				if(bfind && pChan->lfrequent == -3 )	//up
				{
					pChan->m_nNum = var.iVal;
					return true;
				}
				if(var.iVal == pChan->m_nNum)
				{
					bfind = true;
				}
				if(bfind && pChan->lfrequent == -3)	//down
				{
					if(i==0)
						m_pRecordset->MoveLast();
					else
						m_pRecordset->MovePrevious();
					var = m_pRecordset->GetCollect("nNum");
					pChan->m_nNum = var.iVal;
				}
				m_pRecordset->MoveNext();
			}
		}
		catch(_com_error e)
		{
			AfxMessageBox(e.ErrorMessage());
			return false;
		}
		if(bfind || lRet>0)
		{
			m_pRecordset->MoveFirst();
			var = m_pRecordset->GetCollect("nNum");
			pChan->m_nNum = var.iVal;
			return true;
		}
	}
	return true;
}

⌨️ 快捷键说明

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