Introduce new PostProcessingContext to pass around post-processing
related objects
This commit is contained in:
parent
4fd7b7ddd0
commit
d52b728c1c
|
@ -3,6 +3,7 @@ package ctbrec.ui;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
import java.util.concurrent.ExecutionException;
|
import java.util.concurrent.ExecutionException;
|
||||||
|
|
||||||
import javax.xml.bind.JAXBException;
|
import javax.xml.bind.JAXBException;
|
||||||
|
@ -13,6 +14,7 @@ import com.squareup.moshi.JsonReader;
|
||||||
import com.squareup.moshi.JsonWriter;
|
import com.squareup.moshi.JsonWriter;
|
||||||
|
|
||||||
import ctbrec.Model;
|
import ctbrec.Model;
|
||||||
|
import ctbrec.ModelGroupEntry;
|
||||||
import ctbrec.SubsequentAction;
|
import ctbrec.SubsequentAction;
|
||||||
import ctbrec.recorder.download.Download;
|
import ctbrec.recorder.download.Download;
|
||||||
import ctbrec.recorder.download.HttpHeaderFactory;
|
import ctbrec.recorder.download.HttpHeaderFactory;
|
||||||
|
@ -330,5 +332,15 @@ public class JavaFxModel implements Model {
|
||||||
delegate.setMarkedForLaterRecording(marked);
|
delegate.setMarkedForLaterRecording(marked);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setModelGroup(ModelGroupEntry modelGroupEntry) {
|
||||||
|
delegate.setModelGroup(modelGroupEntry);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Optional<ModelGroupEntry> getModelGroup() {
|
||||||
|
return delegate.getModelGroup();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,10 +2,8 @@ package ctbrec.ui.tabs;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
import ctbrec.Config;
|
|
||||||
import ctbrec.Recording;
|
|
||||||
import ctbrec.recorder.RecordingManager;
|
|
||||||
import ctbrec.recorder.postprocessing.AbstractPlaceholderAwarePostProcessor;
|
import ctbrec.recorder.postprocessing.AbstractPlaceholderAwarePostProcessor;
|
||||||
|
import ctbrec.recorder.postprocessing.PostProcessingContext;
|
||||||
|
|
||||||
public class DownloadPostprocessor extends AbstractPlaceholderAwarePostProcessor {
|
public class DownloadPostprocessor extends AbstractPlaceholderAwarePostProcessor {
|
||||||
|
|
||||||
|
@ -15,7 +13,7 @@ public class DownloadPostprocessor extends AbstractPlaceholderAwarePostProcessor
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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
|
// nothing really to do in here, we just inherit from AbstractPlaceholderAwarePostProcessor to use fillInPlaceHolders
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,6 +40,7 @@ import ctbrec.io.UrlUtil;
|
||||||
import ctbrec.recorder.ProgressListener;
|
import ctbrec.recorder.ProgressListener;
|
||||||
import ctbrec.recorder.Recorder;
|
import ctbrec.recorder.Recorder;
|
||||||
import ctbrec.recorder.RecordingPinnedException;
|
import ctbrec.recorder.RecordingPinnedException;
|
||||||
|
import ctbrec.recorder.postprocessing.PostProcessingContext;
|
||||||
import ctbrec.ui.AutosizeAlert;
|
import ctbrec.ui.AutosizeAlert;
|
||||||
import ctbrec.ui.CamrecApplication;
|
import ctbrec.ui.CamrecApplication;
|
||||||
import ctbrec.ui.DesktopIntegration;
|
import ctbrec.ui.DesktopIntegration;
|
||||||
|
@ -688,7 +689,10 @@ public class RecordingsTab extends Tab implements TabSelectionListener, Shutdown
|
||||||
} else {
|
} else {
|
||||||
String downloadFilename = config.getSettings().downloadFilename;
|
String downloadFilename = config.getSettings().downloadFilename;
|
||||||
String fileSuffix = config.getSettings().ffmpegFileSuffix;
|
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -33,7 +33,9 @@ public abstract class AbstractPlaceholderAwarePostProcessor extends AbstractPost
|
||||||
"${absoluteParentPath}"
|
"${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
|
// @formatter:off
|
||||||
String output = input
|
String output = input
|
||||||
.replace("${modelName}", ofNullable(rec.getModel().getName()).orElse("modelName"))
|
.replace("${modelName}", ofNullable(rec.getModel().getName()).orElse("modelName"))
|
||||||
|
|
|
@ -8,9 +8,7 @@ import org.apache.commons.io.FileUtils;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import ctbrec.Config;
|
|
||||||
import ctbrec.Recording;
|
import ctbrec.Recording;
|
||||||
import ctbrec.recorder.RecordingManager;
|
|
||||||
|
|
||||||
public class Copy extends AbstractPostProcessor {
|
public class Copy extends AbstractPostProcessor {
|
||||||
|
|
||||||
|
@ -22,7 +20,8 @@ public class Copy extends AbstractPostProcessor {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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();
|
File orig = rec.getPostProcessedFile();
|
||||||
String copyFilename = getFilenameForCopy(orig);
|
String copyFilename = getFilenameForCopy(orig);
|
||||||
File copy = new File(orig.getParentFile(), copyFilename);
|
File copy = new File(orig.getParentFile(), copyFilename);
|
||||||
|
|
|
@ -22,7 +22,6 @@ import ctbrec.OS;
|
||||||
import ctbrec.Recording;
|
import ctbrec.Recording;
|
||||||
import ctbrec.io.IoUtils;
|
import ctbrec.io.IoUtils;
|
||||||
import ctbrec.recorder.FFmpeg;
|
import ctbrec.recorder.FFmpeg;
|
||||||
import ctbrec.recorder.RecordingManager;
|
|
||||||
import ctbrec.recorder.download.ProcessExitedUncleanException;
|
import ctbrec.recorder.download.ProcessExitedUncleanException;
|
||||||
|
|
||||||
@ThreadSafe
|
@ThreadSafe
|
||||||
|
@ -45,7 +44,9 @@ public class CreateContactSheet extends AbstractPlaceholderAwarePostProcessor {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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 totalWidth = Integer.parseInt(getConfig().getOrDefault(TOTAL_SIZE, "1920"));
|
||||||
int padding = Integer.parseInt(getConfig().getOrDefault(PADDING, "4"));
|
int padding = Integer.parseInt(getConfig().getOrDefault(PADDING, "4"));
|
||||||
int cols = Integer.parseInt(getConfig().getOrDefault(COLS, "8"));
|
int cols = Integer.parseInt(getConfig().getOrDefault(COLS, "8"));
|
||||||
|
@ -65,7 +66,7 @@ public class CreateContactSheet extends AbstractPlaceholderAwarePostProcessor {
|
||||||
color},
|
color},
|
||||||
new StringBuffer(), null).toString();
|
new StringBuffer(), null).toString();
|
||||||
File executionDir = rec.getPostProcessedFile().isDirectory() ? rec.getPostProcessedFile() : rec.getPostProcessedFile().getParentFile();
|
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 = {
|
String[] args = {
|
||||||
"-y",
|
"-y",
|
||||||
|
|
|
@ -2,10 +2,7 @@ package ctbrec.recorder.postprocessing;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
import ctbrec.Config;
|
|
||||||
import ctbrec.NotImplementedExcetion;
|
import ctbrec.NotImplementedExcetion;
|
||||||
import ctbrec.Recording;
|
|
||||||
import ctbrec.recorder.RecordingManager;
|
|
||||||
|
|
||||||
public class CreateTimelineThumbs extends AbstractPlaceholderAwarePostProcessor {
|
public class CreateTimelineThumbs extends AbstractPlaceholderAwarePostProcessor {
|
||||||
|
|
||||||
|
@ -15,7 +12,7 @@ public class CreateTimelineThumbs extends AbstractPlaceholderAwarePostProcessor
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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
|
// create 1 thumb every second with a width of 360 pixels and save it as jpeg with a 5-digit sequence number
|
||||||
// ffmpeg -i <file> -vf 'fps=1,scale=360:-1' thumbs/out%05d.jpg
|
// ffmpeg -i <file> -vf 'fps=1,scale=360:-1' thumbs/out%05d.jpg
|
||||||
throw new NotImplementedExcetion();
|
throw new NotImplementedExcetion();
|
||||||
|
|
|
@ -5,9 +5,7 @@ import static ctbrec.io.IoUtils.*;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
|
|
||||||
import ctbrec.Config;
|
|
||||||
import ctbrec.Recording;
|
import ctbrec.Recording;
|
||||||
import ctbrec.recorder.RecordingManager;
|
|
||||||
|
|
||||||
public class DeleteOriginal extends AbstractPostProcessor {
|
public class DeleteOriginal extends AbstractPostProcessor {
|
||||||
|
|
||||||
|
@ -17,7 +15,8 @@ public class DeleteOriginal extends AbstractPostProcessor {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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()) {
|
if (rec.getAbsoluteFile().isFile()) {
|
||||||
Files.deleteIfExists(rec.getAbsoluteFile().toPath());
|
Files.deleteIfExists(rec.getAbsoluteFile().toPath());
|
||||||
deleteEmptyParents(rec.getAbsoluteFile().getParentFile());
|
deleteEmptyParents(rec.getAbsoluteFile().getParentFile());
|
||||||
|
|
|
@ -6,7 +6,6 @@ import java.time.Duration;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import ctbrec.Config;
|
|
||||||
import ctbrec.Recording;
|
import ctbrec.Recording;
|
||||||
import ctbrec.recorder.RecordingManager;
|
import ctbrec.recorder.RecordingManager;
|
||||||
|
|
||||||
|
@ -21,7 +20,9 @@ public class DeleteTooShort extends AbstractPostProcessor {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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")));
|
Duration minimumLengthInSeconds = Duration.ofSeconds(Integer.parseInt(getConfig().getOrDefault(MIN_LEN_IN_SECS, "0")));
|
||||||
if (minimumLengthInSeconds.getSeconds() > 0) {
|
if (minimumLengthInSeconds.getSeconds() > 0) {
|
||||||
Duration recordingLength = rec.getLength();
|
Duration recordingLength = rec.getLength();
|
||||||
|
|
|
@ -10,9 +10,7 @@ import org.apache.commons.io.FileUtils;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import ctbrec.Config;
|
|
||||||
import ctbrec.Recording;
|
import ctbrec.Recording;
|
||||||
import ctbrec.recorder.RecordingManager;
|
|
||||||
|
|
||||||
public class Move extends AbstractPlaceholderAwarePostProcessor {
|
public class Move extends AbstractPlaceholderAwarePostProcessor {
|
||||||
|
|
||||||
|
@ -26,9 +24,10 @@ public class Move extends AbstractPlaceholderAwarePostProcessor {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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 pathTemplate = getConfig().getOrDefault(PATH_TEMPLATE, DEFAULT);
|
||||||
String path = fillInPlaceHolders(pathTemplate, rec, config);
|
String path = fillInPlaceHolders(pathTemplate, ctx);
|
||||||
File src = rec.getPostProcessedFile();
|
File src = rec.getPostProcessedFile();
|
||||||
boolean isFile = src.isFile();
|
boolean isFile = src.isFile();
|
||||||
File target = new File(path, src.getName());
|
File target = new File(path, src.getName());
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -4,23 +4,17 @@ import java.io.IOException;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import ctbrec.Config;
|
|
||||||
import ctbrec.Recording;
|
|
||||||
import ctbrec.recorder.RecordingManager;
|
|
||||||
|
|
||||||
public interface PostProcessor extends Serializable {
|
public interface PostProcessor extends Serializable {
|
||||||
String getName();
|
String getName();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Runs the post-processing code on the given recording
|
* Runs the post-processing code on the given recording
|
||||||
* @param rec the recording to post-process
|
* @param ctx {@link PostProcessingContext}, which allows access to post-processing related objects
|
||||||
* @param recordingManager
|
|
||||||
* @param config
|
|
||||||
* @return false to stop futher post-processing, true to continue
|
* @return false to stop futher post-processing, true to continue
|
||||||
* @throws IOException
|
* @throws IOException
|
||||||
* @throws InterruptedException
|
* @throws InterruptedException
|
||||||
*/
|
*/
|
||||||
boolean postprocess(Recording rec, RecordingManager recordingManager, Config config) throws IOException, InterruptedException;
|
boolean postprocess(PostProcessingContext ctx) throws IOException, InterruptedException;
|
||||||
|
|
||||||
Map<String, String> getConfig();
|
Map<String, String> getConfig();
|
||||||
void setConfig(Map<String, String> conf);
|
void setConfig(Map<String, String> conf);
|
||||||
|
|
|
@ -2,10 +2,6 @@ package ctbrec.recorder.postprocessing;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
import ctbrec.Config;
|
|
||||||
import ctbrec.Recording;
|
|
||||||
import ctbrec.recorder.RecordingManager;
|
|
||||||
|
|
||||||
public class RemoveKeepFile extends AbstractPostProcessor {
|
public class RemoveKeepFile extends AbstractPostProcessor {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -14,9 +10,9 @@ public class RemoveKeepFile extends AbstractPostProcessor {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean postprocess(Recording rec, RecordingManager recordingManager, Config config) throws IOException, InterruptedException {
|
public boolean postprocess(PostProcessingContext ctx) throws IOException, InterruptedException {
|
||||||
recordingManager.remove(rec);
|
ctx.getRecordingManager().remove(ctx.getRecording());
|
||||||
rec.setMetaDataFile(null);
|
ctx.getRecording().setMetaDataFile(null);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,12 +9,10 @@ import java.util.Objects;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import ctbrec.Config;
|
|
||||||
import ctbrec.OS;
|
import ctbrec.OS;
|
||||||
import ctbrec.Recording;
|
import ctbrec.Recording;
|
||||||
import ctbrec.io.IoUtils;
|
import ctbrec.io.IoUtils;
|
||||||
import ctbrec.recorder.FFmpeg;
|
import ctbrec.recorder.FFmpeg;
|
||||||
import ctbrec.recorder.RecordingManager;
|
|
||||||
|
|
||||||
public class Remux extends AbstractPostProcessor {
|
public class Remux extends AbstractPostProcessor {
|
||||||
|
|
||||||
|
@ -29,7 +27,8 @@ public class Remux extends AbstractPostProcessor {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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;
|
final File inputFile;
|
||||||
if (rec.getPostProcessedFile().isDirectory()) {
|
if (rec.getPostProcessedFile().isDirectory()) {
|
||||||
inputFile = new File(rec.getPostProcessedFile(), "playlist.m3u8");
|
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");
|
File ffmpegLog = new File(System.getProperty("java.io.tmpdir"), "remux_" + rec.getId() + ".log");
|
||||||
FFmpeg ffmpeg = new FFmpeg.Builder()
|
FFmpeg ffmpeg = new FFmpeg.Builder()
|
||||||
.logOutput(config.getSettings().logFFmpegOutput)
|
.logOutput(ctx.getConfig().getSettings().logFFmpegOutput)
|
||||||
.logFile(ffmpegLog)
|
.logFile(ffmpegLog)
|
||||||
.onExit(exitCode -> finalizeStep(exitCode, rec, inputFile, remuxedFile))
|
.onExit(exitCode -> finalizeStep(exitCode, rec, inputFile, remuxedFile))
|
||||||
.build();
|
.build();
|
||||||
|
|
|
@ -7,9 +7,7 @@ import java.util.Objects;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import ctbrec.Config;
|
|
||||||
import ctbrec.Recording;
|
import ctbrec.Recording;
|
||||||
import ctbrec.recorder.RecordingManager;
|
|
||||||
|
|
||||||
public class Rename extends AbstractPlaceholderAwarePostProcessor {
|
public class Rename extends AbstractPlaceholderAwarePostProcessor {
|
||||||
|
|
||||||
|
@ -24,10 +22,11 @@ public class Rename extends AbstractPlaceholderAwarePostProcessor {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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 defaultTemplate = rec.isSingleFile() ? DEFAULT : DEFAULT_DIR;
|
||||||
String filenameTemplate = getConfig().getOrDefault(FILE_NAME_TEMPLATE, defaultTemplate);
|
String filenameTemplate = getConfig().getOrDefault(FILE_NAME_TEMPLATE, defaultTemplate);
|
||||||
String filename = fillInPlaceHolders(filenameTemplate, rec, config);
|
String filename = fillInPlaceHolders(filenameTemplate, ctx);
|
||||||
File src = rec.getPostProcessedFile();
|
File src = rec.getPostProcessedFile();
|
||||||
File target = new File(src.getParentFile(), filename);
|
File target = new File(src.getParentFile(), filename);
|
||||||
if (Objects.equals(src, target)) {
|
if (Objects.equals(src, target)) {
|
||||||
|
|
|
@ -10,11 +10,9 @@ import java.util.List;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import ctbrec.Config;
|
|
||||||
import ctbrec.OS;
|
import ctbrec.OS;
|
||||||
import ctbrec.Recording;
|
import ctbrec.Recording;
|
||||||
import ctbrec.io.StreamRedirector;
|
import ctbrec.io.StreamRedirector;
|
||||||
import ctbrec.recorder.RecordingManager;
|
|
||||||
import ctbrec.recorder.download.ProcessExitedUncleanException;
|
import ctbrec.recorder.download.ProcessExitedUncleanException;
|
||||||
|
|
||||||
public class Script extends AbstractPlaceholderAwarePostProcessor {
|
public class Script extends AbstractPlaceholderAwarePostProcessor {
|
||||||
|
@ -29,8 +27,9 @@ public class Script extends AbstractPlaceholderAwarePostProcessor {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean postprocess(Recording rec, RecordingManager recordingManager, Config config) throws IOException, InterruptedException {
|
public boolean postprocess(PostProcessingContext ctx) throws IOException, InterruptedException {
|
||||||
List<String> cmdline = buildCommandLine(rec, config);
|
Recording rec = ctx.getRecording();
|
||||||
|
List<String> cmdline = buildCommandLine(ctx);
|
||||||
Runtime rt = Runtime.getRuntime();
|
Runtime rt = Runtime.getRuntime();
|
||||||
String[] args = cmdline.toArray(new String[0]);
|
String[] args = cmdline.toArray(new String[0]);
|
||||||
if (LOG.isDebugEnabled()) {
|
if (LOG.isDebugEnabled()) {
|
||||||
|
@ -50,12 +49,12 @@ public class Script extends AbstractPlaceholderAwarePostProcessor {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<String> buildCommandLine(Recording rec, Config config) throws IOException {
|
private List<String> buildCommandLine(PostProcessingContext ctx) {
|
||||||
String script = getConfig().getOrDefault(SCRIPT_EXECUTABLE, "somescript");
|
String script = getConfig().getOrDefault(SCRIPT_EXECUTABLE, "somescript");
|
||||||
String params = getConfig().getOrDefault(SCRIPT_PARAMS, "${absolutePath}");
|
String params = getConfig().getOrDefault(SCRIPT_PARAMS, "${absolutePath}");
|
||||||
List<String> cmdline = new ArrayList<>();
|
List<String> cmdline = new ArrayList<>();
|
||||||
cmdline.add(script);
|
cmdline.add(script);
|
||||||
String replacedParams = fillInPlaceHolders(params, rec, config);
|
String replacedParams = fillInPlaceHolders(params, ctx);
|
||||||
Arrays.stream(replacedParams.split(" ")).forEach(cmdline::add);
|
Arrays.stream(replacedParams.split(" ")).forEach(cmdline::add);
|
||||||
return cmdline;
|
return cmdline;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,10 +2,7 @@ package ctbrec.recorder.postprocessing;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
import ctbrec.Config;
|
|
||||||
import ctbrec.NotImplementedExcetion;
|
import ctbrec.NotImplementedExcetion;
|
||||||
import ctbrec.Recording;
|
|
||||||
import ctbrec.recorder.RecordingManager;
|
|
||||||
|
|
||||||
public class Webhook extends AbstractPlaceholderAwarePostProcessor {
|
public class Webhook extends AbstractPlaceholderAwarePostProcessor {
|
||||||
|
|
||||||
|
@ -21,7 +18,7 @@ public class Webhook extends AbstractPlaceholderAwarePostProcessor {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean postprocess(Recording rec, RecordingManager recordingManager, Config config) throws IOException, InterruptedException {
|
public boolean postprocess(PostProcessingContext ctx) throws IOException, InterruptedException {
|
||||||
throw new NotImplementedExcetion();
|
throw new NotImplementedExcetion();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,19 +37,19 @@ public class AbstractPlaceholderAwarePostProcessorTest extends AbstractPpTest {
|
||||||
@Test
|
@Test
|
||||||
public void testModelNameReplacement() {
|
public void testModelNameReplacement() {
|
||||||
String input = "asdf_${modelName}_asdf";
|
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";
|
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";
|
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
|
@Test
|
||||||
public void testSiteNameReplacement() {
|
public void testSiteNameReplacement() {
|
||||||
String input = "asdf_${siteName}_asdf";
|
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";
|
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
|
@Test
|
||||||
|
@ -60,7 +60,7 @@ public class AbstractPlaceholderAwarePostProcessorTest extends AbstractPpTest {
|
||||||
.withZone(ZoneOffset.UTC)
|
.withZone(ZoneOffset.UTC)
|
||||||
.format(rec.getStartDate());
|
.format(rec.getStartDate());
|
||||||
String input = "asdf_${utcDateTime}_asdf";
|
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
|
// with user defined pattern
|
||||||
date = DateTimeFormatter.ofPattern("yyyyMMdd-HHmmss")
|
date = DateTimeFormatter.ofPattern("yyyyMMdd-HHmmss")
|
||||||
|
@ -68,7 +68,7 @@ public class AbstractPlaceholderAwarePostProcessorTest extends AbstractPpTest {
|
||||||
.withZone(ZoneOffset.UTC)
|
.withZone(ZoneOffset.UTC)
|
||||||
.format(rec.getStartDate());
|
.format(rec.getStartDate());
|
||||||
input = "asdf_${utcDateTime(yyyyMMdd-HHmmss)}_asdf";
|
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
|
// multiple occurences with user defined patterns
|
||||||
date = DateTimeFormatter.ofPattern("yyyy-MM-dd/yyyy")
|
date = DateTimeFormatter.ofPattern("yyyy-MM-dd/yyyy")
|
||||||
|
@ -76,7 +76,7 @@ public class AbstractPlaceholderAwarePostProcessorTest extends AbstractPpTest {
|
||||||
.withZone(ZoneOffset.UTC)
|
.withZone(ZoneOffset.UTC)
|
||||||
.format(rec.getStartDate());
|
.format(rec.getStartDate());
|
||||||
input = "asdf_${utcDateTime(yyyy)}-${utcDateTime(MM)}-${utcDateTime(dd)}/${utcDateTime(yyyy)}_asdf";
|
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
|
@Test
|
||||||
|
@ -86,50 +86,50 @@ public class AbstractPlaceholderAwarePostProcessorTest extends AbstractPpTest {
|
||||||
.withZone(ZoneId.systemDefault())
|
.withZone(ZoneId.systemDefault())
|
||||||
.format(rec.getStartDate());
|
.format(rec.getStartDate());
|
||||||
String input = "asdf_${localDateTime}_asdf";
|
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")
|
date = DateTimeFormatter.ofPattern("yyyyMMdd-HHmmss")
|
||||||
.withLocale(Locale.US)
|
.withLocale(Locale.US)
|
||||||
.withZone(ZoneId.systemDefault())
|
.withZone(ZoneId.systemDefault())
|
||||||
.format(rec.getStartDate());
|
.format(rec.getStartDate());
|
||||||
input = "asdf_${localDateTime(yyyyMMdd-HHmmss)}_asdf";
|
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
|
@Test
|
||||||
public void testEpochReplacement() {
|
public void testEpochReplacement() {
|
||||||
long epoch = now.toEpochMilli() / 1000;
|
long epoch = now.toEpochMilli() / 1000;
|
||||||
String input = "asdf_${epochSecond}_asdf";
|
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
|
@Test
|
||||||
public void testFileSuffixReplacement() {
|
public void testFileSuffixReplacement() {
|
||||||
String input = "asdf_${fileSuffix}_asdf";
|
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
|
@Test
|
||||||
public void testRecordingsDirReplacement() {
|
public void testRecordingsDirReplacement() {
|
||||||
String input = "asdf_${recordingsDir}_asdf";
|
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
|
@Test
|
||||||
public void testAbsolutePathReplacement() {
|
public void testAbsolutePathReplacement() {
|
||||||
String input = "asdf_${absolutePath}_asdf";
|
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
|
@Test
|
||||||
public void testAbsoluteParentPathReplacement() {
|
public void testAbsoluteParentPathReplacement() {
|
||||||
String input = "asdf_${absoluteParentPath}_asdf";
|
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
|
@Test
|
||||||
public void testModelNotesReplacement() {
|
public void testModelNotesReplacement() {
|
||||||
String input = "asdf_${modelNotes}_asdf";
|
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)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,6 +18,7 @@ import org.mockito.MockedStatic;
|
||||||
|
|
||||||
import ctbrec.Config;
|
import ctbrec.Config;
|
||||||
import ctbrec.Model;
|
import ctbrec.Model;
|
||||||
|
import ctbrec.Recording;
|
||||||
import ctbrec.Settings;
|
import ctbrec.Settings;
|
||||||
import ctbrec.recorder.RecordingManager;
|
import ctbrec.recorder.RecordingManager;
|
||||||
import ctbrec.sites.Site;
|
import ctbrec.sites.Site;
|
||||||
|
@ -81,4 +82,12 @@ public abstract class AbstractPpTest {
|
||||||
settings.recordingsDir = recDir.toString();
|
settings.recordingsDir = recDir.toString();
|
||||||
return settings;
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,7 +20,7 @@ public class CopyTest extends AbstractPpTest {
|
||||||
rec.setStartDate(now);
|
rec.setStartDate(now);
|
||||||
rec.setSingleFile(false);
|
rec.setSingleFile(false);
|
||||||
Copy pp = new Copy();
|
Copy pp = new Copy();
|
||||||
pp.postprocess(rec, recordingManager, config);
|
pp.postprocess(createPostProcessingContext(rec, recordingManager, config));
|
||||||
|
|
||||||
assertNotEquals(rec.getAbsoluteFile(), rec.getPostProcessedFile());
|
assertNotEquals(rec.getAbsoluteFile(), rec.getPostProcessedFile());
|
||||||
assertTrue(original.exists());
|
assertTrue(original.exists());
|
||||||
|
@ -36,7 +36,7 @@ public class CopyTest extends AbstractPpTest {
|
||||||
rec.setStartDate(now);
|
rec.setStartDate(now);
|
||||||
rec.setSingleFile(false);
|
rec.setSingleFile(false);
|
||||||
Copy pp = new Copy();
|
Copy pp = new Copy();
|
||||||
pp.postprocess(rec, recordingManager, config);
|
pp.postprocess(createPostProcessingContext(rec, recordingManager, config));
|
||||||
|
|
||||||
assertNotEquals(rec.getAbsoluteFile(), rec.getPostProcessedFile());
|
assertNotEquals(rec.getAbsoluteFile(), rec.getPostProcessedFile());
|
||||||
assertTrue(originalDir.exists());
|
assertTrue(originalDir.exists());
|
||||||
|
|
|
@ -23,7 +23,7 @@ public class DeleteOriginalTest extends AbstractPpTest {
|
||||||
|
|
||||||
Config config = mockConfig();
|
Config config = mockConfig();
|
||||||
DeleteOriginal pp = new DeleteOriginal();
|
DeleteOriginal pp = new DeleteOriginal();
|
||||||
pp.postprocess(rec, null, config);
|
pp.postprocess(createPostProcessingContext(rec, null, config));
|
||||||
|
|
||||||
assertEquals(postProcessed, rec.getAbsoluteFile());
|
assertEquals(postProcessed, rec.getAbsoluteFile());
|
||||||
assertTrue(rec.getAbsoluteFile().exists());
|
assertTrue(rec.getAbsoluteFile().exists());
|
||||||
|
@ -42,7 +42,7 @@ public class DeleteOriginalTest extends AbstractPpTest {
|
||||||
Config config = mockConfig();
|
Config config = mockConfig();
|
||||||
Files.createDirectories(postProcessedDir.toPath());
|
Files.createDirectories(postProcessedDir.toPath());
|
||||||
DeleteOriginal pp = new DeleteOriginal();
|
DeleteOriginal pp = new DeleteOriginal();
|
||||||
pp.postprocess(rec, null, config);
|
pp.postprocess(createPostProcessingContext(rec, null, config));
|
||||||
|
|
||||||
assertEquals(postProcessedDir, rec.getAbsoluteFile());
|
assertEquals(postProcessedDir, rec.getAbsoluteFile());
|
||||||
assertTrue(rec.getAbsoluteFile().exists());
|
assertTrue(rec.getAbsoluteFile().exists());
|
||||||
|
|
|
@ -42,7 +42,7 @@ public class DeleteTooShortTest extends AbstractPpTest {
|
||||||
|
|
||||||
DeleteTooShort pp = new DeleteTooShort();
|
DeleteTooShort pp = new DeleteTooShort();
|
||||||
pp.getConfig().put(DeleteTooShort.MIN_LEN_IN_SECS, "10");
|
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(rec.getAbsoluteFile().exists());
|
||||||
assertFalse(original.exists());
|
assertFalse(original.exists());
|
||||||
|
@ -66,7 +66,7 @@ public class DeleteTooShortTest extends AbstractPpTest {
|
||||||
|
|
||||||
DeleteTooShort pp = new DeleteTooShort();
|
DeleteTooShort pp = new DeleteTooShort();
|
||||||
pp.getConfig().put(DeleteTooShort.MIN_LEN_IN_SECS, "0");
|
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(rec.getAbsoluteFile().exists());
|
||||||
assertTrue(original.exists());
|
assertTrue(original.exists());
|
||||||
|
@ -83,7 +83,7 @@ public class DeleteTooShortTest extends AbstractPpTest {
|
||||||
|
|
||||||
DeleteTooShort pp = new DeleteTooShort();
|
DeleteTooShort pp = new DeleteTooShort();
|
||||||
pp.getConfig().put(DeleteTooShort.MIN_LEN_IN_SECS, "1");
|
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(rec.getAbsoluteFile().exists());
|
||||||
assertTrue(original.exists());
|
assertTrue(original.exists());
|
||||||
|
|
|
@ -28,7 +28,7 @@ public class MoveDirectoryTest extends AbstractPpTest {
|
||||||
rec.setSingleFile(false);
|
rec.setSingleFile(false);
|
||||||
Move pp = new Move();
|
Move pp = new Move();
|
||||||
pp.getConfig().put(Move.PATH_TEMPLATE, new File(baseDir.toFile(), Move.DEFAULT).getAbsolutePath());
|
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());
|
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());
|
assertTrue(m.matches());
|
||||||
|
@ -50,6 +50,6 @@ public class MoveDirectoryTest extends AbstractPpTest {
|
||||||
Move pp = new Move();
|
Move pp = new Move();
|
||||||
Config config = mockConfig();
|
Config config = mockConfig();
|
||||||
pp.getConfig().put(Move.PATH_TEMPLATE, new File(baseDir.toFile(), Move.DEFAULT).getAbsolutePath());
|
pp.getConfig().put(Move.PATH_TEMPLATE, new File(baseDir.toFile(), Move.DEFAULT).getAbsolutePath());
|
||||||
pp.postprocess(rec, recordingManager, config);
|
pp.postprocess(createPostProcessingContext(rec, recordingManager, config));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,7 +28,7 @@ public class MoveSingleFileTest extends AbstractPpTest {
|
||||||
|
|
||||||
Move pp = new Move();
|
Move pp = new Move();
|
||||||
pp.getConfig().put(Move.PATH_TEMPLATE, new File(baseDir.toFile(), Move.DEFAULT).getAbsolutePath());
|
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());
|
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());
|
assertTrue(m.matches());
|
||||||
|
@ -48,7 +48,7 @@ public class MoveSingleFileTest extends AbstractPpTest {
|
||||||
Move pp = new Move();
|
Move pp = new Move();
|
||||||
Config config = mockConfig();
|
Config config = mockConfig();
|
||||||
pp.getConfig().put(Move.PATH_TEMPLATE, original.getParentFile().getCanonicalPath());
|
pp.getConfig().put(Move.PATH_TEMPLATE, original.getParentFile().getCanonicalPath());
|
||||||
pp.postprocess(rec, recordingManager, config);
|
pp.postprocess(createPostProcessingContext(rec, recordingManager, config));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -63,7 +63,7 @@ public class MoveSingleFileTest extends AbstractPpTest {
|
||||||
Move pp = new Move();
|
Move pp = new Move();
|
||||||
Config config = mockConfig();
|
Config config = mockConfig();
|
||||||
pp.getConfig().put(Move.PATH_TEMPLATE, new File(baseDir.toFile(), Move.DEFAULT).getAbsolutePath());
|
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
|
@Test
|
||||||
|
|
|
@ -25,9 +25,9 @@ public class RemoveKeepFileTest extends AbstractPpTest {
|
||||||
Config config = mockConfig();
|
Config config = mockConfig();
|
||||||
RecordingManager rm = new RecordingManager(config, Collections.emptyList());
|
RecordingManager rm = new RecordingManager(config, Collections.emptyList());
|
||||||
rm.add(rec);
|
rm.add(rec);
|
||||||
assertTrue(rm.getAll().size() == 1);
|
assertEquals(1, rm.getAll().size());
|
||||||
RemoveKeepFile pp = new RemoveKeepFile();
|
RemoveKeepFile pp = new RemoveKeepFile();
|
||||||
pp.postprocess(rec, rm, config);
|
pp.postprocess(createPostProcessingContext(rec, rm, config));
|
||||||
|
|
||||||
assertTrue(rec.getAbsoluteFile().exists());
|
assertTrue(rec.getAbsoluteFile().exists());
|
||||||
assertTrue(rec.getPostProcessedFile().exists());
|
assertTrue(rec.getPostProcessedFile().exists());
|
||||||
|
|
|
@ -26,7 +26,7 @@ public class RenameDirectoryTest extends AbstractPpTest {
|
||||||
rec.setStartDate(now);
|
rec.setStartDate(now);
|
||||||
rec.setSingleFile(false);
|
rec.setSingleFile(false);
|
||||||
Rename pp = new Rename();
|
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());
|
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());
|
assertTrue(m.matches());
|
||||||
|
@ -47,6 +47,6 @@ public class RenameDirectoryTest extends AbstractPpTest {
|
||||||
|
|
||||||
Files.createDirectories(postProcessedDir.toPath());
|
Files.createDirectories(postProcessedDir.toPath());
|
||||||
Rename pp = new Rename();
|
Rename pp = new Rename();
|
||||||
pp.postprocess(rec, recordingManager, config);
|
pp.postprocess(createPostProcessingContext(rec, recordingManager, config));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,7 +25,7 @@ public class RenameSingleFileTest extends AbstractPpTest {
|
||||||
rec.setStartDate(now);
|
rec.setStartDate(now);
|
||||||
rec.setSingleFile(true);
|
rec.setSingleFile(true);
|
||||||
Rename pp = new Rename();
|
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());
|
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());
|
assertTrue(m.matches());
|
||||||
|
@ -45,7 +45,7 @@ public class RenameSingleFileTest extends AbstractPpTest {
|
||||||
doThrow(new RuntimeException("Unexpected call of setAbsoluteFile")).when(rec).setAbsoluteFile(any());
|
doThrow(new RuntimeException("Unexpected call of setAbsoluteFile")).when(rec).setAbsoluteFile(any());
|
||||||
Rename pp = new Rename();
|
Rename pp = new Rename();
|
||||||
pp.getConfig().put(Rename.FILE_NAME_TEMPLATE, original.getName());
|
pp.getConfig().put(Rename.FILE_NAME_TEMPLATE, original.getName());
|
||||||
pp.postprocess(rec, recordingManager, config);
|
pp.postprocess(createPostProcessingContext(rec, recordingManager, config));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -59,7 +59,7 @@ public class RenameSingleFileTest extends AbstractPpTest {
|
||||||
when(rec.getStartDate()).thenReturn(now);
|
when(rec.getStartDate()).thenReturn(now);
|
||||||
doThrow(new RuntimeException("Unexpected call of setAbsoluteFile")).when(rec).setAbsoluteFile(any());
|
doThrow(new RuntimeException("Unexpected call of setAbsoluteFile")).when(rec).setAbsoluteFile(any());
|
||||||
Rename pp = new Rename();
|
Rename pp = new Rename();
|
||||||
pp.postprocess(rec, recordingManager, config);
|
pp.postprocess(createPostProcessingContext(rec, recordingManager, config));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
Loading…
Reference in New Issue