mirror of
https://github.com/louislam/uptime-kuma.git
synced 2024-12-28 06:59:42 -08:00
WIP
This commit is contained in:
parent
3eaccb560e
commit
655ba015a0
|
@ -1,14 +1,19 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
|
using System.Diagnostics;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.IO.Compression;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
|
|
||||||
namespace UptimeKuma {
|
namespace UptimeKuma {
|
||||||
public partial class DownloadForm : Form {
|
public partial class DownloadForm : Form {
|
||||||
private readonly Queue<DownloadItem> downloadQueue = new();
|
private readonly Queue<DownloadItem> downloadQueue = new();
|
||||||
private readonly WebClient webClient = new();
|
private readonly WebClient webClient = new();
|
||||||
|
private DownloadItem currentDownloadItem;
|
||||||
|
|
||||||
public DownloadForm() {
|
public DownloadForm() {
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
@ -18,17 +23,19 @@ namespace UptimeKuma {
|
||||||
webClient.DownloadProgressChanged += DownloadProgressChanged;
|
webClient.DownloadProgressChanged += DownloadProgressChanged;
|
||||||
webClient.DownloadFileCompleted += DownloadFileCompleted;
|
webClient.DownloadFileCompleted += DownloadFileCompleted;
|
||||||
|
|
||||||
if (!File.Exists("node")) {
|
if (!Directory.Exists("node")) {
|
||||||
downloadQueue.Enqueue(new DownloadItem {
|
downloadQueue.Enqueue(new DownloadItem {
|
||||||
URL = "https://nodejs.org/dist/v16.17.1/node-v16.17.1-win-x64.zip",
|
URL = "https://nodejs.org/dist/v16.17.1/node-v16.17.1-win-x64.zip",
|
||||||
Filename = "node.zip"
|
Filename = "node.zip",
|
||||||
|
TargetFolder = "node"
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!File.Exists("node")) {
|
if (!Directory.Exists("node")) {
|
||||||
downloadQueue.Enqueue(new DownloadItem {
|
downloadQueue.Enqueue(new DownloadItem {
|
||||||
URL = "https://github.com/louislam/uptime-kuma/archive/refs/tags/1.18.3.zip",
|
URL = "https://github.com/louislam/uptime-kuma/archive/refs/tags/1.18.3.zip",
|
||||||
Filename = "core.zip"
|
Filename = "core.zip",
|
||||||
|
TargetFolder = "core"
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -38,28 +45,130 @@ namespace UptimeKuma {
|
||||||
void DownloadNextFile() {
|
void DownloadNextFile() {
|
||||||
if (downloadQueue.Count > 0) {
|
if (downloadQueue.Count > 0) {
|
||||||
var item = downloadQueue.Dequeue();
|
var item = downloadQueue.Dequeue();
|
||||||
|
|
||||||
|
currentDownloadItem = item;
|
||||||
|
|
||||||
|
// Download if the zip file is not existing
|
||||||
|
if (!File.Exists(item.Filename)) {
|
||||||
label.Text = item.URL;
|
label.Text = item.URL;
|
||||||
webClient.DownloadFileAsync(new Uri(item.URL), item.Filename);
|
webClient.DownloadFileAsync(new Uri(item.URL), item.Filename);
|
||||||
} else {
|
} else {
|
||||||
// TODO: Finished, extract?
|
progressBar.Value = 100;
|
||||||
|
label.Text = "Use local " + item.Filename;
|
||||||
|
DownloadFileCompleted(null, null);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
npmSetup();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void npmSetup() {
|
||||||
|
if (Directory.Exists("core/node_modules")) {
|
||||||
|
// Application.Restart();
|
||||||
|
}
|
||||||
|
|
||||||
|
label.Text = "npm run setup";
|
||||||
|
progressBar.Value = 50;
|
||||||
|
labelData.Text = "";
|
||||||
|
|
||||||
|
var startInfo = new ProcessStartInfo {
|
||||||
|
FileName = "cmd.exe",
|
||||||
|
Arguments = "run setup",
|
||||||
|
RedirectStandardOutput = false,
|
||||||
|
RedirectStandardError = false,
|
||||||
|
RedirectStandardInput = true,
|
||||||
|
UseShellExecute = false,
|
||||||
|
CreateNoWindow = false,
|
||||||
|
WorkingDirectory = "core"
|
||||||
|
};
|
||||||
|
|
||||||
|
var process = new Process();
|
||||||
|
process.StartInfo = startInfo;
|
||||||
|
process.EnableRaisingEvents = true;
|
||||||
|
process.Exited += (object _, EventArgs e) => {
|
||||||
|
// Application.Restart();
|
||||||
|
progressBar.Value = 100;
|
||||||
|
|
||||||
|
if (process.ExitCode == 0) {
|
||||||
|
label.Text = "Done";
|
||||||
|
} else {
|
||||||
|
label.Text = "Failed, exit code: " + process.ExitCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
process.Start();
|
||||||
|
process.StandardInput.WriteLine("\"../node/npm\" run setup");
|
||||||
}
|
}
|
||||||
|
|
||||||
void DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) {
|
void DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) {
|
||||||
progressBar.Value = e.ProgressPercentage;
|
progressBar.Value = e.ProgressPercentage;
|
||||||
var total = e.TotalBytesToReceive / 1024;
|
var total = e.TotalBytesToReceive / 1024;
|
||||||
var current = e.BytesReceived / 1024;
|
var current = e.BytesReceived / 1024;
|
||||||
|
|
||||||
|
if (total > 0) {
|
||||||
labelData.Text = $"{current}KB/{total}KB";
|
labelData.Text = $"{current}KB/{total}KB";
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void DownloadFileCompleted(object sender, AsyncCompletedEventArgs e) {
|
async void DownloadFileCompleted(object sender, AsyncCompletedEventArgs e) {
|
||||||
|
Extract(currentDownloadItem);
|
||||||
DownloadNextFile();
|
DownloadNextFile();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Extract(DownloadItem item) {
|
||||||
|
if (Directory.Exists(item.TargetFolder)) {
|
||||||
|
var dir = new DirectoryInfo(item.TargetFolder);
|
||||||
|
dir.Delete(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Directory.Exists("temp")) {
|
||||||
|
var dir = new DirectoryInfo("temp");
|
||||||
|
dir.Delete(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
labelData.Text = $"Extracting {item.Filename}...";
|
||||||
|
|
||||||
|
ZipFile.ExtractToDirectory(item.Filename, "temp");
|
||||||
|
|
||||||
|
string[] dirList;
|
||||||
|
|
||||||
|
// Move to the correct level
|
||||||
|
dirList = Directory.GetDirectories("temp");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (dirList.Length > 0) {
|
||||||
|
var dir = dirList[0];
|
||||||
|
|
||||||
|
// As sometime ExtractToDirectory is still locking the directory, loop until ok
|
||||||
|
while (true) {
|
||||||
|
try {
|
||||||
|
Directory.Move(dir, item.TargetFolder);
|
||||||
|
break;
|
||||||
|
} catch (Exception exception) {
|
||||||
|
Thread.Sleep(1000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
MessageBox.Show("Unexcepted Error: Cannot move extracted files, folder not found.");
|
||||||
|
}
|
||||||
|
|
||||||
|
labelData.Text = $"Extracted";
|
||||||
|
|
||||||
|
if (Directory.Exists("temp")) {
|
||||||
|
var dir = new DirectoryInfo("temp");
|
||||||
|
dir.Delete(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
File.Delete(item.Filename);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class DownloadItem {
|
public class DownloadItem {
|
||||||
public string URL { get; set; }
|
public string URL { get; set; }
|
||||||
public string Filename { get; set; }
|
public string Filename { get; set; }
|
||||||
|
public string TargetFolder { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -45,7 +45,7 @@ namespace UptimeKuma {
|
||||||
trayIcon.MouseDoubleClick += new MouseEventHandler(Open);
|
trayIcon.MouseDoubleClick += new MouseEventHandler(Open);
|
||||||
trayIcon.Visible = true;
|
trayIcon.Visible = true;
|
||||||
|
|
||||||
if (File.Exists("core") && File.Exists("node")) {
|
if (Directory.Exists("core") && Directory.Exists("node") && Directory.Exists("core/node_modules")) {
|
||||||
// Go go go
|
// Go go go
|
||||||
StartProcess();
|
StartProcess();
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -35,11 +35,12 @@
|
||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<PostBuildEvent>COPY "$(SolutionDir)bin\Debug\uptime-kuma.exe" "C:\Users\LouisLam\Desktop\uptime-kuma-win64\"</PostBuildEvent>
|
<PostBuildEvent>COPY "$(SolutionDir)bin\Debug\uptime-kuma.exe" "%UserProfile%\Desktop\uptime-kuma-win64\"</PostBuildEvent>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
<Reference Include="System.Core" />
|
<Reference Include="System.Core" />
|
||||||
|
<Reference Include="System.IO.Compression.FileSystem" />
|
||||||
<Reference Include="System.Xml.Linq" />
|
<Reference Include="System.Xml.Linq" />
|
||||||
<Reference Include="System.Data.DataSetExtensions" />
|
<Reference Include="System.Data.DataSetExtensions" />
|
||||||
<Reference Include="Microsoft.CSharp" />
|
<Reference Include="Microsoft.CSharp" />
|
||||||
|
|
Loading…
Reference in a new issue