From d52b728c1c25713a5c0bd52d1802b3cdaf2f3302 Mon Sep 17 00:00:00 2001 From: 0xb00bface <0xboobface@gmail.com> Date: Sun, 14 Feb 2021 18:26:31 +0100 Subject: [PATCH] Introduce new PostProcessingContext to pass around post-processing related objects --- .../src/main/java/ctbrec/ui/JavaFxModel.java | 12 +++++ .../ctbrec/ui/tabs/DownloadPostprocessor.java | 6 +-- .../java/ctbrec/ui/tabs/RecordingsTab.java | 6 ++- ...AbstractPlaceholderAwarePostProcessor.java | 4 +- .../ctbrec/recorder/postprocessing/Copy.java | 5 +- .../postprocessing/CreateContactSheet.java | 7 +-- .../postprocessing/CreateTimelineThumbs.java | 5 +- .../postprocessing/DeleteOriginal.java | 5 +- .../postprocessing/DeleteTooShort.java | 5 +- .../ctbrec/recorder/postprocessing/Move.java | 7 ++- .../postprocessing/PostProcessingContext.java | 46 +++++++++++++++++++ .../postprocessing/PostProcessor.java | 10 +--- .../postprocessing/RemoveKeepFile.java | 10 ++-- .../ctbrec/recorder/postprocessing/Remux.java | 7 ++- .../recorder/postprocessing/Rename.java | 7 ++- .../recorder/postprocessing/Script.java | 11 ++--- .../recorder/postprocessing/Webhook.java | 5 +- ...ractPlaceholderAwarePostProcessorTest.java | 32 ++++++------- .../postprocessing/AbstractPpTest.java | 9 ++++ .../recorder/postprocessing/CopyTest.java | 4 +- .../postprocessing/DeleteOriginalTest.java | 4 +- .../postprocessing/DeleteTooShortTest.java | 6 +-- .../postprocessing/MoveDirectoryTest.java | 4 +- .../postprocessing/MoveSingleFileTest.java | 6 +-- .../postprocessing/RemoveKeepFileTest.java | 4 +- .../postprocessing/RenameDirectoryTest.java | 4 +- .../postprocessing/RenameSingleFileTest.java | 6 +-- 27 files changed, 144 insertions(+), 93 deletions(-) create mode 100644 common/src/main/java/ctbrec/recorder/postprocessing/PostProcessingContext.java diff --git a/client/src/main/java/ctbrec/ui/JavaFxModel.java b/client/src/main/java/ctbrec/ui/JavaFxModel.java index b160a0f1..48e31716 100644 --- a/client/src/main/java/ctbrec/ui/JavaFxModel.java +++ b/client/src/main/java/ctbrec/ui/JavaFxModel.java @@ -3,6 +3,7 @@ package ctbrec.ui; import java.io.IOException; import java.time.Instant; import java.util.List; +import java.util.Optional; import java.util.concurrent.ExecutionException; import javax.xml.bind.JAXBException; @@ -13,6 +14,7 @@ import com.squareup.moshi.JsonReader; import com.squareup.moshi.JsonWriter; import ctbrec.Model; +import ctbrec.ModelGroupEntry; import ctbrec.SubsequentAction; import ctbrec.recorder.download.Download; import ctbrec.recorder.download.HttpHeaderFactory; @@ -330,5 +332,15 @@ public class JavaFxModel implements Model { delegate.setMarkedForLaterRecording(marked); } + @Override + public void setModelGroup(ModelGroupEntry modelGroupEntry) { + delegate.setModelGroup(modelGroupEntry); + } + + @Override + public Optional getModelGroup() { + return delegate.getModelGroup(); + } + } diff --git a/client/src/main/java/ctbrec/ui/tabs/DownloadPostprocessor.java b/client/src/main/java/ctbrec/ui/tabs/DownloadPostprocessor.java index c97da77a..787b042c 100644 --- a/client/src/main/java/ctbrec/ui/tabs/DownloadPostprocessor.java +++ b/client/src/main/java/ctbrec/ui/tabs/DownloadPostprocessor.java @@ -2,10 +2,8 @@ package ctbrec.ui.tabs; import java.io.IOException; -import ctbrec.Config; -import ctbrec.Recording; -import ctbrec.recorder.RecordingManager; import ctbrec.recorder.postprocessing.AbstractPlaceholderAwarePostProcessor; +import ctbrec.recorder.postprocessing.PostProcessingContext; public class DownloadPostprocessor extends AbstractPlaceholderAwarePostProcessor { @@ -15,7 +13,7 @@ public class DownloadPostprocessor extends AbstractPlaceholderAwarePostProcessor } @Override - public boolean postprocess(Recording rec, RecordingManager recordingManager, Config config) throws IOException, InterruptedException { + public boolean postprocess(PostProcessingContext ctx) throws IOException, InterruptedException { // nothing really to do in here, we just inherit from AbstractPlaceholderAwarePostProcessor to use fillInPlaceHolders return true; } diff --git a/client/src/main/java/ctbrec/ui/tabs/RecordingsTab.java b/client/src/main/java/ctbrec/ui/tabs/RecordingsTab.java index f36083e0..7338cccb 100644 --- a/client/src/main/java/ctbrec/ui/tabs/RecordingsTab.java +++ b/client/src/main/java/ctbrec/ui/tabs/RecordingsTab.java @@ -40,6 +40,7 @@ import ctbrec.io.UrlUtil; import ctbrec.recorder.ProgressListener; import ctbrec.recorder.Recorder; import ctbrec.recorder.RecordingPinnedException; +import ctbrec.recorder.postprocessing.PostProcessingContext; import ctbrec.ui.AutosizeAlert; import ctbrec.ui.CamrecApplication; import ctbrec.ui.DesktopIntegration; @@ -688,7 +689,10 @@ public class RecordingsTab extends Tab implements TabSelectionListener, Shutdown } else { String downloadFilename = config.getSettings().downloadFilename; String fileSuffix = config.getSettings().ffmpegFileSuffix; - return new DownloadPostprocessor().fillInPlaceHolders(downloadFilename, recording, config) + '.' + fileSuffix; + PostProcessingContext ctx = new PostProcessingContext(); + ctx.setRecording(recording); + ctx.setConfig(config); + return new DownloadPostprocessor().fillInPlaceHolders(downloadFilename, ctx) + '.' + fileSuffix; } } diff --git a/common/src/main/java/ctbrec/recorder/postprocessing/AbstractPlaceholderAwarePostProcessor.java b/common/src/main/java/ctbrec/recorder/postprocessing/AbstractPlaceholderAwarePostProcessor.java index bb2ae13f..40e79aec 100644 --- a/common/src/main/java/ctbrec/recorder/postprocessing/AbstractPlaceholderAwarePostProcessor.java +++ b/common/src/main/java/ctbrec/recorder/postprocessing/AbstractPlaceholderAwarePostProcessor.java @@ -33,7 +33,9 @@ public abstract class AbstractPlaceholderAwarePostProcessor extends AbstractPost "${absoluteParentPath}" }; - public String fillInPlaceHolders(String input, Recording rec, Config config) { + public String fillInPlaceHolders(String input, PostProcessingContext ctx) { + Recording rec = ctx.getRecording(); + Config config = ctx.getConfig(); // @formatter:off String output = input .replace("${modelName}", ofNullable(rec.getModel().getName()).orElse("modelName")) diff --git a/common/src/main/java/ctbrec/recorder/postprocessing/Copy.java b/common/src/main/java/ctbrec/recorder/postprocessing/Copy.java index 9ffeb315..d604e249 100644 --- a/common/src/main/java/ctbrec/recorder/postprocessing/Copy.java +++ b/common/src/main/java/ctbrec/recorder/postprocessing/Copy.java @@ -8,9 +8,7 @@ import org.apache.commons.io.FileUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import ctbrec.Config; import ctbrec.Recording; -import ctbrec.recorder.RecordingManager; public class Copy extends AbstractPostProcessor { @@ -22,7 +20,8 @@ public class Copy extends AbstractPostProcessor { } @Override - public boolean postprocess(Recording rec, RecordingManager recordingManager, Config config) throws IOException, InterruptedException { + public boolean postprocess(PostProcessingContext ctx) throws IOException, InterruptedException { + Recording rec = ctx.getRecording(); File orig = rec.getPostProcessedFile(); String copyFilename = getFilenameForCopy(orig); File copy = new File(orig.getParentFile(), copyFilename); diff --git a/common/src/main/java/ctbrec/recorder/postprocessing/CreateContactSheet.java b/common/src/main/java/ctbrec/recorder/postprocessing/CreateContactSheet.java index 5459dcdc..951cac6c 100644 --- a/common/src/main/java/ctbrec/recorder/postprocessing/CreateContactSheet.java +++ b/common/src/main/java/ctbrec/recorder/postprocessing/CreateContactSheet.java @@ -22,7 +22,6 @@ import ctbrec.OS; import ctbrec.Recording; import ctbrec.io.IoUtils; import ctbrec.recorder.FFmpeg; -import ctbrec.recorder.RecordingManager; import ctbrec.recorder.download.ProcessExitedUncleanException; @ThreadSafe @@ -45,7 +44,9 @@ public class CreateContactSheet extends AbstractPlaceholderAwarePostProcessor { } @Override - public boolean postprocess(Recording rec, RecordingManager recordingManager, Config config) throws IOException, InterruptedException { + public boolean postprocess(PostProcessingContext ctx) throws IOException, InterruptedException { + Recording rec = ctx.getRecording(); + Config config = ctx.getConfig(); int totalWidth = Integer.parseInt(getConfig().getOrDefault(TOTAL_SIZE, "1920")); int padding = Integer.parseInt(getConfig().getOrDefault(PADDING, "4")); int cols = Integer.parseInt(getConfig().getOrDefault(COLS, "8")); @@ -65,7 +66,7 @@ public class CreateContactSheet extends AbstractPlaceholderAwarePostProcessor { color}, new StringBuffer(), null).toString(); File executionDir = rec.getPostProcessedFile().isDirectory() ? rec.getPostProcessedFile() : rec.getPostProcessedFile().getParentFile(); - File output = new File(executionDir, fillInPlaceHolders(filename, rec, config)); + File output = new File(executionDir, fillInPlaceHolders(filename, ctx)); String[] args = { "-y", diff --git a/common/src/main/java/ctbrec/recorder/postprocessing/CreateTimelineThumbs.java b/common/src/main/java/ctbrec/recorder/postprocessing/CreateTimelineThumbs.java index 46cb7240..c3b7b42e 100644 --- a/common/src/main/java/ctbrec/recorder/postprocessing/CreateTimelineThumbs.java +++ b/common/src/main/java/ctbrec/recorder/postprocessing/CreateTimelineThumbs.java @@ -2,10 +2,7 @@ package ctbrec.recorder.postprocessing; import java.io.IOException; -import ctbrec.Config; import ctbrec.NotImplementedExcetion; -import ctbrec.Recording; -import ctbrec.recorder.RecordingManager; public class CreateTimelineThumbs extends AbstractPlaceholderAwarePostProcessor { @@ -15,7 +12,7 @@ public class CreateTimelineThumbs extends AbstractPlaceholderAwarePostProcessor } @Override - public boolean postprocess(Recording rec, RecordingManager recordingManager, Config config) throws IOException, InterruptedException { + public boolean postprocess(PostProcessingContext ctx) throws IOException, InterruptedException { // create 1 thumb every second with a width of 360 pixels and save it as jpeg with a 5-digit sequence number // ffmpeg -i -vf 'fps=1,scale=360:-1' thumbs/out%05d.jpg throw new NotImplementedExcetion(); diff --git a/common/src/main/java/ctbrec/recorder/postprocessing/DeleteOriginal.java b/common/src/main/java/ctbrec/recorder/postprocessing/DeleteOriginal.java index 7edf92fb..965ef2f0 100644 --- a/common/src/main/java/ctbrec/recorder/postprocessing/DeleteOriginal.java +++ b/common/src/main/java/ctbrec/recorder/postprocessing/DeleteOriginal.java @@ -5,9 +5,7 @@ import static ctbrec.io.IoUtils.*; import java.io.IOException; import java.nio.file.Files; -import ctbrec.Config; import ctbrec.Recording; -import ctbrec.recorder.RecordingManager; public class DeleteOriginal extends AbstractPostProcessor { @@ -17,7 +15,8 @@ public class DeleteOriginal extends AbstractPostProcessor { } @Override - public boolean postprocess(Recording rec, RecordingManager recordingManager, Config config) throws IOException, InterruptedException { + public boolean postprocess(PostProcessingContext ctx) throws IOException, InterruptedException { + Recording rec = ctx.getRecording(); if (rec.getAbsoluteFile().isFile()) { Files.deleteIfExists(rec.getAbsoluteFile().toPath()); deleteEmptyParents(rec.getAbsoluteFile().getParentFile()); diff --git a/common/src/main/java/ctbrec/recorder/postprocessing/DeleteTooShort.java b/common/src/main/java/ctbrec/recorder/postprocessing/DeleteTooShort.java index 39b3691a..7835285c 100644 --- a/common/src/main/java/ctbrec/recorder/postprocessing/DeleteTooShort.java +++ b/common/src/main/java/ctbrec/recorder/postprocessing/DeleteTooShort.java @@ -6,7 +6,6 @@ import java.time.Duration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import ctbrec.Config; import ctbrec.Recording; import ctbrec.recorder.RecordingManager; @@ -21,7 +20,9 @@ public class DeleteTooShort extends AbstractPostProcessor { } @Override - public boolean postprocess(Recording rec, RecordingManager recordingManager, Config config) throws IOException { + public boolean postprocess(PostProcessingContext ctx) throws IOException { + Recording rec = ctx.getRecording(); + RecordingManager recordingManager = ctx.getRecordingManager(); Duration minimumLengthInSeconds = Duration.ofSeconds(Integer.parseInt(getConfig().getOrDefault(MIN_LEN_IN_SECS, "0"))); if (minimumLengthInSeconds.getSeconds() > 0) { Duration recordingLength = rec.getLength(); diff --git a/common/src/main/java/ctbrec/recorder/postprocessing/Move.java b/common/src/main/java/ctbrec/recorder/postprocessing/Move.java index 3b33b736..1633400a 100644 --- a/common/src/main/java/ctbrec/recorder/postprocessing/Move.java +++ b/common/src/main/java/ctbrec/recorder/postprocessing/Move.java @@ -10,9 +10,7 @@ import org.apache.commons.io.FileUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import ctbrec.Config; import ctbrec.Recording; -import ctbrec.recorder.RecordingManager; public class Move extends AbstractPlaceholderAwarePostProcessor { @@ -26,9 +24,10 @@ public class Move extends AbstractPlaceholderAwarePostProcessor { } @Override - public boolean postprocess(Recording rec, RecordingManager recordingManager, Config config) throws IOException { + public boolean postprocess(PostProcessingContext ctx) throws IOException { + Recording rec = ctx.getRecording(); String pathTemplate = getConfig().getOrDefault(PATH_TEMPLATE, DEFAULT); - String path = fillInPlaceHolders(pathTemplate, rec, config); + String path = fillInPlaceHolders(pathTemplate, ctx); File src = rec.getPostProcessedFile(); boolean isFile = src.isFile(); File target = new File(path, src.getName()); diff --git a/common/src/main/java/ctbrec/recorder/postprocessing/PostProcessingContext.java b/common/src/main/java/ctbrec/recorder/postprocessing/PostProcessingContext.java new file mode 100644 index 00000000..057c948f --- /dev/null +++ b/common/src/main/java/ctbrec/recorder/postprocessing/PostProcessingContext.java @@ -0,0 +1,46 @@ +package ctbrec.recorder.postprocessing; + +import ctbrec.Config; +import ctbrec.Recording; +import ctbrec.recorder.Recorder; +import ctbrec.recorder.RecordingManager; + +public class PostProcessingContext { + + private Recorder recorder; + private Recording recording; + private RecordingManager recordingManager; + private Config config; + + public Recorder getRecorder() { + return recorder; + } + + public void setRecorder(Recorder recorder) { + this.recorder = recorder; + } + + public Recording getRecording() { + return recording; + } + + public void setRecording(Recording recording) { + this.recording = recording; + } + + public RecordingManager getRecordingManager() { + return recordingManager; + } + + public void setRecordingManager(RecordingManager recordingManager) { + this.recordingManager = recordingManager; + } + + public Config getConfig() { + return config; + } + + public void setConfig(Config config) { + this.config = config; + } +} diff --git a/common/src/main/java/ctbrec/recorder/postprocessing/PostProcessor.java b/common/src/main/java/ctbrec/recorder/postprocessing/PostProcessor.java index 66a84591..8e2d474b 100644 --- a/common/src/main/java/ctbrec/recorder/postprocessing/PostProcessor.java +++ b/common/src/main/java/ctbrec/recorder/postprocessing/PostProcessor.java @@ -4,23 +4,17 @@ import java.io.IOException; import java.io.Serializable; import java.util.Map; -import ctbrec.Config; -import ctbrec.Recording; -import ctbrec.recorder.RecordingManager; - public interface PostProcessor extends Serializable { String getName(); /** * Runs the post-processing code on the given recording - * @param rec the recording to post-process - * @param recordingManager - * @param config + * @param ctx {@link PostProcessingContext}, which allows access to post-processing related objects * @return false to stop futher post-processing, true to continue * @throws IOException * @throws InterruptedException */ - boolean postprocess(Recording rec, RecordingManager recordingManager, Config config) throws IOException, InterruptedException; + boolean postprocess(PostProcessingContext ctx) throws IOException, InterruptedException; Map getConfig(); void setConfig(Map conf); diff --git a/common/src/main/java/ctbrec/recorder/postprocessing/RemoveKeepFile.java b/common/src/main/java/ctbrec/recorder/postprocessing/RemoveKeepFile.java index 5e47b7c7..7e574459 100644 --- a/common/src/main/java/ctbrec/recorder/postprocessing/RemoveKeepFile.java +++ b/common/src/main/java/ctbrec/recorder/postprocessing/RemoveKeepFile.java @@ -2,10 +2,6 @@ package ctbrec.recorder.postprocessing; import java.io.IOException; -import ctbrec.Config; -import ctbrec.Recording; -import ctbrec.recorder.RecordingManager; - public class RemoveKeepFile extends AbstractPostProcessor { @Override @@ -14,9 +10,9 @@ public class RemoveKeepFile extends AbstractPostProcessor { } @Override - public boolean postprocess(Recording rec, RecordingManager recordingManager, Config config) throws IOException, InterruptedException { - recordingManager.remove(rec); - rec.setMetaDataFile(null); + public boolean postprocess(PostProcessingContext ctx) throws IOException, InterruptedException { + ctx.getRecordingManager().remove(ctx.getRecording()); + ctx.getRecording().setMetaDataFile(null); return true; } } diff --git a/common/src/main/java/ctbrec/recorder/postprocessing/Remux.java b/common/src/main/java/ctbrec/recorder/postprocessing/Remux.java index c18eb389..3994830b 100644 --- a/common/src/main/java/ctbrec/recorder/postprocessing/Remux.java +++ b/common/src/main/java/ctbrec/recorder/postprocessing/Remux.java @@ -9,12 +9,10 @@ import java.util.Objects; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import ctbrec.Config; import ctbrec.OS; import ctbrec.Recording; import ctbrec.io.IoUtils; import ctbrec.recorder.FFmpeg; -import ctbrec.recorder.RecordingManager; public class Remux extends AbstractPostProcessor { @@ -29,7 +27,8 @@ public class Remux extends AbstractPostProcessor { } @Override - public boolean postprocess(Recording rec, RecordingManager recordingManager, Config config) throws IOException, InterruptedException { + public boolean postprocess(PostProcessingContext ctx) throws IOException, InterruptedException { + Recording rec = ctx.getRecording(); final File inputFile; if (rec.getPostProcessedFile().isDirectory()) { inputFile = new File(rec.getPostProcessedFile(), "playlist.m3u8"); @@ -44,7 +43,7 @@ public class Remux extends AbstractPostProcessor { File ffmpegLog = new File(System.getProperty("java.io.tmpdir"), "remux_" + rec.getId() + ".log"); FFmpeg ffmpeg = new FFmpeg.Builder() - .logOutput(config.getSettings().logFFmpegOutput) + .logOutput(ctx.getConfig().getSettings().logFFmpegOutput) .logFile(ffmpegLog) .onExit(exitCode -> finalizeStep(exitCode, rec, inputFile, remuxedFile)) .build(); diff --git a/common/src/main/java/ctbrec/recorder/postprocessing/Rename.java b/common/src/main/java/ctbrec/recorder/postprocessing/Rename.java index 17871e39..298e3653 100644 --- a/common/src/main/java/ctbrec/recorder/postprocessing/Rename.java +++ b/common/src/main/java/ctbrec/recorder/postprocessing/Rename.java @@ -7,9 +7,7 @@ import java.util.Objects; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import ctbrec.Config; import ctbrec.Recording; -import ctbrec.recorder.RecordingManager; public class Rename extends AbstractPlaceholderAwarePostProcessor { @@ -24,10 +22,11 @@ public class Rename extends AbstractPlaceholderAwarePostProcessor { } @Override - public boolean postprocess(Recording rec, RecordingManager recordingManager, Config config) throws IOException { + public boolean postprocess(PostProcessingContext ctx) throws IOException { + Recording rec = ctx.getRecording(); String defaultTemplate = rec.isSingleFile() ? DEFAULT : DEFAULT_DIR; String filenameTemplate = getConfig().getOrDefault(FILE_NAME_TEMPLATE, defaultTemplate); - String filename = fillInPlaceHolders(filenameTemplate, rec, config); + String filename = fillInPlaceHolders(filenameTemplate, ctx); File src = rec.getPostProcessedFile(); File target = new File(src.getParentFile(), filename); if (Objects.equals(src, target)) { diff --git a/common/src/main/java/ctbrec/recorder/postprocessing/Script.java b/common/src/main/java/ctbrec/recorder/postprocessing/Script.java index ec5c8eb7..43c8d1eb 100644 --- a/common/src/main/java/ctbrec/recorder/postprocessing/Script.java +++ b/common/src/main/java/ctbrec/recorder/postprocessing/Script.java @@ -10,11 +10,9 @@ import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import ctbrec.Config; import ctbrec.OS; import ctbrec.Recording; import ctbrec.io.StreamRedirector; -import ctbrec.recorder.RecordingManager; import ctbrec.recorder.download.ProcessExitedUncleanException; public class Script extends AbstractPlaceholderAwarePostProcessor { @@ -29,8 +27,9 @@ public class Script extends AbstractPlaceholderAwarePostProcessor { } @Override - public boolean postprocess(Recording rec, RecordingManager recordingManager, Config config) throws IOException, InterruptedException { - List cmdline = buildCommandLine(rec, config); + public boolean postprocess(PostProcessingContext ctx) throws IOException, InterruptedException { + Recording rec = ctx.getRecording(); + List cmdline = buildCommandLine(ctx); Runtime rt = Runtime.getRuntime(); String[] args = cmdline.toArray(new String[0]); if (LOG.isDebugEnabled()) { @@ -50,12 +49,12 @@ public class Script extends AbstractPlaceholderAwarePostProcessor { return true; } - private List buildCommandLine(Recording rec, Config config) throws IOException { + private List buildCommandLine(PostProcessingContext ctx) { String script = getConfig().getOrDefault(SCRIPT_EXECUTABLE, "somescript"); String params = getConfig().getOrDefault(SCRIPT_PARAMS, "${absolutePath}"); List cmdline = new ArrayList<>(); cmdline.add(script); - String replacedParams = fillInPlaceHolders(params, rec, config); + String replacedParams = fillInPlaceHolders(params, ctx); Arrays.stream(replacedParams.split(" ")).forEach(cmdline::add); return cmdline; } diff --git a/common/src/main/java/ctbrec/recorder/postprocessing/Webhook.java b/common/src/main/java/ctbrec/recorder/postprocessing/Webhook.java index cee86c2d..284041da 100644 --- a/common/src/main/java/ctbrec/recorder/postprocessing/Webhook.java +++ b/common/src/main/java/ctbrec/recorder/postprocessing/Webhook.java @@ -2,10 +2,7 @@ package ctbrec.recorder.postprocessing; import java.io.IOException; -import ctbrec.Config; import ctbrec.NotImplementedExcetion; -import ctbrec.Recording; -import ctbrec.recorder.RecordingManager; public class Webhook extends AbstractPlaceholderAwarePostProcessor { @@ -21,7 +18,7 @@ public class Webhook extends AbstractPlaceholderAwarePostProcessor { } @Override - public boolean postprocess(Recording rec, RecordingManager recordingManager, Config config) throws IOException, InterruptedException { + public boolean postprocess(PostProcessingContext ctx) throws IOException, InterruptedException { throw new NotImplementedExcetion(); } diff --git a/common/src/test/java/ctbrec/recorder/postprocessing/AbstractPlaceholderAwarePostProcessorTest.java b/common/src/test/java/ctbrec/recorder/postprocessing/AbstractPlaceholderAwarePostProcessorTest.java index e3e6797d..bf66f978 100644 --- a/common/src/test/java/ctbrec/recorder/postprocessing/AbstractPlaceholderAwarePostProcessorTest.java +++ b/common/src/test/java/ctbrec/recorder/postprocessing/AbstractPlaceholderAwarePostProcessorTest.java @@ -37,19 +37,19 @@ public class AbstractPlaceholderAwarePostProcessorTest extends AbstractPpTest { @Test public void testModelNameReplacement() { String input = "asdf_${modelName}_asdf"; - assertEquals("asdf_Mockita Boobilicious_asdf", placeHolderAwarePp.fillInPlaceHolders(input, rec, config)); + assertEquals("asdf_Mockita Boobilicious_asdf", placeHolderAwarePp.fillInPlaceHolders(input, createPostProcessingContext(rec, null, config))); input = "asdf_${modelDisplayName}_asdf"; - assertEquals("asdf_Mockita Boobilicious_asdf", placeHolderAwarePp.fillInPlaceHolders(input, rec, config)); + assertEquals("asdf_Mockita Boobilicious_asdf", placeHolderAwarePp.fillInPlaceHolders(input, createPostProcessingContext(rec, null, config))); input = "asdf_${modelSanitizedName}_asdf"; - assertEquals("asdf_Mockita_Boobilicious_asdf", placeHolderAwarePp.fillInPlaceHolders(input, rec, config)); + assertEquals("asdf_Mockita_Boobilicious_asdf", placeHolderAwarePp.fillInPlaceHolders(input, createPostProcessingContext(rec, null, config))); } @Test public void testSiteNameReplacement() { String input = "asdf_${siteName}_asdf"; - assertEquals("asdf_Chaturbate_asdf", placeHolderAwarePp.fillInPlaceHolders(input, rec, config)); + assertEquals("asdf_Chaturbate_asdf", placeHolderAwarePp.fillInPlaceHolders(input, createPostProcessingContext(rec, null, config))); input = "asdf_${siteSanitizedName}_asdf"; - assertEquals("asdf_Chaturbate_asdf", placeHolderAwarePp.fillInPlaceHolders(input, rec, config)); + assertEquals("asdf_Chaturbate_asdf", placeHolderAwarePp.fillInPlaceHolders(input, createPostProcessingContext(rec, null, config))); } @Test @@ -60,7 +60,7 @@ public class AbstractPlaceholderAwarePostProcessorTest extends AbstractPpTest { .withZone(ZoneOffset.UTC) .format(rec.getStartDate()); String input = "asdf_${utcDateTime}_asdf"; - assertEquals("asdf_" + date + "_asdf", placeHolderAwarePp.fillInPlaceHolders(input, rec, config)); + assertEquals("asdf_" + date + "_asdf", placeHolderAwarePp.fillInPlaceHolders(input, createPostProcessingContext(rec, null, config))); // with user defined pattern date = DateTimeFormatter.ofPattern("yyyyMMdd-HHmmss") @@ -68,7 +68,7 @@ public class AbstractPlaceholderAwarePostProcessorTest extends AbstractPpTest { .withZone(ZoneOffset.UTC) .format(rec.getStartDate()); input = "asdf_${utcDateTime(yyyyMMdd-HHmmss)}_asdf"; - assertEquals("asdf_" + date + "_asdf", placeHolderAwarePp.fillInPlaceHolders(input, rec, config)); + assertEquals("asdf_" + date + "_asdf", placeHolderAwarePp.fillInPlaceHolders(input, createPostProcessingContext(rec, null, config))); // multiple occurences with user defined patterns date = DateTimeFormatter.ofPattern("yyyy-MM-dd/yyyy") @@ -76,7 +76,7 @@ public class AbstractPlaceholderAwarePostProcessorTest extends AbstractPpTest { .withZone(ZoneOffset.UTC) .format(rec.getStartDate()); input = "asdf_${utcDateTime(yyyy)}-${utcDateTime(MM)}-${utcDateTime(dd)}/${utcDateTime(yyyy)}_asdf"; - assertEquals("asdf_" + date + "_asdf", placeHolderAwarePp.fillInPlaceHolders(input, rec, config)); + assertEquals("asdf_" + date + "_asdf", placeHolderAwarePp.fillInPlaceHolders(input, createPostProcessingContext(rec, null, config))); } @Test @@ -86,50 +86,50 @@ public class AbstractPlaceholderAwarePostProcessorTest extends AbstractPpTest { .withZone(ZoneId.systemDefault()) .format(rec.getStartDate()); String input = "asdf_${localDateTime}_asdf"; - assertEquals("asdf_" + date + "_asdf", placeHolderAwarePp.fillInPlaceHolders(input, rec, config)); + assertEquals("asdf_" + date + "_asdf", placeHolderAwarePp.fillInPlaceHolders(input, createPostProcessingContext(rec, null, config))); date = DateTimeFormatter.ofPattern("yyyyMMdd-HHmmss") .withLocale(Locale.US) .withZone(ZoneId.systemDefault()) .format(rec.getStartDate()); input = "asdf_${localDateTime(yyyyMMdd-HHmmss)}_asdf"; - assertEquals("asdf_" + date + "_asdf", placeHolderAwarePp.fillInPlaceHolders(input, rec, config)); + assertEquals("asdf_" + date + "_asdf", placeHolderAwarePp.fillInPlaceHolders(input, createPostProcessingContext(rec, null, config))); } @Test public void testEpochReplacement() { long epoch = now.toEpochMilli() / 1000; String input = "asdf_${epochSecond}_asdf"; - assertEquals("asdf_" + epoch + "_asdf", placeHolderAwarePp.fillInPlaceHolders(input, rec, config)); + assertEquals("asdf_" + epoch + "_asdf", placeHolderAwarePp.fillInPlaceHolders(input, createPostProcessingContext(rec, null, config))); } @Test public void testFileSuffixReplacement() { String input = "asdf_${fileSuffix}_asdf"; - assertEquals("asdf_ts_asdf", placeHolderAwarePp.fillInPlaceHolders(input, rec, config)); + assertEquals("asdf_ts_asdf", placeHolderAwarePp.fillInPlaceHolders(input, createPostProcessingContext(rec, null, config))); } @Test public void testRecordingsDirReplacement() { String input = "asdf_${recordingsDir}_asdf"; - assertEquals("asdf_" + recDir.toString() + "_asdf", placeHolderAwarePp.fillInPlaceHolders(input, rec, config)); + assertEquals("asdf_" + recDir.toString() + "_asdf", placeHolderAwarePp.fillInPlaceHolders(input, createPostProcessingContext(rec, null, config))); } @Test public void testAbsolutePathReplacement() { String input = "asdf_${absolutePath}_asdf"; - assertEquals("asdf_" + postProcessed.getAbsolutePath().toString() + "_asdf", placeHolderAwarePp.fillInPlaceHolders(input, rec, config)); + assertEquals("asdf_" + postProcessed.getAbsolutePath().toString() + "_asdf", placeHolderAwarePp.fillInPlaceHolders(input, createPostProcessingContext(rec, null, config))); } @Test public void testAbsoluteParentPathReplacement() { String input = "asdf_${absoluteParentPath}_asdf"; - assertEquals("asdf_" + postProcessed.getParentFile().toString() + "_asdf", placeHolderAwarePp.fillInPlaceHolders(input, rec, config)); + assertEquals("asdf_" + postProcessed.getParentFile().toString() + "_asdf", placeHolderAwarePp.fillInPlaceHolders(input, createPostProcessingContext(rec, null, config))); } @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, createPostProcessingContext(rec, null, config))); } } diff --git a/common/src/test/java/ctbrec/recorder/postprocessing/AbstractPpTest.java b/common/src/test/java/ctbrec/recorder/postprocessing/AbstractPpTest.java index 0d9e65e7..ba3cf6b7 100644 --- a/common/src/test/java/ctbrec/recorder/postprocessing/AbstractPpTest.java +++ b/common/src/test/java/ctbrec/recorder/postprocessing/AbstractPpTest.java @@ -18,6 +18,7 @@ import org.mockito.MockedStatic; import ctbrec.Config; import ctbrec.Model; +import ctbrec.Recording; import ctbrec.Settings; import ctbrec.recorder.RecordingManager; import ctbrec.sites.Site; @@ -81,4 +82,12 @@ public abstract class AbstractPpTest { settings.recordingsDir = recDir.toString(); return settings; } + + PostProcessingContext createPostProcessingContext(Recording rec, RecordingManager recordingManager, Config config) { + PostProcessingContext ctx = new PostProcessingContext(); + ctx.setConfig(config); + ctx.setRecording(rec); + ctx.setRecordingManager(recordingManager); + return ctx; + } } diff --git a/common/src/test/java/ctbrec/recorder/postprocessing/CopyTest.java b/common/src/test/java/ctbrec/recorder/postprocessing/CopyTest.java index f28f4e26..27624a12 100644 --- a/common/src/test/java/ctbrec/recorder/postprocessing/CopyTest.java +++ b/common/src/test/java/ctbrec/recorder/postprocessing/CopyTest.java @@ -20,7 +20,7 @@ public class CopyTest extends AbstractPpTest { rec.setStartDate(now); rec.setSingleFile(false); Copy pp = new Copy(); - pp.postprocess(rec, recordingManager, config); + pp.postprocess(createPostProcessingContext(rec, recordingManager, config)); assertNotEquals(rec.getAbsoluteFile(), rec.getPostProcessedFile()); assertTrue(original.exists()); @@ -36,7 +36,7 @@ public class CopyTest extends AbstractPpTest { rec.setStartDate(now); rec.setSingleFile(false); Copy pp = new Copy(); - pp.postprocess(rec, recordingManager, config); + pp.postprocess(createPostProcessingContext(rec, recordingManager, config)); assertNotEquals(rec.getAbsoluteFile(), rec.getPostProcessedFile()); assertTrue(originalDir.exists()); diff --git a/common/src/test/java/ctbrec/recorder/postprocessing/DeleteOriginalTest.java b/common/src/test/java/ctbrec/recorder/postprocessing/DeleteOriginalTest.java index 48e54386..7616c2c9 100644 --- a/common/src/test/java/ctbrec/recorder/postprocessing/DeleteOriginalTest.java +++ b/common/src/test/java/ctbrec/recorder/postprocessing/DeleteOriginalTest.java @@ -23,7 +23,7 @@ public class DeleteOriginalTest extends AbstractPpTest { Config config = mockConfig(); DeleteOriginal pp = new DeleteOriginal(); - pp.postprocess(rec, null, config); + pp.postprocess(createPostProcessingContext(rec, null, config)); assertEquals(postProcessed, rec.getAbsoluteFile()); assertTrue(rec.getAbsoluteFile().exists()); @@ -42,7 +42,7 @@ public class DeleteOriginalTest extends AbstractPpTest { Config config = mockConfig(); Files.createDirectories(postProcessedDir.toPath()); DeleteOriginal pp = new DeleteOriginal(); - pp.postprocess(rec, null, config); + pp.postprocess(createPostProcessingContext(rec, null, config)); assertEquals(postProcessedDir, rec.getAbsoluteFile()); assertTrue(rec.getAbsoluteFile().exists()); diff --git a/common/src/test/java/ctbrec/recorder/postprocessing/DeleteTooShortTest.java b/common/src/test/java/ctbrec/recorder/postprocessing/DeleteTooShortTest.java index e99cbada..0b11176b 100644 --- a/common/src/test/java/ctbrec/recorder/postprocessing/DeleteTooShortTest.java +++ b/common/src/test/java/ctbrec/recorder/postprocessing/DeleteTooShortTest.java @@ -42,7 +42,7 @@ public class DeleteTooShortTest extends AbstractPpTest { DeleteTooShort pp = new DeleteTooShort(); pp.getConfig().put(DeleteTooShort.MIN_LEN_IN_SECS, "10"); - pp.postprocess(rec, recordingManager, config); + pp.postprocess(createPostProcessingContext(rec, recordingManager, config)); assertFalse(rec.getAbsoluteFile().exists()); assertFalse(original.exists()); @@ -66,7 +66,7 @@ public class DeleteTooShortTest extends AbstractPpTest { DeleteTooShort pp = new DeleteTooShort(); pp.getConfig().put(DeleteTooShort.MIN_LEN_IN_SECS, "0"); - pp.postprocess(rec, recordingManager, config); + pp.postprocess(createPostProcessingContext(rec, recordingManager, config)); assertTrue(rec.getAbsoluteFile().exists()); assertTrue(original.exists()); @@ -83,7 +83,7 @@ public class DeleteTooShortTest extends AbstractPpTest { DeleteTooShort pp = new DeleteTooShort(); pp.getConfig().put(DeleteTooShort.MIN_LEN_IN_SECS, "1"); - pp.postprocess(rec, recordingManager, config); + pp.postprocess(createPostProcessingContext(rec, recordingManager, config)); assertTrue(rec.getAbsoluteFile().exists()); assertTrue(original.exists()); diff --git a/common/src/test/java/ctbrec/recorder/postprocessing/MoveDirectoryTest.java b/common/src/test/java/ctbrec/recorder/postprocessing/MoveDirectoryTest.java index 93508e66..882664ac 100644 --- a/common/src/test/java/ctbrec/recorder/postprocessing/MoveDirectoryTest.java +++ b/common/src/test/java/ctbrec/recorder/postprocessing/MoveDirectoryTest.java @@ -28,7 +28,7 @@ public class MoveDirectoryTest extends AbstractPpTest { rec.setSingleFile(false); Move pp = new Move(); pp.getConfig().put(Move.PATH_TEMPLATE, new File(baseDir.toFile(), Move.DEFAULT).getAbsolutePath()); - pp.postprocess(rec, recordingManager, config); + pp.postprocess(createPostProcessingContext(rec, recordingManager, config)); Matcher m = Pattern.compile(baseDir.toString() + "/Mockita_Boobilicious/\\d{4}-\\d{2}-\\d{2}_\\d{2}-\\d{2}-\\d{2}/original").matcher(rec.getAbsoluteFile().getCanonicalPath()); assertTrue(m.matches()); @@ -50,6 +50,6 @@ public class MoveDirectoryTest extends AbstractPpTest { Move pp = new Move(); Config config = mockConfig(); pp.getConfig().put(Move.PATH_TEMPLATE, new File(baseDir.toFile(), Move.DEFAULT).getAbsolutePath()); - pp.postprocess(rec, recordingManager, config); + pp.postprocess(createPostProcessingContext(rec, recordingManager, config)); } } diff --git a/common/src/test/java/ctbrec/recorder/postprocessing/MoveSingleFileTest.java b/common/src/test/java/ctbrec/recorder/postprocessing/MoveSingleFileTest.java index b2199b80..4758288a 100644 --- a/common/src/test/java/ctbrec/recorder/postprocessing/MoveSingleFileTest.java +++ b/common/src/test/java/ctbrec/recorder/postprocessing/MoveSingleFileTest.java @@ -28,7 +28,7 @@ public class MoveSingleFileTest extends AbstractPpTest { Move pp = new Move(); pp.getConfig().put(Move.PATH_TEMPLATE, new File(baseDir.toFile(), Move.DEFAULT).getAbsolutePath()); - pp.postprocess(rec, recordingManager, config); + pp.postprocess(createPostProcessingContext(rec, recordingManager, config)); Matcher m = Pattern.compile(baseDir.toFile() + "/Mockita_Boobilicious/\\d{4}-\\d{2}-\\d{2}_\\d{2}-\\d{2}-\\d{2}/original\\.ts").matcher(rec.getAbsoluteFile().toString()); assertTrue(m.matches()); @@ -48,7 +48,7 @@ public class MoveSingleFileTest extends AbstractPpTest { Move pp = new Move(); Config config = mockConfig(); pp.getConfig().put(Move.PATH_TEMPLATE, original.getParentFile().getCanonicalPath()); - pp.postprocess(rec, recordingManager, config); + pp.postprocess(createPostProcessingContext(rec, recordingManager, config)); } @Test @@ -63,7 +63,7 @@ public class MoveSingleFileTest extends AbstractPpTest { Move pp = new Move(); Config config = mockConfig(); pp.getConfig().put(Move.PATH_TEMPLATE, new File(baseDir.toFile(), Move.DEFAULT).getAbsolutePath()); - pp.postprocess(rec, recordingManager, config); + pp.postprocess(createPostProcessingContext(rec, recordingManager, config)); } @Test diff --git a/common/src/test/java/ctbrec/recorder/postprocessing/RemoveKeepFileTest.java b/common/src/test/java/ctbrec/recorder/postprocessing/RemoveKeepFileTest.java index 8909091f..a4b342fd 100644 --- a/common/src/test/java/ctbrec/recorder/postprocessing/RemoveKeepFileTest.java +++ b/common/src/test/java/ctbrec/recorder/postprocessing/RemoveKeepFileTest.java @@ -25,9 +25,9 @@ public class RemoveKeepFileTest extends AbstractPpTest { Config config = mockConfig(); RecordingManager rm = new RecordingManager(config, Collections.emptyList()); rm.add(rec); - assertTrue(rm.getAll().size() == 1); + assertEquals(1, rm.getAll().size()); RemoveKeepFile pp = new RemoveKeepFile(); - pp.postprocess(rec, rm, config); + pp.postprocess(createPostProcessingContext(rec, rm, config)); assertTrue(rec.getAbsoluteFile().exists()); assertTrue(rec.getPostProcessedFile().exists()); diff --git a/common/src/test/java/ctbrec/recorder/postprocessing/RenameDirectoryTest.java b/common/src/test/java/ctbrec/recorder/postprocessing/RenameDirectoryTest.java index cdd9cfb2..a8213d81 100644 --- a/common/src/test/java/ctbrec/recorder/postprocessing/RenameDirectoryTest.java +++ b/common/src/test/java/ctbrec/recorder/postprocessing/RenameDirectoryTest.java @@ -26,7 +26,7 @@ public class RenameDirectoryTest extends AbstractPpTest { rec.setStartDate(now); rec.setSingleFile(false); Rename pp = new Rename(); - pp.postprocess(rec, recordingManager, config); + pp.postprocess(createPostProcessingContext(rec, recordingManager, config)); Matcher m = Pattern.compile("Mockita_Boobilicious_\\d{4}-\\d{2}-\\d{2}_\\d{2}-\\d{2}-\\d{2}").matcher(rec.getAbsoluteFile().getName()); assertTrue(m.matches()); @@ -47,6 +47,6 @@ public class RenameDirectoryTest extends AbstractPpTest { Files.createDirectories(postProcessedDir.toPath()); Rename pp = new Rename(); - pp.postprocess(rec, recordingManager, config); + pp.postprocess(createPostProcessingContext(rec, recordingManager, config)); } } diff --git a/common/src/test/java/ctbrec/recorder/postprocessing/RenameSingleFileTest.java b/common/src/test/java/ctbrec/recorder/postprocessing/RenameSingleFileTest.java index de739cd5..a0f59ff9 100644 --- a/common/src/test/java/ctbrec/recorder/postprocessing/RenameSingleFileTest.java +++ b/common/src/test/java/ctbrec/recorder/postprocessing/RenameSingleFileTest.java @@ -25,7 +25,7 @@ public class RenameSingleFileTest extends AbstractPpTest { rec.setStartDate(now); rec.setSingleFile(true); Rename pp = new Rename(); - pp.postprocess(rec, recordingManager, config); + pp.postprocess(createPostProcessingContext(rec, recordingManager, config)); Matcher m = Pattern.compile("Mockita_Boobilicious_\\d{4}-\\d{2}-\\d{2}_\\d{2}-\\d{2}-\\d{2}\\.ts").matcher(rec.getAbsoluteFile().getName()); assertTrue(m.matches()); @@ -45,7 +45,7 @@ public class RenameSingleFileTest extends AbstractPpTest { doThrow(new RuntimeException("Unexpected call of setAbsoluteFile")).when(rec).setAbsoluteFile(any()); Rename pp = new Rename(); pp.getConfig().put(Rename.FILE_NAME_TEMPLATE, original.getName()); - pp.postprocess(rec, recordingManager, config); + pp.postprocess(createPostProcessingContext(rec, recordingManager, config)); } @Test @@ -59,7 +59,7 @@ public class RenameSingleFileTest extends AbstractPpTest { when(rec.getStartDate()).thenReturn(now); doThrow(new RuntimeException("Unexpected call of setAbsoluteFile")).when(rec).setAbsoluteFile(any()); Rename pp = new Rename(); - pp.postprocess(rec, recordingManager, config); + pp.postprocess(createPostProcessingContext(rec, recordingManager, config)); } @Test