📄 epgdeal.cpp
字号:
if(strlen(pChan->tvFName) == 0)
return TRUE;
s.Format("select * from tv where RegCode = %d and tvFName = \"%s\"",
0, pChan->tvFName);
lRet = DealDbLocate(s);
if(lRet == 0) //没有找到,并文件加入到库存中
{
Chancel ch;
memcpy(&ch, pChan, sizeof(Chancel));
ch.RegCode = 0;
ch.m_nNum = -1;
if(!DealDbAddChancel(&ch))
{
return FALSE;
}
bRept = FALSE;
goto again;
}
if(lRet ==1 )
{
VARIANT var;
m_pRecordset->MoveFirst();
var = m_pRecordset->GetCollect("tvNum");
pChan->m_nEpgNum = var.iVal;
}
else
pChan->m_nEpgNum = 0;
bRept = FALSE;
goto again;
}
//搜索电台名称对应的库存的信息,要填上对应的名称或是对应内部的号
}
else
return FALSE;
}catch(_com_error e)
{
AfxMessageBox(e.ErrorMessage());
}
}
return TRUE;
}
BOOL CEpgDeal::DealDbLocateChancel(LPChancel pChan)
{
if(bOpenRecord)
m_pRecordset->Close();
CString s;
HRESULT hr;
s.Format("SELECT * FROM tv where tvName = \"%s\"", pChan->szName);
hr = m_pRecordset->Open(_variant_t(s.LockBuffer()),
_variant_t((IDispatch*)m_pConnection,true),
adOpenStatic,adLockOptimistic,adCmdText);
if(FAILED(hr))
{
bOpenRecord = FALSE;
return FALSE;
}
bOpenRecord = TRUE;
return TRUE;
}
long CEpgDeal::DealDbLocate(CString s)
{
long lret=0;
try
{
if(bOpenRecord)
m_pRecordset->Close();
HRESULT hr;
hr = m_pRecordset->Open(_variant_t(s.LockBuffer()),
_variant_t((IDispatch*)m_pConnection,true),
adOpenStatic,adLockOptimistic,adCmdText);
if(FAILED(hr))
{
bOpenRecord = FALSE;
return FALSE;
}
bOpenRecord = TRUE;
lret = m_pRecordset->GetRecordCount();
}catch(_com_error e)
{
AfxMessageBox(e.ErrorMessage());
}
return lret;
}
BOOL CEpgDeal::DealDbDelete(CString s)
{
try
{
if(bOpenRecord)
m_pRecordset->Close();
HRESULT hr;
hr = m_pRecordset->Open(_variant_t(s.LockBuffer()),
_variant_t((IDispatch*)m_pConnection,true),
adOpenStatic,adLockOptimistic,adCmdText);
bOpenRecord = FALSE;
if(FAILED(hr))
{
return FALSE;
}
}catch(_com_error e)
{
AfxMessageBox(e.ErrorMessage());
}
return TRUE;
}
BOOL CEpgDeal::DealDbAddEpg(LPEpgInfo pEpg)
{
if(DealDbOpenEpg())
{
try{
//判断是否已经有数据了
CString s, s1;
COleDateTime oleDate(pEpg->startTime);
_variant_t vtFld;
vtFld.vt = VT_DATE;
vtFld.date = oleDate;
LONG lRet;
s1 = oleDate.Format("%d/%m/%Y %H:%M:%S");
s.Format("select * from epginf where tvnum =%d and datediff(\"n\", tvStartT, #%s#)=0 and datediff(\"h\", tvStartT, #%s#)=0 and datediff(\"d\", tvStartT, #%s#)=0 and datediff(\"m\", tvStartT, #%s#)=0 and datediff(\"y\", tvStartT, #%s#)=0",
pEpg->m_nNum, s1.LockBuffer(), s1.LockBuffer(), s1.LockBuffer(), s1.LockBuffer()
,s1.LockBuffer());
lRet = DealDbLocate(s);
if(lRet > 0)
return FALSE;
m_pRecordset->AddNew();
m_pRecordset->PutCollect("tvProgName", _variant_t(pEpg->szprogname));
m_pRecordset->PutCollect("tvnum", (long)pEpg->m_nNum);
m_pRecordset->PutCollect("tvStartT", vtFld);
m_pRecordset->Update();
}
catch(_com_error e)
{
AfxMessageBox(e.ErrorMessage());
return FALSE;
}
}
return TRUE;
}
BOOL CEpgDeal::DealDbDelEpg(LPEpgInfo pEpg)
{
if(DealDbOpenEpg())
{
try{
LONG l = m_pRecordset->GetRecordCount();
if(!pEpg)
{
return FALSE;
}
else
{
if(l>0)
{
if(!m_pRecordset->BOF)
m_pRecordset->MoveFirst();
while(!m_pRecordset->adoEOF)
{
m_pRecordset->Delete(adAffectCurrent);
m_pRecordset->MoveNext();
}
l = m_pRecordset->GetRecordCount();
}
}
}catch(_com_error e)
{
AfxMessageBox(e.ErrorMessage());
return FALSE;
}
}
return TRUE;
}
BOOL CEpgDeal::DealDbEditEpg(LPEpgInfo pEpg)
{
if(DealDbOpenEpg())
{
//查找到Epg信息
}
return FALSE;
}
BOOL CEpgDeal::DealBuildEpgFromFile(int num, CString strFile)
{
DWORD dwRet = 0;
if(bdownloading)
return FALSE;
CString s;
CString strPrev, strNext, strCur;
EpgInfo m_epg;
if(!strFile.IsEmpty())
{
strFile = "\\节目单\\"+strFile;
strFile = m_initParam.szZipPath + strFile;
CStdioFile file;
if(!file.Open(strFile, CFile::modeRead))
{
return TRUE;
}
CTime tm = CTime::GetCurrentTime();
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;
CString strW = "星期";
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;
if(!strW.IsEmpty())
{
if(strLine.Find(strW) != -1)
{
nYear = tm.GetYear();
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;
}
strProgram = strLine.Mid(nPos);
strTemp = strLine.Left(nPos);
nPos = strTemp.Find(_T(":"));
if(nPos != -1)
{
nHour = atoi(strTemp.Mid(0, 2));
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);
TRACE("%s %s, %s", strDate, strStartTime, strProgram);
COleDateTime time1(nYear,nMon,nDay, nHour,nMin,0);
ZeroMemory(&m_epg, sizeof(EpgInfo));
time1.GetAsSystemTime(m_epg.startTime);
strcpy(m_epg.szprogname, strProgram);
m_epg.m_nNum = num;
if(DealDbAddEpg(&m_epg)== FALSE);
}
}
}
}
else //找不到对应的文件
{
}
return TRUE;
}
BOOL CEpgDeal::DealBuildEpg()
{
CString s;
int num;
CUIntArray arNum;
CStringArray arFname;
LONG lRet;
s.Format("select * from tv where tvSel = TRUE");
lRet = DealDbLocate(s);
VARIANT var;
int i;
try
{
if(lRet>0)
m_pRecordset->MoveFirst();
for(i= 0; i< lRet; i++)
{
var = m_pRecordset->GetCollect("tvNum");
arNum.Add(var.intVal);
var = m_pRecordset->GetCollect("tvFName");
arFname.Add(var.bstrVal);
m_pRecordset->MoveNext();
}
}
catch(_com_error e)
{
AfxMessageBox(e.ErrorMessage());
return FALSE;
}
for(i = 0;i< lRet; i++)
{
num = arNum[i];
s = arFname[i];
DealBuildEpgFromFile(num, s);
}
return TRUE;
}
BOOL CEpgDeal::DealLocateTodayEpg(LPChancel pChan)
{
CString s, s1;
LONG lRet;
ReleaseListEpg();
if(!DealDbCheckHasEpg(pChan))
return FALSE;
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;
lRet = DealDbLocate(s);
try{
if(lRet > 0)
m_pRecordset->MoveFirst();
else
return FALSE;
AllocListEpg(lRet);
for(int i= 0;i < lRet; i++)
{
DealDbGetCurEpgRecrod();
m_pRecordset->MoveNext();
}
}catch(_com_error e)
{
AfxMessageBox(e.ErrorMessage());
return FALSE;
}
return TRUE;
}
BOOL CEpgDeal::DealLocateCur5Epg(LPChancel pChan)
{
CString s, s1;
LONG lRet;
int nNum = 3;
ReleaseListEpg();
AllocListEpg(nNum);
CTime t = CTime::GetCurrentTime();
s1 = t.Format("%m/%d/%Y %H:%M:%S");
//判断当天有无Epg信息,无则加入到数据库中
if(!DealDbCheckHasEpg(pChan))
return FALSE;
//取当前的第一个,看有无相等的
s.Format("select * from epginf where tvnum =%d and datediff(\"n\", tvStartT, #%s#)=0 and datediff(\"d\", tvStartT, #%s#)=0 order by tvStartT"
, pChan->m_nEpgNum, s1.LockBuffer(), s1.LockBuffer());
lRet = DealDbLocate(s);
if(lRet == 0)
{
//取比当前时间稍早的一个
s.Format("select * from epginf where tvnum =%d and datediff(\"n\", tvStartT, #%s#)>0 and datediff(\"d\", tvStartT, #%s#)=0 order by tvStartT"
, pChan->m_nEpgNum, s1.LockBuffer(), s1.LockBuffer());
lRet = DealDbLocate(s);
}
if(lRet > 0)
{
m_pRecordset->MoveLast();
DealDbGetCurEpgRecrod();
nNum -= 1;
}
//取后面的几个
s.Format("select top %d * from epginf where tvnum =%d and datediff(\"n\", tvStartT, #%s#)<0 and datediff(\"d\", tvStartT, #%s#)=0 order by tvStartT"
, nNum , pChan->m_nEpgNum, s1.LockBuffer(), s1.LockBuffer());
lRet = DealDbLocate(s);
COleDateTime oleTime;
if(lRet > 0)
m_pRecordset->MoveFirst();
for(int i= 0;i < lRet; i++)
{
DealDbGetCurEpgRecrod();
m_pRecordset->MoveNext();
}
nNum -= lRet;
if(0 < nNum)
{
CTimeSpan tt(1, 0,0,0);
t += tt;
s1 = t.Format("%m/%d/%Y");
s1 += " 0:0:0";
s.Format("select top %d * from epginf where tvnum =%d and datediff(\"n\", tvStartT, #%s#)<0 and datediff(\"d\", tvStartT, #%s#)=0 order by tvStartT"
, nNum , pChan->m_nEpgNum, s1.LockBuffer(), s1.LockBuffer());
lRet = DealDbLocate(s);
if(lRet > 0)
m_pRecordset->MoveFirst();
for(int i= 0;i < lRet; i++)
{
DealDbGetCurEpgRecrod();
m_pRecordset->MoveNext();
}
}
return TRUE;
}
BOOL CEpgDeal::DealDbGetCurEpgRecrod()
{
VARIANT var;
COleDateTime oletime;
CString s, s1;
var = m_pRecordset->GetCollect("tvProgName");
s = var.bstrVal;
strcpy(m_listEpg[m_nEpg].szprogname, s.LockBuffer());
var = m_pRecordset->GetCollect("tvStartT");
oletime = var.date;
oletime.GetAsSystemTime(m_listEpg[m_nEpg].startTime);
m_nEpg ++;
s1 = oletime.Format("%Y-%m-%d %H:%M:%S");
s += s1;
TRACE("%s", s);
return TRUE;
}
BOOL CEpgDeal::DealDbGetCurChanRecrod()
{
VARIANT var;
CString s, s1;
try
{
var = m_pRecordset->GetCollect("tvName");
if(var.vt != VT_NULL)
{
s = var.bstrVal;
if(!s.IsEmpty())
strcpy(m_listChan[m_nChan].szName, s.LockBuffer());
}
var = m_pRecordset->GetCollect("tvFName");
if(var.vt != VT_NULL)
{
s = var.bstrVal;
if(!s.IsEmpty())
strcpy(m_listChan[m_nChan].tvFName, s.LockBuffer());
}
var = m_pRecordset->GetCollect("tvFrq");
m_listChan[m_nChan].lfrequent = var.lVal;
var = m_pRecordset->GetCollect("tvNum");
m_listChan[m_nChan].m_nEpgNum = var.iVal;
var = m_pRecordset->GetCollect("nNum");
m_listChan[m_nChan].m_nNum = var.iVal;
var = m_pRecordset->GetCollect("RegCode");
m_listChan[m_nChan].RegCode = var.iVal;
var = m_pRecordset->GetCollect("tvSel");
m_listChan[m_nChan].tvSel = var.bVal;
var = m_pRecordset->GetCollect("tvFav");
m_listChan[m_nChan].tvFav = var.bVal;
}catch(_com_error e)
{
AfxMessageBox(e.ErrorMessage());
return FALSE;
}
s1.Format(" %d", m_listChan[m_nChan].lfrequent);
s += s1;
m_nChan ++;
TRACE("%s", s);
return TRUE;
}
BOOL CEpgDeal::CheckCurChan()
{
CString s,s1;
LONG lRet;
CTime t = CTime::GetCurrentTime();
s1 = t.Format("%d/%m/%Y");
s.Format("select * from tv where RegCode = %d ",
1);
lRet = DealDbLocate(s);
if(lRet > 0)
return FALSE;
DealCopyAsCur(1, 0);
return TRUE;
}
BOOL CEpgDeal::CheckDownLoad()
{
CString s,s1;
LONG lRet;
CTime t = CTime::GetCurrentTime();
s1 = t.Format("%d/%m/%Y");
s.Format("select * from epginf where datediff(\"d\", tvStartT, #%s#)=0 ",
s1.LockBuffer());
lRet = DealDbLocate(s);
if(lRet > 10)
return FALSE;
DownLoadEpg();
return TRUE;
}
UINT DownloadThread(void *pArg)
{
CEpgDeal *pWnd = (CEpgDeal*)pArg;
CString strInfo;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -