From fdd7cea6420ae1921844f7d255c67689f7dd3f89 Mon Sep 17 00:00:00 2001 From: LossRain Date: Sat, 16 May 2026 18:46:47 +0200 Subject: [PATCH] Client: Prevent crashes when opening Settings if the User folder is not present in a location As a consequence of #52, SettingsDialog might look for user data in places it might not be present, particularly the "." folder. Previously this threw a std::filesystem::error that crashed the client. This commit replaces this behaviour with error writes to std::cerr. --- Puyolib/AssetBundle.cpp | 46 +++++++++++++++++++++++++++++++---------- 1 file changed, 35 insertions(+), 11 deletions(-) diff --git a/Puyolib/AssetBundle.cpp b/Puyolib/AssetBundle.cpp index 3e90604d..6ec7e31c 100644 --- a/Puyolib/AssetBundle.cpp +++ b/Puyolib/AssetBundle.cpp @@ -178,8 +178,14 @@ void FolderAssetBundle::reload() std::list FolderAssetBundle::listPuyoSkins() { std::list new_list; - for (auto folder : std::filesystem::directory_iterator(m_translator->token2fn("%base%/") + kFolderUserPuyo)) { - new_list.push_back((folder.path().stem()).string()); + try { + for (auto folder : std::filesystem::directory_iterator(m_translator->token2fn("%base%/") + kFolderUserPuyo)) { + new_list.push_back((folder.path().stem()).string()); + } + } + catch (std::filesystem::filesystem_error& e) { + // Illegal path, fail silent + std::cerr << "Failed to locate bundles in " << m_translator->token2fn("%base%/") + kFolderUserPuyo< FolderAssetBundle::listPuyoSkins() std::list FolderAssetBundle::listBackgrounds() { std::list new_list; - for (auto folder : std::filesystem::directory_iterator(m_translator->token2fn("%base%/") + kFolderUserBackgrounds)) { - if (folder.is_directory()) { - new_list.push_back((folder.path().filename()).string()); + try { + for (auto folder : std::filesystem::directory_iterator(m_translator->token2fn("%base%/") + kFolderUserBackgrounds)) { + if (folder.is_directory()) { + new_list.push_back((folder.path().filename()).string()); + } } } + catch (std::filesystem::filesystem_error& e) { + // Illegal path, fail silent + std::cerr << "Failed to locate bundles in " << m_translator->token2fn("%base%/") + kFolderUserBackgrounds< FolderAssetBundle::listSfx() { std::list new_list; - for (auto folder : std::filesystem::directory_iterator(m_translator->token2fn("%base%/") + kFolderUserSounds)) { - if (folder.is_directory()) { - new_list.push_back((folder.path().filename()).string()); + try { + for (auto folder : std::filesystem::directory_iterator(m_translator->token2fn("%base%/") + kFolderUserSounds)) { + if (folder.is_directory()) { + new_list.push_back((folder.path().filename()).string()); + } } } + catch (std::filesystem::filesystem_error& e) { + // Illegal path, fail silent + std::cerr << "Failed to locate bundles in " << m_translator->token2fn("%base%/") + kFolderUserSounds< FolderAssetBundle::listCharacterSkins() { std::list new_list; - for (auto folder : std::filesystem::directory_iterator(m_translator->token2fn("%base%/") + kFolderUserCharacter)) { - if (folder.is_directory()) { - new_list.push_back((folder.path().filename()).string()); + try { + for (auto folder : std::filesystem::directory_iterator(m_translator->token2fn("%base%/") + kFolderUserCharacter)) { + if (folder.is_directory()) { + new_list.push_back((folder.path().filename()).string()); + } } } + catch (std::filesystem::filesystem_error& e) { + // Illegal path, fail silent + std::cerr << "Failed to locate bundles in " << m_translator->token2fn("%base%/") + kFolderUserCharacter<