Files
BeWoPlaner/BeWoLauncher/View/Frames/InstallProgressInfoFrame.cs

184 lines
5.7 KiB
C#
Raw Normal View History

2022-09-14 10:57:51 +02:00
using BeWoLauncher.Logic.Controller;
using BeWoLauncher.Logic.Utils.Download;
using BS.SharedLauncher.Enums;
2022-09-14 10:57:51 +02:00
using BS.SharedLauncher.Update;
using System;
using System.ComponentModel;
using System.Configuration;
using System.Threading;
2022-09-14 17:24:17 +02:00
namespace BeWoLauncher.View.Frames
2022-09-14 10:57:51 +02:00
{
2022-09-14 17:24:17 +02:00
public class InstallProgressInfoFrame : GenericProgressInfo
2022-09-14 10:57:51 +02:00
{
public event EventHandler InstallSuccessful;
2022-09-14 10:57:51 +02:00
public DownloadManager Manager => DownloadController.Manager;
2022-09-14 17:24:17 +02:00
public InstallProgressInfoFrame() : base()
2022-09-14 10:57:51 +02:00
{
2022-09-14 17:24:17 +02:00
Bar1SetLimit(Manager.ResponseInfo.FileCount);
Bar1Hide();
Bar2SetLimit(100);
2022-09-14 10:57:51 +02:00
}
public override void Start()
{
var skipLock = bool.TryParse(ConfigurationManager.AppSettings.Get("SkipLock"), out bool c) && c;
Worker.DoWork += worker_DoWork;
Worker.ProgressChanged += worker_ProgressChanged;
Worker.RunWorkerCompleted += worker_completed;
Worker.WorkerReportsProgress = true;
2022-09-14 10:57:51 +02:00
Worker.RunWorkerAsync(skipLock);
}
2022-09-14 10:57:51 +02:00
void worker_DoWork(object sender, DoWorkEventArgs e)
{
bool skipLock = (bool)e.Argument;
BackgroundWorker worker = sender as BackgroundWorker;
// UI: 0
worker.ReportProgress((int)LauncherProgress.ProgressStart);
2022-09-14 10:57:51 +02:00
// Wait
2022-09-14 10:57:51 +02:00
Thread.Sleep(1000);
// UI: 1
worker.ReportProgress((int)LauncherProgress.DownloadStart);
// Wait
Thread.Sleep(500);
// Process: 2
DownloadController.Manager.StartDownload(skipLock, worker.ReportProgress);
// UI: 3
worker.ReportProgress((int)LauncherProgress.DownloadFinish);
2022-09-14 10:57:51 +02:00
// Wait
2022-09-14 10:57:51 +02:00
Thread.Sleep(1000);
// UI: 4
worker.ReportProgress((int)LauncherProgress.ApplyStart);
// Wait
Thread.Sleep(500);
// Process: 5
2022-09-14 10:57:51 +02:00
DownloadController.Manager.StartApply(skipLock, worker.ReportProgress);
// UI: 6
worker.ReportProgress((int)LauncherProgress.ApplyFinished);
// Wait
Thread.Sleep(1000);
// Process: 7, Wait, 8
DownloadController.Manager.StartCleanup(worker.ReportProgress);
// UI: 9
worker.ReportProgress((int)LauncherProgress.DeleteFinished);
// Wait
Thread.Sleep(500);
// UI: 10
worker.ReportProgress((int)LauncherProgress.ProgressEnd);
2022-09-14 10:57:51 +02:00
}
private void worker_completed(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Error != null)
2022-09-14 10:57:51 +02:00
{
ViewController.ViewBehavior.InstallationFailed(e.Error);
2022-09-14 10:57:51 +02:00
}
else
{
InstallSuccessful.Invoke(this, new EventArgs());
}
}
private void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
var progress = (LauncherProgress)e.ProgressPercentage;
var obj = e.UserState;
2022-09-14 17:24:17 +02:00
switch (progress)
{
case LauncherProgress.ProgressStart:
Message = "Installation wird vorbereitet...";
SubMessage = "Lade benötigte Pakete herunter...";
break;
case LauncherProgress.DownloadStart:
Message = "Download startet...";
SubMessage = "";
Bar1Show();
Bar1Deactivate();
Bar2SetPercent(10);
break;
case LauncherProgress.DownloadUpdate:
throw new NotImplementedException("#fd42398");
var args = obj as DownloadProgressEventArgs;
SubMessage = $"{args.Progress.ToString("0.##")}% fertig";
break;
case LauncherProgress.DownloadFinish:
Message = "Download abgeschlossen!";
SubMessage = "";
Bar2SetPercent(40);
break;
case LauncherProgress.ApplyStart:
Message = "Füge Pakete hinzu...";
SubMessage = "";
Bar1Activate();
break;
case LauncherProgress.ApplyUpdate:
var args2 = obj as ApplyFileEventArgs;
SubMessage = $"{args2.Name} wurde erfolgreich von \n{args2.AbsolutePath} hinzugefügt!";
Bar1MakeStep();
break;
case LauncherProgress.ApplyFinished:
Message = "Hinzufügen abgeschlossen!";
SubMessage = "";
Bar2SetPercent(80);
Bar1Deactivate();
break;
case LauncherProgress.DeleteStart:
Message = "Ungebrauchte Datei(en) gefunden.";
SubMessage = "";
break;
case LauncherProgress.DeleteUpdate:
var args3 = obj as string;
SubMessage = $"{args3} wurde entfernt!";
break;
case LauncherProgress.DeleteFinished:
Message = "Säuberung abgeschlossen!";
SubMessage = "";
Bar2SetPercent(95);
Bar1Deactivate();
break;
case LauncherProgress.ProgressEnd:
Message = "Installation abgeschlossen!";
SubMessage = "";
Bar2Fill();
break;
default:
break;
2022-09-14 10:57:51 +02:00
}
}
}
}