From cba98663047ee78f3dcae9ed0da3a7bfed4a167b Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 16 Dec 2017 17:50:47 -0500 Subject: [PATCH] cache: remove tree storage --- .../main/java/net/runelite/cache/Cache.java | 79 +---- .../runelite/cache/fs/tree/TreeStorage.java | 289 ------------------ .../cache/client/CacheClientTest.java | 28 -- .../net/runelite/cache/fs/StoreLoadTest.java | 47 --- .../java/net/runelite/cache/fs/StoreTest.java | 12 - 5 files changed, 5 insertions(+), 450 deletions(-) delete mode 100644 cache/src/main/java/net/runelite/cache/fs/tree/TreeStorage.java diff --git a/cache/src/main/java/net/runelite/cache/Cache.java b/cache/src/main/java/net/runelite/cache/Cache.java index 971f3b6c85..0f2c2d36b1 100644 --- a/cache/src/main/java/net/runelite/cache/Cache.java +++ b/cache/src/main/java/net/runelite/cache/Cache.java @@ -26,10 +26,7 @@ package net.runelite.cache; import java.io.File; import java.io.IOException; -import net.runelite.cache.fs.Storage; import net.runelite.cache.fs.Store; -import net.runelite.cache.fs.jagex.DiskStorage; -import net.runelite.cache.fs.tree.TreeStorage; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.CommandLineParser; import org.apache.commons.cli.DefaultParser; @@ -43,10 +40,6 @@ public class Cache Options options = new Options(); options.addOption("c", "cache", true, "cache base"); - options.addOption("t", "tree", true, "tree base"); - - options.addOption("u", "unpack", false, "unpack cache"); - options.addOption("p", "pack", false, "pack cache"); options.addOption(null, "items", true, "directory to dump items to"); options.addOption(null, "npcs", true, "directory to dump npcs to"); @@ -67,59 +60,8 @@ public class Cache } String cache = cmd.getOptionValue("cache"); - String tree = cmd.getOptionValue("tree"); - if (cmd.hasOption("p")) - { - if (cache == null || tree == null) - { - System.err.println("Cache and tree base must be specified to pack"); - System.exit(-1); - } - - System.out.print("Packing tree from " + tree + " to " + cache + "..."); - - File cacheDir = new File(cache), - treeDir = new File(tree); - - Storage from = new TreeStorage(treeDir); - Storage to = new DiskStorage(cacheDir); - - Store store = new Store(from); - store.load(); - to.save(store); - - System.out.println(" done!"); - return; - } - else if (cmd.hasOption("u")) - { - if (cache == null || tree == null) - { - System.err.println("Cache and tree base must be specified to unpack"); - System.exit(-1); - } - - System.out.print("Unpacking cache from " + cache + " to " + tree + "..."); - - Store treeBase = new Store(new File(cache)); - treeBase.load(); - - TreeStorage storage = new TreeStorage(new File(tree)); - storage.save(treeBase); - - System.out.println(" done!"); - return; - } - - if (cache != null && tree != null) - { - System.err.println("Cannot specify both cache and tree"); - System.exit(-1); - return; - } - - Store store = loadStore(cache, tree); + Store store = loadStore(cache); if (cmd.hasOption("items")) { @@ -179,22 +121,11 @@ public class Cache } } - private static Store loadStore(String cache, String tree) throws IOException + private static Store loadStore(String cache) throws IOException { - if (cache == null) - { - Storage storage = new TreeStorage(new File(tree)); - Store store = new Store(storage); - store.load(); - return store; - } - else - { - Store store = new Store(new File(cache)); - store.load(); - return store; - } - + Store store = new Store(new File(cache)); + store.load(); + return store; } private static void dumpItems(Store store, File itemdir) throws IOException diff --git a/cache/src/main/java/net/runelite/cache/fs/tree/TreeStorage.java b/cache/src/main/java/net/runelite/cache/fs/tree/TreeStorage.java deleted file mode 100644 index 8a8bd355ec..0000000000 --- a/cache/src/main/java/net/runelite/cache/fs/tree/TreeStorage.java +++ /dev/null @@ -1,289 +0,0 @@ -/* - * Copyright (c) 2016-2017, Adam - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package net.runelite.cache.fs.tree; - -import com.google.common.io.Files; -import java.io.File; -import java.io.IOException; -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import net.runelite.cache.fs.Archive; -import net.runelite.cache.fs.FSFile; -import net.runelite.cache.fs.Index; -import net.runelite.cache.fs.Storage; -import net.runelite.cache.fs.Store; - -public class TreeStorage implements Storage -{ - private final File folder; - - public TreeStorage(File folder) - { - this.folder = folder; - } - - @Override - public void init(Store store) throws IOException - { - } - - @Override - public void close() throws IOException - { - } - - @Override - public void load(Store store) throws IOException - { - for (File idx : folder.listFiles()) - { - if (!idx.isDirectory()) - { - continue; - } - - int id = Integer.parseInt(idx.getName()); - Index index = store.addIndex(id); - loadIndex(index, folder, idx); - } - - Collections.sort(store.getIndexes(), (idx1, idx2) -> Integer.compare(idx1.getId(), idx2.getId())); - } - - private void loadIndex(Index index, File parent, File to) throws IOException - { - for (File f : to.listFiles()) - { - if (f.isDirectory()) - { - int id = Integer.parseInt(f.getName()); - - Archive archive = index.addArchive(id); - loadTree(archive, to, f); - } - else if (f.getName().endsWith(".dat")) - { - // one file. archiveId-fileId-name - String[] parts = Files.getNameWithoutExtension(f.getName()).split("-"); - - int id = Integer.parseInt(parts[0]); - - Archive archive = index.addArchive(id); - loadTreeSingleFile(archive, to, f); - } - else if (f.getName().endsWith(".datc")) - { - // packed data - String[] parts = Files.getNameWithoutExtension(f.getName()).split("-"); - - int id = Integer.parseInt(parts[0]); - - Archive archive = index.addArchive(id); - loadTreeData(archive, to, f); - } - } - - String str = Files.readFirstLine(new File(parent, index.getId() + ".rev"), Charset.defaultCharset()); - int revision = Integer.parseInt(str); - index.setRevision(revision); - - Collections.sort(index.getArchives(), (ar1, ar2) -> Integer.compare(ar1.getArchiveId(), ar2.getArchiveId())); - } - - public void loadTreeData(Archive archive, File parent, File from) throws IOException - { - //archiveId-fileId-fileName - String[] parts = Files.getNameWithoutExtension(from.getName()).split("-"); - assert parts.length == 3; - - int archiveId = Integer.parseInt(parts[0]); - int fileId = Integer.parseInt(parts[1]); - int nameHash = (int) Long.parseLong(parts[2], 16); - - assert archiveId == archive.getArchiveId(); - - byte[] data = Files.toByteArray(from); - - FSFile file = new FSFile(fileId); - file.setNameHash(nameHash); - file.setContents(data); - archive.addFile(file); - - File archiveFile = new File(parent, archive.getArchiveId() + ".rev"); - int rev = Integer.parseInt(Files.readFirstLine(archiveFile, Charset.defaultCharset())); - archive.setRevision(rev); - - archiveFile = new File(parent, archive.getArchiveId() + ".name"); - int name = Integer.parseInt(Files.readFirstLine(archiveFile, Charset.defaultCharset())); - archive.setNameHash(name); - } - - public void loadTreeSingleFile(Archive archive, File parent, File from) throws IOException - { - //archiveId-fileId-fileName - String[] parts = Files.getNameWithoutExtension(from.getName()).split("-"); - assert parts.length == 3; - - int archiveId = Integer.parseInt(parts[0]); - int fileId = Integer.parseInt(parts[1]); - int nameHash = (int) Long.parseLong(parts[2], 16); - - assert archiveId == archive.getArchiveId(); - - FSFile file = new FSFile(fileId); - file.setNameHash(nameHash); - archive.addFile(file); - - byte[] contents = Files.toByteArray(from); - file.setContents(contents); - - File archiveFile = new File(parent, archive.getArchiveId() + ".rev"); - int rev = Integer.parseInt(Files.readFirstLine(archiveFile, Charset.defaultCharset())); - archive.setRevision(rev); - - archiveFile = new File(parent, archive.getArchiveId() + ".name"); - int name = Integer.parseInt(Files.readFirstLine(archiveFile, Charset.defaultCharset())); - archive.setNameHash(name); - } - - public void loadTree(Archive archive, File parent, File from) throws IOException - { - List files = new ArrayList<>(); - - for (File file : from.listFiles()) - { - //fileId-fileName.dat - String[] split = Files.getNameWithoutExtension(file.getName()).split("-"); - assert split.length == 2; - - int fileId = Integer.parseInt(split[0]); - int fileName = (int) Long.parseLong(split[1], 16); - - FSFile f = new FSFile(fileId); - f.setNameHash(fileName); - files.add(f); - - byte[] contents = Files.toByteArray(file); - f.setContents(contents); - } - - // the filesystem may order these differently (eg, 1, 10, 2) - Collections.sort(files, (f1, f2) -> Integer.compare(f1.getFileId(), f2.getFileId())); - files.forEach(archive::addFile); - - File archiveFile = new File(parent, archive.getArchiveId() + ".rev"); - int rev = Integer.parseInt(Files.readFirstLine(archiveFile, Charset.defaultCharset())); - archive.setRevision(rev); - - archiveFile = new File(parent, archive.getArchiveId() + ".name"); - int name = Integer.parseInt(Files.readFirstLine(archiveFile, Charset.defaultCharset())); - archive.setNameHash(name); - } - - @Override - public void save(Store store) throws IOException - { - for (Index i : store.getIndexes()) - { - saveIndex(i); - } - } - - private void saveIndex(Index i) throws IOException - { - File idx = new File(folder, "" + i.getId()); - idx.mkdirs(); - - for (Archive a : i.getArchives()) - { - saveArchive(a, idx); - } - - File rev = new File(folder, i.getId() + ".rev"); - Files.write(Integer.toString(i.getRevision()), rev, Charset.defaultCharset()); - } - - private void saveArchive(Archive a, File to) throws IOException - { - byte[] data = a.getData(); - List files = a.getFiles(); - - if (data != null) - { - assert files.size() == 1; // this is the maps - - FSFile file = files.get(0); - - File archiveFile = new File(to, a.getArchiveId() + "-" - + file.getFileId() + "-" + Integer.toHexString(file.getNameHash()) + ".datc"); - Files.write(data, archiveFile); - - archiveFile = new File(to, a.getArchiveId() + ".rev"); - Files.write(Integer.toString(a.getRevision()), archiveFile, Charset.defaultCharset()); - - archiveFile = new File(to, a.getArchiveId() + ".name"); - Files.write(Integer.toString(a.getNameHash()), archiveFile, Charset.defaultCharset()); - return; - } - - if (files.size() == 1) - { - FSFile file = files.get(0); - - File archiveFile = new File(to, a.getArchiveId() + "-" - + file.getFileId() + "-" + Integer.toHexString(file.getNameHash()) + ".dat"); - byte[] contents = file.getContents(); - - Files.write(contents, archiveFile); - - archiveFile = new File(to, a.getArchiveId() + ".rev"); - Files.write(Integer.toString(a.getRevision()), archiveFile, Charset.defaultCharset()); - - archiveFile = new File(to, a.getArchiveId() + ".name"); - Files.write(Integer.toString(a.getNameHash()), archiveFile, Charset.defaultCharset()); - return; - } - - File archiveFile = new File(to, a.getArchiveId() + ".rev"); - Files.write(Integer.toString(a.getRevision()), archiveFile, Charset.defaultCharset()); - - archiveFile = new File(to, a.getArchiveId() + ".name"); - Files.write(Integer.toString(a.getNameHash()), archiveFile, Charset.defaultCharset()); - - File archiveFolder = new File(to, Integer.toString(a.getArchiveId())); - archiveFolder.mkdirs(); - - for (FSFile file : files) - { - archiveFile = new File(archiveFolder, file.getFileId() + "-" - + Integer.toHexString(file.getNameHash()) + ".dat"); - byte[] contents = file.getContents(); - Files.write(contents, archiveFile); - } - } - -} diff --git a/cache/src/test/java/net/runelite/cache/client/CacheClientTest.java b/cache/src/test/java/net/runelite/cache/client/CacheClientTest.java index 6a1cadbdb6..f17a43cc8d 100644 --- a/cache/src/test/java/net/runelite/cache/client/CacheClientTest.java +++ b/cache/src/test/java/net/runelite/cache/client/CacheClientTest.java @@ -28,7 +28,6 @@ import java.io.File; import java.util.concurrent.CompletableFuture; import net.runelite.cache.CacheProperties; import net.runelite.cache.fs.Store; -import net.runelite.cache.fs.tree.TreeStorage; import net.runelite.cache.protocol.packets.HandshakeResponseType; import org.junit.Assert; import org.junit.Before; @@ -72,31 +71,4 @@ public class CacheClientTest store.save(); } } - - @Test - @Ignore - public void testTree() throws Exception - { - try (Store store = new Store(new File("C:\\rs\\temp"))) - { - TreeStorage storage = new TreeStorage(new File("C:\\rs\\runescape-data\\cache")); - storage.load(store); - - CacheClient c = new CacheClient(store, CacheProperties.getRsVersion()); - c.connect(); - CompletableFuture handshake = c.handshake(); - - HandshakeResponseType result = handshake.get(); - logger.info("Handshake result: {}", result); - - Assert.assertEquals(HandshakeResponseType.RESPONSE_OK, result); - - c.download(); - - c.close(); - - storage = new TreeStorage(new File("C:\\rs\\temp\\t")); - storage.save(store); - } - } } diff --git a/cache/src/test/java/net/runelite/cache/fs/StoreLoadTest.java b/cache/src/test/java/net/runelite/cache/fs/StoreLoadTest.java index bc5217c053..ab7a782cf1 100644 --- a/cache/src/test/java/net/runelite/cache/fs/StoreLoadTest.java +++ b/cache/src/test/java/net/runelite/cache/fs/StoreLoadTest.java @@ -28,9 +28,7 @@ import com.google.common.io.Files; import java.io.File; import java.io.IOException; import net.runelite.cache.StoreLocation; -import net.runelite.cache.fs.tree.TreeStorage; import org.junit.Assert; -import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; @@ -81,49 +79,4 @@ public class StoreLoadTest } } } - - @Test - @Ignore - public void unpackStore() throws IOException - { - File base = StoreLocation.LOCATION; - try (Store store = new Store(base)) - { - store.load(); - - TreeStorage storage = new TreeStorage(folder.newFolder()); - storage.save(store); - } - } - - @Test - @Ignore - public void loadTree() throws IOException - { - try (Store store = new Store(folder.newFolder())) - { - TreeStorage storage = new TreeStorage(new File("C:\\rs\\temp\\tree")); - storage.load(store); - - try (Store store2 = new Store(StoreLocation.LOCATION)) - { - store2.load(); - - Assert.assertEquals(store, store2); - } - } - } - - @Test - @Ignore - public void saveTree() throws IOException - { - try (Store store = new Store(new File("d:/rs/07/temp/cache"))) - { - store.load(); - - TreeStorage storage = new TreeStorage(new File("d:/rs/07/temp/tree")); - storage.save(store); - } - } } diff --git a/cache/src/test/java/net/runelite/cache/fs/StoreTest.java b/cache/src/test/java/net/runelite/cache/fs/StoreTest.java index 101652b59a..a827aee9b8 100644 --- a/cache/src/test/java/net/runelite/cache/fs/StoreTest.java +++ b/cache/src/test/java/net/runelite/cache/fs/StoreTest.java @@ -28,7 +28,6 @@ import java.io.File; import java.io.IOException; import java.util.Random; import net.runelite.cache.StoreLocation; -import net.runelite.cache.fs.tree.TreeStorage; import org.junit.Assert; import org.junit.Rule; import org.junit.Test; @@ -153,17 +152,6 @@ public class StoreTest Assert.assertEquals(store, store2); } - - // Test tree save/load - File tree = folder.newFolder(); - Storage treeStorage = new TreeStorage(tree); - - treeStorage.save(store); - - try (Store store2 = new Store(treeStorage)) - { - store2.load(); - } } } }