mirror of
https://github.com/bloxstraplabs/bloxstrap.git
synced 2025-04-21 10:01:27 -07:00
Merge pull request #68 from bluepilledgreat/total-bytes-progressbar
make progress bar use bytes downloaded
This commit is contained in:
commit
445018f1b9
@ -82,7 +82,9 @@ namespace Bloxstrap
|
|||||||
|
|
||||||
private readonly bool FreshInstall;
|
private readonly bool FreshInstall;
|
||||||
|
|
||||||
private int ProgressIncrement;
|
private double ProgressIncrement;
|
||||||
|
private long TotalBytes = 0;
|
||||||
|
private long TotalDownloadedBytes = 0;
|
||||||
private bool CancelFired = false;
|
private bool CancelFired = false;
|
||||||
|
|
||||||
public IBootstrapperDialog Dialog = null!;
|
public IBootstrapperDialog Dialog = null!;
|
||||||
@ -111,7 +113,9 @@ namespace Bloxstrap
|
|||||||
|
|
||||||
// if bloxstrap is installing for the first time but is running, prompt to close roblox
|
// if bloxstrap is installing for the first time but is running, prompt to close roblox
|
||||||
// if roblox needs updating but is running, ignore update for now
|
// if roblox needs updating but is running, ignore update for now
|
||||||
|
#if !DEBUG
|
||||||
if (!Directory.Exists(VersionFolder) && CheckIfRunning(true) || Program.Settings.VersionGuid != VersionGuid && !CheckIfRunning(false))
|
if (!Directory.Exists(VersionFolder) && CheckIfRunning(true) || Program.Settings.VersionGuid != VersionGuid && !CheckIfRunning(false))
|
||||||
|
#endif
|
||||||
await InstallLatestVersion();
|
await InstallLatestVersion();
|
||||||
|
|
||||||
await ApplyModifications();
|
await ApplyModifications();
|
||||||
@ -394,6 +398,12 @@ namespace Bloxstrap
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Roblox Install
|
#region Roblox Install
|
||||||
|
private void UpdateProgressbar()
|
||||||
|
{
|
||||||
|
int newProgress = (int)Math.Floor(ProgressIncrement * TotalDownloadedBytes);
|
||||||
|
Dialog.ProgressValue = newProgress;
|
||||||
|
}
|
||||||
|
|
||||||
private async Task InstallLatestVersion()
|
private async Task InstallLatestVersion()
|
||||||
{
|
{
|
||||||
if (FreshInstall)
|
if (FreshInstall)
|
||||||
@ -405,33 +415,24 @@ namespace Bloxstrap
|
|||||||
|
|
||||||
Dialog.CancelEnabled = true;
|
Dialog.CancelEnabled = true;
|
||||||
|
|
||||||
// i believe the bootstrapper bases the progress bar off
|
|
||||||
// bytes downloaded / bytes total according to rbxPkgManifest?
|
|
||||||
// i'm too lazy for that, so here it's just based off how many packages
|
|
||||||
// have finished downloading
|
|
||||||
|
|
||||||
Dialog.ProgressStyle = ProgressBarStyle.Continuous;
|
Dialog.ProgressStyle = ProgressBarStyle.Continuous;
|
||||||
|
|
||||||
ProgressIncrement = (int)Math.Floor((decimal)1 / VersionPackageManifest.Count * 100);
|
// compute total bytes to download
|
||||||
|
foreach (Package package in VersionPackageManifest)
|
||||||
|
TotalBytes += package.PackedSize;
|
||||||
|
|
||||||
|
ProgressIncrement = (double)1 / TotalBytes * 100;
|
||||||
|
|
||||||
Directory.CreateDirectory(Directories.Downloads);
|
Directory.CreateDirectory(Directories.Downloads);
|
||||||
|
|
||||||
foreach (Package package in VersionPackageManifest)
|
foreach (Package package in VersionPackageManifest)
|
||||||
{
|
{
|
||||||
// download all the packages at once
|
// download all the packages at once
|
||||||
DownloadPackage(package);
|
await DownloadPackage(package);
|
||||||
}
|
}
|
||||||
|
|
||||||
do
|
// allow progress bar to 100% before continuing (purely ux reasons lol)
|
||||||
{
|
await Task.Delay(1000);
|
||||||
// wait for download to finish (and also round off the progress bar if needed)
|
|
||||||
|
|
||||||
if (Dialog.ProgressValue == ProgressIncrement * VersionPackageManifest.Count)
|
|
||||||
Dialog.ProgressValue = 100;
|
|
||||||
|
|
||||||
await Task.Delay(1000);
|
|
||||||
}
|
|
||||||
while (Dialog.ProgressValue != 100);
|
|
||||||
|
|
||||||
Dialog.ProgressStyle = ProgressBarStyle.Marquee;
|
Dialog.ProgressStyle = ProgressBarStyle.Marquee;
|
||||||
|
|
||||||
@ -592,7 +593,7 @@ namespace Bloxstrap
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void DownloadPackage(Package package)
|
private async Task DownloadPackage(Package package)
|
||||||
{
|
{
|
||||||
string packageUrl = $"{DeployManager.BaseUrl}/{VersionGuid}-{package.Name}";
|
string packageUrl = $"{DeployManager.BaseUrl}/{VersionGuid}-{package.Name}";
|
||||||
string packageLocation = Path.Combine(Directories.Downloads, package.Signature);
|
string packageLocation = Path.Combine(Directories.Downloads, package.Signature);
|
||||||
@ -606,12 +607,13 @@ namespace Bloxstrap
|
|||||||
if (calculatedMD5 != package.Signature)
|
if (calculatedMD5 != package.Signature)
|
||||||
{
|
{
|
||||||
Debug.WriteLine($"{package.Name} is corrupted ({calculatedMD5} != {package.Signature})! Deleting and re-downloading...");
|
Debug.WriteLine($"{package.Name} is corrupted ({calculatedMD5} != {package.Signature})! Deleting and re-downloading...");
|
||||||
file.Delete();
|
file.Delete();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Debug.WriteLine($"{package.Name} is already downloaded, skipping...");
|
Debug.WriteLine($"{package.Name} is already downloaded, skipping...");
|
||||||
Dialog.ProgressValue += ProgressIncrement;
|
TotalDownloadedBytes += package.PackedSize;
|
||||||
|
UpdateProgressbar();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -622,7 +624,8 @@ namespace Bloxstrap
|
|||||||
|
|
||||||
Debug.WriteLine($"Found existing version of {package.Name} ({robloxPackageLocation})! Copying to Downloads folder...");
|
Debug.WriteLine($"Found existing version of {package.Name} ({robloxPackageLocation})! Copying to Downloads folder...");
|
||||||
File.Copy(robloxPackageLocation, packageLocation);
|
File.Copy(robloxPackageLocation, packageLocation);
|
||||||
Dialog.ProgressValue += ProgressIncrement;
|
TotalDownloadedBytes += package.PackedSize;
|
||||||
|
UpdateProgressbar();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -630,18 +633,30 @@ namespace Bloxstrap
|
|||||||
{
|
{
|
||||||
Debug.WriteLine($"Downloading {package.Name}...");
|
Debug.WriteLine($"Downloading {package.Name}...");
|
||||||
|
|
||||||
var response = await Program.HttpClient.GetAsync(packageUrl);
|
|
||||||
|
|
||||||
if (CancelFired)
|
if (CancelFired)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
var response = await Program.HttpClient.GetAsync(packageUrl, HttpCompletionOption.ResponseHeadersRead);
|
||||||
|
|
||||||
|
var buffer = new byte[8192];
|
||||||
|
|
||||||
|
using (var stream = await response.Content.ReadAsStreamAsync())
|
||||||
using (var fileStream = new FileStream(packageLocation, FileMode.CreateNew))
|
using (var fileStream = new FileStream(packageLocation, FileMode.CreateNew))
|
||||||
{
|
{
|
||||||
await response.Content.CopyToAsync(fileStream);
|
while (true)
|
||||||
|
{
|
||||||
|
var bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length);
|
||||||
|
if (bytesRead == 0)
|
||||||
|
break; // we're done
|
||||||
|
|
||||||
|
await fileStream.WriteAsync(buffer, 0, bytesRead);
|
||||||
|
|
||||||
|
TotalDownloadedBytes += bytesRead;
|
||||||
|
UpdateProgressbar();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Debug.WriteLine($"Finished downloading {package.Name}!");
|
Debug.WriteLine($"Finished downloading {package.Name}!");
|
||||||
Dialog.ProgressValue += ProgressIncrement;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -693,7 +708,7 @@ namespace Bloxstrap
|
|||||||
if (package is null)
|
if (package is null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
DownloadPackage(package);
|
DownloadPackage(package).GetAwaiter().GetResult();
|
||||||
|
|
||||||
string packageLocation = Path.Combine(Directories.Downloads, package.Signature);
|
string packageLocation = Path.Combine(Directories.Downloads, package.Signature);
|
||||||
string packageFolder = Path.Combine(VersionFolder, PackageDirectories[package.Name]);
|
string packageFolder = Path.Combine(VersionFolder, PackageDirectories[package.Name]);
|
||||||
@ -713,6 +728,6 @@ namespace Bloxstrap
|
|||||||
entry.ExtractToFile(fileLocation);
|
entry.ExtractToFile(fileLocation);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user