コード例 #1
0
 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);
     }
 }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
        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);
            }
        }
コード例 #4
0
        /// <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.");
            }
        }
コード例 #5
0
 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);
     }
 }
コード例 #6
0
        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);
            }
        }
コード例 #7
0
        /// <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);
            }
        }