Reworked AssetRepository to link every Asset to a UUID
UUIDs are now being stored in the Replay File and loaded
This commit is contained in:
@@ -3,6 +3,7 @@ package eu.crushedpixel.replaymod.assets;
|
||||
import eu.crushedpixel.replaymod.ReplayMod;
|
||||
import eu.crushedpixel.replaymod.replay.ReplayHandler;
|
||||
import eu.crushedpixel.replaymod.utils.ReplayFile;
|
||||
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
|
||||
import org.apache.commons.io.FilenameUtils;
|
||||
import org.apache.commons.lang3.ArrayUtils;
|
||||
|
||||
@@ -10,46 +11,79 @@ import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.*;
|
||||
|
||||
public class AssetRepository {
|
||||
|
||||
private List<ReplayAsset> replayAssets;
|
||||
private Map<UUID, ReplayAsset> replayAssets;
|
||||
|
||||
public AssetRepository() {
|
||||
replayAssets = new ArrayList<ReplayAsset>();
|
||||
replayAssets = new HashMap<UUID, ReplayAsset>();
|
||||
}
|
||||
|
||||
public ReplayAsset addAsset(String assetFileName, InputStream inputStream) throws IOException {
|
||||
return addAsset(assetFileName, inputStream, null);
|
||||
}
|
||||
|
||||
public ReplayAsset addAsset(String assetFileName, InputStream inputStream, UUID uuid) throws IOException {
|
||||
|
||||
if(uuid == null) {
|
||||
uuid = UUID.randomUUID();
|
||||
} else {
|
||||
assetFileName = assetFileName.replace(uuid.toString()+"_", "");
|
||||
}
|
||||
|
||||
ReplayAsset asset = assetFromFileName(assetFileName);
|
||||
|
||||
asset.loadFromStream(inputStream);
|
||||
|
||||
replayAssets.add(asset);
|
||||
replayAssets.put(uuid, asset);
|
||||
|
||||
return asset;
|
||||
}
|
||||
|
||||
public void removeAsset(ReplayAsset asset) {
|
||||
replayAssets.remove(asset);
|
||||
for(Map.Entry<UUID, ReplayAsset> e :
|
||||
new HashSet<Map.Entry<UUID, ReplayAsset>>(replayAssets.entrySet()))
|
||||
if(e.getValue().equals(asset))
|
||||
replayAssets.remove(e.getKey());
|
||||
}
|
||||
|
||||
public void saveAssets() {
|
||||
for(ReplayAsset asset : replayAssets) {
|
||||
try {
|
||||
String filepath = ReplayFile.ENTRY_ASSET_FOLDER + asset.getDisplayString() + "." + asset.getSavedFileExtension();
|
||||
try {
|
||||
ReplayFile replayFile = new ReplayFile(ReplayHandler.getReplayFile());
|
||||
|
||||
File toAdd = File.createTempFile(asset.getDisplayString(), asset.getSavedFileExtension());
|
||||
FileOutputStream fos = new FileOutputStream(toAdd);
|
||||
asset.writeToStream(fos);
|
||||
|
||||
ReplayMod.replayFileAppender.registerModifiedFile(toAdd, filepath, ReplayHandler.getReplayFile());
|
||||
} catch(IOException e) {
|
||||
e.printStackTrace();
|
||||
Enumeration<ZipArchiveEntry> entries = replayFile.getEntries();
|
||||
while(entries.hasMoreElements()) {
|
||||
ZipArchiveEntry entry = entries.nextElement();
|
||||
if(entry.getName().startsWith(ReplayFile.ENTRY_ASSET_FOLDER)) {
|
||||
ReplayMod.replayFileAppender.registerModifiedFile(null, entry.getName(), ReplayHandler.getReplayFile());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
replayFile.close();
|
||||
|
||||
ReplayMod.replayFileAppender.deleteAllFilesByFolder(ReplayFile.ENTRY_ASSET_FOLDER, ReplayHandler.getReplayFile());
|
||||
|
||||
for(Map.Entry<UUID, ReplayAsset> e : replayAssets.entrySet()) {
|
||||
UUID uuid = e.getKey();
|
||||
ReplayAsset asset = e.getValue();
|
||||
try {
|
||||
String filepath = ReplayFile.ENTRY_ASSET_FOLDER + uuid.toString()+ "_" + asset.getDisplayString() + "." + asset.getSavedFileExtension();
|
||||
|
||||
File toAdd = File.createTempFile(asset.getDisplayString(), asset.getSavedFileExtension());
|
||||
FileOutputStream fos = new FileOutputStream(toAdd);
|
||||
asset.writeToStream(fos);
|
||||
|
||||
|
||||
ReplayMod.replayFileAppender.registerModifiedFile(toAdd, filepath, ReplayHandler.getReplayFile());
|
||||
} catch(IOException io) {
|
||||
io.printStackTrace();
|
||||
}
|
||||
}
|
||||
} catch(IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public static ReplayAsset assetFromFileName(String filename) {
|
||||
@@ -63,6 +97,8 @@ public class AssetRepository {
|
||||
throw new UnsupportedOperationException("Can't create ReplayAsset from File "+filename);
|
||||
}
|
||||
|
||||
|
||||
public List<ReplayAsset> getCopyOfReplayAssets() {
|
||||
return new ArrayList<ReplayAsset>(replayAssets.values());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user