void CAutorun::ExecuteXBE(const CStdString &xbeFile) { #ifdef HAS_XBOX_HARDWARE int iRegion; if (g_guiSettings.GetBool("myprograms.gameautoregion")) { CXBE xbe; iRegion = xbe.ExtractGameRegion(xbeFile); if (iRegion < 1 || iRegion > 7) iRegion = 0; iRegion = xbe.FilterRegion(iRegion); } else iRegion = 0; #ifdef HAS_TRAINER CProgramDatabase database; database.Open(); DWORD dwTitleId = CUtil::GetXbeID(xbeFile); CStdString strTrainer = database.GetActiveTrainer(dwTitleId); if (strTrainer != "") { bool bContinue=false; if (CKaiClient::GetInstance()->IsEngineConnected()) { CGUIDialogYesNo* pDialog = (CGUIDialogYesNo*)m_gWindowManager.GetWindow(WINDOW_DIALOG_YES_NO); pDialog->SetHeading(714); pDialog->SetLine(0,"Use trainer or KAI?"); pDialog->SetLine(1, "Yes for trainer"); pDialog->SetLine(2, "No for KAI"); pDialog->DoModal(); if (pDialog->IsConfirmed()) { while (CKaiClient::GetInstance()->GetCurrentVector().size() > 1) CKaiClient::GetInstance()->ExitVector(); } else bContinue = true; } if (!bContinue) { CTrainer trainer; if (trainer.Load(strTrainer)) { database.GetTrainerOptions(strTrainer,dwTitleId,trainer.GetOptions(),trainer.GetNumberOfOptions()); CUtil::InstallTrainer(trainer); } } } database.Close(); #endif CUtil::RunXBE(xbeFile.c_str(), NULL,F_VIDEO(iRegion)); #endif }
bool CGUIWindowPrograms::OnPlayMedia(int iItem) { if ( iItem < 0 || iItem >= (int)m_vecItems->Size() ) return false; CFileItemPtr pItem = m_vecItems->Get(iItem); if (pItem->IsDVD()) return MEDIA_DETECT::CAutorun::PlayDisc(); if (pItem->m_bIsFolder) return false; // launch xbe... char szPath[1024]; char szParameters[1024]; m_database.IncTimesPlayed(pItem->GetPath()); int iRegion = m_iRegionSet?m_iRegionSet:GetRegion(iItem); DWORD dwTitleId = 0; if (!pItem->IsOnDVD()) dwTitleId = m_database.GetTitleId(pItem->GetPath()); if (!dwTitleId) dwTitleId = CUtil::GetXbeID(pItem->GetPath()); CStdString strTrainer = m_database.GetActiveTrainer(dwTitleId); if (strTrainer != "") { CTrainer trainer; if (trainer.Load(strTrainer)) { m_database.GetTrainerOptions(strTrainer,dwTitleId,trainer.GetOptions(),trainer.GetNumberOfOptions()); CUtil::InstallTrainer(trainer); } } m_database.Close(); memset(szParameters, 0, sizeof(szParameters)); strcpy(szPath, pItem->GetPath().c_str()); if (pItem->IsShortCut()) { CUtil::RunShortcut(pItem->GetPath().c_str()); return false; } if (strlen(szParameters)) CUtil::RunXBE(szPath, szParameters,F_VIDEO(iRegion)); else CUtil::RunXBE(szPath,NULL,F_VIDEO(iRegion)); return true; }
void CGUIWindowPrograms::PopulateTrainersList() { CDirectory directory; CFileItemList trainers; CFileItemList archives; CFileItemList inArchives; // first, remove any dead items std::vector<CStdString> vecTrainerPath; m_database.GetAllTrainers(vecTrainerPath); CGUIDialogProgress* m_dlgProgress = (CGUIDialogProgress*)g_windowManager.GetWindow(WINDOW_DIALOG_PROGRESS); m_dlgProgress->SetLine(0,12023); m_dlgProgress->SetLine(1,""); m_dlgProgress->SetLine(2,""); m_dlgProgress->StartModal(); m_dlgProgress->SetHeading(12012); m_dlgProgress->ShowProgressBar(true); m_dlgProgress->Progress(); bool bBreak=false; bool bDatabaseState = m_database.IsOpen(); if (!bDatabaseState) m_database.Open(); m_database.BeginTransaction(); for (unsigned int i=0;i<vecTrainerPath.size();++i) { m_dlgProgress->SetPercentage((int)((float)i/(float)vecTrainerPath.size()*100.f)); CStdString strLine; strLine.Format("%s %i / %i",g_localizeStrings.Get(12013).c_str(), i+1,vecTrainerPath.size()); m_dlgProgress->SetLine(1,strLine); m_dlgProgress->Progress(); if (!CFile::Exists(vecTrainerPath[i]) || vecTrainerPath[i].find(g_guiSettings.GetString("myprograms.trainerpath",false)) == -1) m_database.RemoveTrainer(vecTrainerPath[i]); if (m_dlgProgress->IsCanceled()) { bBreak = true; m_database.RollbackTransaction(); break; } } if (!bBreak) { CLog::Log(LOGDEBUG,"trainerpath %s",g_guiSettings.GetString("myprograms.trainerpath",false).c_str()); directory.GetDirectory(g_guiSettings.GetString("myprograms.trainerpath").c_str(),trainers,".xbtf|.etm"); if (g_guiSettings.GetString("myprograms.trainerpath",false).IsEmpty()) { m_database.RollbackTransaction(); m_dlgProgress->Close(); return; } directory.GetDirectory(g_guiSettings.GetString("myprograms.trainerpath").c_str(),archives,".rar|.zip",false); // TODO: ZIP SUPPORT for( int i=0;i<archives.Size();++i) { if (stricmp(URIUtils::GetExtension(archives[i]->GetPath()),".rar") == 0) { g_RarManager.GetFilesInRar(inArchives,archives[i]->GetPath(),false); CHDDirectory dir; dir.SetMask(".xbtf|.etm"); for (int j=0;j<inArchives.Size();++j) if (dir.IsAllowed(inArchives[j]->GetPath())) { CFileItemPtr item(new CFileItem(*inArchives[j])); CStdString strPathInArchive = item->GetPath(); CStdString path; URIUtils::CreateArchivePath(path, "rar", archives[i]->GetPath(), strPathInArchive,""); item->SetPath(path); trainers.Add(item); } } if (stricmp(URIUtils::GetExtension(archives[i]->GetPath()),".zip")==0) { // add trainers in zip CStdString strZipPath; URIUtils::CreateArchivePath(strZipPath,"zip",archives[i]->GetPath(),""); CFileItemList zipTrainers; directory.GetDirectory(strZipPath,zipTrainers,".etm|.xbtf"); for (int j=0;j<zipTrainers.Size();++j) { CFileItemPtr item(new CFileItem(*zipTrainers[j])); trainers.Add(item); } } } if (!m_dlgProgress) m_dlgProgress = (CGUIDialogProgress*)g_windowManager.GetWindow(WINDOW_DIALOG_PROGRESS); m_dlgProgress->SetPercentage(0); m_dlgProgress->ShowProgressBar(true); CLog::Log(LOGDEBUG,"# trainers %i",trainers.Size()); m_dlgProgress->SetLine(1,""); int j=0; while (j < trainers.Size()) { if (trainers[j]->m_bIsFolder) trainers.Remove(j); else j++; } for (int i=0;i<trainers.Size();++i) { CLog::Log(LOGDEBUG,"found trainer %s",trainers[i]->GetPath().c_str()); m_dlgProgress->SetPercentage((int)((float)(i)/trainers.Size()*100.f)); CStdString strLine; strLine.Format("%s %i / %i",g_localizeStrings.Get(12013).c_str(), i+1,trainers.Size()); m_dlgProgress->SetLine(0,strLine); m_dlgProgress->SetLine(2,""); m_dlgProgress->Progress(); if (m_database.HasTrainer(trainers[i]->GetPath())) // skip existing trainers continue; CTrainer trainer; if (trainer.Load(trainers[i]->GetPath())) { m_dlgProgress->SetLine(1,trainer.GetName()); m_dlgProgress->SetLine(2,""); m_dlgProgress->Progress(); unsigned int iTitle1, iTitle2, iTitle3; trainer.GetTitleIds(iTitle1,iTitle2,iTitle3); if (iTitle1) m_database.AddTrainer(iTitle1,trainers[i]->GetPath()); if (iTitle2) m_database.AddTrainer(iTitle2,trainers[i]->GetPath()); if (iTitle3) m_database.AddTrainer(iTitle3,trainers[i]->GetPath()); } if (m_dlgProgress->IsCanceled()) { m_database.RollbackTransaction(); break; } } } m_database.CommitTransaction(); m_dlgProgress->Close(); if (!bDatabaseState) m_database.Close(); else Update(m_vecItems->GetPath()); }