Update ReplayStudio and use its ReplayFile class in trimReplay

This commit is contained in:
johni0702
2015-06-01 17:10:15 +02:00
parent 3c0d3d5dab
commit 9e8e84da57
3 changed files with 12 additions and 33 deletions

View File

@@ -32,7 +32,7 @@ public class GuiTrimPart extends GuiStudioPart {
@Override @Override
public void applyFilters(File replayFile, File outputFile) { public void applyFilters(File replayFile, File outputFile) {
try { try {
StudioImplementation.trimReplay(replayFile, false, getStartTimestamp(), getEndTimestamp(), outputFile); StudioImplementation.trimReplay(replayFile, getStartTimestamp(), getEndTimestamp(), outputFile);
} catch(Exception e) { } catch(Exception e) {
e.printStackTrace(); e.printStackTrace();
} }

View File

@@ -1,33 +1,29 @@
package eu.crushedpixel.replaymod.studio; package eu.crushedpixel.replaymod.studio;
import com.google.common.io.Files;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import de.johni0702.replaystudio.PacketData; import de.johni0702.replaystudio.PacketData;
import de.johni0702.replaystudio.filter.ChangeTimestampFilter; import de.johni0702.replaystudio.filter.ChangeTimestampFilter;
import de.johni0702.replaystudio.filter.RemoveFilter; import de.johni0702.replaystudio.filter.RemoveFilter;
import de.johni0702.replaystudio.filter.SquashFilter; import de.johni0702.replaystudio.filter.SquashFilter;
import de.johni0702.replaystudio.io.ReplayOutputStream; import de.johni0702.replaystudio.io.ReplayOutputStream;
import de.johni0702.replaystudio.replay.ReplayFile;
import de.johni0702.replaystudio.replay.ReplayMetaData;
import de.johni0702.replaystudio.replay.ZipReplayFile;
import de.johni0702.replaystudio.stream.PacketStream; import de.johni0702.replaystudio.stream.PacketStream;
import de.johni0702.replaystudio.studio.ReplayStudio; import de.johni0702.replaystudio.studio.ReplayStudio;
import eu.crushedpixel.replaymod.recording.ReplayMetaData;
import eu.crushedpixel.replaymod.utils.ReplayFile;
import eu.crushedpixel.replaymod.utils.ReplayFileIO;
import org.apache.commons.io.IOUtils;
import java.io.File; import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
public class StudioImplementation { public class StudioImplementation {
public static void trimReplay(File replayFile, boolean isTmcpr, int beginning, int ending, File outputFile) throws IOException { public static void trimReplay(File file, int beginning, int ending, File outputFile) throws IOException {
ReplayStudio studio = new ReplayStudio(); ReplayStudio studio = new ReplayStudio();
studio.setWrappingEnabled(false); studio.setWrappingEnabled(false);
PacketStream stream = studio.createReplayStream(new FileInputStream(replayFile), isTmcpr); ReplayFile replayFile = new ZipReplayFile(studio, file);
PacketStream stream = studio.createReplayStream(replayFile.getPacketData(), true);
stream.addFilter(new SquashFilter(), -1, beginning); stream.addFilter(new SquashFilter(), -1, beginning);
stream.addFilter(new RemoveFilter(), ending, -1); stream.addFilter(new RemoveFilter(), ending, -1);
@@ -38,11 +34,7 @@ public class StudioImplementation {
stream.addFilter(ctf, beginning, ending); stream.addFilter(ctf, beginning, ending);
File temp = File.createTempFile("trimmed", "tmcpr"); ReplayOutputStream out = replayFile.writePacketData();
temp.deleteOnExit();
FileOutputStream fos = new FileOutputStream(temp);
ReplayOutputStream out = new ReplayOutputStream(studio, fos);
PacketData packetData; PacketData packetData;
while((packetData = stream.next()) != null) { while((packetData = stream.next()) != null) {
@@ -54,25 +46,12 @@ public class StudioImplementation {
out.close(); out.close();
ReplayFile replay = new ReplayFile(replayFile); ReplayMetaData metaData = replayFile.getMetaData();
ReplayMetaData metaData = replay.metadata().get();
ending = Math.min(metaData.getDuration(), ending); ending = Math.min(metaData.getDuration(), ending);
metaData.setDuration(ending - beginning); metaData.setDuration(ending - beginning);
replayFile.writeMetaData(metaData);
Map<Integer, String> resourcePackIndex = replay.resourcePackIndex().get(); replayFile.saveTo(outputFile);
Map<String, File> resourcePacks = new HashMap<String, File>();
File tempFolder = Files.createTempDir();
for (String hash : resourcePackIndex.values()) {
if (!resourcePacks.containsKey(hash)) {
File resourcePack = new File(tempFolder, hash);
IOUtils.copy(replay.resourcePack(hash).get(), new FileOutputStream(resourcePack));
resourcePacks.put(hash, resourcePack);
}
}
outputFile.createNewFile();
ReplayFileIO.writeReplayFile(outputFile, temp, metaData, resourcePacks, resourcePackIndex);
} }
//TODO Work with Johni to connect multiple Replay Files //TODO Work with Johni to connect multiple Replay Files