From 7ad669a9115dfaf3271487269d8d8bcdf2c51e03 Mon Sep 17 00:00:00 2001 From: LittleWhite Date: Thu, 7 Jan 2016 18:36:10 +0100 Subject: [PATCH] Display errors in GUI when loading ROM failed --- src/citra_qt/main.cpp | 27 ++++++++++++++++++++++++++- src/core/loader/loader.cpp | 5 +++-- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/citra_qt/main.cpp b/src/citra_qt/main.cpp index da9ea6c913..d2ba3f9dbc 100644 --- a/src/citra_qt/main.cpp +++ b/src/citra_qt/main.cpp @@ -259,9 +259,34 @@ void GMainWindow::BootGame(const std::string& filename) { System::Init(render_window); // Load the game - if (Loader::ResultStatus::Success != Loader::LoadFile(filename)) { + Loader::ResultStatus result = Loader::LoadFile(filename); + if (Loader::ResultStatus::Success != result) { LOG_CRITICAL(Frontend, "Failed to load ROM!"); System::Shutdown(); + + switch (result) { + case Loader::ResultStatus::ErrorEncrypted: { + // Build the MessageBox ourselves to have clickable link + QMessageBox popup_error; + popup_error.setTextFormat(Qt::RichText); + popup_error.setWindowTitle(tr("Error while loading ROM !")); + popup_error.setText(tr("The ROM is probably encrypted !

" + "Please check: https://github.com/citra-emu/citra/wiki/Dumping-Game-Cartridges")); + popup_error.setIcon(QMessageBox::Critical); + popup_error.exec(); + break; + } + case Loader::ResultStatus::ErrorInvalidFormat: + QMessageBox::critical(this, tr("Error while loading ROM !"), + tr("The ROM format is not supported.")); + break; + case Loader::ResultStatus::Error: + + default: + QMessageBox::critical(this, tr("Error while loading ROM !"), + tr("Unknown error !")); + break; + } return; } diff --git a/src/core/loader/loader.cpp b/src/core/loader/loader.cpp index 6b88169e1d..99f1183cac 100644 --- a/src/core/loader/loader.cpp +++ b/src/core/loader/loader.cpp @@ -137,11 +137,12 @@ ResultStatus LoadFile(const std::string& filename) { AppLoader_NCCH app_loader(std::move(file), filename); // Load application and RomFS - if (ResultStatus::Success == app_loader.Load()) { + ResultStatus result = app_loader.Load(); + if (ResultStatus::Success == result) { Service::FS::RegisterArchiveType(Common::make_unique(app_loader), Service::FS::ArchiveIdCode::RomFS); return ResultStatus::Success; } - break; + return result; } // CIA file format...