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
public void applyFilters(File replayFile, File outputFile) {
try {
StudioImplementation.trimReplay(replayFile, false, getStartTimestamp(), getEndTimestamp(), outputFile);
StudioImplementation.trimReplay(replayFile, getStartTimestamp(), getEndTimestamp(), outputFile);
} catch(Exception e) {
e.printStackTrace();
}

View File

@@ -1,33 +1,29 @@
package eu.crushedpixel.replaymod.studio;
import com.google.common.io.Files;
import com.google.gson.JsonObject;
import de.johni0702.replaystudio.PacketData;
import de.johni0702.replaystudio.filter.ChangeTimestampFilter;
import de.johni0702.replaystudio.filter.RemoveFilter;
import de.johni0702.replaystudio.filter.SquashFilter;
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.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.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
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();
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 RemoveFilter(), ending, -1);
@@ -38,11 +34,7 @@ public class StudioImplementation {
stream.addFilter(ctf, beginning, ending);
File temp = File.createTempFile("trimmed", "tmcpr");
temp.deleteOnExit();
FileOutputStream fos = new FileOutputStream(temp);
ReplayOutputStream out = new ReplayOutputStream(studio, fos);
ReplayOutputStream out = replayFile.writePacketData();
PacketData packetData;
while((packetData = stream.next()) != null) {
@@ -54,25 +46,12 @@ public class StudioImplementation {
out.close();
ReplayFile replay = new ReplayFile(replayFile);
ReplayMetaData metaData = replay.metadata().get();
ReplayMetaData metaData = replayFile.getMetaData();
ending = Math.min(metaData.getDuration(), ending);
metaData.setDuration(ending - beginning);
replayFile.writeMetaData(metaData);
Map<Integer, String> resourcePackIndex = replay.resourcePackIndex().get();
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);
replayFile.saveTo(outputFile);
}
//TODO Work with Johni to connect multiple Replay Files