static int FilterExt( const ParamEvent& e, Receiver* rv ) { int ret = 0; if( rv->ignoreExt || rv->neededExt ) { DWORD hash = e.unicode ? CalcExtHash(e.fileNameW) : CalcExtHash(e.fileNameA); if( rv->ignoreExt ) if( IsExt( hash, rv->ignoreExt ) ) ret = 1; //файл имеет расширение из-за которого он игнорируется if( rv->neededExt ) if( IsExt( hash, rv->neededExt ) ) ret = 2; //файл имеет расширение из-за которого файл передается пользовательскому обработчику } return ret; }
static void DelModules( void ) { lib_cmd *cmd; char buff[ MAX_IMPORT_STRING ]; for( cmd = CmdList; cmd != NULL; cmd = cmd->next ) { if( !( cmd->ops & OP_DELETE ) ) continue; strcpy( buff, cmd->name ); DefaultExtension( buff, EXT_OBJ ); if( IsExt( buff, EXT_LIB ) ) { ProcessLibOrObj( buff, OBJ_SKIP, DelOneObject ); cmd->ops |= OP_DELETED; } if( !( cmd->ops & OP_DELETED ) && !( cmd->ops & OP_ADD ) ) { Warning( ERR_CANT_DELETE, cmd->name ); } else if( ( cmd->ops & OP_DELETED ) && !( cmd->ops & OP_ADD ) && Options.ar && Options.verbose ) { Message( "-d %s", cmd->name ); } } }
void CCheckRecFile::FindTsFileList(wstring findFolder, map<LONGLONG, TS_FILE_INFO>* findList) { wstring searchKey = findFolder; searchKey += L"\\*.ts"; WIN32_FIND_DATA findData; HANDLE find; //指定フォルダのファイル一覧取得 find = FindFirstFile( searchKey.c_str(), &findData); if ( find == INVALID_HANDLE_VALUE ) { return ; } do { if ((findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0) { // ディレクトリは対象外 continue; } if (IsExt(findData.cFileName, L".ts") != TRUE) { // 拡張子 TS でなければ対象外 continue; } TS_FILE_INFO item; Format(item.filePath, L"%s\\%s", findFolder.c_str(), findData.cFileName); transform(item.filePath.begin(), item.filePath.end(), item.filePath.begin(), toupper); item.fileTime = ((LONGLONG)(findData.ftCreationTime.dwHighDateTime))<<32 | findData.ftCreationTime.dwLowDateTime; item.fileSize = ((LONGLONG)(findData.nFileSizeHigh))<<32 | findData.nFileSizeLow; findList->insert(pair<LONGLONG, TS_FILE_INFO>(item.fileTime, item)); } while(FindNextFile(find, &findData)); FindClose(find); }
//チューナー一覧の読み込みを行う //戻り値: // 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; }
UINT WINAPI CEpgDBManager::LoadThread(LPVOID param) { CEpgDBManager* sys = (CEpgDBManager*)param; OutputDebugString(L"Start Load EpgData\r\n"); DWORD time = GetTickCount(); CEpgDataCap3Util epgUtil; if( epgUtil.Initialize(FALSE) == FALSE ){ OutputDebugString(L"★EpgDataCap3.dllの初期化に失敗しました。\r\n"); return 0; } //EPGファイルの検索 vector<wstring> epgFileList; wstring epgDataPath = L""; GetSettingPath(epgDataPath); epgDataPath += EPG_SAVE_FOLDER; wstring searchKey = epgDataPath; searchKey += L"\\*_epg.dat"; WIN32_FIND_DATA findData; HANDLE find; //指定フォルダのファイル一覧取得 find = FindFirstFile( searchKey.c_str(), &findData); if ( find == INVALID_HANDLE_VALUE ) { //1つも存在しない epgUtil.UnInitialize(); return 0; } do{ if( (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0 ){ //本当に拡張子DLL? if( IsExt(findData.cFileName, L".dat" ) == TRUE ){ //見つかったファイルを一覧に追加 wstring epgFilePath = L""; Format(epgFilePath, L"%s\\%s", epgDataPath.c_str(), findData.cFileName); epgFileList.push_back(epgFilePath); } } }while(FindNextFile(find, &findData)); FindClose(find); //EPGファイルの解析 for( size_t i=0; i<epgFileList.size(); i++ ){ HANDLE file = _CreateFile( epgFileList[i].c_str(), GENERIC_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); if( file != INVALID_HANDLE_VALUE ){ FILETIME CreationTime; FILETIME LastAccessTime; FILETIME LastWriteTime; GetFileTime(file, &CreationTime, &LastAccessTime, &LastWriteTime); LONGLONG fileTime = ((LONGLONG)LastWriteTime.dwHighDateTime)<<32 | (LONGLONG)LastWriteTime.dwLowDateTime; if( fileTime + 7*24*60*60*I64_1SEC < GetNowI64Time() ){ //1週間以上前のファイルなので削除 CloseHandle(file); DeleteFile( epgFileList[i].c_str() ); _OutputDebugString(L"★delete %s", epgFileList[i].c_str()); }else{ DWORD fileSize = GetFileSize( file, NULL ); BYTE readBuff[188*1024]; DWORD readSize = 0; while( readSize < fileSize ){ if( ::WaitForSingleObject(sys->loadStopEvent, 0) != WAIT_TIMEOUT ){ //キャンセルされた CloseHandle(file); epgUtil.UnInitialize(); return 0; } DWORD read=0; ReadFile( file, &readBuff, 188*1024, &read, NULL ); for( DWORD i=0; i<read; i+=188 ){ epgUtil.AddTSPacket(readBuff+i, 188); } readSize+=read; Sleep(0); } CloseHandle(file); } } Sleep(0); } //EPGデータを取得 DWORD serviceListSize = 0; SERVICE_INFO* serviceList = NULL; if( epgUtil.GetServiceListEpgDB(&serviceListSize, &serviceList) == FALSE ){ epgUtil.UnInitialize(); return 0; } for( DWORD i=0; i<serviceListSize; i++ ){ LONGLONG key = _Create64Key(serviceList[i].original_network_id, serviceList[i].transport_stream_id, serviceList[i].service_id); EPGDB_SERVICE_DATA* item = new EPGDB_SERVICE_DATA; item->serviceInfo.ONID = serviceList[i].original_network_id; item->serviceInfo.TSID = serviceList[i].transport_stream_id; item->serviceInfo.SID = serviceList[i].service_id; if( serviceList[i].extInfo != NULL ){ item->serviceInfo.service_type = serviceList[i].extInfo->service_type; item->serviceInfo.partialReceptionFlag = serviceList[i].extInfo->partialReceptionFlag; if( serviceList[i].extInfo->service_provider_name != NULL ){ item->serviceInfo.service_provider_name = serviceList[i].extInfo->service_provider_name; } if( serviceList[i].extInfo->service_name != NULL ){ item->serviceInfo.service_name = serviceList[i].extInfo->service_name; } if( serviceList[i].extInfo->network_name != NULL ){ item->serviceInfo.network_name = serviceList[i].extInfo->network_name; } if( serviceList[i].extInfo->ts_name != NULL ){ item->serviceInfo.ts_name = serviceList[i].extInfo->ts_name; } item->serviceInfo.remote_control_key_id = serviceList[i].extInfo->remote_control_key_id; } sys->epgMap.insert(pair<LONGLONG, EPGDB_SERVICE_DATA*>(key, item)); DWORD epgInfoListSize = 0; EPG_EVENT_INFO* epgInfoList = NULL; if( epgUtil.GetEpgInfoList(item->serviceInfo.ONID, item->serviceInfo.TSID, item->serviceInfo.SID, &epgInfoListSize, &epgInfoList) == TRUE ){ for( DWORD j=0; j<epgInfoListSize; j++ ){ EPGDB_EVENT_INFO* itemEvent = new EPGDB_EVENT_INFO; sys->ConvertEpgInfo(item->serviceInfo.ONID, item->serviceInfo.TSID, item->serviceInfo.SID, epgInfoList+j, itemEvent); item->eventMap.insert(pair<WORD, EPGDB_EVENT_INFO*>(itemEvent->event_id, itemEvent)); } } Sleep(0); } _OutputDebugString(L"End Load EpgData %dmsec\r\n", GetTickCount()-time); epgUtil.UnInitialize(); return 0; }