Game List: Fix allowance of caches/games to be removed while the game is running!

This commit is contained in:
Eladash 2023-07-23 15:20:36 +03:00 committed by Elad Ashkenazi
parent 3033914e2d
commit afdfefc9ad
2 changed files with 47 additions and 1 deletions

View file

@ -1010,7 +1010,12 @@ void game_list_frame::ShowContextMenu(const QPoint &pos)
// Make Actions // Make Actions
QMenu menu; QMenu menu;
const bool is_current_running_game = (Emu.IsRunning() || Emu.IsPaused()) && current_game.serial == Emu.GetTitleID(); static const auto is_game_running = [](const std::string& serial)
{
return Emu.GetStatus(false) != system_state::stopped && serial == Emu.GetTitleID();
};
const bool is_current_running_game = is_game_running(current_game.serial);
QAction* boot = new QAction(gameinfo->hasCustomConfig QAction* boot = new QAction(gameinfo->hasCustomConfig
? (is_current_running_game ? (is_current_running_game
@ -1119,6 +1124,7 @@ void game_list_frame::ShowContextMenu(const QPoint &pos)
menu.addSeparator(); menu.addSeparator();
QMenu* remove_menu = menu.addMenu(tr("&Remove")); QMenu* remove_menu = menu.addMenu(tr("&Remove"));
QAction* remove_game = remove_menu->addAction(tr("&Remove %1").arg(gameinfo->localized_category)); QAction* remove_game = remove_menu->addAction(tr("&Remove %1").arg(gameinfo->localized_category));
remove_game->setEnabled(!is_current_running_game);
if (gameinfo->hasCustomConfig) if (gameinfo->hasCustomConfig)
{ {
QAction* remove_custom_config = remove_menu->addAction(tr("&Remove Custom Configuration")); QAction* remove_custom_config = remove_menu->addAction(tr("&Remove Custom Configuration"));
@ -1148,16 +1154,19 @@ void game_list_frame::ShowContextMenu(const QPoint &pos)
{ {
remove_menu->addSeparator(); remove_menu->addSeparator();
QAction* remove_shaders_cache = remove_menu->addAction(tr("&Remove Shaders Cache")); QAction* remove_shaders_cache = remove_menu->addAction(tr("&Remove Shaders Cache"));
remove_shaders_cache->setEnabled(!is_current_running_game);
connect(remove_shaders_cache, &QAction::triggered, [this, cache_base_dir]() connect(remove_shaders_cache, &QAction::triggered, [this, cache_base_dir]()
{ {
RemoveShadersCache(cache_base_dir, true); RemoveShadersCache(cache_base_dir, true);
}); });
QAction* remove_ppu_cache = remove_menu->addAction(tr("&Remove PPU Cache")); QAction* remove_ppu_cache = remove_menu->addAction(tr("&Remove PPU Cache"));
remove_ppu_cache->setEnabled(!is_current_running_game);
connect(remove_ppu_cache, &QAction::triggered, [this, cache_base_dir]() connect(remove_ppu_cache, &QAction::triggered, [this, cache_base_dir]()
{ {
RemovePPUCache(cache_base_dir, true); RemovePPUCache(cache_base_dir, true);
}); });
QAction* remove_spu_cache = remove_menu->addAction(tr("&Remove SPU Cache")); QAction* remove_spu_cache = remove_menu->addAction(tr("&Remove SPU Cache"));
remove_spu_cache->setEnabled(!is_current_running_game);
connect(remove_spu_cache, &QAction::triggered, [this, cache_base_dir]() connect(remove_spu_cache, &QAction::triggered, [this, cache_base_dir]()
{ {
RemoveSPUCache(cache_base_dir, true); RemoveSPUCache(cache_base_dir, true);
@ -1179,6 +1188,7 @@ void game_list_frame::ShowContextMenu(const QPoint &pos)
if (has_hdd1_cache) if (has_hdd1_cache)
{ {
QAction* remove_hdd1_cache = remove_menu->addAction(tr("&Remove HDD1 Cache")); QAction* remove_hdd1_cache = remove_menu->addAction(tr("&Remove HDD1 Cache"));
remove_hdd1_cache->setEnabled(!is_current_running_game);
connect(remove_hdd1_cache, &QAction::triggered, [this, hdd1, serial = current_game.serial]() connect(remove_hdd1_cache, &QAction::triggered, [this, hdd1, serial = current_game.serial]()
{ {
RemoveHDD1Cache(hdd1, serial, true); RemoveHDD1Cache(hdd1, serial, true);
@ -1188,8 +1198,12 @@ void game_list_frame::ShowContextMenu(const QPoint &pos)
if (has_cache_dir || has_hdd1_cache) if (has_cache_dir || has_hdd1_cache)
{ {
QAction* remove_all_caches = remove_menu->addAction(tr("&Remove All Caches")); QAction* remove_all_caches = remove_menu->addAction(tr("&Remove All Caches"));
remove_all_caches->setEnabled(!is_current_running_game);
connect(remove_all_caches, &QAction::triggered, [this, current_game, cache_base_dir, hdd1]() connect(remove_all_caches, &QAction::triggered, [this, current_game, cache_base_dir, hdd1]()
{ {
if (is_game_running(current_game.serial))
return;
if (QMessageBox::question(this, tr("Confirm Removal"), tr("Remove all caches?")) != QMessageBox::Yes) if (QMessageBox::question(this, tr("Confirm Removal"), tr("Remove all caches?")) != QMessageBox::Yes)
return; return;
@ -1435,6 +1449,12 @@ void game_list_frame::ShowContextMenu(const QPoint &pos)
return; return;
} }
if (is_game_running(current_game.serial))
{
QMessageBox::critical(this, tr("Cannot Remove Game"), tr("The PS3 application is still running, it cannot be removed!"));
return;
}
QString size_information; QString size_information;
if (current_game.size_on_disk != umax) if (current_game.size_on_disk != umax)
@ -1976,6 +1996,11 @@ void game_list_frame::BatchCreatePPUCaches()
void game_list_frame::BatchRemovePPUCaches() void game_list_frame::BatchRemovePPUCaches()
{ {
if (Emu.GetStatus(false) != system_state::stopped)
{
return;
}
std::set<std::string> serials; std::set<std::string> serials;
for (const auto& game : m_game_data) for (const auto& game : m_game_data)
{ {
@ -2017,6 +2042,11 @@ void game_list_frame::BatchRemovePPUCaches()
void game_list_frame::BatchRemoveSPUCaches() void game_list_frame::BatchRemoveSPUCaches()
{ {
if (Emu.GetStatus(false) != system_state::stopped)
{
return;
}
std::set<std::string> serials; std::set<std::string> serials;
for (const auto& game : m_game_data) for (const auto& game : m_game_data)
{ {
@ -2148,6 +2178,11 @@ void game_list_frame::BatchRemoveCustomPadConfigurations()
void game_list_frame::BatchRemoveShaderCaches() void game_list_frame::BatchRemoveShaderCaches()
{ {
if (Emu.GetStatus(false) != system_state::stopped)
{
return;
}
std::set<std::string> serials; std::set<std::string> serials;
for (const auto& game : m_game_data) for (const auto& game : m_game_data)
{ {

View file

@ -1909,6 +1909,12 @@ void main_window::OnEmuStop()
m_thumb_restart->setEnabled(true); m_thumb_restart->setEnabled(true);
#endif #endif
} }
ui->batchRemovePPUCachesAct->setEnabled(true);
ui->batchRemoveSPUCachesAct->setEnabled(true);
ui->batchRemoveShaderCachesAct->setEnabled(true);
ui->removeDiskCacheAct->setEnabled(true);
ui->actionManage_Users->setEnabled(true); ui->actionManage_Users->setEnabled(true);
ui->confCamerasAct->setEnabled(true); ui->confCamerasAct->setEnabled(true);
@ -1951,6 +1957,11 @@ void main_window::OnEmuReady() const
ui->actionManage_Users->setEnabled(false); ui->actionManage_Users->setEnabled(false);
ui->confCamerasAct->setEnabled(false); ui->confCamerasAct->setEnabled(false);
ui->batchRemovePPUCachesAct->setEnabled(false);
ui->batchRemoveSPUCachesAct->setEnabled(false);
ui->batchRemoveShaderCachesAct->setEnabled(false);
ui->removeDiskCacheAct->setEnabled(false);
} }
void main_window::EnableMenus(bool enabled) const void main_window::EnableMenus(bool enabled) const