diff --git a/game-app/game-core/src/main/java/games/strategy/engine/framework/startup/ui/panels/main/game/selector/GameSelectorModel.java b/game-app/game-core/src/main/java/games/strategy/engine/framework/startup/ui/panels/main/game/selector/GameSelectorModel.java index 59c1690d9ba..9c28ee18a29 100644 --- a/game-app/game-core/src/main/java/games/strategy/engine/framework/startup/ui/panels/main/game/selector/GameSelectorModel.java +++ b/game-app/game-core/src/main/java/games/strategy/engine/framework/startup/ui/panels/main/game/selector/GameSelectorModel.java @@ -10,7 +10,10 @@ import games.strategy.engine.framework.startup.mc.ClientModel; import games.strategy.engine.framework.startup.mc.GameSelector; import games.strategy.triplea.settings.ClientSetting; +import java.net.URI; +import java.net.URISyntaxException; import java.nio.file.Files; +import java.nio.file.InvalidPathException; import java.nio.file.Path; import java.util.List; import java.util.Observable; @@ -188,14 +191,26 @@ public void loadDefaultGameSameThread() { gameUri .filter(Predicate.not(String::isBlank)) .filter(GameSelectorModel::gameUriExistsOnFileSystem) - .map(Path::of) + .map(GameSelectorModel::pathFromGameUri) .ifPresentOrElse(this::load, this::resetDefaultGame); } + private static Path pathFromGameUri(final String gameUri) { + if (gameUri.startsWith("file:")) { + try { + return Path.of(new URI(gameUri)); + } catch (URISyntaxException e) { + throw new InvalidPathException(gameUri, e.getReason()); + } + } else { + return Path.of(gameUri); + } + } + @SuppressWarnings("ReturnValueIgnored") private static boolean gameUriExistsOnFileSystem(final String gameUri) { try { - final Path gameFile = Path.of(gameUri); + final Path gameFile = pathFromGameUri(gameUri); // starts with check is because we don't want to load a game file by default that is not // within