Fixed culture-specific decimal separator problem

Replaced all direct double.TryParse calls with new StringUtilities.TryParseDouble helper method to ensure consistent, culture-invariant parsing of numeric values
This commit is contained in:
jp64k
2026-01-24 16:44:36 +01:00
committed by Maxine
parent d8cc5dc539
commit f91ee27c35
2 changed files with 16 additions and 8 deletions

View File

@@ -2321,7 +2321,7 @@ namespace AndroidSideloader
string packagename = release[SideloaderRCLONE.PackageNameIndex]; string packagename = release[SideloaderRCLONE.PackageNameIndex];
// Parse popularity score from column 6 // Parse popularity score from column 6
if (release.Length > 6 && double.TryParse(release[6], out double score)) if (release.Length > 6 && StringUtilities.TryParseDouble(release[6], out double score))
{ {
// Track the highest score per package // Track the highest score per package
if (popularityScores.TryGetValue(packagename, out var existing)) if (popularityScores.TryGetValue(packagename, out var existing))
@@ -2387,7 +2387,7 @@ namespace AndroidSideloader
// Check if this is a 0 MB entry that should be excluded // Check if this is a 0 MB entry that should be excluded
bool shouldSkip = false; bool shouldSkip = false;
if (release.Length > 5 && double.TryParse(release[5], out double sizeInMB)) if (release.Length > 5 && StringUtilities.TryParseDouble(release[6], out double sizeInMB))
{ {
// If size is 0 MB and this is not already an MR-Fix version // If size is 0 MB and this is not already an MR-Fix version
if (sizeInMB == 0 && gameName.IndexOf("(MR-Fix)", StringComparison.OrdinalIgnoreCase) < 0) if (sizeInMB == 0 && gameName.IndexOf("(MR-Fix)", StringComparison.OrdinalIgnoreCase) < 0)
@@ -2470,7 +2470,7 @@ namespace AndroidSideloader
item.SubItems[4].Text = item.SubItems[4].Text.Replace(" UTC", ""); item.SubItems[4].Text = item.SubItems[4].Text.Replace(" UTC", "");
// Convert size to GB or MB // Convert size to GB or MB
if (double.TryParse(item.SubItems[5].Text, out double itemSizeInMB)) if (StringUtilities.TryParseDouble(item.SubItems[5].Text, out double itemSizeInMB))
{ {
if (itemSizeInMB >= 1024) if (itemSizeInMB >= 1024)
{ {
@@ -3443,7 +3443,7 @@ If the problem persists, visit our Telegram (https://t.me/VRPirates) or Discord
{ {
double sizeMB = 0; double sizeMB = 0;
if (gameData.Length > 5) if (gameData.Length > 5)
double.TryParse(gameData[5], out sizeMB); StringUtilities.TryParseDouble(gameData[5], out sizeMB);
_queueEffectiveSizes[releaseName] = sizeMB; _queueEffectiveSizes[releaseName] = sizeMB;
_effectiveQueueSizeMB += sizeMB; _effectiveQueueSizeMB += sizeMB;
_totalQueueSizeMB += sizeMB; _totalQueueSizeMB += sizeMB;
@@ -3483,7 +3483,7 @@ If the problem persists, visit our Telegram (https://t.me/VRPirates) or Discord
if (gameData.Length > SideloaderRCLONE.ReleaseNameIndex && if (gameData.Length > SideloaderRCLONE.ReleaseNameIndex &&
gameData[SideloaderRCLONE.ReleaseNameIndex].Equals(queuedGame, StringComparison.OrdinalIgnoreCase)) gameData[SideloaderRCLONE.ReleaseNameIndex].Equals(queuedGame, StringComparison.OrdinalIgnoreCase))
{ {
if (gameData.Length > 5 && double.TryParse(gameData[5], out double sizeMB)) if (gameData.Length > 5 && StringUtilities.TryParseDouble(gameData[5], out double sizeMB))
maxQueuedGameSizeMB = Math.Max(maxQueuedGameSizeMB, sizeMB); maxQueuedGameSizeMB = Math.Max(maxQueuedGameSizeMB, sizeMB);
break; break;
} }
@@ -3510,7 +3510,7 @@ If the problem persists, visit our Telegram (https://t.me/VRPirates) or Discord
gameData[SideloaderRCLONE.ReleaseNameIndex].Equals(releaseName, StringComparison.OrdinalIgnoreCase)) gameData[SideloaderRCLONE.ReleaseNameIndex].Equals(releaseName, StringComparison.OrdinalIgnoreCase))
{ {
if (gameData.Length > 5) if (gameData.Length > 5)
double.TryParse(gameData[5], out gameSizeMB); StringUtilities.TryParseDouble(gameData[5], out gameSizeMB);
if (gameData.Length > SideloaderRCLONE.PackageNameIndex) if (gameData.Length > SideloaderRCLONE.PackageNameIndex)
packagename = gameData[SideloaderRCLONE.PackageNameIndex]; packagename = gameData[SideloaderRCLONE.PackageNameIndex];
break; break;
@@ -3704,7 +3704,7 @@ If the problem persists, visit our Telegram (https://t.me/VRPirates) or Discord
gameData[SideloaderRCLONE.ReleaseNameIndex].Equals(gameName, StringComparison.OrdinalIgnoreCase)) gameData[SideloaderRCLONE.ReleaseNameIndex].Equals(gameName, StringComparison.OrdinalIgnoreCase))
{ {
if (gameData.Length > 5) if (gameData.Length > 5)
double.TryParse(gameData[5], out currentGameSizeMB); StringUtilities.TryParseDouble(gameData[5], out currentGameSizeMB);
break; break;
} }
} }
@@ -7979,7 +7979,7 @@ function onYouTubeIframeAPIReady() {
if (game.Length > SideloaderRCLONE.ReleaseNameIndex && if (game.Length > SideloaderRCLONE.ReleaseNameIndex &&
game[SideloaderRCLONE.ReleaseNameIndex].Equals(releaseName, StringComparison.OrdinalIgnoreCase)) game[SideloaderRCLONE.ReleaseNameIndex].Equals(releaseName, StringComparison.OrdinalIgnoreCase))
{ {
if (game.Length > 5 && double.TryParse(game[5], out double sizeMB)) if (game.Length > 5 && StringUtilities.TryParseDouble(game[5], out double sizeMB))
{ {
_totalQueueSizeMB += sizeMB; _totalQueueSizeMB += sizeMB;
} }

View File

@@ -61,5 +61,13 @@ namespace AndroidSideloader.Utilities
return s; return s;
} }
public static bool TryParseDouble(string value, out double result)
{
return double.TryParse(value,
System.Globalization.NumberStyles.Any,
System.Globalization.CultureInfo.InvariantCulture,
out result);
}
} }
} }