From 2572e2392899a4b3f1554012833f256d79a8843f Mon Sep 17 00:00:00 2001 From: WerWolv Date: Mon, 26 Feb 2024 21:48:56 +0100 Subject: [PATCH] impr: Add better error handling when loading projects --- plugins/builtin/source/content/events.cpp | 32 ++++++++++--------- plugins/builtin/source/content/recent.cpp | 4 ++- .../builtin/source/content/welcome_screen.cpp | 24 ++++++++------ 3 files changed, 35 insertions(+), 25 deletions(-) diff --git a/plugins/builtin/source/content/events.cpp b/plugins/builtin/source/content/events.cpp index a93479080..c10e05886 100644 --- a/plugins/builtin/source/content/events.cpp +++ b/plugins/builtin/source/content/events.cpp @@ -28,8 +28,9 @@ namespace hex::plugin::builtin { if (path.extension() == ".hexproj") { if (!ProjectFile::load(path)) { ui::ToastError::open(hex::format("hex.builtin.popup.error.project.load"_lang, wolv::util::toUTF8String(path))); + } else { + return; } - return; } auto provider = ImHexApi::Provider::createProvider("hex.builtin.provider.file", true); @@ -118,23 +119,24 @@ namespace hex::plugin::builtin { if (path.extension() == ".hexproj") { if (!ProjectFile::load(path)) { ui::ToastError::open(hex::format("hex.builtin.popup.error.project.load"_lang, wolv::util::toUTF8String(path))); - } - } else { - auto newProvider = static_cast( - ImHexApi::Provider::createProvider("hex.builtin.provider.file", true) - ); - - if (newProvider == nullptr) - return; - - newProvider->setPath(path); - if (!newProvider->open()) { - hex::ImHexApi::Provider::remove(newProvider); } else { - EventProviderOpened::post(newProvider); - AchievementManager::unlockAchievement("hex.builtin.achievement.starting_out", "hex.builtin.achievement.starting_out.open_file.name"); + return; } + } + auto newProvider = static_cast( + ImHexApi::Provider::createProvider("hex.builtin.provider.file", true) + ); + + if (newProvider == nullptr) + return; + + newProvider->setPath(path); + if (!newProvider->open()) { + hex::ImHexApi::Provider::remove(newProvider); + } else { + EventProviderOpened::post(newProvider); + AchievementManager::unlockAchievement("hex.builtin.achievement.starting_out", "hex.builtin.achievement.starting_out.open_file.name"); } }, {}, true); } else if (name == "Open Project") { diff --git a/plugins/builtin/source/content/recent.cpp b/plugins/builtin/source/content/recent.cpp index ca0b5d633..f534e8207 100644 --- a/plugins/builtin/source/content/recent.cpp +++ b/plugins/builtin/source/content/recent.cpp @@ -219,7 +219,9 @@ namespace hex::plugin::builtin::recent { void loadRecentEntry(const RecentEntry &recentEntry) { if (recentEntry.type == "project") { std::fs::path projectPath = recentEntry.data["path"].get(); - ProjectFile::load(projectPath); + if (!ProjectFile::load(projectPath)) { + ui::ToastError::open(hex::format("hex.builtin.popup.error.project.load"_lang, wolv::util::toUTF8String(projectPath))); + } return; } auto *provider = ImHexApi::Provider::createProvider(recentEntry.type, true); diff --git a/plugins/builtin/source/content/welcome_screen.cpp b/plugins/builtin/source/content/welcome_screen.cpp index 6f765e579..5ae33e5e9 100644 --- a/plugins/builtin/source/content/welcome_screen.cpp +++ b/plugins/builtin/source/content/welcome_screen.cpp @@ -1,5 +1,6 @@ #include -#include + +#include #include #include #include @@ -7,7 +8,11 @@ #include #include #include + #include +#include + +#include #include #include @@ -28,8 +33,6 @@ #include #include -#include -#include namespace hex::plugin::builtin { @@ -546,14 +549,17 @@ namespace hex::plugin::builtin { // Restore callback [crashFileData, backupFilePath, hasProject, hasBackupFile] { if (hasBackupFile) { - ProjectFile::load(backupFilePath); - if (hasProject) { - ProjectFile::setPath(crashFileData["project"].get()); + if (ProjectFile::load(backupFilePath)) { + if (hasProject) { + ProjectFile::setPath(crashFileData["project"].get()); + } else { + ProjectFile::setPath(""); + } + RequestUpdateWindowTitle::post(); } else { - ProjectFile::setPath(""); + ui::ToastError::open(hex::format("hex.builtin.popup.error.project.load"_lang, wolv::util::toUTF8String(backupFilePath))); } - RequestUpdateWindowTitle::post(); - }else{ + } else { if (hasProject) { ProjectFile::setPath(crashFileData["project"].get()); }