From 673964ea6afae36affcf563e33e7f239ba16cada Mon Sep 17 00:00:00 2001 From: Jonas Herzig Date: Sun, 22 Nov 2020 16:04:14 +0100 Subject: [PATCH] Hide Saving Replay popup when no output is produced (fixes #420) I.e. if the had Auto-Recording disabled and never pressed start, there won't be any replays and it would just be the Done button, which is pointless. --- .../replaymod/editor/gui/MarkerProcessor.java | 4 ++++ .../recording/packet/PacketListener.java | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/src/main/java/com/replaymod/editor/gui/MarkerProcessor.java b/src/main/java/com/replaymod/editor/gui/MarkerProcessor.java index eca8f74f..80e6494d 100644 --- a/src/main/java/com/replaymod/editor/gui/MarkerProcessor.java +++ b/src/main/java/com/replaymod/editor/gui/MarkerProcessor.java @@ -53,6 +53,10 @@ public class MarkerProcessor { } } + public static boolean producesAnyOutput(ReplayFile replayFile) throws IOException { + return !getOutputSuffixes(replayFile).isEmpty(); + } + private enum OutputState { /** A new output file has begun but not data has been written yet. */ NotYetWriting, diff --git a/src/main/java/com/replaymod/recording/packet/PacketListener.java b/src/main/java/com/replaymod/recording/packet/PacketListener.java index 53b7de29..40d4605c 100644 --- a/src/main/java/com/replaymod/recording/packet/PacketListener.java +++ b/src/main/java/com/replaymod/recording/packet/PacketListener.java @@ -39,6 +39,7 @@ import net.minecraft.network.Packet; import net.minecraft.network.PacketByteBuf; import net.minecraft.text.LiteralText; import net.minecraft.util.crash.CrashReport; +import org.apache.commons.io.FilenameUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -65,6 +66,7 @@ import net.minecraft.network.NetworkSide; import java.io.DataOutputStream; import java.io.IOException; import java.io.OutputStream; +import java.nio.file.Files; import java.nio.file.Path; import java.util.Arrays; import java.util.Collections; @@ -266,6 +268,23 @@ public class PacketListener extends ChannelInboundHandlerAdapter { List> outputPaths; synchronized (replayFile) { try { + if (!MarkerProcessor.producesAnyOutput(replayFile)) { + // Immediately close the saving popup, the user doesn't care about it + core.runLater(guiSavingReplay::close); + + // We still have the replay, so we just save it (at least for a few weeks) in case they change their mind + String replayName = FilenameUtils.getBaseName(outputPath.getFileName().toString()); + Path rawFolder = ReplayMod.instance.getRawReplayFolder(); + Path rawPath = rawFolder.resolve(outputPath.getFileName()); + for (int i = 1; Files.exists(rawPath); i++) { + rawPath = rawPath.resolveSibling(replayName + "." + i + ".mcpr"); + } + Files.createDirectories(rawPath.getParent()); + replayFile.saveTo(rawPath.toFile()); + replayFile.close(); + return; + } + replayFile.save(); replayFile.close();