From 6e5d706f65fda7ab16a81690fe871d181e7dcaec Mon Sep 17 00:00:00 2001 From: 0xb00bface <0xboobface@gmail.com> Date: Sat, 11 Sep 2021 14:51:42 +0200 Subject: [PATCH] Fix switching between "record later" and "recording" Starting the recording coming from "record later" did not work in every case (client/server, standalone, start, start paused, record until) --- .../ctbrec/ui/action/StartRecordingAction.java | 3 +++ .../java/ctbrec/ui/tasks/AbstractModelTask.java | 1 + .../ctbrec/recorder/NextGenLocalRecorder.java | 16 ++++++++++++++-- .../java/ctbrec/recorder/RemoteRecorder.java | 4 ++++ .../ctbrec/recorder/server/RecorderServlet.java | 4 ++++ 5 files changed, 26 insertions(+), 2 deletions(-) diff --git a/client/src/main/java/ctbrec/ui/action/StartRecordingAction.java b/client/src/main/java/ctbrec/ui/action/StartRecordingAction.java index 6adc772f..076d5e60 100644 --- a/client/src/main/java/ctbrec/ui/action/StartRecordingAction.java +++ b/client/src/main/java/ctbrec/ui/action/StartRecordingAction.java @@ -69,6 +69,9 @@ public class StartRecordingAction extends AbstractModelAction { } } + if (showRecordUntilDialog) { + model.setSuspended(false); + } new StartRecordingTask(recorder).executeSync(model) .whenComplete((mdl, ex) -> result.add(new Result(mdl, ex))); } diff --git a/client/src/main/java/ctbrec/ui/tasks/AbstractModelTask.java b/client/src/main/java/ctbrec/ui/tasks/AbstractModelTask.java index 6b05fc8a..2a8a6baf 100644 --- a/client/src/main/java/ctbrec/ui/tasks/AbstractModelTask.java +++ b/client/src/main/java/ctbrec/ui/tasks/AbstractModelTask.java @@ -18,6 +18,7 @@ public abstract class AbstractModelTask { public CompletableFuture<Model> executeSync(Model model) { try { + org.slf4j.LoggerFactory.getLogger(getClass()).debug("Executing concrete task for {} - suspended:{}", model, model.isSuspended()); concreteTask.accept(model); return CompletableFuture.completedFuture(model); } catch (Exception e) { diff --git a/common/src/main/java/ctbrec/recorder/NextGenLocalRecorder.java b/common/src/main/java/ctbrec/recorder/NextGenLocalRecorder.java index b1a03096..47cbdc3f 100644 --- a/common/src/main/java/ctbrec/recorder/NextGenLocalRecorder.java +++ b/common/src/main/java/ctbrec/recorder/NextGenLocalRecorder.java @@ -265,8 +265,8 @@ public class NextGenLocalRecorder implements Recorder { @Override public void addModel(Model model) throws IOException, InvalidKeyException, NoSuchAlgorithmException { - Optional<Model> existing = findModel(model); - if (!existing.isPresent()) { + Optional<Model> result = findModel(model); + if (!result.isPresent()) { LOG.info("Model {} added", model); recorderLock.lock(); try { @@ -280,9 +280,21 @@ public class NextGenLocalRecorder implements Recorder { recorderLock.unlock(); } startRecordingProcess(model); + } else { + Model existing = result.get(); + copyModelProperties(model, existing); + startRecordingProcess(existing); } } + private void copyModelProperties(Model src, Model existing) { + existing.setSuspended(src.isSuspended()); + existing.setMarkedForLaterRecording(src.isMarkedForLaterRecording()); + existing.setPriority(src.getPriority()); + existing.setRecordUntil(src.getRecordUntil()); + existing.setRecordUntilSubsequentAction(src.getRecordUntilSubsequentAction()); + } + private CompletableFuture<Void> startRecordingProcess(Model model) { return CompletableFuture.runAsync(() -> { try { diff --git a/common/src/main/java/ctbrec/recorder/RemoteRecorder.java b/common/src/main/java/ctbrec/recorder/RemoteRecorder.java index 441e157e..1fccb041 100644 --- a/common/src/main/java/ctbrec/recorder/RemoteRecorder.java +++ b/common/src/main/java/ctbrec/recorder/RemoteRecorder.java @@ -98,6 +98,10 @@ public class RemoteRecorder implements Recorder { @Override public void addModel(Model model) throws IOException, InvalidKeyException, NoSuchAlgorithmException { + LOG.trace("Model marked: {}", model.isMarkedForLaterRecording()); + LOG.trace("Model paused: {}", model.isSuspended()); + LOG.trace("Model until: {}", model.getRecordUntil().equals(Instant.ofEpochMilli(Model.RECORD_INDEFINITELY)) ? "no limit" : model.getRecordUntil()); + LOG.trace("Model after: {}", model.getRecordUntilSubsequentAction()); sendRequest("start", model); } diff --git a/server/src/main/java/ctbrec/recorder/server/RecorderServlet.java b/server/src/main/java/ctbrec/recorder/server/RecorderServlet.java index c7ffc8d5..27a231a2 100644 --- a/server/src/main/java/ctbrec/recorder/server/RecorderServlet.java +++ b/server/src/main/java/ctbrec/recorder/server/RecorderServlet.java @@ -82,6 +82,10 @@ public class RecorderServlet extends AbstractCtbrecServlet { switch (request.action) { case "start": LOG.debug("Starting recording for model {} - {}", request.model.getName(), request.model.getUrl()); + LOG.trace("Model marked: {}", request.model.isMarkedForLaterRecording()); + LOG.trace("Model paused: {}", request.model.isSuspended()); + LOG.trace("Model until: {}", request.model.getRecordUntil().equals(Instant.ofEpochMilli(Model.RECORD_INDEFINITELY)) ? "no limit" : request.model.getRecordUntil()); + LOG.trace("Model after: {}", request.model.getRecordUntilSubsequentAction()); recorder.addModel(request.model); String response = "{\"status\": \"success\", \"msg\": \"Recording started\"}"; responseWriter.write(response);