private void CheckUpdate(CheckUpdateState state) { try { Logging.Debug($"Checking updates... - {state.apiUrl}"); if (string.IsNullOrEmpty(state.currentVersion)) { if (CheckUpdateCompleted != null) { CheckUpdateCompleted.Invoke(this, new CheckUpdateEventArgs() { App = state.app, ApiUrl = state.apiUrl, CurrentVersion = state.currentVersion, UserState = state.userState }); } } else { WebClient http = CreateWebClient(); http.Encoding = Encoding.UTF8; http.DownloadStringCompleted += http_DownloadStringCompleted; http.DownloadStringAsync(new Uri(state.apiUrl), state); } } catch (Exception ex) { Logging.LogUsefulException(ex); } }
public async Task CheckUpdate(Configuration config) { this._config = config; Logging.Debug("Checking updates..."); try { var response = await WebClientDownloadStringTaskAsync(UpdateURL); JArray result = JArray.Parse(response); List <Asset> asserts = new List <Asset>(); if (result != null) { foreach (JObject release in result) { var isPreRelease = (bool)release["prerelease"]; if (isPreRelease && !config.checkPreRelease) { continue; } foreach (JObject asset in (JArray)release["assets"]) { Asset ass = Asset.ParseAsset(asset); if (ass != null) { ass.prerelease = isPreRelease; if (ass.IsNewVersion(Version, config.checkPreRelease)) { asserts.Add(ass); } } } } } if (asserts.Count != 0) { SortByVersions(asserts); Asset asset = asserts[asserts.Count - 1]; NewVersionFound = true; _latestVersionUrl = asset.browser_download_url; LatestVersionNumber = asset.version; _latestVersionName = asset.name; LatestVersionSuffix = asset.suffix == null ? "" : $"-{asset.suffix}"; Task.Factory.StartNew(async() => await StartDownload()).Forget(); } else { Logging.Debug("No update is available"); CheckUpdateCompleted?.Invoke(this, new EventArgs()); } } catch (Exception e) { Logging.LogUsefulException(e); } }
private void http_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) { try { string response = e.Result; JArray result = JArray.Parse(response); List<Asset> asserts = new List<Asset>(); if (result != null) { foreach (JObject release in result) { var isPreRelease = (bool) release["prerelease"]; if (isPreRelease && !config.checkPreRelease) { continue; } foreach (JObject asset in (JArray)release["assets"]) { Asset ass = Asset.ParseAsset(asset); if (ass != null) { ass.prerelease = isPreRelease; if (ass.IsNewVersion(Version, config.checkPreRelease)) { asserts.Add(ass); } } } } } if (asserts.Count != 0) { SortByVersions(asserts); Asset asset = asserts[asserts.Count - 1]; NewVersionFound = true; LatestVersionURL = asset.browser_download_url; LatestVersionNumber = asset.version; LatestVersionName = asset.name; LatestVersionSuffix = asset.suffix == null ? "" : $"-{asset.suffix}"; startDownload(); } else { Logging.Debug("No update is available"); CheckUpdateCompleted?.Invoke(this, new EventArgs()); } } catch (Exception ex) { Logging.LogUsefulException(ex); } }
/// <summary> /// Checks for updates and asks the user if updates are found. /// </summary> /// <param name="millisecondsDelay">A delay in milliseconds before checking.</param> /// <returns></returns> public async Task CheckForVersionUpdate(int millisecondsDelay = 0) { // delay logger.Info($"Waiting for {millisecondsDelay}ms before checking for version update."); await Task.Delay(millisecondsDelay); // start logger.Info($"Checking for version update."); var appSettings = Locator.Current.GetService <AppSettings>(); try { // list releases via API var releasesListJsonStream = await httpClient.GetStreamAsync(UpdateURL); // parse using (JsonDocument jsonDocument = await JsonDocument.ParseAsync(releasesListJsonStream)) { var releasesList = jsonDocument.RootElement; foreach (var releaseObject in releasesList.EnumerateArray()) { var releaseTagName = releaseObject.GetProperty("tag_name").GetString(); var releaseVersion = new Version(releaseTagName ?? "5.0.0"); var releaseIsPrerelease = releaseObject.GetProperty("prerelease").GetBoolean(); if (releaseTagName == appSettings.SkippedUpdateVersion) // finished checking { break; } if (releaseVersion.CompareTo(_version) > 0 && (!releaseIsPrerelease || appSettings.VersionUpdateCheckForPrerelease && releaseIsPrerelease)) // selected { logger.Info($"Found new version {releaseTagName}."); _releaseObject = releaseObject; NewReleaseVersion = releaseTagName ?? ""; AskToUpdate(releaseObject); return; } } } logger.Info($"No new versions found."); CheckUpdateCompleted?.Invoke(this, new EventArgs()); } catch (Exception e) { this.Log().Error(e, "An error occurred while checking for version updates."); } }
private void Http_DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e) { try { if (e.Error != null) { Logging.LogUsefulException(e.Error); return; } Logging.Debug($"New version {LatestVersionNumber}{LatestVersionSuffix} found: {LatestVersionLocalName}"); CheckUpdateCompleted?.Invoke(this, new EventArgs()); } catch (Exception ex) { Logging.LogUsefulException(ex); } }
private async Task StartDownload() { try { if (!await WebClientDownloadFileTaskAsync()) { return; } Logging.Debug( $"New version {LatestVersionNumber}{LatestVersionSuffix} found: {LatestVersionLocalName}"); CheckUpdateCompleted?.Invoke(this, new EventArgs()); } catch (Exception ex) { Logging.LogUsefulException(ex); } }
/// <summary> /// Checks for updates and asks the user if updates are found. /// </summary> /// <param name="millisecondsDelay">A delay in milliseconds before checking.</param> /// <returns></returns> public async Task CheckForVersionUpdate(int millisecondsDelay = 0) { // delay logger.Info($"Waiting for {millisecondsDelay}ms before checking for version update."); await Task.Delay(millisecondsDelay); // update _config so we would know if the user checked or unchecked pre-release checks _config = Program.MainController.GetCurrentConfiguration(); // start logger.Info($"Checking for version update."); try { // list releases via API var releasesListJsonString = await httpClient.GetStringAsync(UpdateURL); // parse var releasesJArray = JArray.Parse(releasesListJsonString); foreach (var releaseObject in releasesJArray) { var releaseTagName = (string)releaseObject["tag_name"]; var releaseVersion = new Version(releaseTagName); if (releaseTagName == _config.skippedUpdateVersion) // finished checking { break; } if (releaseVersion.CompareTo(_version) > 0 && (!(bool)releaseObject["prerelease"] || _config.checkPreRelease && (bool)releaseObject["prerelease"])) // selected { logger.Info($"Found new version {releaseTagName}."); _releaseObject = releaseObject; NewReleaseVersion = releaseTagName; AskToUpdate(releaseObject); return; } } logger.Info($"No new versions found."); CheckUpdateCompleted?.Invoke(this, new EventArgs()); } catch (Exception e) { logger.LogUsefulException(e); } }