Progress Tracking

This commit is contained in:
JacobTech 2023-10-17 16:29:33 -04:00
parent 008ea2ee02
commit b9754bc79b
4 changed files with 47 additions and 33 deletions

View File

@ -51,6 +51,9 @@ public class Config
A = 1f A = 1f
} }
}; };
if (!Directory.Exists(Program.JT)) Directory.CreateDirectory(Program.JT);
if (!Directory.Exists(Program.JT + "/Updater")) Directory.CreateDirectory(Program.JT + "/Updater" );
if (!Directory.Exists(Program.JT + "/Updater/Config")) Directory.CreateDirectory(Program.JT + "/Updater/Config");
FileStream ms = new(Program.JT + "/Updater/Config/Settings.json", FileMode.Create); FileStream ms = new(Program.JT + "/Updater/Config/Settings.json", FileMode.Create);
JsonSerializer.Serialize(new Utf8JsonWriter(ms), JsonSerializer.Serialize(new Utf8JsonWriter(ms),
file, file,

View File

@ -3,9 +3,9 @@ using System.Diagnostics;
using System.Net; using System.Net;
using System.Text.Json; using System.Text.Json;
using GraphicsManager; using GraphicsManager;
using GraphicsManager.Enums;
using GraphicsManager.Objects; using GraphicsManager.Objects;
using GraphicsManager.Objects.Core; using GraphicsManager.Objects.Core;
using OpenTK.Mathematics;
using OpenTK.Windowing.Desktop; using OpenTK.Windowing.Desktop;
namespace Updater; namespace Updater;
@ -13,43 +13,48 @@ namespace Updater;
public class NewUpdater : FPSWindow public class NewUpdater : FPSWindow
{ {
private readonly ConfigFile cf; private readonly ConfigFile cf;
private Texture ProgressbarTexture;
private ProgressBar TotalProgress; private ProgressBar TotalProgress;
private Argumets Argumets; private Argumets Argumets;
private List<ProgressBar> ProgressThreads = new(); private List<ProgressBar> ProgressThreads = new();
public FontInteraction fi;
private int WallDistance;
private readonly BackgroundWorker Download = new(); private readonly BackgroundWorker Download = new();
public NewUpdater(NativeWindowSettings nws, GameWindowSettings gws, Argumets args) public NewUpdater(NativeWindowSettings nws, GameWindowSettings gws, Argumets args)
:base(nws, gws) :base(nws, gws)
{ {
cf = Config.GetConfig(); cf = Config.GetConfig();
Size = new(cf.Scale(Size.X), cf.Scale(Size.Y));
Argumets = args; Argumets = args;
fi = FontInteraction.Load(FontFamily.LoadFontFamily("Noto Sans").Result); var r = FontFamily.LoadFontFamily().Result;
FontInteraction fi = FontInteraction.Load(r);
BackgroundColor = cf.Colors.Background.ToColor4(); BackgroundColor = cf.Colors.Background.ToColor4();
WallDistance = cf.Scale(16); int WallDistance = cf.Scale(15);
ProgressbarTexture = TextureManager.AddTexture(File.OpenRead("/home/jacob/Pictures/Progress.png")); //Texture ProgressbarTexture = TextureManager.AddTexture(File.OpenRead("/home/jacob/Pictures/Progress.png"));
Controls.Add(TotalProgress = new ProgressBar(ProgressbarTexture) Controls.Add(TotalProgress = new ProgressBar()
{ {
Location = new(WallDistance, cf.Scale(70), 0), Location = new(WallDistance, cf.Scale(70), 0),
Size = new(Size.X - WallDistance - WallDistance, cf.Scale(20)), Size = new(Size.X - WallDistance - WallDistance, cf.Scale(20)),
BackgroundColor = cf.Colors.Progress_bars.Backcolor.ToColor4(), BackgroundColor = cf.Colors.Progress_bars.Backcolor.ToColor4(),
ProgressColor = cf.Colors.Progress_bars.Fillcolor.ToColor4(), ProgressColor = cf.Colors.Progress_bars.Fillcolor.ToColor4(),
ProgressValue = 25, ProgressValue = 25,
ProgressGap = 4, ProgressGap = (uint)cf.Scale(3),
Shader = Rectangle.DefaultAlphaShader[Context], //Shader = Rectangle.DefaultAlphaShader[Context],
TextureDisplay = TextureDisplay.ProgressHorizontalCenter, //TextureDisplay = TextureDisplay.ProgressHorizontalCenter,
UpdateOnDraw = true UpdateOnDraw = true
}); });
TotalProgress.InnerShader = TotalProgress.Shader; //TotalProgress.InnerShader = TotalProgress.Shader;
int gap = cf.Scale(15); int gap = cf.Scale(10);
for (int i = 0; i < cf.Format.DownloadThreads; i++) for (int i = 0; i < cf.Format.DownloadThreads; i++)
{ {
ProgressBar temp; ProgressBar temp;
Size = new(Size.X, Size.Y + gap + TotalProgress.Size.Y); Size = new(Size.X, Size.Y + gap + TotalProgress.Size.Y);
Controls.Add(temp = new ProgressBar(ProgressbarTexture) Label l = new(fi)
{ {
Location = new(WallDistance, cf.Scale(70) + (TotalProgress.Size.Y * (i + 1)) + (cf.Scale(15) * (i + 1)), 0), Color = Color4.Black,
Text = "Downloading bob"
};
l.Location = new(cf.Scale(5), (int)(((TotalProgress.Size.Y - l.TrueHeight) / 2) - fi.PixelHeight + l.PostiveTrueHeight), 0);
Controls.Add(temp = new ProgressBar()
{
Location = new(WallDistance, cf.Scale(70) + (TotalProgress.Size.Y * (i + 1)) + (gap * (i + 1)), 0),
Size = TotalProgress.Size, Size = TotalProgress.Size,
BackgroundColor = TotalProgress.BackgroundColor, BackgroundColor = TotalProgress.BackgroundColor,
ProgressColor = TotalProgress.ProgressColor, ProgressColor = TotalProgress.ProgressColor,
@ -57,13 +62,15 @@ public class NewUpdater : FPSWindow
ProgressGap = TotalProgress.ProgressGap, ProgressGap = TotalProgress.ProgressGap,
Shader = TotalProgress.Shader, Shader = TotalProgress.Shader,
TextureDisplay = TotalProgress.TextureDisplay, TextureDisplay = TotalProgress.TextureDisplay,
UpdateOnDraw = true UpdateOnDraw = true,
InnerShader = TotalProgress.InnerShader,
Tag = l
}); });
temp.InnerShader = TotalProgress.Shader; temp.Controls.Add(l);
ProgressThreads.Add(temp); ProgressThreads.Add(temp);
} }
fi.PixelHeight = (uint)cf.Scale(15); fi.PixelHeight = (uint)cf.Scale(15);
Download.DoWork += new DoWorkEventHandler(Download_DoWork); Download.DoWork += Download_DoWork;
Download.RunWorkerCompleted += Download_RunWorkerCompleted; Download.RunWorkerCompleted += Download_RunWorkerCompleted;
Download.WorkerReportsProgress = true; Download.WorkerReportsProgress = true;
Invoke(new Action(() => { Download.RunWorkerAsync(); })); Invoke(new Action(() => { Download.RunWorkerAsync(); }));
@ -130,11 +137,10 @@ public class NewUpdater : FPSWindow
#pragma warning restore SYSLIB0014 // Type or member is obsolete #pragma warning restore SYSLIB0014 // Type or member is obsolete
ChangeProcessText("Getting update info"); ChangeProcessText("Getting update info");
string rem = webPre.DownloadString($"https://{Program.Domain}/Updater/Files?directory={Argumets.RemoteDirectory}{Argumets.UriBranch}{Argumets.UriSeflContaind}{Argumets.UriPlatform}{Argumets.UriVersion}"); string rem = webPre.DownloadString($"https://{Program.Domain}/Updater/Files?directory={Argumets.RemoteDirectory}{Argumets.UriBranch}{Argumets.UriSeflContaind}{Argumets.UriPlatform}{Argumets.UriVersion}");
ulong realmax; //string uri;
string uri;
try try
{ {
realmax = ulong.Parse(webPre.DownloadString($"https://{Program.Domain}/Updater/GetSize?directory={Argumets.RemoteDirectory}{Argumets.UriBranch}{Argumets.UriSeflContaind}{Argumets.UriPlatform}{Argumets.UriVersion}")); ulong realmax = ulong.Parse(webPre.DownloadString($"https://{Program.Domain}/Updater/GetSize?directory={Argumets.RemoteDirectory}{Argumets.UriBranch}{Argumets.UriSeflContaind}{Argumets.UriPlatform}{Argumets.UriVersion}"));
TotalProgress.MaxProgressValue = realmax; TotalProgress.MaxProgressValue = realmax;
Console.WriteLine(TotalProgress.MaxProgressValue); Console.WriteLine(TotalProgress.MaxProgressValue);
//queue.Enqueue(new Action(() => { if (Total_Downloaded is not null) Total_Downloaded.Text = TotalDownloadAmountNeat(realmax); })); //queue.Enqueue(new Action(() => { if (Total_Downloaded is not null) Total_Downloaded.Text = TotalDownloadAmountNeat(realmax); }));
@ -155,8 +161,7 @@ public class NewUpdater : FPSWindow
#pragma warning restore SYSLIB0014 // Type or member is obsolete #pragma warning restore SYSLIB0014 // Type or member is obsolete
if (string.IsNullOrEmpty(file)) return; if (string.IsNullOrEmpty(file)) return;
Console.WriteLine(file); string uri = $"https://{Program.Domain}/Updater/GetFileSize?directory={Argumets.RemoteDirectory}{Argumets.UriBranch}{Argumets.UriVersion}{Argumets.UriSeflContaind}{Argumets.UriPlatform}&file={file}";
uri = $"https://{Program.Domain}/Updater/GetFileSize?directory={Argumets.RemoteDirectory}{Argumets.UriBranch}{Argumets.UriVersion}{Argumets.UriSeflContaind}{Argumets.UriPlatform}&file={file}";
Uri u = new($"https://{Program.Domain}/Updater/GetFile?directory={Argumets.RemoteDirectory}{Argumets.UriBranch}{Argumets.UriVersion}{Argumets.UriSeflContaind}{Argumets.UriPlatform}&file={file}"); Uri u = new($"https://{Program.Domain}/Updater/GetFile?directory={Argumets.RemoteDirectory}{Argumets.UriBranch}{Argumets.UriVersion}{Argumets.UriSeflContaind}{Argumets.UriPlatform}&file={file}");
Console.WriteLine(file); Console.WriteLine(file);
Console.WriteLine(uri); Console.WriteLine(uri);
@ -217,7 +222,12 @@ public class NewUpdater : FPSWindow
TotalProgress.ProgressValue += (ulong)args.BytesReceived - pb.ProgressValue; TotalProgress.ProgressValue += (ulong)args.BytesReceived - pb.ProgressValue;
pb.ProgressValue = (ulong)args.BytesReceived; pb.ProgressValue = (ulong)args.BytesReceived;
}; };
ChangeProcessText($"Downloading {temp[^1]}"); string s = $"Downloading {temp[^1]}";
ChangeProcessText(s);
if (pb.Tag is Label l && temp[^1] == "file2.txt")
{
l.Text = s;
}
if (Argumets.Updater is null) if (Argumets.Updater is null)
{ {
web.DownloadFileTaskAsync(u, Argumets.LocalDirectory + file).Wait(); web.DownloadFileTaskAsync(u, Argumets.LocalDirectory + file).Wait();

View File

@ -45,8 +45,8 @@ void main()
{ {
this.Text = Text; this.Text = Text;
this.PixelHeight = PixelHeight; this.PixelHeight = PixelHeight;
this.X = FloatToInt(x, StartGUI.Width); this.X = FloatToInt(x, 1);
this.Y = FloatToInt(y, StartGUI.Height, true); this.Y = FloatToInt(y, 1, true);
this.Scale = scale; this.Scale = scale;
this.DIR = dir; this.DIR = dir;
this.Color = col; this.Color = col;
@ -190,8 +190,8 @@ void main()
Shader.Use(); Shader.Use();
GL.Enable(EnableCap.Blend); GL.Enable(EnableCap.Blend);
GL.Uniform4(2, Color); GL.Uniform4(2, Color);
_ = Matrix4.CreateScale(new Vector3(1f / StartGUI.Width, 1f / StartGUI.Height, 1.0f)); _ = Matrix4.CreateScale(new Vector3(1f / 1, 1f / 1, 1.0f));
Matrix4 projectionM = Matrix4.CreateOrthographicOffCenter(0.0f, StartGUI.Width, StartGUI.Height, 0.0f, -1.0f, 1.0f); Matrix4 projectionM = Matrix4.CreateOrthographicOffCenter(0.0f, 1, 1, 0.0f, -1.0f, 1.0f);
GL.BlendFunc(BlendingFactor.SrcAlpha, BlendingFactor.OneMinusSrcAlpha); GL.BlendFunc(BlendingFactor.SrcAlpha, BlendingFactor.OneMinusSrcAlpha);
GL.BlendFunc(0, BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha); GL.BlendFunc(0, BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha);
GL.UniformMatrix4(1, false, ref projectionM); GL.UniformMatrix4(1, false, ref projectionM);

View File

@ -13,8 +13,8 @@ namespace Updater;
public class StartGUI public class StartGUI
{ {
internal static int Width = 694; //internal static int Width = 694;
internal static int Height = 216; //internal static int Height = 216;
public static SixLabors.ImageSharp.Image<Rgba32>? Logo { get; private set; } public static SixLabors.ImageSharp.Image<Rgba32>? Logo { get; private set; }
static readonly NativeWindowSettings Settings = new() static readonly NativeWindowSettings Settings = new()
{ {
@ -22,6 +22,7 @@ public class StartGUI
WindowBorder = WindowBorder.Fixed, WindowBorder = WindowBorder.Fixed,
APIVersion = new Version(3, 2), APIVersion = new Version(3, 2),
StartFocused = true, StartFocused = true,
Size = new(694, 105)
}; };
private static readonly GameWindowSettings GameWindowSettings = new() private static readonly GameWindowSettings GameWindowSettings = new()
@ -43,7 +44,7 @@ public class StartGUI
/// <param name="args"></param> /// <param name="args"></param>
internal static int Main(Argumets args) internal static int Main(Argumets args)
{ {
/*
var mmm = Monitors.GetMonitors(); var mmm = Monitors.GetMonitors();
if (mmm is not null && mmm.Any()) if (mmm is not null && mmm.Any())
{ {
@ -56,8 +57,8 @@ public class StartGUI
Height = temph - 30; Height = temph - 30;
// Settings.CurrentMonitor = mi.Handle; // Settings.CurrentMonitor = mi.Handle;
} }
Settings.Size = new Vector2i(Width, Height); //Settings.Size = new Vector2i(Width, Height);
*/
Image<Rgba32> Logo = SixLabors.ImageSharp.Image.Load<Rgba32>(Tools.GetResourceStream(Assembly.GetExecutingAssembly(), "Updater.Resource.Logo.png")); Image<Rgba32> Logo = SixLabors.ImageSharp.Image.Load<Rgba32>(Tools.GetResourceStream(Assembly.GetExecutingAssembly(), "Updater.Resource.Logo.png"));
Logo.DangerousTryGetSinglePixelMemory(out Memory<Rgba32> m); Logo.DangerousTryGetSinglePixelMemory(out Memory<Rgba32> m);
byte[] pixels = new byte[4 * Logo.Width * Logo.Height]; byte[] pixels = new byte[4 * Logo.Width * Logo.Height];