using System.IO.Compression; using MetaforceInstaller.Core.Models; namespace MetaforceInstaller.Core.Services; public class ZipScrapper { public static InstallationParts PeekFiles(ZipArchive archive) { return new InstallationParts { AndroidContentPath = DoesAndroidContentExists(archive), OculusClientPath = DoesOculusClientExists(archive), PicoClientPath = DoesPicoClientExists(archive), AndroidAdminPath = DoesAndroidAdminExists(archive), WindowsAdminPath = DoesPcAdminExists(archive), WindowsContentPath = DoesWindowsContentExists(archive), WindowsServerPath = DoesServerExists(archive), }; // Console.WriteLine($"Contents of {archive}:"); // Console.WriteLine("----------------------------------"); // // foreach (ZipArchiveEntry entry in archive.Entries) // { // // You can access properties like entry.Name, entry.FullName, entry.Length (uncompressed size), entry.CompressedLength // Console.WriteLine($"Entry: {entry.FullName}"); // Console.WriteLine($" Uncompressed Size: {entry.Length} bytes"); // Console.WriteLine($" Compressed Size: {entry.CompressedLength} bytes"); // Console.WriteLine("----------------------------------"); // } } public static string ExtractZip(ZipArchive archive, string outputPath) { archive.ExtractToDirectory(outputPath); return outputPath; } private static string? DoesPicoClientExists(ZipArchive archive) { var entry = archive.Entries.FirstOrDefault(entry => entry.Name.Contains("MetaforcePico") && entry.Name.EndsWith(".apk")); return entry?.FullName; } private static string? DoesOculusClientExists(ZipArchive archive) { var entry = archive.Entries.FirstOrDefault(entry => entry.Name.Contains("MetaforceOculus") && entry.Name.EndsWith(".apk")); return entry?.FullName; } private static string? DoesAndroidAdminExists(ZipArchive archive) { var entry = archive.Entries.FirstOrDefault(entry => entry.Name.Contains("MetaforceAdmin") && entry.Name.EndsWith(".apk")); return entry?.FullName; } private static string? DoesAndroidContentExists(ZipArchive archive) { var entry = archive.Entries.FirstOrDefault(entry => entry.Name.Contains("Content_Android") && entry.Name.EndsWith(".zip")); return entry?.FullName; } private static string? DoesWindowsContentExists(ZipArchive archive) { var entry = archive.Entries.FirstOrDefault(entry => entry.Name.Contains("Content_StandaloneWindows") && entry.Name.EndsWith(".zip")); return entry?.FullName; } private static string? DoesPcAdminExists(ZipArchive archive) { var entry = archive.Entries.FirstOrDefault(entry => entry.FullName.Contains("MetaforceAdminPC") && entry.Name.EndsWith(".exe") && !entry.Name.Contains("UnityCrashHandler") && !entry.Name.Contains("crashpad_handler")); return entry?.FullName; } private static string? DoesServerExists(ZipArchive archive) { var entry = archive.Entries.FirstOrDefault(entry => entry.FullName.Contains("MetaforceServer") && entry.Name.EndsWith(".exe") && !entry.Name.Contains("UnityCrashHandler") && !entry.Name.Contains("crashpad_handler")); return entry?.FullName; } }