using System; using System.IO; using System.Net; using TweetDuck.Core.Utils; namespace TweetDuck.Updates{ sealed class UpdateInfo{ public string VersionTag { get; } public string InstallerPath { get; } public UpdateDownloadStatus DownloadStatus { get; private set; } public Exception DownloadError { get; private set; } private readonly string installerFolder; private readonly string downloadUrl; private WebClient currentDownload; public UpdateInfo(UpdaterSettings settings, string versionTag, string downloadUrl){ this.installerFolder = settings.InstallerDownloadFolder; this.downloadUrl = downloadUrl; this.VersionTag = versionTag; this.InstallerPath = Path.Combine(installerFolder, "TweetDuck."+versionTag+".exe"); } public void BeginSilentDownload(){ if (DownloadStatus == UpdateDownloadStatus.None || DownloadStatus == UpdateDownloadStatus.Failed){ DownloadStatus = UpdateDownloadStatus.InProgress; try{ Directory.CreateDirectory(installerFolder); }catch(Exception e){ DownloadError = e; DownloadStatus = UpdateDownloadStatus.Failed; return; } if (string.IsNullOrEmpty(downloadUrl)){ DownloadError = new UriFormatException("Could not determine URL of the update installer"); DownloadStatus = UpdateDownloadStatus.Failed; return; } currentDownload = BrowserUtils.DownloadFileAsync(downloadUrl, InstallerPath, () => { DownloadStatus = UpdateDownloadStatus.Done; currentDownload = null; }, e => { DownloadError = e; DownloadStatus = UpdateDownloadStatus.Failed; currentDownload = null; }); } } public void DeleteInstaller(){ DownloadStatus = UpdateDownloadStatus.None; if (currentDownload != null && currentDownload.IsBusy){ currentDownload.CancelAsync(); // deletes file when cancelled return; } try{ File.Delete(InstallerPath); }catch{ // rip } } } }