private async Task CheckForPresetsAsync(bool isAutomaticUpdateCheck) { FoundPresetRelease = null; var foundRelease = await _updateHelper.GetAvailableReleasesAsync(ReleaseType.Presets); if (foundRelease == null) { return; } var isNewReleaseAvailable = foundRelease.Version > new Version(PresetsVersionValue); if (isNewReleaseAvailable) { IsPresetUpdateAvailable = true; FoundPresetRelease = foundRelease; if (isAutomaticUpdateCheck) { if (_messageBoxService.ShowQuestion(Application.Current.MainWindow, _localizationHelper.GetLocalization("UpdateAvailablePresetMessage"), _localizationHelper.GetLocalization("UpdateAvailableHeader"))) { ExecuteDownloadPresets(null); } } } }
private AvailableRelease CheckForAvailableRelease(ReleaseType releaseType) { AvailableRelease result = null; var tagToCheck = GetTagForReleaseType(releaseType); if (string.IsNullOrWhiteSpace(tagToCheck)) { return(result); } 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) { return(result); } var versionString = foundGithubRelease.TagName.Replace(tagToCheck, string.Empty).Trim(); if (!Version.TryParse(versionString, out var foundVersion)) { logger.Warn($"Could not get version of preset release. {nameof(foundGithubRelease.TagName)}: {foundGithubRelease.TagName}"); return(result); } result = new AvailableRelease { Id = foundGithubRelease.Id, Type = releaseType, Version = foundVersion }; return(result); }
public async Task <string> DownloadReleaseAsync(AvailableRelease releaseToDownload) { try { if (AllReleases == null) { return(null); } logger.Debug($"Download asset for release {releaseToDownload.Version}."); var release = AllReleases.FirstOrDefault(x => x.Id == releaseToDownload.Id); if (release == null) { logger.Warn($"No release found for {nameof(releaseToDownload.Id)}: {nameof(releaseToDownload.Id)}."); return(null); } var assetName = GetAssetNameForReleaseType(releaseToDownload.Type); if (string.IsNullOrWhiteSpace(assetName)) { logger.Warn($"No asset name found for type: {releaseToDownload.Type}."); return(null); } 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}."); return(null); } //download file to temp directory var pathToDownloadedFile = await DownloadFileAsync(foundAsset.BrowserDownloadUrl, Path.GetTempFileName()).ConfigureAwait(false); if (string.IsNullOrWhiteSpace(pathToDownloadedFile)) { logger.Warn("Could not get path to downloaded file."); return(null); } //move file to app directory var tempFileInfo = new FileInfo(pathToDownloadedFile); var pathToUpdatedPresetsFile = GetPathToUpdatedPresetsFile(releaseToDownload.Type); if (string.IsNullOrWhiteSpace(pathToUpdatedPresetsFile)) { logger.Warn($"Could not get path to updated presets file for type: {releaseToDownload.Type}."); return(null); } if (File.Exists(pathToUpdatedPresetsFile)) { FileHelper.ResetFileAttributes(pathToUpdatedPresetsFile); File.Delete(pathToUpdatedPresetsFile); } tempFileInfo.MoveTo(pathToUpdatedPresetsFile); return(pathToUpdatedPresetsFile); } catch (Exception ex) { logger.Error(ex, "Error downloading release."); App.ShowMessageWithUnexpectedErrorAndExit(); return(null); } }
private AvailableRelease CheckForAvailableRelease(ReleaseType releaseType) { AvailableRelease result = null; var tagToCheck = GetTagForReleaseType(releaseType); if (string.IsNullOrWhiteSpace(tagToCheck)) { return(result); } logger.Debug($"Check for updates with tag: \"{tagToCheck}\""); var supportPrerelease = _appSettings.UpdateSupportsPrerelease; logger.Debug($"Update supports prereleases: {supportPrerelease}"); Release foundPrerelease = null; if (supportPrerelease) { foundPrerelease = AllReleases.FirstOrDefault(x => !x.Draft && x.Prerelease && x.TagName.StartsWith(tagToCheck, StringComparison.OrdinalIgnoreCase)); } Version versionPrerelease = default; if (foundPrerelease != null) { versionPrerelease = ParseVersionFromTag(foundPrerelease, tagToCheck); logger.Debug($"Found version (prerelease): {versionPrerelease}"); } var foundRelease = AllReleases.FirstOrDefault(x => !x.Draft && !x.Prerelease && x.TagName.StartsWith(tagToCheck, StringComparison.OrdinalIgnoreCase)); Version versionRelease = default; if (foundRelease != null) { versionRelease = ParseVersionFromTag(foundRelease, tagToCheck); logger.Debug($"Found version: {versionRelease}"); } if (versionPrerelease == default && versionRelease == default) { return(result); } if (versionPrerelease != default && versionPrerelease > versionRelease) { result = new AvailableRelease { Id = foundPrerelease.Id, Type = releaseType, Version = versionPrerelease }; } else { result = new AvailableRelease { Id = foundRelease.Id, Type = releaseType, Version = versionRelease }; } return(result); }
public async Task <string> DownloadReleaseAsync(AvailableRelease releaseToDownload) { try { if (AllReleases == null) { return(null); } var release = AllReleases.FirstOrDefault(x => x.Id == releaseToDownload.Id); if (release == null) { Trace.WriteLine($"No release found for {nameof(releaseToDownload.Id)}: {nameof(releaseToDownload.Id)}."); return(null); } var assetName = GetAssetNameForReleaseType(releaseToDownload.Type); if (string.IsNullOrWhiteSpace(assetName)) { Trace.WriteLine($"No asset name found for type: {releaseToDownload.Type}."); return(null); } var foundAsset = release.Assets.FirstOrDefault(x => x.Name.StartsWith(assetName, StringComparison.OrdinalIgnoreCase)); if (foundAsset == null) { Trace.WriteLine($"No asset found with name: {assetName}."); return(null); } //download file to temp directory var pathToDownloadedFile = await DownloadFileAsync(foundAsset.BrowserDownloadUrl, Path.GetTempFileName()).ConfigureAwait(false); if (string.IsNullOrWhiteSpace(pathToDownloadedFile)) { Trace.WriteLine($"Could not get path to downloaded file."); return(null); } //move file to app directory var tempFileInfo = new FileInfo(pathToDownloadedFile); var pathToUpdatedPresetsFile = GetPathToUpdatedPresetsFile(releaseToDownload.Type); if (string.IsNullOrWhiteSpace(pathToUpdatedPresetsFile)) { Trace.WriteLine($"Could not get path to updated presets file for type: {releaseToDownload.Type}."); return(null); } if (File.Exists(pathToUpdatedPresetsFile)) { FileHelper.ResetFileAttributes(pathToUpdatedPresetsFile); File.Delete(pathToUpdatedPresetsFile); } tempFileInfo.MoveTo(pathToUpdatedPresetsFile); return(pathToUpdatedPresetsFile); } catch (Exception ex) { App.LogErrorMessage(ex); return(null); } }