Fix crash with certain render output file values (fixes #396)

This commit is contained in:
Jonas Herzig
2021-02-16 23:54:33 +01:00
parent 9dfdfd6fe3
commit a5f874e571

View File

@@ -129,7 +129,7 @@ public class GuiRenderSettings extends AbstractGuiPopup<GuiRenderSettings> {
public void run() {
GuiFileChooserPopup popup = GuiFileChooserPopup.openSaveGui(GuiRenderSettings.this, "replaymod.gui.save",
encodingPresetDropdown.getSelectedValue().getFileExtension());
popup.setFolder(outputFile.getParentFile());
popup.setFolder(getParentFile(outputFile));
popup.setFileName(outputFile.getName());
Futures.addCallback(
popup.getFuture(),
@@ -538,13 +538,13 @@ public class GuiRenderSettings extends AbstractGuiPopup<GuiRenderSettings> {
bitRateUnit.setSelected(0);
}
File savedOutputFile = settings.getOutputFile();
if (savedOutputFile == null || !savedOutputFile.getParentFile().exists()) {
if (savedOutputFile == null || !getParentFile(savedOutputFile).exists()) {
this.outputFile = generateOutputFile(encodingPreset);
userDefinedOutputFileName = false;
} else if (savedOutputFile.exists()) {
String name = generateOutputFile(encodingPreset).getName();
boolean isFolder = savedOutputFile.isDirectory() && !savedOutputFile.getName().endsWith(".exr");
this.outputFile = new File(isFolder ? savedOutputFile : savedOutputFile.getParentFile(), name);
this.outputFile = new File(isFolder ? savedOutputFile : getParentFile(savedOutputFile), name);
userDefinedOutputFileName = false;
} else {
this.outputFile = conformExtension(savedOutputFile, encodingPreset);
@@ -588,7 +588,7 @@ public class GuiRenderSettings extends AbstractGuiPopup<GuiRenderSettings> {
videoHeight.getInteger(),
frameRateSlider.getValue() + 10,
bitRateField.getInteger() << (10 * bitRateUnit.getSelected()),
serialize && !userDefinedOutputFileName ? outputFile.getParentFile() : outputFile,
serialize && !userDefinedOutputFileName ? getParentFile(outputFile) : outputFile,
nametagCheckbox.isChecked(),
stabilizeYaw.isChecked() && (serialize || stabilizeYaw.isEnabled()),
stabilizePitch.isChecked() && (serialize || stabilizePitch.isEnabled()),
@@ -617,7 +617,7 @@ public class GuiRenderSettings extends AbstractGuiPopup<GuiRenderSettings> {
public void setOutputFileBaseName(String base) {
RenderSettings.EncodingPreset preset = encodingPresetDropdown.getSelectedValue();
File file = new File(outputFile.getParentFile(), base + "." + preset.getFileExtension());
File file = new File(getParentFile(outputFile), base + "." + preset.getFileExtension());
// Ensure the file name is valid
try {
//noinspection ResultOfMethodCallIgnored
@@ -634,7 +634,7 @@ public class GuiRenderSettings extends AbstractGuiPopup<GuiRenderSettings> {
if (name.contains(".")) {
name = name.substring(0, name.lastIndexOf('.'));
}
return new File(file.getParentFile(), name + "." + preset.getFileExtension());
return new File(getParentFile(file), name + "." + preset.getFileExtension());
}
protected Path getSettingsPath() {
@@ -677,4 +677,10 @@ public class GuiRenderSettings extends AbstractGuiPopup<GuiRenderSettings> {
screen.setBackground(AbstractGuiScreen.Background.NONE);
return screen;
}
private static File getParentFile(File file) {
File parent = file.getParentFile();
// parent this can be null if file is just a name (i.e. in CWD)
return parent == null ? new File(".") : parent;
}
}