public void LoadPackages(string filename) { this.CurrentProgressString = "Beginning Operation"; this.PackageHeaders = new SortedDictionary <Idstring, PackageHeader>(); this.CurrentProgressString = "Loading Existing Hashes"; App.Instance.LoadHashlists(); this.CurrentProgressString = "Loading Database"; //Load Bundle Database this.BundleDB = new PackageDatabase(filename); this.CurrentProgressString = "Loading Hashlist"; General.LoadHashlist(this.WorkingDirectory, this.BundleDB); this.CurrentProgressString = "Registering File Entries"; Dictionary <uint, FileEntry> fileEntries = this.DatabaseEntryToFileEntry(this.BundleDB.GetDatabaseEntries()); this.CurrentProgressString = "Loading Packages"; List <string> files = Directory.EnumerateFiles(this.WorkingDirectory, "*.bundle").ToList(); for (int i = 0; i < files.Count; i++) { string file = files[i]; if (file.EndsWith("_h.bundle")) { continue; } PackageHeader bundle = new PackageHeader(); if (!bundle.Load(file)) { continue; } this.CurrentProgressString = String.Format("Loading Package {0}/{1}", i, files.Count); this.AddBundleEntriesToFileEntries(fileEntries, bundle.Entries); this.PackageHeaders.Add(bundle.Name, bundle); } this.CurrentProgressString = "Registring Folder Layout"; this.Root = new FolderItem(fileEntries) { Path = "assets", Name = "assets" }; foreach (FileEntry entry in fileEntries.Values) { this.RawFiles.Add(new Tuple <Idstring, Idstring, Idstring> (entry._path, entry._language, entry._extension), entry); } this.finishedLoad = true; HashIndex.Clear(); GC.Collect(); this.CurrentProgressString = "Finishing"; }
public static void GenerateHashlist(string workingPath, string file, PackageFileEntry be) { using (FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read)) { using (BinaryReader br = new BinaryReader(fs)) { byte[] data; StringBuilder sb = new StringBuilder(); string[] idstring_data; HashSet <string> new_paths = new HashSet <string>(); fs.Position = be.Address; if (be.Length == -1) { data = br.ReadBytes((int)(fs.Length - fs.Position)); } else { data = br.ReadBytes((int)be.Length); } foreach (byte read in data) { sb.Append((char)read); } idstring_data = sb.ToString().Split('\0'); sb.Clear(); foreach (string idstring in idstring_data) { new_paths.Add(idstring); } new_paths.Add("idstring_lookup"); new_paths.Add("existing_banks"); new_paths.Add("engine-package"); HashIndex.Clear(); HashIndex.Load(ref new_paths); HashIndex.GenerateHashList(Path.Combine(workingPath, HashlistFile)); new_paths.Clear(); } } }