📄 epgdeal.cpp
字号:
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 + -