1
0
mirror of https://github.com/chylex/TweetDuck.git synced 2024-11-23 08:42:47 +01:00
TweetDuck/Updates/UpdateInfo.cs

91 lines
3.0 KiB
C#

using System;
using System.IO;
using System.Net;
using TweetDuck.Core.Utils;
namespace TweetDuck.Updates{
sealed class UpdateInfo{
public string VersionTag { get; }
public string ReleaseNotes { get; }
public string InstallerPath { get; }
public UpdateDownloadStatus DownloadStatus { get; private set; }
public Exception DownloadError { get; private set; }
private readonly string downloadUrl;
private readonly string installerFolder;
private WebClient currentDownload;
public UpdateInfo(string versionTag, string releaseNotes, string downloadUrl, string installerFolder){
this.downloadUrl = downloadUrl;
this.installerFolder = installerFolder;
this.VersionTag = versionTag;
this.ReleaseNotes = releaseNotes;
this.InstallerPath = Path.Combine(installerFolder, $"TweetDuck.{versionTag}.exe");
}
public void BeginSilentDownload(){
if (WindowsUtils.FileExistsAndNotEmpty(InstallerPath)){
DownloadStatus = UpdateDownloadStatus.Done;
return;
}
if (DownloadStatus == UpdateDownloadStatus.None || DownloadStatus == UpdateDownloadStatus.Failed){
DownloadStatus = UpdateDownloadStatus.InProgress;
if (string.IsNullOrEmpty(downloadUrl)){
DownloadError = new InvalidDataException("Missing installer asset.");
DownloadStatus = UpdateDownloadStatus.AssetMissing;
return;
}
try{
Directory.CreateDirectory(installerFolder);
}catch(Exception e){
DownloadError = e;
DownloadStatus = UpdateDownloadStatus.Failed;
return;
}
currentDownload = BrowserUtils.DownloadFileAsync(downloadUrl, InstallerPath, null, () => {
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
}
}
public void CancelDownload(){
DeleteInstaller();
DownloadStatus = UpdateDownloadStatus.Canceled;
}
public override bool Equals(object obj){
return obj is UpdateInfo info && VersionTag == info.VersionTag;
}
public override int GetHashCode(){
return VersionTag.GetHashCode();
}
}
}