diff --git a/common/src/main/java/ctbrec/StringUtil.java b/common/src/main/java/ctbrec/StringUtil.java index 589e296b..236fcca4 100644 --- a/common/src/main/java/ctbrec/StringUtil.java +++ b/common/src/main/java/ctbrec/StringUtil.java @@ -60,4 +60,14 @@ public class StringUtil { } return hex; } + + // @formatter:off + public static String sanitize(String input) { + return input + .replace(' ', '_') + .replace('\\', '_') + .replace('/', '_') + .replace('\'', '_') + .replace('"', '_'); + } // @formatter:on } diff --git a/common/src/main/java/ctbrec/recorder/postprocessing/AbstractPlaceholderAwarePostProcessor.java b/common/src/main/java/ctbrec/recorder/postprocessing/AbstractPlaceholderAwarePostProcessor.java index b83a1790..3cf306e5 100644 --- a/common/src/main/java/ctbrec/recorder/postprocessing/AbstractPlaceholderAwarePostProcessor.java +++ b/common/src/main/java/ctbrec/recorder/postprocessing/AbstractPlaceholderAwarePostProcessor.java @@ -1,5 +1,6 @@ package ctbrec.recorder.postprocessing; +import static ctbrec.StringUtil.*; import static java.util.Optional.*; import java.time.ZoneId; @@ -26,6 +27,7 @@ public abstract class AbstractPlaceholderAwarePostProcessor extends AbstractPost "${epochSecond}", "${fileSuffix}", "${modelNotes}", + "${recordingNotes}", "${recordingsDir}", "${absolutePath}", "${absoluteParentPath}" @@ -41,7 +43,8 @@ public abstract class AbstractPlaceholderAwarePostProcessor extends AbstractPost .replace("${siteSanitizedName}", getSanitizedSiteName(rec)) .replace("${fileSuffix}", getFileSuffix(rec)) .replace("${epochSecond}", Long.toString(rec.getStartDate().getEpochSecond())) - .replace("${modelNotes}", config.getModelNotes(rec.getModel())) + .replace("${modelNotes}", sanitize(config.getModelNotes(rec.getModel()))) + .replace("${recordingNotes}", getSanitizedRecordingNotes(rec)) .replace("${recordingsDir}", config.getSettings().recordingsDir) .replace("${absolutePath}", rec.getPostProcessedFile().getAbsolutePath()) .replace("${absoluteParentPath}", rec.getPostProcessedFile().getParentFile().getAbsolutePath()) @@ -92,7 +95,10 @@ public abstract class AbstractPlaceholderAwarePostProcessor extends AbstractPost } private CharSequence getSanitizedSiteName(Recording rec) { - return ofNullable(rec.getModel().getSite()).map(Site::getName).orElse("").replace(' ', '_').replace('\\', '_').replace('/', '_'); + return sanitize(ofNullable(rec.getModel().getSite()).map(Site::getName).orElse("")); } + private CharSequence getSanitizedRecordingNotes(Recording rec) { + return sanitize(ofNullable(rec.getNote()).orElse("")); + } } diff --git a/common/src/test/java/ctbrec/recorder/postprocessing/AbstractPlaceholderAwarePostProcessorTest.java b/common/src/test/java/ctbrec/recorder/postprocessing/AbstractPlaceholderAwarePostProcessorTest.java index 649c6ec8..04e4e13d 100644 --- a/common/src/test/java/ctbrec/recorder/postprocessing/AbstractPlaceholderAwarePostProcessorTest.java +++ b/common/src/test/java/ctbrec/recorder/postprocessing/AbstractPlaceholderAwarePostProcessorTest.java @@ -120,6 +120,6 @@ public class AbstractPlaceholderAwarePostProcessorTest extends AbstractPpTest { @Test public void testModelNotesReplacement() { String input = "asdf_${modelNotes}_asdf"; - assertEquals("asdf_tag, foo, bar_asdf", placeHolderAwarePp.fillInPlaceHolders(input, rec, config)); + assertEquals("asdf_tag,_foo,_bar_asdf", placeHolderAwarePp.fillInPlaceHolders(input, rec, config)); } }