* test!: adjust test case to use `Settings`
* feat!: 1:1 migration from LauncherSettings >>> Settings
* fix: apply locale from settings during initialization
This does not (yet) make use of any feature we gain by having JavaFX properties or bindings, but on the upside this should be a feature-equivalent migration to the new settings POJO.
I know that the migration is not pretty, but I'd like to improve on the details in separate follow-up PRs to keep the review load bearable.
Adds missing strings to the Ukrainian locale file (two of them), and internationalizes some parts of the launcher that previously had preset strings! This includes the three tabs on the main pane, and some new advanced settings.
For historic reasons, the launcher settings classes were split into an abstract class interface and (several) implementations, but we dropped most of those some time ago.
Since we now only have single implementation class there's no point in keeping the interface and implementation separate.
We're unpacking all members from the LauncherConfiguration to pass separately to the ApplicationController when showing the main stage.
Instead, pass the configuration object as is, and take the respective information out as needed in ApplicationController#update itself.
Due to the two arguments being flipped selecting reasonable values (max memory >= min/initial memory) in the settings UI would lead to the game not starting properly with the following error message:
```
11:28:57.001 [GameService-0] INFO o.t.launcher.game.RunGameTask - Game output: Error occurred during initialization of VM
11:28:57.001 [GameService-0] INFO o.t.launcher.game.RunGameTask - Game output: Initial heap size set to a larger value than the maximum heap size
11:28:57.004 [GameService-0] DEBUG o.t.launcher.game.RunGameTask - Game closed with the exit value '1'.
```
Passing in the values in the right order fixes this.
* fix(GameStarter): do not depend on GameRelease to know the engine version, inspect the local installation instead.
* chore(VersionHistory): remove interface to GameIdentifier, because engine version comes from someplace else.
* fix(GameManager): don't return Installations for locations that obviously don't exist
* feat: update command line options for Terasology to use POSIX-style syntax for https://github.com/MovingBlocks/Terasology/pull/4157
* refactor(GameStarter): put platform-specific launch parameters here
* fix(VersionHistory): picocli begins with 5.2.0-SNAPSHOT
* fix: add connection timeout of 10 seconds to JenkinsClient
Partially addressed #640
* feat: show info label in splash screen when fetching game releases
This introduces a new translation key `splash_fetchReleases`.
* perf: fetch releases in parallel
Fetching available releases from independent sources should be independent of each other. Thus, we
can run this in parallel by using a `parallelStream()`.
* chore: remove LegacyJenkinsRepositoryAdapter
The legacy Jenkins instance (`jenkins.terasology.org`) is no longer available. Therefore, we don't
need this repository adapter anymore.
Closes#640
* test: remove tests for legacy jenkins adapter
* test: adjust tests for JenkinsClient
This also makes the JenkinsClient testable again by making the `openStream` utility method a static
member. This allows to stub only that static method for testing, while keeping the class-under-test
untouched.
* test(JenkinsClient): test that IOException is handled gracefully
* test(JenkinsClient): test that invalid JSON payload is handled gracefully
* fix: make JenkinsClient more resilient against malformed JSON payload