You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
uptime-kuma/extra/exe-builder/DownloadForm.cs

66 lines
2.1 KiB

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Net;
using System.Windows.Forms;
namespace UptimeKuma {
public partial class DownloadForm : Form {
private readonly Queue<DownloadItem> downloadQueue = new();
private readonly WebClient webClient = new();
public DownloadForm() {
InitializeComponent();
}
private void DownloadForm_Load(object sender, EventArgs e) {
webClient.DownloadProgressChanged += DownloadProgressChanged;
webClient.DownloadFileCompleted += DownloadFileCompleted;
if (!File.Exists("node")) {
downloadQueue.Enqueue(new DownloadItem {
URL = "https://nodejs.org/dist/v16.17.1/node-v16.17.1-win-x64.zip",
Filename = "node.zip"
});
}
if (!File.Exists("node")) {
downloadQueue.Enqueue(new DownloadItem {
URL = "https://github.com/louislam/uptime-kuma/archive/refs/tags/1.18.3.zip",
Filename = "core.zip"
});
}
DownloadNextFile();
}
void DownloadNextFile() {
if (downloadQueue.Count > 0) {
var item = downloadQueue.Dequeue();
label.Text = item.URL;
webClient.DownloadFileAsync(new Uri(item.URL), item.Filename);
} else {
// TODO: Finished, extract?
}
}
void DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) {
progressBar.Value = e.ProgressPercentage;
var total = e.TotalBytesToReceive / 1024;
var current = e.BytesReceived / 1024;
labelData.Text = $"{current}KB/{total}KB";
}
void DownloadFileCompleted(object sender, AsyncCompletedEventArgs e) {
DownloadNextFile();
}
}
public class DownloadItem {
public string URL { get; set; }
public string Filename { get; set; }
}
}