Add stop, pause and follow actions to context menu

This commit is contained in:
0xb00bface 2020-11-21 18:45:30 +01:00
parent 3db5d16bb5
commit 69e13a7f37
1 changed files with 62 additions and 43 deletions

View File

@ -23,11 +23,13 @@ import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.locks.ReentrantLock;
import java.util.stream.Collectors;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import ctbrec.Config; import ctbrec.Config;
import ctbrec.Model;
import ctbrec.Recording; import ctbrec.Recording;
import ctbrec.Recording.State; import ctbrec.Recording.State;
import ctbrec.StringUtil; import ctbrec.StringUtil;
@ -45,6 +47,9 @@ import ctbrec.ui.DesktopIntegration;
import ctbrec.ui.FileDownload; import ctbrec.ui.FileDownload;
import ctbrec.ui.JavaFxRecording; import ctbrec.ui.JavaFxRecording;
import ctbrec.ui.Player; import ctbrec.ui.Player;
import ctbrec.ui.action.FollowAction;
import ctbrec.ui.action.PauseAction;
import ctbrec.ui.action.StopRecordingAction;
import ctbrec.ui.controls.DateTimeCellFactory; import ctbrec.ui.controls.DateTimeCellFactory;
import ctbrec.ui.controls.Dialogs; import ctbrec.ui.controls.Dialogs;
import ctbrec.ui.controls.Toast; import ctbrec.ui.controls.Toast;
@ -191,9 +196,7 @@ public class RecordingsTab extends Tab implements TabSelectionListener {
} }
public boolean isDownloadRunning() { public boolean isDownloadRunning() {
return observableRecordings.stream() return observableRecordings.stream().map(Recording::getStatus).anyMatch(s -> s == DOWNLOADING);
.map(Recording::getStatus)
.anyMatch(s -> s == DOWNLOADING);
} }
private TableCell<JavaFxRecording, Number> createSizeCell() { private TableCell<JavaFxRecording, Number> createSizeCell() {
@ -397,19 +400,17 @@ public class RecordingsTab extends Tab implements TabSelectionListener {
openContactSheet.setDisable(first.getContactSheet().isEmpty()); openContactSheet.setDisable(first.getContactSheet().isEmpty());
contextMenu.getItems().add(openContactSheet); contextMenu.getItems().add(openContactSheet);
// TODO find a way to reenable this MenuItem stopRecording = new MenuItem("Stop Recording");
// MenuItem stopRecording = new MenuItem("Stop recording"); stopRecording.setOnAction(e -> stopRecording(recordings.stream().map(r -> r.getModel()).collect(Collectors.toList())));
// stopRecording.setOnAction((e) -> { if (recordings.stream().anyMatch(r -> r.getStatus() == RECORDING)) {
// Model m = site.createModel(recording.getModelName()); contextMenu.getItems().add(stopRecording);
// try { }
// recorder.stopRecording(m);
// } catch (Exception e1) { MenuItem pauseRecording = new MenuItem("Pause Recording");
// showErrorDialog("Stop recording", "Couldn't stop recording of model " + m.getName(), e1); pauseRecording.setOnAction(e -> pauseRecording(recordings.stream().map(r -> r.getModel()).collect(Collectors.toList())));
// } if (recordings.stream().anyMatch(r -> r.getStatus() == RECORDING)) {
// }); contextMenu.getItems().add(pauseRecording);
// if(recording.getStatus() == STATUS.RECORDING) { }
// contextMenu.getItems().add(stopRecording);
// }
MenuItem deleteRecording = new MenuItem("Delete"); MenuItem deleteRecording = new MenuItem("Delete");
deleteRecording.setOnAction(e -> delete(recordings)); deleteRecording.setOnAction(e -> delete(recordings));
@ -418,6 +419,11 @@ public class RecordingsTab extends Tab implements TabSelectionListener {
deleteRecording.setDisable(recordings.stream().allMatch(Recording::isPinned)); deleteRecording.setDisable(recordings.stream().allMatch(Recording::isPinned));
} }
MenuItem followModels = new MenuItem("Follow Model");
followModels.setOnAction(e -> follow(recordings.stream().map(r -> r.getModel()).collect(Collectors.toList())));
followModels.setDisable(!recordings.stream().map(r -> r.getModel()).allMatch(m -> m.getSite().supportsFollow() && m.getSite().credentialsAvailable()));
contextMenu.getItems().add(followModels);
MenuItem openDir = new MenuItem("Open directory"); MenuItem openDir = new MenuItem("Open directory");
openDir.setOnAction(e -> onOpenDirectory(first)); openDir.setOnAction(e -> onOpenDirectory(first));
if (Config.getInstance().getSettings().localRecording) { if (Config.getInstance().getSettings().localRecording) {
@ -457,6 +463,18 @@ public class RecordingsTab extends Tab implements TabSelectionListener {
return contextMenu; return contextMenu;
} }
private void follow(List<Model> selectedModels) {
new FollowAction(getTabPane(), selectedModels).execute();
}
private void stopRecording(List<Model> selectedModels) {
new StopRecordingAction(getTabPane(), selectedModels, recorder).execute();
}
private void pauseRecording(List<Model> selectedModels) {
new PauseAction(getTabPane(), selectedModels, recorder).execute();
}
private void openContactSheet(JavaFxRecording recording) { private void openContactSheet(JavaFxRecording recording) {
if (config.getSettings().localRecording) { if (config.getSettings().localRecording) {
recording.getContactSheet().ifPresent(f -> new Thread(() -> DesktopIntegration.open(f)).start()); recording.getContactSheet().ifPresent(f -> new Thread(() -> DesktopIntegration.open(f)).start());
@ -665,7 +683,8 @@ public class RecordingsTab extends Tab implements TabSelectionListener {
Platform.runLater(() -> { Platform.runLater(() -> {
recording.setStatus(FINISHED); recording.setStatus(FINISHED);
recording.setProgress(-1); recording.setProgress(-1);
RecordingStateChangedEvent evt = new RecordingStateChangedEvent(target, recording.getStatus(), recording.getModel(), recording.getStartDate()); RecordingStateChangedEvent evt = new RecordingStateChangedEvent(target, recording.getStatus(), recording.getModel(),
recording.getStartDate());
EventBusHolder.BUS.post(evt); EventBusHolder.BUS.post(evt);
}); });
} }