void CCreateNewDatabase::CollectInformation(std::string& folder) { HANDLE hFile; WIN32_FIND_DATA FileInformation; std::string firstFile; folder = SallyAPI::String::PathHelper::CorrectPath(folder); firstFile.append(folder); firstFile.append("*"); hFile = FindFirstFile(firstFile.c_str(), &FileInformation); if(hFile != INVALID_HANDLE_VALUE) { do { if ((strcmp(FileInformation.cFileName, ".") != NULL) && (strcmp(FileInformation.cFileName, "..") != NULL)) { std::string filename; filename.append(folder); filename.append(FileInformation.cFileName); if (FileInformation.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { CollectInformation(filename); } else if (SallyAPI::String::StringHelper::StringEndsWith(filename, ".jpg") || SallyAPI::String::StringHelper::StringEndsWith(filename, ".bmp") || SallyAPI::String::StringHelper::StringEndsWith(filename, ".png") || SallyAPI::String::StringHelper::StringEndsWith(filename, ".jpeg")) { m_iFileCount++; } } } while ((FindNextFile(hFile, &FileInformation) == TRUE) && (m_bPleaseStop == false)); } FindClose(hFile); return; }
/////////////////////////////////////////////////////////////////////////////// // OnInitDialog BOOL CCrashReportDlg::OnInitDialog() { CDialog::OnInitDialog(); // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // get our path name - we assume that crashed exe is in same directory TCHAR appPath[_MAX_PATH]; appPath[0]=0; ::GetModuleFileName(NULL, appPath, _MAX_PATH); TCHAR *cp = _tcsrchr(appPath, _T('\\')); if (cp != NULL) { cp++; *cp = 0; } TCHAR crashedAppicationPath[MAX_PATH]; _sntprintf(crashedAppicationPath, MAX_PATH, _T("%s%s"), appPath, CRASHREPORT_APPEXENAME); //=== Initialize the gui with the Crashed Title / icon InitializeDisplay(CRASHREPORT_APPTITLE, crashedAppicationPath); //=== Create the native report m_debugInfo += CollectInformation(crashedAppicationPath); //=== Application Monitor Data #ifdef USE_APPLICATIONMONITOR TCHAR bf[MAX_PATH]; GetModuleFileName(NULL, bf, MAX_PATH); LPTSTR pos = _tcsrchr(bf, '\\'); pos[1] = 0; _tcscat(bf, CRASHREPORT_APPEXENAME); pos = _tcsrchr(bf, '.'); pos[1] = 0; _tcscat(bf, _T("ini")); IniAppSettings settings; settings.Load(bf); std::basic_string<TCHAR> stateString; if (settings.Read(CRASHREPORT_INIMONITORSECTION, CRASHREPORT_INIMONITORVALUE, stateString, _T(""))) { AppMonitor appMon; if (appMon.Load(stateString.c_str())) { const AppMonitor::State& state = appMon.GetState(); m_appID = state.AppUniqueID; CString line; line.Format(_T("AppUniqueID: %u\r\n"), state.AppUniqueID); m_debugInfo += line; line.Format(_T("IsAfterCrashStatus: %d\r\n"), appMon.IsAfterCrash()); m_debugInfo += line; line.Format(_T("Statistics: %d/%d - %d/%d\r\n"), state.Crashes, state.Runs, state.TotalCrashes, state.TotalRuns ); m_debugInfo += line; } } #endif //=== Add the rest of the files to the report INT fileNum = 0; LPCTSTR files[] = CRASHREPORT_FILES; while (files[fileNum] != 0) { TCHAR bf[MAX_PATH]; _sntprintf(bf, MAX_PATH, _T("%s%s"), appPath, files[fileNum]); CStringA fileContents; if (ReadFileContents(bf, fileContents)) { m_debugInfo += _T("\r\n@==="); m_debugInfo += files[fileNum]; m_debugInfo += _T("\r\n"); m_debugInfo += CA2CT(fileContents); } fileNum++; } LoadHandCursor(); SetTimer(1, 80, NULL); return TRUE; // return TRUE unless you set the focus to a control }
void CCreateNewDatabase::RunEx() { //SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_LOWEST); // reset values m_strQueryCreateItem = ""; m_iCreateItem = 0; m_strQueryUpdateItem = ""; m_iUpdateItem = 0; m_strQueryNoUpdateItem = ""; m_iNoUpdateItem = 0; // calculate last run time // Scheduler SallyAPI::Scheduler::CSchedulerManager* schedulerManager = SallyAPI::Scheduler::CSchedulerManager::GetInstance(); SYSTEMTIME lastRun = schedulerManager->GetLastSchedulerRun(m_pWindow, "dbcreator"); //Convert both to FILETIMEs m_ftLastRun.dwHighDateTime = 0; m_ftLastRun.dwLowDateTime = 0; SystemTimeToFileTime(&lastRun, &m_ftLastRun); m_strCreateDate = SallyAPI::Date::DateHelper::GetCurrentDateString(false); // set the database version m_pWindow->SetPropertyInt("databaseVersion", 4); std::string mediaDB = m_strMediaDirectory; mediaDB.append("media.db"); bool bFileExists = SallyAPI::File::FileHelper::FileExistsAndNotEmpty(mediaDB); SallyAPI::Database::CDatabaseConnection* dbconn = SallyAPI::Database::CDatabaseConnection::Open(mediaDB); dbconn->LockDatabase(); if (bFileExists == false) { // Create std::string queryCreate; queryCreate.append("CREATE TABLE media ( \ Filename TEXT UNIQUE, \ Album TEXT, \ Artist TEXT, \ Band TEXT, \ Title TEXT, \ Year TEXT, \ Genre TEXT, \ Track TEXT, \ Type varchar(1) NOT NULL, \ DeleteFlag INTEGER, \ Rating INTEGER, \ PlayTime INTEGER, \ Cover INTEGER, \ DBAddDate varchar(19) NOT NULL, \ FileCreateDate varchar(19) NOT NULL, \ LastPlayDate varchar(19) NOT NULL, \ AlbumArtist TEXT, \ Field1 TEXT, \ Field2 TEXT, \ PRIMARY KEY (Filename));"); try { SallyAPI::Database::CStatement* stmtCreate = dbconn->CreateStatement(); stmtCreate->Execute(queryCreate.c_str()); } catch (SallyAPI::Database::CSQLException* e) { SallyAPI::System::CLogger* logger = SallyAPI::Core::CGame::GetLogger(); logger->Error(e->GetMessage()); } } dbconn->ReleaseDatabase(); // Set Delete Flag std::string querySetDelete = "UPDATE media SET DeleteFlag = 1;"; dbconn->LockDatabase(); try { SallyAPI::Database::CStatement* stmtSetDelete = dbconn->CreateStatement(); stmtSetDelete->Execute(querySetDelete.c_str()); } catch (SallyAPI::Database::CSQLException* e) { SallyAPI::System::CLogger* logger = SallyAPI::Core::CGame::GetLogger(); logger->Error(e->GetMessage()); } dbconn->ReleaseDatabase(); std::vector<std::string>::iterator iter; // Collect Information for (iter = m_vFolders.begin(); iter != m_vFolders.end(); iter++) { std::string folder = *iter; CollectInformation(folder); if (m_bPleaseStop) { SallyAPI::Database::CDatabaseConnection::Close(mediaDB); return; } } m_pProcessbar->SetMaxPosition(m_iFileCount); // Create Database for (iter = m_vFolders.begin(); iter != m_vFolders.end(); iter++) { std::string folder = *iter; AddFolder(dbconn, folder, mediaDB); if (m_bPleaseStop) { SallyAPI::Database::CDatabaseConnection::Close(mediaDB); return; } } // execute rest of the create item statements ExecuteCreateItem(dbconn); ExecuteUpdateItem(dbconn); ExecuteNoUpdateItem(dbconn); // Set Delete Flag std::string queryDelete; queryDelete.append("DELETE FROM media WHERE DeleteFlag = 1;"); dbconn->LockDatabase(); try { SallyAPI::Database::CStatement* stmtDelete = dbconn->CreateStatement(); stmtDelete->Execute(queryDelete.c_str()); } catch (SallyAPI::Database::CSQLException* e) { SallyAPI::System::CLogger* logger = SallyAPI::Core::CGame::GetLogger(); logger->Error(e->GetMessage()); } dbconn->ReleaseDatabase(); SallyAPI::Database::CDatabaseConnection::Close(mediaDB); m_pWindow->SendMessageToParent(0, 0, m_iMessageId); }