forked from j62/ctbrec
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.AddToGroupAction;
|
||||||
import ctbrec.ui.action.EditNotesAction;
|
import ctbrec.ui.action.EditNotesAction;
|
||||||
import ctbrec.ui.action.IgnoreModelsAction;
|
import ctbrec.ui.action.IgnoreModelsAction;
|
||||||
|
import ctbrec.ui.action.MarkForLaterRecordingAction;
|
||||||
import ctbrec.ui.action.OpenRecordingsDir;
|
import ctbrec.ui.action.OpenRecordingsDir;
|
||||||
import ctbrec.ui.action.PauseAction;
|
import ctbrec.ui.action.PauseAction;
|
||||||
import ctbrec.ui.action.PlayAction;
|
import ctbrec.ui.action.PlayAction;
|
||||||
|
@ -335,9 +336,9 @@ public class ModelMenuContributor {
|
||||||
LOG.debug(first.toString());
|
LOG.debug(first.toString());
|
||||||
if (recorder.isTracked(first)) {
|
if (recorder.isTracked(first)) {
|
||||||
var pause = new MenuItem("Pause Recording");
|
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");
|
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;
|
var pauseResume = recorder.isSuspended(first) ? resume : pause;
|
||||||
menu.getItems().add(pauseResume);
|
menu.getItems().add(pauseResume);
|
||||||
}
|
}
|
||||||
|
@ -359,8 +360,7 @@ public class ModelMenuContributor {
|
||||||
|
|
||||||
private void recordLater(List<Model> selectedModels, boolean recordLater) {
|
private void recordLater(List<Model> selectedModels, boolean recordLater) {
|
||||||
selectedModels.forEach(m -> m.setMarkedForLaterRecording(recordLater));
|
selectedModels.forEach(m -> m.setMarkedForLaterRecording(recordLater));
|
||||||
startStopAction(selectedModels, false);
|
new MarkForLaterRecordingAction(source, selectedModels, recordLater, recorder).execute(m -> executeCallback());
|
||||||
startStopAction(selectedModels, true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addStartPaused(ContextMenu menu, List<Model> selectedModels) {
|
private void addStartPaused(ContextMenu menu, List<Model> selectedModels) {
|
||||||
|
@ -383,6 +383,10 @@ public class ModelMenuContributor {
|
||||||
var start = new MenuItem(text);
|
var start = new MenuItem(text);
|
||||||
menu.getItems().add(start);
|
menu.getItems().add(start);
|
||||||
start.setOnAction(e -> {
|
start.setOnAction(e -> {
|
||||||
|
selectedModels.forEach(m -> {
|
||||||
|
m.setMarkedForLaterRecording(false);
|
||||||
|
m.setSuspended(false);
|
||||||
|
});
|
||||||
startStopAction(selectedModels, true);
|
startStopAction(selectedModels, true);
|
||||||
selectedModels.forEach(m -> new SetStopDateAction(source, m, recorder).execute() //
|
selectedModels.forEach(m -> new SetStopDateAction(source, m, recorder).execute() //
|
||||||
.thenAccept(b -> executeCallback()));
|
.thenAccept(b -> executeCallback()));
|
||||||
|
|
|
@ -476,6 +476,7 @@ public class ThumbOverviewTab extends Tab implements TabSelectionListener {
|
||||||
grid.getChildren().remove(thumbCell);
|
grid.getChildren().remove(thumbCell);
|
||||||
selectedThumbCells.remove(thumbCell);
|
selectedThumbCells.remove(thumbCell);
|
||||||
}))
|
}))
|
||||||
|
.afterwards(() -> selectedModels.forEach(m -> getThumbCell(m).ifPresent(ThumbCell::update)))
|
||||||
.contributeToMenu(selectedModels, contextMenu);
|
.contributeToMenu(selectedModels, contextMenu);
|
||||||
|
|
||||||
var refresh = new MenuItem("Refresh Overview");
|
var refresh = new MenuItem("Refresh Overview");
|
||||||
|
|
|
@ -567,6 +567,30 @@ public class NextGenLocalRecorder implements Recorder {
|
||||||
return findModel(model).map(Model::isMarkedForLaterRecording).orElse(false);
|
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) {
|
private Optional<Model> findModel(Model m) {
|
||||||
recorderLock.lock();
|
recorderLock.lock();
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -63,6 +63,7 @@ public interface Recorder {
|
||||||
public boolean isSuspended(Model model);
|
public boolean isSuspended(Model model);
|
||||||
|
|
||||||
public boolean isMarkedForLaterRecording(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
|
* 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 {
|
public void deleteModelGroup(ModelGroup group) throws InvalidKeyException, NoSuchAlgorithmException, IOException {
|
||||||
sendRequest("deleteModelGroup", group);
|
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":
|
case "listModelGroups":
|
||||||
sendModelGroups(resp, recorder.getModelGroups());
|
sendModelGroups(resp, recorder.getModelGroups());
|
||||||
break;
|
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:
|
default:
|
||||||
sendError(resp, SC_BAD_REQUEST, "{\"status\": \"error\", \"msg\": \"Unknown action [" + request.action + "]\"}");
|
sendError(resp, SC_BAD_REQUEST, "{\"status\": \"error\", \"msg\": \"Unknown action [" + request.action + "]\"}");
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue