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

📄 epgdeal.cpp

📁 得到本周内的电视节目预告! f
💻 CPP
📖 第 1 页 / 共 4 页
字号:
		DealCopyAsCur(1, 4, true);
	s = _T("delete from tv where regcode=4");
	ExeSql(s);
	DealCallBack(MAKELONG(WM_SEARCH_END, WM_EPG_DONE), 0, 0);
	return TRUE;	
}
//##ModelId=46676C9800FA
BOOL CEpgDeal::DealSearchOne(long freq)
{
	Chancel ch;
	ZeroMemory(&ch, sizeof(Chancel));
	ch.RegCode = 1;
	ch.lfrequent = freq;
	ch.m_nNum = -1;
	CString s;
	long lret;
	//判断如果是保留以前的频道信息,那么从备份数据库中查找是否是与之相等的频率,如果有,则将频道信息复制过来
	if(m_initParam.bSearchSave)
	{
		ch.RegCode = 4;
		//先前有这个频点信息
		if(DealSearchFrequent(&ch,  freq))
		{
			TRACE1("epg:先前有这个频点,现在复制%s", ch.szName);
			lstrcpy(ch.szName, m_listChan[0].szName);
			lstrcpy(ch.tvFName, m_listChan[0].tvFName);
			ch.tvFav = m_listChan[0].tvFav;
			s.Format(_T("delete from tv where regcode=%d and nNum=%d"),
				m_listChan[0].RegCode, m_listChan[0].m_nNum);
			lret = ExeSql(s);
			TRACE2("epg删除yes =%d %s", lret, s.LockBuffer());
			ch.m_nNum = 0; 
		}
		ch.RegCode = 1;
	}
	if(DealDbAddChancel(&ch))
	{
		DealCallBack(MAKELONG(WM_SEARCH_ONE, WM_EPG_DONE), 0, (LPARAM)&ch);
		return TRUE;
	}
	return FALSE;
}
//##ModelId=46676C980119
BOOL CEpgDeal::DealEnterEditChan()
{
	//判断是否为第一次进入
	if(m_curstatus== 3)
		return TRUE;
	//备份当前记录
		{
			CString s;
			s = _T("delete from tv where regcode = 5");
			ExeSql(s);
		}
	return DealCopyAsCur(5, 1, true);
}
//##ModelId=46676C980128
BOOL CEpgDeal::DealLeaveEditChan(int nID)
{
	//如果当前搜台,不作处理
	if(m_curstatus == 2|| m_curstatus == 1)
		return false;
	//如果当前为取消更新
	switch(nID)
	{
	case WM_CHAN_CANCEL:

//		DealCopyAsCur(1, 5);
		{
			CString s;

			s = _T("delete from tv where regcode = 1");
			ExeSql(s);
			s = _T("update tv set regcode=1 where regcode=5");
			ExeSql(s);
			return true;
		}
	case WM_CHAN_UPDATE:
		{
			CString s;
			s = _T("delete from tv where regcode = 5");
			ExeSql(s);
		}
		return true;
	}
	return FALSE;
}
//##ModelId=46676C9600B0
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);
}
//##ModelId=46676C9700EA
BOOL CEpgDeal::DealGetEpgFile(LPVOID *pVoid, int n)
{
	CString s = m_initParam.szZipPath;
	if(!pVoid)
		return FALSE;

	TCHAR sfname[128];
	DWORD dret;
	dret = GetModuleFileName(NULL, sfname, 128);
	if(dret>0)
	{
		s = sfname;
		dret = s.ReverseFind('\\');
		s = s.Left(dret);
	}
	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;
}
//##ModelId=46676C98009C
BOOL CEpgDeal::DealDbChancelXX(LPChancel pChan)
{
	CString s;
	LONG lRet;

	if(pChan->lfrequent == -2)
		return true;
	if(!pChan->tvFav || pChan->lfrequent>= 0)		//没有使用喜好
	{
		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(lRet == 0)
			return false;
		if(pChan->m_nNum<0)
			pChan->m_nNum += lRet;
		//对于遥控器操作大于的台显示最后一个台
		if(pChan->lfrequent>=0 && pChan->lfrequent >= lRet)
		{
			pChan->m_nNum = lRet - 1;
		}
		else
			pChan->m_nNum %= lRet;
		return true;
	}
	else		//使用喜好
	{
		VARIANT var;
		bool bfind = false;
		int tt = 0;
		if(pChan->lfrequent == -1)
		{
			s.Format("select * from tv where RegCode =%d and tvFav = true and nnum>%ld order by nNum",
				pChan->RegCode, pChan->m_nNum);
			lRet = DealDbLocate(s);
			tt = 1;
			if(lRet < 1)
			{
				s.Format("select * from tv where RegCode =%d and tvFav = true order by nNum",
					pChan->RegCode, pChan->m_nNum);
				lRet = DealDbLocate(s);
			}

		}
		if(pChan->lfrequent == -3)
		{
			s.Format("select * from tv where RegCode =%d and tvFav = true and nnum<%ld order by nNum",
				pChan->RegCode, pChan->m_nNum);
			lRet = DealDbLocate(s);
			tt = 100;
			if(lRet < 1)
			{
				s.Format("select * from tv where RegCode =%d and tvFav = true order by nNum",
					pChan->RegCode, pChan->m_nNum);
				lRet = DealDbLocate(s);
			}
		}
		if(lRet>0)
		{
			try
			{
				switch(tt)
				{
				case 1:
					m_pRecordset->MoveFirst();
					break;
				case 100:
					m_pRecordset->MoveLast();
					break;
//				default:
				}
				if(tt>0)
				{
					var = m_pRecordset->GetCollect("nNum");
					pChan->m_nNum = var.iVal;
					return true;
				}
			}
			catch(_com_error e)
			{
			//	AfxMessageBox(e.ErrorMessage());
				return false;
			}
		}

	}
	return false;
}

//##ModelId=46676C980148
BOOL CEpgDeal::DealSearchFrequent(LPChancel pChan, long frequent)
{
	CString s;
	long lRet;
	s.Format(_T("select * from tv where tvFrq > %ld and tvFrq< %ld and regcode = %ld")
		, frequent -m_initParam.lChannear/2,frequent + m_initParam.lChannear/2, pChan->RegCode);

	lRet = DealDbLocate(s);
	if(lRet > 0)
		m_pRecordset->MoveFirst();
	else
		return FALSE;
	AllocListChan(lRet);

	for(int i=0;i< lRet; i++)
	{
		DealDbGetCurChanRecrod();
		m_pRecordset->MoveNext();
	}
	return TRUE;
}
//##ModelId=46676C9800BB
bool CEpgDeal::DealGetXXXChance(LPChancel pChan)
{
	CString s;
	long lret;
#ifdef MYFORREPORT
	s.Format(_T("select * from tv where tvname = '%s'"), pChan->szName);
	//找到编号所在频道信息,如果找不到,则为第一个频道
#else	
	s.Format(_T("select * from tv where Regcode=%d and nNum=%d")
		, pChan->RegCode, pChan->m_nNum);
#endif
	lret = DealDbLocate(s);
	if(lret<1)
	{
		s.Format(_T("select * from tv where Regcode=%d order by nNum")
		, pChan->RegCode);		
		lret = DealDbLocate(s);
	}
	if(lret<1)
		return false;
	else
	{
		AllocListChan(1);
		try
		{
			m_pRecordset->MoveFirst();
			DealDbGetCurChanRecrod();
			lstrcpy(pChan->szName, m_listChan[0].szName);
			lstrcpy(pChan->tvFName, m_listChan[0].tvFName);
			pChan->m_nNum = m_listChan[0].m_nNum;
			pChan->tvFav = m_listChan[0].tvFav;
			pChan->lfrequent = m_listChan[0].lfrequent;
		}
		catch(_com_error e)
		{
		//	AfxMessageBox(e.ErrorMessage());
			return false;
		}
	}
	return true;
}
//##ModelId=46676C9600BB
void CEpgDeal::DealClear()
{
	CString s;
	s = _T("delete from epginf");
	ExeSql(s);
	s = _T("delete from baktv");
	ExeSql(s);
	s = _T("delete from tv where regcode <> 0");
	ExeSql(s);
}

//##ModelId=46676C99031C
bool CEpgDeal::GetChlEpgInfo(CString sfile,VecEpgInfo *vc)
{
	CString strFile;
	CString strChl;

	strFile = sfile;
	vc->clear();

	if(!strFile.IsEmpty())
	{
		strFile = "\\节目单\\"+strFile;
		strFile = m_initParam.szZipPath + strFile;
		CStdioFile file;
		if(!file.Open(strFile, CFile::modeRead))
		{
			return TRUE;
		}
		
		CTime tday = CTime::GetCurrentTime();
		CTime tm = CTime::GetCurrentTime();
		int nWeek = tm.GetDayOfWeek() - 2;
		if(-1 == nWeek)
		{
			nWeek = 6;
		}
		//
		CString strWeek, strDate, strStartTime, strProgram;
		CString strLine, strTemp;
		CStringArray arrProgram;
		BOOL bNextDay = FALSE;
		int nYear = 0, nMon = 0, nDay = 0;
		int nHour = 0, nMin = 0, nSec = 0;
		int nPreHour = 0;
		int nPos = 0;
		strWeek.LoadString(IDS_CONST_MONDAY+nWeek);
		CString strPreDay;
		
		if(nWeek > 0)
		{
			strPreDay.LoadString(IDS_CONST_MONDAY + nWeek -1);
		}
		
		if(!strPreDay.IsEmpty())
		{
			while(file.ReadString(strLine))
			{
				if(-1 != strLine.Find(strPreDay))
					break;
			}
		}
		//
		while(file.ReadString(strLine))
		{
			TCHAR ch = 0x09;	//tab
			
			while(strLine.Left(1) == _T(" ") || 
				strLine.Left(1) == ch)
				strLine = strLine.Mid(1);
			
			if(strLine.IsEmpty())
				continue;
			
			//CTime tm = CTime::GetCurrentTime();
			
			//
			if(-1 != strLine.Find(strWeek))
			{
				strPreDay.Empty();
			}
			
			bNextDay = FALSE;
			if(!strPreDay.IsEmpty())
			{
				if(strLine.Find(strPreDay) != -1)
				{
					//nYear = atoi(strLine.Mid(0, 2));
					nYear = tm.GetYear();
					//nYear += 2000;
					nMon  = atoi(strLine.Mid(3, 2));
					nDay  = atoi(strLine.Mid(6, 2));
					nDay += 1;
					
					strDate.Format(_T("%04d-%02d-%02d"), nYear, nMon, nDay);
				}
				else
				{
					//
					nPos = strLine.Find(ch);
					
					if(nPos == -1)
					{
						ch = ' ';	//空格
						nPos = strLine.Find(ch);
						if(nPos == -1)
							return FALSE;
					}
					//
					strProgram = strLine.Mid(nPos);
					
					strTemp = strLine.Left(nPos);
					nPos = strTemp.Find(_T(":"));
					if(nPos != -1)
					{
						nHour = atoi(strTemp.Mid(0, 2));
						//
						if(nHour < nPreHour || nHour >= 24)
						{
							bNextDay = TRUE;
						}
						else
						{
							continue;
						}
						//
						nHour = nHour % 24;					//有的文件竟然有27:30:00 这种格式
						nPreHour = nHour;
						nMin  = atoi(strTemp.Mid(3, 2));
						nSec  = 0;//atoi(strTemp.Mid(6, 2));//有的文件没有秒数的。
					}
					strStartTime.Format("%02d:%02d", nHour, nMin);
					//
					while(strProgram.Left(1) == _T(" ") || strProgram.Left(1) == ch)
						strProgram = strProgram.Mid(1);
					
					//
					if(bNextDay)
					{
						arrProgram.Add(strStartTime + _T("\n") + strProgram);
						continue;
					}
				}
			}
			//////////////////////////////////////////////////////////////////////////
			else if(strLine.Find(strWeek) != -1)
			{
				//nYear = atoi(strLine.Mid(0, 2));
				nYear = tm.GetYear();
				//nYear += 2000;
				nMon  = atoi(strLine.Mid(3, 2));
				nDay  = atoi(strLine.Mid(6, 2));
				
				strDate.Format(_T("%04d-%02d-%02d"), nYear, nMon, nDay);
			}
			else
			{
				nPos = strLine.Find(ch);
				
				if(nPos == -1)
				{
					ch = ' ';	//空格
					nPos = strLine.Find(ch);
					if(nPos == -1)
						return FALSE;
					
				}
				
				strStartTime = strLine.Left(nPos);
				strProgram = strLine.Mid(nPos);
				
				strTemp = strLine.Left(nPos);
				nPos = strTemp.Find(_T(":"));
				if(nPos != -1)
				{
					nHour = atoi(strTemp.Mid(0, 2));
					//
					if(nHour < nPreHour || nHour >= 24)
					{
						bNextDay = TRUE;
						break;
					}
					//
					nHour = nHour % 24;					//有的文件竟然有27:30:00 这种格式
					nPreHour = nHour;
					nMin  = atoi(strTemp.Mid(3, 2));
					nSec  = 0;//atoi(strTemp.Mid(6, 2));//有的文件没有秒数的。
				}
				else
				{
					break;
				}
				strStartTime.Format("%02d:%02d", nHour, nMin);
				//
				while(strProgram.Left(1) == _T(" ") || strProgram.Left(1) == ch)
					strProgram = strProgram.Mid(1);
				
				//
				arrProgram.Add(strStartTime + _T("\n") + strProgram);
				continue;
			}
		}
		int nCount = arrProgram.GetSize();
		int nSub = 0;
		CTime tmCurProgram = CTime::GetCurrentTime();
		CTime tmNextProgram = CTime::GetCurrentTime();
		tm = CTime::GetCurrentTime();

		
		for(int i = 0; i < nCount; i++)
		{
			
			strTemp = arrProgram.GetAt(i);
			nPos = strTemp.Find(_T("\n"));
			strStartTime = strTemp.Left(nPos);
			strProgram = strTemp.Mid(nPos+1);
			
			strTemp = strStartTime;
			nPos = strTemp.Find(_T(":"));
			if(nPos != -1)
			{
				nHour = atoi(strTemp.Mid(0, 2));
				nMin  = atoi(strTemp.Mid(3, 2));
				nSec  = 0;//atoi(strTemp.Mid(6, 2));//有的文件没有秒数的
				
				tmNextProgram = CTime(tm.GetYear(), tm.GetMonth(), tm.GetDay(),
					nHour, nMin, nSec);
				if(tmNextProgram > tm)
				{
					//;
					EpgInfo ei;				
					ZeroMemory(&ei, sizeof(EpgInfo));
					tday.GetAsSystemTime(ei.startTime);
					ei.startTime.wHour = nHour;
					ei.startTime.wMinute = nMin;
					ei.startTime.wSecond = 0;
					lstrcpy(ei.szprogname, strProgram);
					vc->push_back(ei);
//					strNext.Format("下一节目: %02d:%02d %s", nHour, nMin, strProgram);
					
					//Cur Program
					strTemp = arrProgram.GetAt(i-1);
					nPos = strTemp.Find(_T("\n"));
					strStartTime = strTemp.Left(nPos);
					strProgram = strTemp.Mid(nPos+1);
					
					strTemp = strStartTime;
					nPos = strTemp.Find(_T(":"));
					if(nPos != -1)
					{
						nHour = atoi(strTemp.Mid(0, 2));
						nMin  = atoi(strTemp.Mid(3, 2));
						nSec  = 0;//atoi(strTemp.Mid(6, 2));//有的文件没有秒数的
						
						tmCurProgram = CTime(tm.GetYear(), tm.GetMonth(), tm.GetDay(),
							nHour, nHour, nSec);
					EpgInfo eii;				
					ZeroMemory(&eii, sizeof(EpgInfo));
					tday.GetAsSystemTime(eii.startTime);
					eii.startTime.wHour = nHour;
					eii.startTime.wMinute = nMin;
					eii.startTime.wSecond = 0;
					lstrcpy(eii.szprogname, strProgram);	
					vc->push_back(eii);
//						strCur.Format("正在播放: %02d:%02d %s", nHour, nMin, strProgram);
					}
					break;
				}
			}
		}

	}
	else	//找不到对应的文件
	{
//		strCur = _T("没有找到该频道所对应的EPG文件,请指定!");
//		strNext = _T("");
	}
	return TRUE;
}

⌨️ 快捷键说明

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