Handle error case for std::filesystem::space.

This commit is contained in:
Dario 2024-12-08 14:35:54 -03:00
parent 7dfeb8eca9
commit 26dbd7c697
2 changed files with 13 additions and 15 deletions

View file

@ -167,13 +167,13 @@ inline static std::unordered_map<std::string, std::unordered_map<ELanguage, std:
{ {
"Installer_Step_RequiredSpace", "Installer_Step_RequiredSpace",
{ {
{ ELanguage::English, "Required space:" } { ELanguage::English, "Required space: %2.2f GiB" }
} }
}, },
{ {
"Installer_Step_AvailableSpace", "Installer_Step_AvailableSpace",
{ {
{ ELanguage::English, "Available space:" } { ELanguage::English, "Available space: %2.2f GiB" }
} }
}, },
{ {

View file

@ -626,6 +626,8 @@ static void DrawDescriptionContainer()
DrawContainer(descriptionMin, descriptionMax, true); DrawContainer(descriptionMin, descriptionMax, true);
char descriptionText[512]; char descriptionText[512];
char requiredSpaceText[128];
char availableSpaceText[128];
strncpy(descriptionText, GetWizardText(g_currentPage).c_str(), sizeof(descriptionText) - 1); strncpy(descriptionText, GetWizardText(g_currentPage).c_str(), sizeof(descriptionText) - 1);
if (g_currentPage == WizardPage::CheckSpace) if (g_currentPage == WizardPage::CheckSpace)
@ -633,17 +635,9 @@ static void DrawDescriptionContainer()
constexpr double DivisorGiB = (1024.0 * 1024.0 * 1024.0); constexpr double DivisorGiB = (1024.0 * 1024.0 * 1024.0);
double requiredGiB = double(g_installerSources.totalSize) / DivisorGiB; double requiredGiB = double(g_installerSources.totalSize) / DivisorGiB;
double availableGiB = double(g_installerAvailableSize) / DivisorGiB; double availableGiB = double(g_installerAvailableSize) / DivisorGiB;
snprintf(requiredSpaceText, sizeof(requiredSpaceText), Localise("Installer_Step_RequiredSpace").c_str(), requiredGiB);
// TODO: the format for where the numbers are (%2.2f GiB) should be moved to the localised string. snprintf(availableSpaceText, sizeof(availableSpaceText), (g_installerAvailableSize > 0) ? Localise("Installer_Step_AvailableSpace").c_str() : "", availableGiB);
snprintf snprintf(descriptionText, sizeof(descriptionText), "%s%s\n%s", GetWizardText(g_currentPage).c_str(), requiredSpaceText, availableSpaceText);
(
descriptionText,
sizeof(descriptionText),
"%s%s %2.2f GiB\n%s %2.2f GiB",
GetWizardText(g_currentPage).c_str(),
Localise("Installer_Step_RequiredSpace").c_str(), requiredGiB,
Localise("Installer_Step_AvailableSpace").c_str(), availableGiB
);
} }
else if (g_currentPage == WizardPage::InstallSucceeded) else if (g_currentPage == WizardPage::InstallSucceeded)
{ {
@ -1109,8 +1103,12 @@ static void InstallerStart()
static bool InstallerParseSources() static bool InstallerParseSources()
{ {
std::filesystem::space_info spaceInfo = std::filesystem::space(g_installPath); std::error_code spaceErrorCode;
g_installerAvailableSize = spaceInfo.available; std::filesystem::space_info spaceInfo = std::filesystem::space(g_installPath, spaceErrorCode);
if (!spaceErrorCode)
{
g_installerAvailableSize = spaceInfo.available;
}
Installer::Input installerInput; Installer::Input installerInput;
installerInput.gameSource = g_gameSourcePath; installerInput.gameSource = g_gameSourcePath;