diff --git a/AnnoDesigner/Commons.cs b/AnnoDesigner/Commons.cs
index 34c053fb..738ee385 100644
--- a/AnnoDesigner/Commons.cs
+++ b/AnnoDesigner/Commons.cs
@@ -29,7 +29,7 @@ public static Commons Instance
static Commons()
{
- _updateHelper = new UpdateHelper(App.ApplicationPath);
+ _updateHelper = new UpdateHelper(App.ApplicationPath, new AppSettings());
}
private Commons()
diff --git a/AnnoDesigner/Properties/Settings.Designer.cs b/AnnoDesigner/Properties/Settings.Designer.cs
index 4ded82fd..0b90d380 100644
--- a/AnnoDesigner/Properties/Settings.Designer.cs
+++ b/AnnoDesigner/Properties/Settings.Designer.cs
@@ -343,5 +343,17 @@ public double CurrentVersion {
return ((double)(this["CurrentVersion"]));
}
}
+
+ [global::System.Configuration.UserScopedSettingAttribute()]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Configuration.DefaultSettingValueAttribute("False")]
+ public bool UpdateSupportsPrerelease {
+ get {
+ return ((bool)(this["UpdateSupportsPrerelease"]));
+ }
+ set {
+ this["UpdateSupportsPrerelease"] = value;
+ }
+ }
}
}
diff --git a/AnnoDesigner/Properties/Settings.settings b/AnnoDesigner/Properties/Settings.settings
index b9dd39cb..92610acf 100644
--- a/AnnoDesigner/Properties/Settings.settings
+++ b/AnnoDesigner/Properties/Settings.settings
@@ -83,5 +83,8 @@
8.5
+
+ False
+
\ No newline at end of file
diff --git a/AnnoDesigner/UpdateHelper.cs b/AnnoDesigner/UpdateHelper.cs
index 53580600..832f86d4 100644
--- a/AnnoDesigner/UpdateHelper.cs
+++ b/AnnoDesigner/UpdateHelper.cs
@@ -33,6 +33,7 @@ public class UpdateHelper : IUpdateHelper
private GitHubClient _apiClient;
private HttpClient _httpClient;
private readonly string _basePath;
+ private readonly IAppSettings _appSettings;
///
/// Initializes a new instance of
@@ -41,9 +42,10 @@ public class UpdateHelper : IUpdateHelper
///
/// example to get the basePath: string basePath = AppDomain.CurrentDomain.BaseDirectory;
///
- public UpdateHelper(string basePathToUse)
+ public UpdateHelper(string basePathToUse, IAppSettings appSettingsToUse)
{
_basePath = basePathToUse;
+ _appSettings = appSettingsToUse;
}
private GitHubClient ApiClient
@@ -143,6 +145,8 @@ public async Task DownloadReleaseAsync(AvailableRelease releaseToDownloa
return null;
}
+ logger.Debug($"Download asset for release {releaseToDownload.Version}.");
+
var release = AllReleases.FirstOrDefault(x => x.Id == releaseToDownload.Id);
if (release == null)
{
@@ -158,6 +162,14 @@ public async Task DownloadReleaseAsync(AvailableRelease releaseToDownloa
}
var foundAsset = release.Assets.FirstOrDefault(x => x.Name.StartsWith(assetName, StringComparison.OrdinalIgnoreCase));
+ if (foundAsset == null && releaseToDownload.Type == ReleaseType.Presets)
+ {
+ //check for release of presets with icons
+ releaseToDownload.Type = ReleaseType.PresetsAndIcons;
+ assetName = GetAssetNameForReleaseType(releaseToDownload.Type);
+ foundAsset = release.Assets.FirstOrDefault(x => x.Name.StartsWith(assetName, StringComparison.OrdinalIgnoreCase));
+ }
+
if (foundAsset == null)
{
logger.Warn($"No asset found with name: {assetName}.");
@@ -208,19 +220,21 @@ await Task.Run(async () =>
{
foreach (ReleaseType curReleaseType in Enum.GetValues(typeof(ReleaseType)))
{
- var pathToUpdatesPresetsFile = GetPathToUpdatedPresetsFile(curReleaseType);
- if (string.IsNullOrWhiteSpace(pathToUpdatesPresetsFile) || !File.Exists(pathToUpdatesPresetsFile))
+ var pathToUpdatedPresetsFile = GetPathToUpdatedPresetsFile(curReleaseType);
+ if (string.IsNullOrWhiteSpace(pathToUpdatedPresetsFile) || !File.Exists(pathToUpdatedPresetsFile))
{
continue;
}
+ logger.Debug($"start replacing presets with update: {pathToUpdatedPresetsFile}");
+
if (curReleaseType == ReleaseType.PresetsAndIcons)
{
- using (var archive = ZipFile.OpenRead(pathToUpdatesPresetsFile))
+ using (var archive = ZipFile.OpenRead(pathToUpdatedPresetsFile))
{
foreach (var curEntry in archive.Entries)
{
- var destinationPath = Path.Combine(Path.GetDirectoryName(pathToUpdatesPresetsFile), curEntry.FullName);
+ var destinationPath = Path.Combine(Path.GetDirectoryName(pathToUpdatedPresetsFile), curEntry.FullName);
var destinationDirectory = Path.GetDirectoryName(destinationPath);
if (!Directory.Exists(destinationDirectory))
@@ -244,20 +258,24 @@ await Task.Run(async () =>
//wait extra time for extraction to finish (sometimes the disk needs extra time)
await Task.Delay(TimeSpan.FromMilliseconds(200));
- File.Delete(pathToUpdatesPresetsFile);
+ File.Delete(pathToUpdatedPresetsFile);
+
+ logger.Debug("finished extracting updated presets file");
continue;
}
- var originalPresetsFileName = Path.GetFileName(pathToUpdatesPresetsFile).Replace(CoreConstants.PrefixUpdatedPresetsFile, string.Empty);
- var pathToOriginalPresetsFile = Path.Combine(Path.GetDirectoryName(pathToUpdatesPresetsFile), originalPresetsFileName);
+ var originalPresetsFileName = Path.GetFileName(pathToUpdatedPresetsFile).Replace(CoreConstants.PrefixUpdatedPresetsFile, string.Empty);
+ var pathToOriginalPresetsFile = Path.Combine(Path.GetDirectoryName(pathToUpdatedPresetsFile), originalPresetsFileName);
if (File.Exists(pathToOriginalPresetsFile))
{
FileHelper.ResetFileAttributes(pathToOriginalPresetsFile);
File.Delete(pathToOriginalPresetsFile);
}
- File.Move(pathToUpdatesPresetsFile, pathToOriginalPresetsFile);
+ File.Move(pathToUpdatedPresetsFile, pathToOriginalPresetsFile);
+
+ logger.Debug("finished replacing presets with update");
}
});
}
@@ -318,7 +336,12 @@ private AvailableRelease CheckForAvailableRelease(ReleaseType releaseType)
return result;
}
- var foundGithubRelease = AllReleases.FirstOrDefault(x => !x.Draft && !x.Prerelease && x.TagName.StartsWith(tagToCheck, StringComparison.OrdinalIgnoreCase));
+ var supportPrerelease = _appSettings.UpdateSupportsPrerelease;
+ logger.Debug($"Update supports prereleases: {supportPrerelease}");
+
+ var foundGithubRelease = AllReleases.FirstOrDefault(x => !x.Draft &&
+ x.Prerelease == supportPrerelease &&
+ x.TagName.StartsWith(tagToCheck, StringComparison.OrdinalIgnoreCase));
//for testing - latest preset and icons release
//var latestPresetRelease = releases.FirstOrDefault(x => !x.Draft && !x.Prerelease && x.TagName.StartsWith("Presetsv3.0.0", StringComparison.OrdinalIgnoreCase));
if (foundGithubRelease == null)
@@ -434,12 +457,16 @@ private async Task DownloadFileAsync(string url, string pathToSavedFile)
{
try
{
+ logger.Debug($"start downloading file: {url}");
+
var stream = await LocalHttpClient.GetStreamAsync(url).ConfigureAwait(false);
using (var fileStream = new FileStream(pathToSavedFile, System.IO.FileMode.Create))
{
await stream.CopyToAsync(fileStream).ConfigureAwait(false);
}
+ logger.Debug($"finished downloading file to \"{pathToSavedFile}\"");
+
return pathToSavedFile;
}
catch (Exception ex)
diff --git a/AnnoDesigner/app.config b/AnnoDesigner/app.config
index 57332a57..38b919c4 100644
--- a/AnnoDesigner/app.config
+++ b/AnnoDesigner/app.config
@@ -93,6 +93,9 @@
+
+ False
+
diff --git a/AnnoDesigner/model/AppSettings.cs b/AnnoDesigner/model/AppSettings.cs
index 1c2292da..e037f296 100644
--- a/AnnoDesigner/model/AppSettings.cs
+++ b/AnnoDesigner/model/AppSettings.cs
@@ -161,6 +161,12 @@ public WindowState MainWindowWindowState
get { return Settings.Default.MainWindowWindowState; }
set { Settings.Default.MainWindowWindowState = value; }
}
+
+ public bool UpdateSupportsPrerelease
+ {
+ get { return Settings.Default.UpdateSupportsPrerelease; }
+ set { Settings.Default.UpdateSupportsPrerelease = value; }
+ }
}
}
diff --git a/AnnoDesigner/model/IAppSettings.cs b/AnnoDesigner/model/IAppSettings.cs
index 04616f55..614eaa1b 100644
--- a/AnnoDesigner/model/IAppSettings.cs
+++ b/AnnoDesigner/model/IAppSettings.cs
@@ -36,5 +36,6 @@ public interface IAppSettings
double MainWindowLeft { get; set; }
double MainWindowTop { get; set; }
WindowState MainWindowWindowState { get; set; }
+ bool UpdateSupportsPrerelease { get; set; }
}
}
diff --git a/AnnoDesigner/viewmodel/MainViewModel.cs b/AnnoDesigner/viewmodel/MainViewModel.cs
index 12c55b09..4b2b7cde 100644
--- a/AnnoDesigner/viewmodel/MainViewModel.cs
+++ b/AnnoDesigner/viewmodel/MainViewModel.cs
@@ -585,6 +585,7 @@ private async Task CheckForPresetsAsync()
//Context is required here, do not use ConfigureAwait(false)
var newLocation = await _commons.UpdateHelper.DownloadReleaseAsync(foundRelease);
+ logger.Debug($"downloaded new preset ({foundRelease.Version}): {newLocation}");
IsBusy = false;