Beispiel #1
0
        public async Task CheckForUpdates(bool force)
        {
            if (Model.Status == UpdateStatus.Checking)
            {
                Logger.Warning("Cannot check for new updates because the status says it's already checking for one");
                return;
            }

            if (!force && Model.LastCheckInMinutes < 30)
            {
                Logger.Warning("Cannot check for new updates because the last check was less than 30m");
                return;
            }

            Logger.Info("Checking for updates...");

            Model.LastCheck = DateTime.Now;
            Model.Status    = UpdateStatus.Checking;

            JsonDownloader jsonDownloader = new JsonDownloader();

            try
            {
                GithubModel response = await jsonDownloader.GetObject <GithubModel>("https://api.github.com/repos/adrianmteo/Luna/releases/latest");

                Version newVersion = new Version(response.tag_name.Substring(1));

                if (newVersion > LocalVersion)
                {
                    Logger.Info("Found new update with version {0}", newVersion);

                    GithubModel.Assets asset = response.assets.First(e => e.name.ToLower().Contains("exe"));

                    Model.Version      = newVersion.ToString();
                    Model.DownloadUrl  = asset.browser_download_url;
                    Model.DownloadName = asset.name;

                    if (AutoUpdate)
                    {
                        await DownloadUpdate();
                    }
                    else
                    {
                        Model.Status = UpdateStatus.NewUpdate;
                    }
                }
                else
                {
                    Logger.Info("No new updates found...");

                    Model.Status = UpdateStatus.NoUpdate;
                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex.Message);

                Model.Status = UpdateStatus.Error;
            }
        }
Beispiel #2
0
        public async Task DownloadUpdate()
        {
            if (Model.Status == UpdateStatus.Downloading)
            {
                Logger.Warning("Cannot download update because the status says it's already downloading one");
                return;
            }

            Logger.Info("Downloading update...");

            Model.Progress = 0;
            Model.Status   = UpdateStatus.Downloading;

            JsonDownloader jsonDownloader = new JsonDownloader();

            try
            {
                jsonDownloader.Client.DownloadProgressChanged += Client_DownloadProgressChanged;

                Model.DownloadPath = await jsonDownloader.GetTempFile(Model.DownloadUrl, Model.DownloadName);

                if (AutoUpdate)
                {
                    InstallUpdate();
                }
                else
                {
                    Model.Status = UpdateStatus.Ready;
                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex.Message);

                Model.Status = UpdateStatus.Error;
            }
            finally
            {
                Logger.Info("Download update finished");

                jsonDownloader.Client.DownloadProgressChanged -= Client_DownloadProgressChanged;
            }
        }