diff --git a/src/IntelOrca.OpenLauncher.Core/ConfigService.cs b/src/IntelOrca.OpenLauncher.Core/ConfigService.cs
index 539fff0..2a3e2d8 100644
--- a/src/IntelOrca.OpenLauncher.Core/ConfigService.cs
+++ b/src/IntelOrca.OpenLauncher.Core/ConfigService.cs
@@ -58,6 +58,26 @@ public bool PreReleaseChecked
SaveConfig();
}
}
+
+ public bool AutoUpdateOpenRCT2
+ {
+ get => _config.AutoUpdateOpenRCT2;
+ set
+ {
+ _config.AutoUpdateOpenRCT2 = value;
+ SaveConfig();
+ }
+ }
+
+ public bool AutoUpdateOpenLoco
+ {
+ get => _config.AutoUpdateOpenLoco;
+ set
+ {
+ _config.AutoUpdateOpenLoco = value;
+ SaveConfig();
+ }
+ }
public int SelectingGame
{
@@ -73,6 +93,8 @@ public int SelectingGame
internal struct Config
{
public bool PreReleaseChecked { get; set; }
+ public bool AutoUpdateOpenRCT2 { get; set; }
+ public bool AutoUpdateOpenLoco { get; set; }
public int SelectingGame { get; set; }
}
}
diff --git a/src/openlauncher/MainWindow.axaml b/src/openlauncher/MainWindow.axaml
index e6ad659..4e2e7a9 100644
--- a/src/openlauncher/MainWindow.axaml
+++ b/src/openlauncher/MainWindow.axaml
@@ -97,11 +97,16 @@
Content="{x:Static p:Resources.Download}"
Click="downloadButton_Click" />
-
+ Checked="showDevelopmentVersionsCheckbox_Changed"
+ Unchecked="showDevelopmentVersionsCheckbox_Changed" />
+
diff --git a/src/openlauncher/MainWindow.axaml.cs b/src/openlauncher/MainWindow.axaml.cs
index 71c6ee7..9434b15 100644
--- a/src/openlauncher/MainWindow.axaml.cs
+++ b/src/openlauncher/MainWindow.axaml.cs
@@ -47,8 +47,12 @@ public MainWindow()
private async void Window_Opened(object sender, EventArgs e)
{
- showPreReleaseCheckbox.IsChecked = _configService.PreReleaseChecked;
+ showDevelopmentVersionsCheckbox.IsChecked = _configService.PreReleaseChecked;
+ autoUpdateGameCheckbox.IsChecked = AutoUpdateEnabled();
gameListView.SelectedIndex = _configService.SelectingGame;
+ versionDropdown.IsEnabled = !AutoUpdateEnabled();
+ downloadButton.IsEnabled = !AutoUpdateEnabled();
+
_ready = true;
var selectedItem = gameListView.SelectedItem as GameMenuItem;
await SetPageAsync(selectedItem);
@@ -105,74 +109,99 @@ private async void gameListView_SelectionChanged(object sender, SelectionChanged
await SetPageAsync(gameListView.SelectedItem as GameMenuItem);
}
- private async void showPreReleaseCheckbox_Changed(object sender, RoutedEventArgs e)
+ private async void showDevelopmentVersionsCheckbox_Changed(object sender, RoutedEventArgs e)
{
if (!_ready)
return;
- _configService.PreReleaseChecked = showPreReleaseCheckbox.IsChecked ?? false;
+ _configService.PreReleaseChecked = showDevelopmentVersionsCheckbox.IsChecked ?? false;
await RefreshAvailableVersionsAsync();
}
-
- private async void downloadButton_Click(object sender, RoutedEventArgs e)
+
+ private void autoUpdateGameCheckbox_Changed(object sender, RoutedEventArgs e)
+ {
+ if (!_ready)
+ return;
+ SetAutoUpdateEnabled(autoUpdateGameCheckbox.IsChecked ?? false);
+ SetAllInteractionEnabled(true);
+
+ if (AutoUpdateEnabled())
+ {
+ InstallLatestBuildFromVersionDropdown();
+ }
+ }
+
+ private void downloadButton_Click(object sender, RoutedEventArgs e)
+ {
+ InstallLatestBuildFromVersionDropdown();
+ }
+
+ private async void InstallLatestBuildFromVersionDropdown()
{
if (_selectedMenuItem == null)
return;
-
- try
+
+ var selectedItem = versionDropdown.SelectedItem as ComboBoxItem;
+ if (selectedItem?.Tag is Build build)
{
- downloadProgress.IsVisible = true;
- SetAllInteractionEnabled(false);
-
- var selectedItem = versionDropdown.SelectedItem as ComboBoxItem;
- if (selectedItem?.Tag is Build build)
+ try
{
+ var currentVersion = await _selectedMenuItem.InstallService.GetCurrentVersionAsync();
+ if (build.Version == currentVersion)
+ return;
+
+ downloadProgress.IsVisible = true;
+ SetAllInteractionEnabled(false);
+
var assets = build.Assets
.Where(x => x.IsPortable)
.Where(x => x.IsApplicableForCurrentPlatform())
.OrderBy(x => x, BuildAssetComparer.Default)
.ToArray();
+
var asset = assets.FirstOrDefault();
- if (asset != null)
+ if (asset == null)
+ {
+ return;
+ }
+
+ var progress = new Progress();
+ progress.ProgressChanged += (s, report) =>
{
- var progress = new Progress();
- progress.ProgressChanged += (s, report) =>
+ Dispatcher.UIThread.Post(() =>
{
- Dispatcher.UIThread.Post(() =>
+ downloadButton.Content = report.Status;
+ if (report.Value is float value)
{
- downloadButton.Content = report.Status;
- if (report.Value is float value)
- {
- downloadProgress.IsIndeterminate = false;
- downloadProgress.Value = value;
- }
- else
- {
- downloadProgress.IsIndeterminate = true;
- }
- });
- };
-
- var cts = new CancellationTokenSource();
- await _selectedMenuItem.InstallService.DownloadVersion(
- new DownloadService(),
- new Shell(),
- build.Version,
- asset.Uri,
- progress,
- cts.Token);
- await RefreshInstalledVersionAsync();
- }
+ downloadProgress.IsIndeterminate = false;
+ downloadProgress.Value = value;
+ }
+ else
+ {
+ downloadProgress.IsIndeterminate = true;
+ }
+ });
+ };
+
+ var cts = new CancellationTokenSource();
+ await _selectedMenuItem.InstallService.DownloadVersion(
+ new DownloadService(),
+ new Shell(),
+ build.Version,
+ asset.Uri,
+ progress,
+ cts.Token);
+ await RefreshInstalledVersionAsync();
+ }
+ catch (Exception ex)
+ {
+ ShowError(StringResources.DownloadBuildFailedTitle, ex);
+ }
+ finally
+ {
+ downloadButton.Content = StringResources.Download;
+ downloadProgress.IsVisible = false;
+ SetAllInteractionEnabled(true);
}
- }
- catch (Exception ex)
- {
- ShowError(StringResources.DownloadBuildFailedTitle, ex);
- }
- finally
- {
- downloadButton.Content = StringResources.Download;
- downloadProgress.IsVisible = false;
- SetAllInteractionEnabled(true);
}
}
@@ -232,7 +261,7 @@ private async Task RefreshAvailableVersionsAsync()
versionDropdown.IsHitTestVisible = false;
// Refresh builds
- var showDevelop = showPreReleaseCheckbox.IsChecked ?? false;
+ var showDevelop = showDevelopmentVersionsCheckbox.IsChecked ?? false;
var builds = _selectedMenuItem.Builds;
if (builds.IsDefault || (showDevelop && !_selectedMenuItem.BuildsIncludeDevelop))
{
@@ -262,8 +291,12 @@ private async Task RefreshAvailableVersionsAsync()
versionDropdown.SelectedIndex = 0;
if (!_isBusy)
{
- downloadButton.IsEnabled = true;
+ downloadButton.IsEnabled = !AutoUpdateEnabled();
versionDropdown.IsHitTestVisible = true;
+ if (AutoUpdateEnabled())
+ {
+ InstallLatestBuildFromVersionDropdown();
+ }
}
}
}
@@ -337,12 +370,14 @@ private void SetAllInteractionEnabled(bool value)
gameListView.IsEnabled = value;
updateButton.IsEnabled = value;
versionDropdown.IsHitTestVisible = value && buildsAvailable;
- showPreReleaseCheckbox.IsEnabled = value;
+ showDevelopmentVersionsCheckbox.IsEnabled = value;
+ autoUpdateGameCheckbox.IsEnabled = value;
if (value)
{
playButton.IsEnabled = _selectedMenuItem?.InstallService.CanLaunch() ?? false;
- downloadButton.IsEnabled = buildsAvailable;
+ downloadButton.IsEnabled = buildsAvailable && !AutoUpdateEnabled();
+ versionDropdown.IsEnabled = !AutoUpdateEnabled();
}
else
{
@@ -350,6 +385,32 @@ private void SetAllInteractionEnabled(bool value)
downloadButton.IsEnabled = value;
}
}
+
+ private bool AutoUpdateEnabled()
+ {
+ if (_selectedMenuItem == null)
+ return false;
+
+ var propertyName = "AutoUpdate" + _selectedMenuItem.Game.Name;
+ var property = _configService.GetType().GetProperty(propertyName);
+ if (property == null)
+ return false;
+
+ return (bool)(property.GetValue(_configService) ?? false);
+ }
+
+ private void SetAutoUpdateEnabled(bool on)
+ {
+ if (_selectedMenuItem == null)
+ return;
+
+ var propertyName = "AutoUpdate" + _selectedMenuItem.Game.Name;
+ var property = _configService.GetType().GetProperty(propertyName);
+ if (property == null)
+ return;
+
+ property.SetValue(_configService, on);
+ }
private static string GetAge(DateTime dt)
{
diff --git a/src/openlauncher/Properties/Resources.Designer.cs b/src/openlauncher/Properties/Resources.Designer.cs
index abbdbfc..1a1b52b 100644
--- a/src/openlauncher/Properties/Resources.Designer.cs
+++ b/src/openlauncher/Properties/Resources.Designer.cs
@@ -87,6 +87,12 @@ public static string ShowDevelopmentVersions {
}
}
+ public static string AutoUpdateGame {
+ get {
+ return ResourceManager.GetString("AutoUpdateGame", resourceCulture);
+ }
+ }
+
public static string Update {
get {
return ResourceManager.GetString("Update", resourceCulture);
diff --git a/src/openlauncher/Properties/Resources.nl.resx b/src/openlauncher/Properties/Resources.nl.resx
index d9b9d56..9e88ef2 100644
--- a/src/openlauncher/Properties/Resources.nl.resx
+++ b/src/openlauncher/Properties/Resources.nl.resx
@@ -21,6 +21,9 @@
Ontwikkelversies tonen
+
+ Updates automatisch installeren
+
Update
diff --git a/src/openlauncher/Properties/Resources.resx b/src/openlauncher/Properties/Resources.resx
index c788989..982c2df 100644
--- a/src/openlauncher/Properties/Resources.resx
+++ b/src/openlauncher/Properties/Resources.resx
@@ -21,6 +21,9 @@
Show development versions
+
+ Automatically install updates
+
Update