public void LoadTable(TPFileSizeTable FileSizeTable, bool isDecompressTable) { FileTable = FileSizeTable; IsDecompressTable = isDecompressTable; listViewCustom1.BeginUpdate(); if (IsDecompressTable) { foreach (var file in FileSizeTable.DecompressedFileSizes) { var entry = file.Value; listViewCustom1.Items.Add(file.Key).SubItems.AddRange(new ListViewItem.ListViewSubItem[] { new ListViewItem.ListViewSubItem() { Text = entry.CompressedSize.ToString() }, new ListViewItem.ListViewSubItem() { Text = entry.DecompressedSize.ToString() }, new ListViewItem.ListViewSubItem() { Text = entry.Precentage.ToString() }, }); } } else { foreach (var file in FileSizeTable.FileSizes) { listViewCustom1.Items.Add(file.Key).SubItems.Add(file.Value.ToString()); } } listViewCustom1.EndUpdate(); }
private static string SatisfyFileTables(IFileFormat FileFormat, string FilePath, Stream Data, uint DecompressedSize, uint CompressedSize, bool IsYaz0Compressed) { string FileLog = ""; bool IsBotwFile = FilePath.IsSubPathOf(Runtime.BotwGamePath); bool IsTPHDFile = FilePath.IsSubPathOf(Runtime.TpGamePath); STConsole.WriteLine($"IsTPHDFile {IsTPHDFile}"); if (Runtime.ResourceTables.BotwTable && IsBotwFile) { string newFilePath = FilePath.Replace(Runtime.BotwGamePath, string.Empty).Remove(0, 1); newFilePath = newFilePath.Replace(".s", "."); newFilePath = newFilePath.Replace( @"\", "/"); string RealExtension = Path.GetExtension(newFilePath).Replace(".s", "."); string RstbPath = Path.Combine($"{Runtime.BotwGamePath}", "System", "Resource", "ResourceSizeTable.product.srsizetable"); RSTB BotwResourceTable = new RSTB(); BotwResourceTable.LoadFile(RstbPath); //Create a backup first if one doesn't exist if (!File.Exists($"{RstbPath}.backup")) { STConsole.WriteLine($"RSTB File found. Creating backup..."); BotwResourceTable.Write(new FileWriter($"{RstbPath}.backup")); File.WriteAllBytes($"{RstbPath}.backup", EveryFileExplorer.YAZ0.Compress($"{RstbPath}.backup")); } //Now apply the file table then save the table if (BotwResourceTable.IsInTable(newFilePath)) { FileLog += $"File found in resource table! {newFilePath}"; STConsole.WriteLine(FileLog, 1); } else { FileLog += $"File NOT found in resource table! {newFilePath}"; STConsole.WriteLine(FileLog, 0); } BotwResourceTable.SetEntry(newFilePath, Data, IsYaz0Compressed); BotwResourceTable.Write(new FileWriter(RstbPath)); File.WriteAllBytes(RstbPath, EveryFileExplorer.YAZ0.Compress(RstbPath)); } if (Runtime.ResourceTables.TpTable && IsTPHDFile) { string newFilePath = FilePath.Replace(Runtime.TpGamePath, string.Empty).Remove(0, 1); newFilePath = newFilePath.Replace(@"\", "/"); //Read the compressed tables and set the new sizes if paths match TPFileSizeTable CompressedFileTbl = new TPFileSizeTable(); CompressedFileTbl.ReadCompressedTable(new FileReader($"{Runtime.TpGamePath}/FileSizeList.txt")); if (CompressedFileTbl.IsInFileSizeList(newFilePath)) { STConsole.WriteLine("Found matching path in File Size List table! " + newFilePath, 1); CompressedFileTbl.SetFileSizeEntry(newFilePath, CompressedSize); } else STConsole.WriteLine("Failed to find path in File Size List table! " + newFilePath, 0); //Read decompressed file sizes TPFileSizeTable DecompressedFileTbl = new TPFileSizeTable(); DecompressedFileTbl.ReadDecompressedTable(new FileReader($"{Runtime.TpGamePath}/DecompressedSizeList.txt")); newFilePath = $"./DVDRoot/{newFilePath}"; newFilePath = newFilePath.Replace(".gz", string.Empty); //Write the decompressed file size if (DecompressedFileTbl.IsInDecompressedFileSizeList(newFilePath)) { STConsole.WriteLine("Found matching path in File Size List table! " + newFilePath, 1); DecompressedFileTbl.SetDecompressedFileSizeEntry(newFilePath, CompressedSize, DecompressedSize); } else STConsole.WriteLine("Failed to find path in File Size List table! " + newFilePath, 0); if (FileFormat == null) return FileLog; //Check if archive type bool IsArchive = false; foreach (var inter in FileFormat.GetType().GetInterfaces()) { if (inter == typeof(IArchiveFile)) IsArchive = true; } //Write all the file sizes in the archive if it's an archive type //Note this seems uneeded atm //Todo store both compressed and decompressed sizes in archive info /* if (IsArchive) { IArchiveFile Archive = (IArchiveFile)FileFormat; foreach (var file in Archive.Files) { uint DecompressedArchiveFileSize = (uint)file.FileData.Length; string ArchiveFilePath = $"/DVDRoot/{file.FileName}"; if (DecompressedFileTbl.IsInDecompressedFileSizeList(ArchiveFilePath)) { STConsole.WriteLine("Found matching path in File Size List table! " + ArchiveFilePath, 1); DecompressedFileTbl.SetDecompressedFileSizeEntry(ArchiveFilePath, DecompressedArchiveFileSize, DecompressedArchiveFileSize); } else STConsole.WriteLine("Failed to find path in File Size List table! " + ArchiveFilePath, 0); } }*/ CompressedFileTbl.WriteCompressedTable(new FileWriter($"{Runtime.TpGamePath}/FileSizeList.txt")); DecompressedFileTbl.WriteDecompressedTable(new FileWriter($"{Runtime.TpGamePath}/DecompressedSizeList.txt")); } return FileLog; }