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;