main: Connect game list remove signals to removal functions
This commit is contained in:
		
							parent
							
								
									de6b852dc2
								
							
						
					
					
						commit
						85e1facfe6
					
				@ -847,6 +847,9 @@ void GMainWindow::ConnectWidgetEvents() {
 | 
				
			|||||||
    connect(game_list, &GameList::OpenFolderRequested, this, &GMainWindow::OnGameListOpenFolder);
 | 
					    connect(game_list, &GameList::OpenFolderRequested, this, &GMainWindow::OnGameListOpenFolder);
 | 
				
			||||||
    connect(game_list, &GameList::OpenTransferableShaderCacheRequested, this,
 | 
					    connect(game_list, &GameList::OpenTransferableShaderCacheRequested, this,
 | 
				
			||||||
            &GMainWindow::OnTransferableShaderCacheOpenFile);
 | 
					            &GMainWindow::OnTransferableShaderCacheOpenFile);
 | 
				
			||||||
 | 
					    connect(game_list, &GameList::RemoveInstalledEntryRequested, this,
 | 
				
			||||||
 | 
					            &GMainWindow::OnGameListRemoveInstalledEntry);
 | 
				
			||||||
 | 
					    connect(game_list, &GameList::RemoveFileRequested, this, &GMainWindow::OnGameListRemoveFile);
 | 
				
			||||||
    connect(game_list, &GameList::DumpRomFSRequested, this, &GMainWindow::OnGameListDumpRomFS);
 | 
					    connect(game_list, &GameList::DumpRomFSRequested, this, &GMainWindow::OnGameListDumpRomFS);
 | 
				
			||||||
    connect(game_list, &GameList::CopyTIDRequested, this, &GMainWindow::OnGameListCopyTID);
 | 
					    connect(game_list, &GameList::CopyTIDRequested, this, &GMainWindow::OnGameListCopyTID);
 | 
				
			||||||
    connect(game_list, &GameList::NavigateToGamedbEntryRequested, this,
 | 
					    connect(game_list, &GameList::NavigateToGamedbEntryRequested, this,
 | 
				
			||||||
@ -1322,14 +1325,12 @@ void GMainWindow::OnGameListOpenFolder(GameListOpenTarget target, const std::str
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void GMainWindow::OnTransferableShaderCacheOpenFile(u64 program_id) {
 | 
					void GMainWindow::OnTransferableShaderCacheOpenFile(u64 program_id) {
 | 
				
			||||||
    ASSERT(program_id != 0);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    const QString shader_dir =
 | 
					    const QString shader_dir =
 | 
				
			||||||
        QString::fromStdString(FileUtil::GetUserPath(FileUtil::UserPath::ShaderDir));
 | 
					        QString::fromStdString(FileUtil::GetUserPath(FileUtil::UserPath::ShaderDir));
 | 
				
			||||||
    const QString tranferable_shader_cache_folder_path =
 | 
					    const QString transferable_shader_cache_folder_path =
 | 
				
			||||||
        shader_dir + QStringLiteral("opengl") + QDir::separator() + QStringLiteral("transferable");
 | 
					        shader_dir + QStringLiteral("opengl") + QDir::separator() + QStringLiteral("transferable");
 | 
				
			||||||
    const QString transferable_shader_cache_file_path =
 | 
					    const QString transferable_shader_cache_file_path =
 | 
				
			||||||
        tranferable_shader_cache_folder_path + QDir::separator() +
 | 
					        transferable_shader_cache_folder_path + QDir::separator() +
 | 
				
			||||||
        QString::fromStdString(fmt::format("{:016X}.bin", program_id));
 | 
					        QString::fromStdString(fmt::format("{:016X}.bin", program_id));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!QFile::exists(transferable_shader_cache_file_path)) {
 | 
					    if (!QFile::exists(transferable_shader_cache_file_path)) {
 | 
				
			||||||
@ -1350,7 +1351,7 @@ void GMainWindow::OnTransferableShaderCacheOpenFile(u64 program_id) {
 | 
				
			|||||||
    param << QDir::toNativeSeparators(transferable_shader_cache_file_path);
 | 
					    param << QDir::toNativeSeparators(transferable_shader_cache_file_path);
 | 
				
			||||||
    QProcess::startDetached(explorer, param);
 | 
					    QProcess::startDetached(explorer, param);
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
    QDesktopServices::openUrl(QUrl::fromLocalFile(tranferable_shader_cache_folder_path));
 | 
					    QDesktopServices::openUrl(QUrl::fromLocalFile(transferable_shader_cache_folder_path));
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1394,6 +1395,163 @@ static bool RomFSRawCopy(QProgressDialog& dialog, const FileSys::VirtualDir& src
 | 
				
			|||||||
    return true;
 | 
					    return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void GMainWindow::OnGameListRemoveInstalledEntry(u64 program_id, InstalledEntryType type) {
 | 
				
			||||||
 | 
					    QString entry_type;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    switch (type) {
 | 
				
			||||||
 | 
					    case InstalledEntryType::Game:
 | 
				
			||||||
 | 
					        entry_type = tr("Contents");
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					    case InstalledEntryType::Update:
 | 
				
			||||||
 | 
					        entry_type = tr("Update");
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					    case InstalledEntryType::AddOnContent:
 | 
				
			||||||
 | 
					        entry_type = tr("DLC");
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (QMessageBox::question(
 | 
				
			||||||
 | 
					            this, tr("Remove Entry"), tr("Remove Installed Game %1?").arg(entry_type),
 | 
				
			||||||
 | 
					            QMessageBox::Yes | QMessageBox::No, QMessageBox::No) != QMessageBox::Yes) {
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    bool res;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    switch (type) {
 | 
				
			||||||
 | 
					    case InstalledEntryType::Game:
 | 
				
			||||||
 | 
					        res = Core::System::GetInstance()
 | 
				
			||||||
 | 
					                  .GetFileSystemController()
 | 
				
			||||||
 | 
					                  .GetUserNANDContents()
 | 
				
			||||||
 | 
					                  ->RemoveExistingEntry(program_id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (res) {
 | 
				
			||||||
 | 
					            QMessageBox::information(this, tr("Successfully Removed"),
 | 
				
			||||||
 | 
					                                     tr("Successfully removed the installed base game."));
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            QMessageBox::warning(
 | 
				
			||||||
 | 
					                this, tr("Error Removing %1").arg(entry_type),
 | 
				
			||||||
 | 
					                tr("The base game is not installed in the NAND and cannot be removed."));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        [[fallthrough]];
 | 
				
			||||||
 | 
					    case InstalledEntryType::Update:
 | 
				
			||||||
 | 
					        res = Core::System::GetInstance()
 | 
				
			||||||
 | 
					                  .GetFileSystemController()
 | 
				
			||||||
 | 
					                  .GetUserNANDContents()
 | 
				
			||||||
 | 
					                  ->RemoveExistingEntry(program_id | 0x800);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (res) {
 | 
				
			||||||
 | 
					            QMessageBox::information(this, tr("Successfully Removed"),
 | 
				
			||||||
 | 
					                                     tr("Successfully removed the installed update."));
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            QMessageBox::warning(this, tr("Error Removing %1").arg(entry_type),
 | 
				
			||||||
 | 
					                                 tr("There is no update installed for this title."));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (type == InstalledEntryType::Game) {
 | 
				
			||||||
 | 
					            [[fallthrough]];
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    case InstalledEntryType::AddOnContent:
 | 
				
			||||||
 | 
					        u32 count{};
 | 
				
			||||||
 | 
					        const auto dlc_entries = Core::System::GetInstance().GetContentProvider().ListEntriesFilter(
 | 
				
			||||||
 | 
					            FileSys::TitleType::AOC, FileSys::ContentRecordType::Data);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        for (const auto& entry : dlc_entries) {
 | 
				
			||||||
 | 
					            if ((entry.title_id & DLC_BASE_TITLE_ID_MASK) == program_id) {
 | 
				
			||||||
 | 
					                res = Core::System::GetInstance()
 | 
				
			||||||
 | 
					                          .GetFileSystemController()
 | 
				
			||||||
 | 
					                          .GetUserNANDContents()
 | 
				
			||||||
 | 
					                          ->RemoveExistingEntry(entry.title_id);
 | 
				
			||||||
 | 
					                if (res) {
 | 
				
			||||||
 | 
					                    ++count;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (count == 0) {
 | 
				
			||||||
 | 
					            QMessageBox::warning(this, tr("Error Removing %1").arg(entry_type),
 | 
				
			||||||
 | 
					                                 tr("There are no DLC installed for this title."));
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        QMessageBox::information(this, tr("Successfully Removed"),
 | 
				
			||||||
 | 
					                                 tr("Successfully removed %1 installed DLC.").arg(count));
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    game_list->PopulateAsync(UISettings::values.game_dirs);
 | 
				
			||||||
 | 
					    FileUtil::DeleteDirRecursively(FileUtil::GetUserPath(FileUtil::UserPath::CacheDir) + DIR_SEP +
 | 
				
			||||||
 | 
					                                   "game_list");
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void GMainWindow::OnGameListRemoveFile(u64 program_id, GameListRemoveTarget target) {
 | 
				
			||||||
 | 
					    QString question;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    switch (target) {
 | 
				
			||||||
 | 
					    case GameListRemoveTarget::ShaderCache:
 | 
				
			||||||
 | 
					        question = tr("Delete Transferable Shader Cache?");
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					    case GameListRemoveTarget::CustomConfiguration:
 | 
				
			||||||
 | 
					        question = tr("Remove Custom Game Configuration?");
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (QMessageBox::question(this, tr("Remove File"), question, QMessageBox::Yes | QMessageBox::No,
 | 
				
			||||||
 | 
					                              QMessageBox::No) != QMessageBox::Yes) {
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    switch (target) {
 | 
				
			||||||
 | 
					    case GameListRemoveTarget::ShaderCache: {
 | 
				
			||||||
 | 
					        const QString shader_dir =
 | 
				
			||||||
 | 
					            QString::fromStdString(FileUtil::GetUserPath(FileUtil::UserPath::ShaderDir));
 | 
				
			||||||
 | 
					        const QString transferable_shader_cache_folder_path =
 | 
				
			||||||
 | 
					            shader_dir + QStringLiteral("opengl") + QDir::separator() +
 | 
				
			||||||
 | 
					            QStringLiteral("transferable");
 | 
				
			||||||
 | 
					        const QString transferable_shader_cache_file_path =
 | 
				
			||||||
 | 
					            transferable_shader_cache_folder_path + QDir::separator() +
 | 
				
			||||||
 | 
					            QString::fromStdString(fmt::format("{:016X}.bin", program_id));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!QFile::exists(transferable_shader_cache_file_path)) {
 | 
				
			||||||
 | 
					            QMessageBox::warning(this, tr("Error Removing Transferable Shader Cache"),
 | 
				
			||||||
 | 
					                                 tr("A shader cache for this title does not exist."));
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (QFile::remove(transferable_shader_cache_file_path)) {
 | 
				
			||||||
 | 
					            QMessageBox::information(this, tr("Successfully Removed"),
 | 
				
			||||||
 | 
					                                     tr("Successfully removed the transferable shader cache."));
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            QMessageBox::warning(this, tr("Error Removing Transferable Shader Cache"),
 | 
				
			||||||
 | 
					                                 tr("Failed to remove the transferable shader cache."));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    case GameListRemoveTarget::CustomConfiguration: {
 | 
				
			||||||
 | 
					        const QString config_dir =
 | 
				
			||||||
 | 
					            QString::fromStdString(FileUtil::GetUserPath(FileUtil::UserPath::ConfigDir));
 | 
				
			||||||
 | 
					        const QString custom_config_file_path =
 | 
				
			||||||
 | 
					            config_dir + QString::fromStdString(fmt::format("{:016X}.ini", program_id));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!QFile::exists(custom_config_file_path)) {
 | 
				
			||||||
 | 
					            QMessageBox::warning(this, tr("Error Removing Custom Configuration"),
 | 
				
			||||||
 | 
					                                 tr("A custom configuration for this title does not exist."));
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (QFile::remove(custom_config_file_path)) {
 | 
				
			||||||
 | 
					            QMessageBox::information(this, tr("Successfully Removed"),
 | 
				
			||||||
 | 
					                                     tr("Successfully removed the custom game configuration."));
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            QMessageBox::warning(this, tr("Error Removing Custom Configuration"),
 | 
				
			||||||
 | 
					                                 tr("Failed to remove the custom game configuration."));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void GMainWindow::OnGameListDumpRomFS(u64 program_id, const std::string& game_path) {
 | 
					void GMainWindow::OnGameListDumpRomFS(u64 program_id, const std::string& game_path) {
 | 
				
			||||||
    const auto failed = [this] {
 | 
					    const auto failed = [this] {
 | 
				
			||||||
        QMessageBox::warning(this, tr("RomFS Extraction Failed!"),
 | 
					        QMessageBox::warning(this, tr("RomFS Extraction Failed!"),
 | 
				
			||||||
 | 
				
			|||||||
@ -32,6 +32,8 @@ class QPushButton;
 | 
				
			|||||||
class QProgressDialog;
 | 
					class QProgressDialog;
 | 
				
			||||||
class WaitTreeWidget;
 | 
					class WaitTreeWidget;
 | 
				
			||||||
enum class GameListOpenTarget;
 | 
					enum class GameListOpenTarget;
 | 
				
			||||||
 | 
					enum class GameListRemoveTarget;
 | 
				
			||||||
 | 
					enum class InstalledEntryType;
 | 
				
			||||||
class GameListPlaceholder;
 | 
					class GameListPlaceholder;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace Core::Frontend {
 | 
					namespace Core::Frontend {
 | 
				
			||||||
@ -198,6 +200,8 @@ private slots:
 | 
				
			|||||||
    void OnGameListLoadFile(QString game_path);
 | 
					    void OnGameListLoadFile(QString game_path);
 | 
				
			||||||
    void OnGameListOpenFolder(GameListOpenTarget target, const std::string& game_path);
 | 
					    void OnGameListOpenFolder(GameListOpenTarget target, const std::string& game_path);
 | 
				
			||||||
    void OnTransferableShaderCacheOpenFile(u64 program_id);
 | 
					    void OnTransferableShaderCacheOpenFile(u64 program_id);
 | 
				
			||||||
 | 
					    void OnGameListRemoveInstalledEntry(u64 program_id, InstalledEntryType type);
 | 
				
			||||||
 | 
					    void OnGameListRemoveFile(u64 program_id, GameListRemoveTarget target);
 | 
				
			||||||
    void OnGameListDumpRomFS(u64 program_id, const std::string& game_path);
 | 
					    void OnGameListDumpRomFS(u64 program_id, const std::string& game_path);
 | 
				
			||||||
    void OnGameListCopyTID(u64 program_id);
 | 
					    void OnGameListCopyTID(u64 program_id);
 | 
				
			||||||
    void OnGameListNavigateToGamedbEntry(u64 program_id,
 | 
					    void OnGameListNavigateToGamedbEntry(u64 program_id,
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user