Add action to mark models for later recording
This commit is contained in:
parent
d509dca6a1
commit
df54d1f3ec
|
@ -0,0 +1,24 @@
|
|||
package ctbrec.ui.action;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import ctbrec.Model;
|
||||
import ctbrec.recorder.Recorder;
|
||||
import ctbrec.ui.controls.Dialogs;
|
||||
import javafx.application.Platform;
|
||||
import javafx.scene.Node;
|
||||
|
||||
public class MarkForLaterRecordingAction extends ModelMassEditAction {
|
||||
|
||||
public MarkForLaterRecordingAction(Node source, List<? extends Model> models, boolean recordLater, Recorder recorder) {
|
||||
super(source, models);
|
||||
action = m -> {
|
||||
try {
|
||||
recorder.markForLaterRecording(m, recordLater);
|
||||
} catch(Exception e) {
|
||||
Platform.runLater(() ->
|
||||
Dialogs.showError(source.getScene(), "Couldn't resume recording of model", "Resuming recording of " + m.getName() + " failed", e));
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
|
@ -24,6 +24,7 @@ import ctbrec.ui.StreamSourceSelectionDialog;
|
|||
import ctbrec.ui.action.AddToGroupAction;
|
||||
import ctbrec.ui.action.EditNotesAction;
|
||||
import ctbrec.ui.action.IgnoreModelsAction;
|
||||
import ctbrec.ui.action.MarkForLaterRecordingAction;
|
||||
import ctbrec.ui.action.OpenRecordingsDir;
|
||||
import ctbrec.ui.action.PauseAction;
|
||||
import ctbrec.ui.action.PlayAction;
|
||||
|
@ -335,9 +336,9 @@ public class ModelMenuContributor {
|
|||
LOG.debug(first.toString());
|
||||
if (recorder.isTracked(first)) {
|
||||
var pause = new MenuItem("Pause Recording");
|
||||
pause.setOnAction(e -> new PauseAction(source, selectedModels, recorder).execute());
|
||||
pause.setOnAction(e -> new PauseAction(source, selectedModels, recorder).execute(m -> executeCallback()));
|
||||
var resume = new MenuItem("Resume Recording");
|
||||
resume.setOnAction(e -> new ResumeAction(source, selectedModels, recorder).execute());
|
||||
resume.setOnAction(e -> new ResumeAction(source, selectedModels, recorder).execute(m -> executeCallback()));
|
||||
var pauseResume = recorder.isSuspended(first) ? resume : pause;
|
||||
menu.getItems().add(pauseResume);
|
||||
}
|
||||
|
@ -359,8 +360,7 @@ public class ModelMenuContributor {
|
|||
|
||||
private void recordLater(List<Model> selectedModels, boolean recordLater) {
|
||||
selectedModels.forEach(m -> m.setMarkedForLaterRecording(recordLater));
|
||||
startStopAction(selectedModels, false);
|
||||
startStopAction(selectedModels, true);
|
||||
new MarkForLaterRecordingAction(source, selectedModels, recordLater, recorder).execute(m -> executeCallback());
|
||||
}
|
||||
|
||||
private void addStartPaused(ContextMenu menu, List<Model> selectedModels) {
|
||||
|
@ -383,6 +383,10 @@ public class ModelMenuContributor {
|
|||
var start = new MenuItem(text);
|
||||
menu.getItems().add(start);
|
||||
start.setOnAction(e -> {
|
||||
selectedModels.forEach(m -> {
|
||||
m.setMarkedForLaterRecording(false);
|
||||
m.setSuspended(false);
|
||||
});
|
||||
startStopAction(selectedModels, true);
|
||||
selectedModels.forEach(m -> new SetStopDateAction(source, m, recorder).execute() //
|
||||
.thenAccept(b -> executeCallback()));
|
||||
|
|
|
@ -476,6 +476,7 @@ public class ThumbOverviewTab extends Tab implements TabSelectionListener {
|
|||
grid.getChildren().remove(thumbCell);
|
||||
selectedThumbCells.remove(thumbCell);
|
||||
}))
|
||||
.afterwards(() -> selectedModels.forEach(m -> getThumbCell(m).ifPresent(ThumbCell::update)))
|
||||
.contributeToMenu(selectedModels, contextMenu);
|
||||
|
||||
var refresh = new MenuItem("Refresh Overview");
|
||||
|
|
|
@ -567,6 +567,30 @@ public class NextGenLocalRecorder implements Recorder {
|
|||
return findModel(model).map(Model::isMarkedForLaterRecording).orElse(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void markForLaterRecording(Model model, boolean mark) throws InvalidKeyException, NoSuchAlgorithmException, IOException {
|
||||
Optional<Model> existingModel = findModel(model);
|
||||
if (existingModel.isPresent()) {
|
||||
Model m = existingModel.get();
|
||||
LOG.debug("Mark. Model found: {}", m);
|
||||
m.setMarkedForLaterRecording(mark);
|
||||
if (mark && getCurrentlyRecording().contains(m)) {
|
||||
LOG.debug("Stopping recording of {}", m);
|
||||
stopRecordingProcess(m);
|
||||
}
|
||||
if (!mark) {
|
||||
LOG.debug("Removing model: {}", m);
|
||||
stopRecording(model);
|
||||
}
|
||||
} else {
|
||||
LOG.debug("Model {} not found to mark for later recording", model);
|
||||
if (mark) {
|
||||
model.setMarkedForLaterRecording(true);
|
||||
addModel(model);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private Optional<Model> findModel(Model m) {
|
||||
recorderLock.lock();
|
||||
try {
|
||||
|
|
|
@ -63,6 +63,7 @@ public interface Recorder {
|
|||
public boolean isSuspended(Model model);
|
||||
|
||||
public boolean isMarkedForLaterRecording(Model model);
|
||||
public void markForLaterRecording(Model model, boolean mark) throws InvalidKeyException, NoSuchAlgorithmException, IOException;
|
||||
|
||||
/**
|
||||
* Returns only the models from getModels(), which are online
|
||||
|
|
|
@ -703,4 +703,20 @@ public class RemoteRecorder implements Recorder {
|
|||
public void deleteModelGroup(ModelGroup group) throws InvalidKeyException, NoSuchAlgorithmException, IOException {
|
||||
sendRequest("deleteModelGroup", group);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void markForLaterRecording(Model model, boolean mark) throws InvalidKeyException, NoSuchAlgorithmException, IOException {
|
||||
if (mark) {
|
||||
sendRequest("markForLater", model);
|
||||
} else {
|
||||
sendRequest("unmarkForLater", model);
|
||||
}
|
||||
model.setMarkedForLaterRecording(mark);
|
||||
// update cached model
|
||||
int index = models.indexOf(model);
|
||||
if (index >= 0) {
|
||||
Model m = models.get(index);
|
||||
m.setSuspended(mark);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -252,6 +252,18 @@ public class RecorderServlet extends AbstractCtbrecServlet {
|
|||
case "listModelGroups":
|
||||
sendModelGroups(resp, recorder.getModelGroups());
|
||||
break;
|
||||
case "markForLater":
|
||||
LOG.debug("Mark model {} for later recording", request.model.getName());
|
||||
response = "{\"status\": \"success\", \"msg\": \"Model marked for later recording\"}";
|
||||
responseWriter.write(response);
|
||||
recorder.markForLaterRecording(request.model, true);
|
||||
break;
|
||||
case "unmarkForLater":
|
||||
LOG.debug("Unmark model {} for later recording", request.model.getName());
|
||||
response = "{\"status\": \"success\", \"msg\": \"Model has been unmarked\"}";
|
||||
responseWriter.write(response);
|
||||
recorder.markForLaterRecording(request.model, false);
|
||||
break;
|
||||
default:
|
||||
sendError(resp, SC_BAD_REQUEST, "{\"status\": \"error\", \"msg\": \"Unknown action [" + request.action + "]\"}");
|
||||
break;
|
||||
|
|
Loading…
Reference in New Issue