make zip unpacking and saving data to storage
This commit is contained in:
parent
c6a0b39ded
commit
297a784956
7 changed files with 78 additions and 12 deletions
7
MetaforceInstaller.Core/Defaults.cs
Normal file
7
MetaforceInstaller.Core/Defaults.cs
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
namespace MetaforceInstaller.Core;
|
||||
|
||||
public static class Defaults
|
||||
{
|
||||
public static readonly string StoragePath =
|
||||
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + Path.DirectorySeparatorChar + "MetaforceInstaller";
|
||||
}
|
||||
|
|
@ -3,8 +3,6 @@
|
|||
public class InstallationData
|
||||
{
|
||||
public Guid Id { get; set; } = Guid.NewGuid();
|
||||
public string Title { get; set; }
|
||||
public string AndroidPackagePath { get; set; }
|
||||
public string WindowsServerPackagePath { get; set; }
|
||||
public string WindowsAdminPackagePath { get; set; }
|
||||
public required string Title { get; set; }
|
||||
public required InstallationParts Parts { get; set; }
|
||||
}
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
namespace MetaforceInstaller.Core.Models;
|
||||
|
||||
public record InstallationParts
|
||||
public class InstallationParts
|
||||
{
|
||||
public string? OculusClientPath { get; init; }
|
||||
public string? PicoClientPath { get; init; }
|
||||
|
|
@ -9,4 +9,18 @@ public record InstallationParts
|
|||
public string? WindowsContentPath { get; init; }
|
||||
public string? WindowsAdminPath { get; init; }
|
||||
public string? WindowsServerPath { get; init; }
|
||||
|
||||
public InstallationParts ExtendPaths(string prefixPath)
|
||||
{
|
||||
return new InstallationParts
|
||||
{
|
||||
OculusClientPath = OculusClientPath is null ? null : Path.Combine(prefixPath, OculusClientPath),
|
||||
PicoClientPath = PicoClientPath is null ? null : Path.Combine(prefixPath, PicoClientPath),
|
||||
AndroidAdminPath = AndroidAdminPath is null ? null : Path.Combine(prefixPath, AndroidAdminPath),
|
||||
AndroidContentPath = AndroidContentPath is null ? null : Path.Combine(prefixPath, AndroidContentPath),
|
||||
WindowsContentPath = WindowsContentPath is null ? null : Path.Combine(prefixPath, WindowsContentPath),
|
||||
WindowsAdminPath = WindowsAdminPath is null ? null : Path.Combine(prefixPath, WindowsAdminPath),
|
||||
WindowsServerPath = WindowsServerPath is null ? null : Path.Combine(prefixPath, WindowsServerPath)
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
@ -10,8 +10,7 @@ public class StorageService : IStorageService
|
|||
|
||||
public StorageService()
|
||||
{
|
||||
var appData = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
|
||||
var appDirectory = Path.Combine(appData, "MetaforceInstaller");
|
||||
var appDirectory = Defaults.StoragePath;
|
||||
Directory.CreateDirectory(appDirectory);
|
||||
_storagePath = Path.Combine(appDirectory, "installations.json");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,9 +30,29 @@ public class ZipScrapper
|
|||
// }
|
||||
}
|
||||
|
||||
public static string ExtractZip(ZipArchive archive, string outputPath)
|
||||
public static string ExtractZip(ZipArchive archive, string outputPath, IProgress<double>? progress = null)
|
||||
{
|
||||
archive.ExtractToDirectory(outputPath);
|
||||
var entries = archive.Entries.Where(e => !string.IsNullOrEmpty(e.Name)).ToList();
|
||||
var totalEntries = entries.Count;
|
||||
var processedEntries = 0;
|
||||
|
||||
foreach (var entry in entries)
|
||||
{
|
||||
var destinationPath = Path.Combine(outputPath, entry.FullName);
|
||||
var destinationDir = Path.GetDirectoryName(destinationPath);
|
||||
|
||||
if (!string.IsNullOrEmpty(destinationDir))
|
||||
{
|
||||
Directory.CreateDirectory(destinationDir);
|
||||
Console.WriteLine($"Extracting {entry.FullName} to {destinationPath}");
|
||||
}
|
||||
|
||||
entry.ExtractToFile(destinationPath, overwrite: true);
|
||||
|
||||
processedEntries++;
|
||||
progress?.Report((double)processedEntries / totalEntries * 100);
|
||||
}
|
||||
|
||||
return outputPath;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue