//チューナー一覧の読み込みを行う //戻り値: // TRUE(成功)、FALSE(失敗) BOOL CTunerManager::ReloadTuner() { map<DWORD, TUNER_INFO*>::iterator itr; for( itr = this->tunerMap.begin(); itr != this->tunerMap.end(); itr++ ){ SAFE_DELETE(itr->second); } this->tunerMap.clear(); wstring path = L""; GetSettingPath(path); wstring srvIniPath = L""; GetEpgTimerSrvIniPath(srvIniPath); wstring searchKey = path; searchKey += L"\\*.ChSet4.txt"; WIN32_FIND_DATA findData; HANDLE find; //指定フォルダのファイル一覧取得 find = FindFirstFile( searchKey.c_str(), &findData); if ( find == INVALID_HANDLE_VALUE ) { return FALSE; } do{ if( (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0 ){ //本当に拡張子DLL? if( IsExt(findData.cFileName, L".txt") == TRUE ){ wstring chSetPath = L""; Format(chSetPath, L"%s\\%s", path.c_str(), findData.cFileName); wstring bonFileName = L""; wstring buff = findData.cFileName; FindBonFileName(buff, bonFileName); bonFileName += L".dll"; WORD count = (WORD)GetPrivateProfileInt(bonFileName.c_str(), L"Count", 0, srvIniPath.c_str()); if( count != 0 ){ //カウント0以上のものだけ利用 WORD priority = (WORD)GetPrivateProfileInt(bonFileName.c_str(), L"Priority", 0, srvIniPath.c_str()); BOOL epgCapFlag = (BOOL)GetPrivateProfileInt(bonFileName.c_str(), L"GetEpg", 1, srvIniPath.c_str()); WORD EPGcount = (WORD)GetPrivateProfileInt(bonFileName.c_str(), L"EPGCount", -1, srvIniPath.c_str()); if(EPGcount<0) EPGcount = count; for( WORD i=1; i<=count; i++ ){ TUNER_INFO* item = new TUNER_INFO; item->bonID = priority; item->tunerID = i; if(EPGcount<i){ // EPGCountを超えていたらEPG取得に使用しない item->epgCapFlag = 0; } else { item->epgCapFlag = epgCapFlag; } item->bonFileName = bonFileName; item->chUtil.ParseText(chSetPath.c_str()); item->chSet4FilePath = chSetPath; DWORD key = ((DWORD)item->bonID)<<16 | item->tunerID; this->tunerMap.insert(pair<DWORD, TUNER_INFO*>(key, item)); } } } } }while(FindNextFile(find, &findData)); FindClose(find); return TRUE; }
//チューナー一覧の読み込みを行う //戻り値: // TRUE(成功)、FALSE(失敗) BOOL CTunerManager::ReloadTuner() { this->tunerMap.clear(); wstring path = L""; GetSettingPath(path); wstring srvIniPath = L""; GetModuleIniPath(srvIniPath); wstring searchKey = path; searchKey += L"\\*.ChSet4.txt"; WIN32_FIND_DATA findData; HANDLE find; //指定フォルダのファイル一覧取得 find = FindFirstFile( searchKey.c_str(), &findData); if ( find == INVALID_HANDLE_VALUE ) { return FALSE; } do{ if( (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0 ){ wstring bonFileName; if( FindBonFileName(findData.cFileName, bonFileName) != FALSE ){ wstring chSetPath = L""; Format(chSetPath, L"%s\\%s", path.c_str(), findData.cFileName); bonFileName += L".dll"; WORD count = (WORD)GetPrivateProfileInt(bonFileName.c_str(), L"Count", 0, srvIniPath.c_str()); if( count != 0 ){ //カウント0以上のものだけ利用 WORD priority = (WORD)GetPrivateProfileInt(bonFileName.c_str(), L"Priority", 0, srvIniPath.c_str()); BOOL epgCapFlag = (BOOL)GetPrivateProfileInt(bonFileName.c_str(), L"GetEpg", 1, srvIniPath.c_str()); WORD EPGcount = (WORD)GetPrivateProfileInt(bonFileName.c_str(), L"EPGCount", count, srvIniPath.c_str()); if(EPGcount==0) EPGcount = count; if( this->tunerMap.find((DWORD)priority<<16 | 1) != this->tunerMap.end() ){ OutputDebugString(L"CTunerManager::ReloadTuner(): Duplicate bonID\r\n"); count = 0; } for( WORD i=1; i<=count; i++ ){ TUNER_INFO item; item.epgCapMaxOfThisBon = min(epgCapFlag == FALSE ? 0 : EPGcount, count); item.bonFileName = bonFileName; item.chSet4FilePath = chSetPath; CParseChText4 chUtil; chUtil.ParseText(chSetPath.c_str()); map<DWORD, CH_DATA4>::const_iterator itr; for( itr = chUtil.GetMap().begin(); itr != chUtil.GetMap().end(); itr++ ){ item.chList.push_back(itr->second); } this->tunerMap.insert(pair<DWORD, TUNER_INFO>((DWORD)priority<<16 | i, item)); } } } } }while(FindNextFile(find, &findData)); FindClose(find); return TRUE; }