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; } }
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; } }