Example #1
0
        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";
        }
Example #2
0
        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();
                }
            }
        }