From 30021d184db356f72865f20db154ed7873bd2c13 Mon Sep 17 00:00:00 2001 From: 0xb00bface <0xboobface@gmail.com> Date: Thu, 24 Sep 2020 11:35:37 +0200 Subject: [PATCH] Add DeleteTooShort post-processor --- .../settings/DeleteTooShortPaneFactory.java | 24 +++++++++++++ .../settings/PostProcessingDialogFactory.java | 2 ++ .../ui/settings/PostProcessingStepPanel.java | 2 ++ .../java/ctbrec/ui/settings/SettingsTab.java | 9 ----- .../ctbrec/recorder/NextGenLocalRecorder.java | 18 ---------- .../postprocessing/DeleteTooShort.java | 34 +++++++++++++++++++ 6 files changed, 62 insertions(+), 27 deletions(-) create mode 100644 client/src/main/java/ctbrec/ui/settings/DeleteTooShortPaneFactory.java create mode 100644 common/src/main/java/ctbrec/recorder/postprocessing/DeleteTooShort.java diff --git a/client/src/main/java/ctbrec/ui/settings/DeleteTooShortPaneFactory.java b/client/src/main/java/ctbrec/ui/settings/DeleteTooShortPaneFactory.java new file mode 100644 index 00000000..3974ce58 --- /dev/null +++ b/client/src/main/java/ctbrec/ui/settings/DeleteTooShortPaneFactory.java @@ -0,0 +1,24 @@ +package ctbrec.ui.settings; + +import ctbrec.recorder.postprocessing.DeleteTooShort; +import ctbrec.recorder.postprocessing.PostProcessor; +import ctbrec.ui.settings.api.Category; +import ctbrec.ui.settings.api.Preferences; +import ctbrec.ui.settings.api.Setting; +import javafx.beans.property.SimpleStringProperty; + +public class DeleteTooShortPaneFactory extends AbstractPostProcessingPaneFactory { + + @Override + public Preferences doCreatePostProcessorPane(PostProcessor pp) { + SimpleStringProperty minimumLengthInSeconds = new SimpleStringProperty(null, DeleteTooShort.MIN_LEN_IN_SECS, pp.getConfig().getOrDefault(DeleteTooShort.MIN_LEN_IN_SECS, "10")); + properties.add(minimumLengthInSeconds); + + return Preferences.of(new MapPreferencesStorage(), + Category.of(pp.getName(), + Setting.of("Minimum length in seconds", minimumLengthInSeconds) + ) + ); + } + +} diff --git a/client/src/main/java/ctbrec/ui/settings/PostProcessingDialogFactory.java b/client/src/main/java/ctbrec/ui/settings/PostProcessingDialogFactory.java index d4b45a64..c9657160 100644 --- a/client/src/main/java/ctbrec/ui/settings/PostProcessingDialogFactory.java +++ b/client/src/main/java/ctbrec/ui/settings/PostProcessingDialogFactory.java @@ -7,6 +7,7 @@ import java.util.Map; import java.util.Optional; import ctbrec.Config; +import ctbrec.recorder.postprocessing.DeleteTooShort; import ctbrec.recorder.postprocessing.Move; import ctbrec.recorder.postprocessing.PostProcessor; import ctbrec.recorder.postprocessing.Remux; @@ -26,6 +27,7 @@ public class PostProcessingDialogFactory { ppToDialogMap.put(Script.class, ScriptPaneFactory.class); ppToDialogMap.put(Rename.class, RenamerPaneFactory.class); ppToDialogMap.put(Move.class, MoverPaneFactory.class); + ppToDialogMap.put(DeleteTooShort.class, DeleteTooShortPaneFactory.class); } private PostProcessingDialogFactory() { diff --git a/client/src/main/java/ctbrec/ui/settings/PostProcessingStepPanel.java b/client/src/main/java/ctbrec/ui/settings/PostProcessingStepPanel.java index 78cb4d12..3a659888 100644 --- a/client/src/main/java/ctbrec/ui/settings/PostProcessingStepPanel.java +++ b/client/src/main/java/ctbrec/ui/settings/PostProcessingStepPanel.java @@ -8,6 +8,7 @@ import java.util.Optional; import ctbrec.Config; import ctbrec.recorder.postprocessing.Copy; import ctbrec.recorder.postprocessing.DeleteOriginal; +import ctbrec.recorder.postprocessing.DeleteTooShort; import ctbrec.recorder.postprocessing.Move; import ctbrec.recorder.postprocessing.PostProcessor; import ctbrec.recorder.postprocessing.RemoveKeepFile; @@ -40,6 +41,7 @@ public class PostProcessingStepPanel extends GridPane { Remux.class, Script.class, DeleteOriginal.class, + DeleteTooShort.class, RemoveKeepFile.class }; // @formatter: on diff --git a/client/src/main/java/ctbrec/ui/settings/SettingsTab.java b/client/src/main/java/ctbrec/ui/settings/SettingsTab.java index 95f78da1..3f7fdd00 100644 --- a/client/src/main/java/ctbrec/ui/settings/SettingsTab.java +++ b/client/src/main/java/ctbrec/ui/settings/SettingsTab.java @@ -88,7 +88,6 @@ public class SettingsTab extends Tab implements TabSelectionListener { private SimpleIntegerProperty onlineCheckIntervalInSecs; private SimpleBooleanProperty onlineCheckSkipsPausedModels; private SimpleLongProperty leaveSpaceOnDevice; - private SimpleIntegerProperty minimumLengthInSecs; private SimpleStringProperty ffmpegParameters; private SimpleStringProperty fileExtension; private SimpleStringProperty server; @@ -97,9 +96,7 @@ public class SettingsTab extends Tab implements TabSelectionListener { private SimpleBooleanProperty requireAuthentication; private SimpleBooleanProperty transportLayerSecurity; private ExclusiveSelectionProperty recordLocal; - private SimpleFileProperty postProcessing; private SimpleIntegerProperty postProcessingThreads; - private SimpleBooleanProperty removeRecordingAfterPp; private IgnoreList ignoreList; public SettingsTab(List sites, Recorder recorder) { @@ -137,7 +134,6 @@ public class SettingsTab extends Tab implements TabSelectionListener { concurrentRecordings = new SimpleIntegerProperty(null, "concurrentRecordings", settings.concurrentRecordings); onlineCheckIntervalInSecs = new SimpleIntegerProperty(null, "onlineCheckIntervalInSecs", settings.onlineCheckIntervalInSecs); leaveSpaceOnDevice = new SimpleLongProperty(null, "minimumSpaceLeftInBytes", (long) new GigabytesConverter().convertTo(settings.minimumSpaceLeftInBytes)); - minimumLengthInSecs = new SimpleIntegerProperty(null, "minimumLengthInSeconds", settings.minimumLengthInSeconds); ffmpegParameters = new SimpleStringProperty(null, "ffmpegMergedDownloadArgs", settings.ffmpegMergedDownloadArgs); fileExtension = new SimpleStringProperty(null, "ffmpegFileSuffix", settings.ffmpegFileSuffix); server = new SimpleStringProperty(null, "httpServer", settings.httpServer); @@ -147,9 +143,7 @@ public class SettingsTab extends Tab implements TabSelectionListener { requireAuthentication.addListener(this::requireAuthenticationChanged); transportLayerSecurity = new SimpleBooleanProperty(null, "transportLayerSecurity", settings.transportLayerSecurity); recordLocal = new ExclusiveSelectionProperty(null, "localRecording", settings.localRecording, "Local", "Remote"); - postProcessing = new SimpleFileProperty(null, "postProcessing", settings.postProcessing); postProcessingThreads = new SimpleIntegerProperty(null, "postProcessingThreads", settings.postProcessingThreads); - removeRecordingAfterPp = new SimpleBooleanProperty(null, "removeRecordingAfterPostProcessing", settings.removeRecordingAfterPostProcessing); onlineCheckSkipsPausedModels = new SimpleBooleanProperty(null, "onlineCheckSkipsPausedModels", settings.onlineCheckSkipsPausedModels); } @@ -206,10 +200,7 @@ public class SettingsTab extends Tab implements TabSelectionListener { ), Category.of("Post-Processing", Group.of("Post-Processing", - Setting.of("Post-Processing", postProcessing), Setting.of("Threads", postProcessingThreads), - Setting.of("Delete recordings shorter than (secs)", minimumLengthInSecs, "Delete recordings, which are shorter than x seconds. 0 to disable"), - Setting.of("Remove recording after post-processing", removeRecordingAfterPp), Setting.of("Steps", new PostProcessingStepPanel(config)) ) ), diff --git a/common/src/main/java/ctbrec/recorder/NextGenLocalRecorder.java b/common/src/main/java/ctbrec/recorder/NextGenLocalRecorder.java index 2897e15f..3623b5da 100644 --- a/common/src/main/java/ctbrec/recorder/NextGenLocalRecorder.java +++ b/common/src/main/java/ctbrec/recorder/NextGenLocalRecorder.java @@ -9,7 +9,6 @@ import java.nio.file.FileStore; import java.nio.file.Files; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; -import java.time.Duration; import java.time.Instant; import java.time.ZoneId; import java.util.ArrayList; @@ -169,7 +168,6 @@ public class NextGenLocalRecorder implements Recorder { } setRecordingStatus(recording, State.FINISHED); recordingManager.saveRecording(recording); - deleteIfTooShort(recording); LOG.info("Post-processing finished for {}", recording.getModel().getName()); if (config.getSettings().removeRecordingAfterPostProcessing) { recordingManager.remove(recording); @@ -307,22 +305,6 @@ public class NextGenLocalRecorder implements Recorder { } } - private boolean deleteIfTooShort(Recording rec) throws IOException, InvalidKeyException, NoSuchAlgorithmException { - Duration minimumLengthInSeconds = Duration.ofSeconds(Config.getInstance().getSettings().minimumLengthInSeconds); - if (minimumLengthInSeconds.getSeconds() <= 0) { - return false; - } - - Duration recordingLength = rec.getLength(); - if (recordingLength.compareTo(minimumLengthInSeconds) < 0) { - LOG.info("Deleting too short recording {} [{} < {}]", rec, recordingLength, minimumLengthInSeconds); - delete(rec); - return true; - } - - return false; - } - @Override public void stopRecording(Model model) throws IOException, InvalidKeyException, NoSuchAlgorithmException { recorderLock.lock(); diff --git a/common/src/main/java/ctbrec/recorder/postprocessing/DeleteTooShort.java b/common/src/main/java/ctbrec/recorder/postprocessing/DeleteTooShort.java new file mode 100644 index 00000000..bdf38b4f --- /dev/null +++ b/common/src/main/java/ctbrec/recorder/postprocessing/DeleteTooShort.java @@ -0,0 +1,34 @@ +package ctbrec.recorder.postprocessing; + +import java.io.IOException; +import java.time.Duration; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import ctbrec.Config; +import ctbrec.Recording; +import ctbrec.recorder.RecordingManager; + +public class DeleteTooShort extends AbstractPostProcessor { + + private static final transient Logger LOG = LoggerFactory.getLogger(DeleteTooShort.class); + public static final String MIN_LEN_IN_SECS = "minimumLengthInSeconds"; + + @Override + public String getName() { + return "delete too short"; + } + + @Override + public void postprocess(Recording rec, RecordingManager recordingManager, Config config) throws IOException { + Duration minimumLengthInSeconds = Duration.ofSeconds(Integer.parseInt(getConfig().getOrDefault(MIN_LEN_IN_SECS, "0"))); + if (minimumLengthInSeconds.getSeconds() > 0) { + Duration recordingLength = rec.getLength(); + if (recordingLength.compareTo(minimumLengthInSeconds) < 0) { + LOG.info("Deleting too short recording {} [{} < {}]", rec, recordingLength, minimumLengthInSeconds); + recordingManager.delete(rec); + } + } + } +}