public async Task <UpdateInfo> CheckForUpdateAsync(UpdateCheckArgs args = null) { var assetName = args?.AssetName ?? config.AssetName; var allowPreRelease = args != null && args.AllowPreRelease; var ignoreTags = args?.IgnoreTags ?? new string[] { }; var uri = args?.Uri ?? config.UpdateUrl; client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/vnd.github.v3+json")); client.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue(assetName, config.Version)); // Get the latest releases from GitHub using (var response = await client.GetAsync(uri, HttpCompletionOption.ResponseHeadersRead, cancellationToken)) { var content = await response.Content.ReadAsStringAsync(); response.EnsureSuccessStatusCode(); var results = JsonSerializer.Deserialize <List <GitHubRelease> >(content); var latest = results.FirstOrDefault(x => (allowPreRelease || !x.prerelease) && !ignoreTags.Any(tag => tag.Equals(x.tag_name, StringComparison.OrdinalIgnoreCase))); if (latest == null) { Trace.TraceWarning("Couldn't find a release from the list returned by GitHub"); return(null); } var asset = latest.assets.FirstOrDefault(x => x.name.Equals(assetName, StringComparison.OrdinalIgnoreCase)); if (asset == null) { Trace.TraceWarning($"Couldn't find '${assetName}' in the release assets for " + latest.name); return(null); } var info = new UpdateInfo { Version = new SemanticVersion(latest.tag_name), Uri = asset.browser_download_url.ToString(), IsPreRelease = latest.prerelease, Name = asset.name, CurrentVersion = new SemanticVersion(config.Version) }; return(info); } }
/// <summary> /// Downloads and launches any available update, otherwise returns <c>false</c>. You should exit immediately /// if <c>true</c> is returned, as the update process will be waiting for processes to exit and release locks. /// </summary> /// <param name="args"></param> /// <returns></returns> public async Task <bool> UpdateAsync(UpdateCheckArgs args = null) { // Check for available update var update = await CheckForUpdateAsync(args); if (update != null && update.IsUpgrade()) { // Download the update side by side var file = await DownloadAsync(update, config.Progress, cancellationToken); // Launch the downloaded update Launch(new LaunchArgs(file.Filename)); return(true); } return(false); }
public static UpdateInfo CheckForUpdate(this ApplicationUpdater updater, UpdateCheckArgs args = null) { return(updater.CheckForUpdateAsync(args).GetAwaiter().GetResult()); }
public static bool EnsureUpdated(this ApplicationUpdater updater, UpdateCheckArgs args = null, bool register = true) { return(EnsureUpdatedAsync(updater, args, register).GetAwaiter().GetResult()); }
public static async Task <bool> EnsureUpdatedAsync(this ApplicationUpdater updater, UpdateCheckArgs args = null, bool register = true) { // Ensure the application is registered if necessary if (register) { await updater.InstallAsync().ConfigureAwait(false); } // Check for if (await updater.UpdateAsync(args).ConfigureAwait(false)) { return(true); } return(await updater.UpdateAsync(args).ConfigureAwait(false)); }