use of net.runelite.cache.fs.Index in project runelite by runelite.
the class TrackDumperTest method test.
@Test
public void test() throws IOException {
File dumpDir1 = folder.newFolder(), dumpDir2 = folder.newFolder();
int idx1 = 0, idx2 = 0;
djb2.load();
try (Store store = new Store(StoreLocation.LOCATION)) {
store.load();
Storage storage = store.getStorage();
Index index = store.getIndex(IndexType.TRACK1);
Index index2 = store.getIndex(IndexType.TRACK2);
for (Archive archive : index.getArchives()) {
dumpTrackArchive(dumpDir1, storage, archive);
++idx1;
}
for (Archive archive : index2.getArchives()) {
dumpTrackArchive(dumpDir2, storage, archive);
++idx2;
}
}
logger.info("Dumped {} sound tracks ({} idx1, {} idx2) to {} and {}", idx1 + idx2, idx1, idx2, dumpDir1, dumpDir2);
}
use of net.runelite.cache.fs.Index in project runelite by runelite.
the class DiskStorage method loadArchive.
@Override
public byte[] loadArchive(Archive archive) throws IOException {
Index index = archive.getIndex();
IndexFile indexFile = getIndex(index.getId());
assert indexFile.getIndexFileId() == index.getId();
IndexEntry entry = indexFile.read(archive.getArchiveId());
if (entry == null) {
logger.debug("can't read archive " + archive.getArchiveId() + " from index " + index.getId());
return null;
}
assert entry.getId() == archive.getArchiveId();
logger.trace("Loading archive {} for index {} from sector {} length {}", archive.getArchiveId(), index.getId(), entry.getSector(), entry.getLength());
byte[] archiveData = data.read(index.getId(), entry.getId(), entry.getSector(), entry.getLength());
return archiveData;
}
use of net.runelite.cache.fs.Index in project runelite by runelite.
the class DiskStorage method saveArchive.
@Override
public void saveArchive(Archive a, byte[] archiveData) throws IOException {
Index index = a.getIndex();
IndexFile indexFile = getIndex(index.getId());
assert indexFile.getIndexFileId() == index.getId();
DataFileWriteResult res = data.write(index.getId(), a.getArchiveId(), archiveData);
indexFile.write(new IndexEntry(indexFile, a.getArchiveId(), res.sector, res.compressedLength));
byte compression = archiveData[0];
int compressedSize = Ints.fromBytes(archiveData[1], archiveData[2], archiveData[3], archiveData[4]);
// don't crc the appended revision, if it is there
int length = // compression type
1 + // compressed size
4 + compressedSize + (compression != CompressionType.NONE ? 4 : 0);
Crc32 crc = new Crc32();
crc.update(archiveData, 0, length);
a.setCrc(crc.getHash());
logger.trace("Saved archive {}/{} at sector {}, compressed length {}", index.getId(), a.getArchiveId(), res.sector, res.compressedLength);
}
use of net.runelite.cache.fs.Index in project runelite by runelite.
the class TitleDumper method extract.
@Test
public void extract() throws IOException {
File base = StoreLocation.LOCATION, outFile = folder.newFolder();
try (Store store = new Store(base)) {
store.load();
Storage storage = store.getStorage();
Index index = store.getIndex(IndexType.BINARY);
Archive archive = index.findArchiveByName("title.jpg");
byte[] contents = archive.decompress(storage.loadArchive(archive));
Files.write(outFile.toPath(), contents);
}
logger.info("Dumped to {}", outFile);
}
use of net.runelite.cache.fs.Index in project runelite by runelite.
the class UnderlayDumper method extract.
@Test
public void extract() throws IOException {
File base = StoreLocation.LOCATION, outDir = folder.newFolder();
int count = 0;
try (Store store = new Store(base)) {
store.load();
Storage storage = store.getStorage();
Index index = store.getIndex(IndexType.CONFIGS);
Archive archive = index.getArchive(ConfigType.UNDERLAY.getId());
byte[] archiveData = storage.loadArchive(archive);
ArchiveFiles files = archive.getFiles(archiveData);
for (FSFile file : files.getFiles()) {
UnderlayLoader loader = new UnderlayLoader();
UnderlayDefinition underlay = loader.load(file.getFileId(), file.getContents());
Files.write(gson.toJson(underlay), new File(outDir, file.getFileId() + ".json"), Charset.defaultCharset());
++count;
}
}
logger.info("Dumped {} underlays to {}", count, outDir);
}
Aggregations