From 229fc1f4322eb38b2ff0a83c8247dc3eb0e9ddac Mon Sep 17 00:00:00 2001 From: 0xboobface <0xboobface@gmail.com> Date: Sat, 13 Jun 2020 19:32:00 +0200 Subject: [PATCH] Add possibility to add notes to recordings --- CHANGELOG.md | 7 ++++ client/.classpath | 2 +- client/.settings/org.eclipse.jdt.core.prefs | 9 +++-- .../main/java/ctbrec/ui/JavaFxRecording.java | 20 ++++++++++ .../java/ctbrec/ui/tabs/RecordingsTab.java | 39 ++++++++++++++++++- common/src/main/java/ctbrec/Recording.java | 9 +++++ .../ctbrec/recorder/NextGenLocalRecorder.java | 6 +++ .../main/java/ctbrec/recorder/Recorder.java | 2 + .../java/ctbrec/recorder/RemoteRecorder.java | 5 +++ .../recorder/server/RecorderServlet.java | 7 ++++ 10 files changed, 100 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 12e0baec..7cdaf132 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +3.8.0 +======================== +* Server Settings are now editable in the web-interface +* Models can be added by name in the web-interface +* Added a bandwidth monitor +* Improved MFC SD downloads (much less blocking, I think) + 3.7.3 ======================== * Fixed problem, that MFC wouldn't show any models anymore diff --git a/client/.classpath b/client/.classpath index 5dcfe20c..0f3dcb1f 100644 --- a/client/.classpath +++ b/client/.classpath @@ -11,7 +11,7 @@ - + diff --git a/client/.settings/org.eclipse.jdt.core.prefs b/client/.settings/org.eclipse.jdt.core.prefs index 1db26929..335156c0 100644 --- a/client/.settings/org.eclipse.jdt.core.prefs +++ b/client/.settings/org.eclipse.jdt.core.prefs @@ -1,8 +1,9 @@ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=12 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=11 +org.eclipse.jdt.core.compiler.compliance=12 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -11,5 +12,5 @@ org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning -org.eclipse.jdt.core.compiler.release=enabled -org.eclipse.jdt.core.compiler.source=11 +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=12 diff --git a/client/src/main/java/ctbrec/ui/JavaFxRecording.java b/client/src/main/java/ctbrec/ui/JavaFxRecording.java index 57a563ed..0009d9d2 100644 --- a/client/src/main/java/ctbrec/ui/JavaFxRecording.java +++ b/client/src/main/java/ctbrec/ui/JavaFxRecording.java @@ -14,6 +14,7 @@ public class JavaFxRecording extends Recording { private transient StringProperty statusProperty = new SimpleStringProperty(); private transient StringProperty progressProperty = new SimpleStringProperty(); + private transient StringProperty notesProperty = new SimpleStringProperty(); private transient LongProperty sizeProperty = new SimpleLongProperty(); private Recording delegate; @@ -24,6 +25,10 @@ public class JavaFxRecording extends Recording { setStatus(recording.getStatus()); setSizeInByte(recording.getSizeInByte()); setProgress(recording.getProgress()); + setNote(recording.getNote()); + notesProperty.addListener((obs, oldV, newV) -> { + delegate.setNote(newV); + }); } public Recording getDelegate() { @@ -203,4 +208,19 @@ public class JavaFxRecording extends Recording { lastValue = getSizeInByte(); return changed; } + + @Override + public String getNote() { + return delegate.getNote(); + } + + @Override + public void setNote(String note) { + delegate.setNote(note); + notesProperty.set(note); + } + + public StringProperty getNoteProperty() { + return notesProperty; + } } diff --git a/client/src/main/java/ctbrec/ui/tabs/RecordingsTab.java b/client/src/main/java/ctbrec/ui/tabs/RecordingsTab.java index 6fd4e242..2f4be5c5 100644 --- a/client/src/main/java/ctbrec/ui/tabs/RecordingsTab.java +++ b/client/src/main/java/ctbrec/ui/tabs/RecordingsTab.java @@ -17,6 +17,7 @@ import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.Objects; +import java.util.Optional; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; @@ -42,6 +43,7 @@ import ctbrec.ui.FileDownload; import ctbrec.ui.JavaFxRecording; import ctbrec.ui.Player; import ctbrec.ui.controls.DateTimeCellFactory; +import ctbrec.ui.controls.Dialogs; import ctbrec.ui.controls.Toast; import javafx.application.Platform; import javafx.beans.property.SimpleObjectProperty; @@ -52,6 +54,7 @@ import javafx.concurrent.ScheduledService; import javafx.concurrent.Task; import javafx.geometry.Insets; import javafx.scene.Cursor; +import javafx.scene.Node; import javafx.scene.control.Alert.AlertType; import javafx.scene.control.ButtonType; import javafx.scene.control.ContextMenu; @@ -150,8 +153,12 @@ public class RecordingsTab extends Tab implements TabSelectionListener { size.setPrefWidth(100); size.setCellValueFactory(cdf -> cdf.getValue().getSizeProperty()); size.setCellFactory(param -> createSizeCell()); + TableColumn notes = new TableColumn<>("Notes"); + notes.setId("notes"); + notes.setPrefWidth(400); + notes.setCellValueFactory(cdf -> cdf.getValue().getNoteProperty()); - table.getColumns().addAll(name, date, status, progress, size); + table.getColumns().addAll(name, date, status, progress, size, notes); table.setItems(observableRecordings); table.addEventHandler(ContextMenuEvent.CONTEXT_MENU_REQUESTED, this::onContextMenuRequested); table.addEventHandler(MouseEvent.MOUSE_PRESSED, this::onMousePressed); @@ -415,6 +422,10 @@ public class RecordingsTab extends Tab implements TabSelectionListener { contextMenu.getItems().add(downloadRecording); } + MenuItem notes = new MenuItem("Notes"); + notes.setOnAction(e -> notes(first)); + contextMenu.getItems().add(notes); + if (first.isPinned()) { MenuItem unpinRecording = new MenuItem("Unpin"); unpinRecording.setOnAction(e -> unpin(recordings)); @@ -440,6 +451,32 @@ public class RecordingsTab extends Tab implements TabSelectionListener { return contextMenu; } + private void notes(JavaFxRecording recording) { + Node source = getTabPane(); + String notes = recording.getNote(); + Optional newNote = Dialogs.showTextInput(source.getScene(), "Recording Notes", "", notes); + if(newNote.isPresent()) { + table.setCursor(Cursor.WAIT); + Thread backgroundThread = new Thread(() -> { + List exceptions = new ArrayList<>(); + try { + recording.setNote(newNote.get()); + recorder.setNote(recording.getDelegate(), newNote.get()); + } catch (InvalidKeyException | NoSuchAlgorithmException | IOException e) { + exceptions.add(e); + } finally { + Platform.runLater(() -> { + table.setCursor(Cursor.DEFAULT); + if (!exceptions.isEmpty()) { + showErrorDialog("Error while saving note", "", exceptions); + } + }); + } + }); + backgroundThread.start(); + } + } + private void pin(List recordings) { table.setCursor(Cursor.WAIT); Thread backgroundThread = new Thread(() -> { diff --git a/common/src/main/java/ctbrec/Recording.java b/common/src/main/java/ctbrec/Recording.java index db013651..9195d801 100644 --- a/common/src/main/java/ctbrec/Recording.java +++ b/common/src/main/java/ctbrec/Recording.java @@ -36,6 +36,7 @@ public class Recording implements Serializable { private String metaDataFile; private boolean singleFile = false; private boolean pinned = false; + private String note; public enum State { RECORDING("recording"), @@ -161,6 +162,14 @@ public class Recording implements Serializable { this.pinned = pinned; } + public String getNote() { + return note; + } + + public void setNote(String note) { + this.note = note; + } + public Duration getLength() { if (getDownload() != null) { return getDownload().getLength(); diff --git a/common/src/main/java/ctbrec/recorder/NextGenLocalRecorder.java b/common/src/main/java/ctbrec/recorder/NextGenLocalRecorder.java index 323639c0..7d2122c9 100644 --- a/common/src/main/java/ctbrec/recorder/NextGenLocalRecorder.java +++ b/common/src/main/java/ctbrec/recorder/NextGenLocalRecorder.java @@ -694,4 +694,10 @@ public class NextGenLocalRecorder implements Recorder { public void unpin(Recording recording) throws IOException, InvalidKeyException, NoSuchAlgorithmException { recordingManager.unpin(recording); } + + @Override + public void setNote(Recording rec, String note) throws IOException { + rec.setNote(note); + recordingManager.saveRecording(rec); + } } diff --git a/common/src/main/java/ctbrec/recorder/Recorder.java b/common/src/main/java/ctbrec/recorder/Recorder.java index 2da77254..7dee8c4d 100644 --- a/common/src/main/java/ctbrec/recorder/Recorder.java +++ b/common/src/main/java/ctbrec/recorder/Recorder.java @@ -120,4 +120,6 @@ public interface Recorder { * @throws NoSuchAlgorithmException */ public void priorityChanged(Model model) throws IOException, InvalidKeyException, NoSuchAlgorithmException; + + public void setNote(Recording rec, String note) throws IOException, InvalidKeyException, NoSuchAlgorithmException; } diff --git a/common/src/main/java/ctbrec/recorder/RemoteRecorder.java b/common/src/main/java/ctbrec/recorder/RemoteRecorder.java index b6d15bb3..84a4b036 100644 --- a/common/src/main/java/ctbrec/recorder/RemoteRecorder.java +++ b/common/src/main/java/ctbrec/recorder/RemoteRecorder.java @@ -508,4 +508,9 @@ public class RemoteRecorder implements Recorder { public void priorityChanged(Model model) throws IOException, InvalidKeyException, NoSuchAlgorithmException { sendRequest("changePriority", model); } + + @Override + public void setNote(Recording recording, String note) throws IOException, InvalidKeyException, NoSuchAlgorithmException { + sendRequest("setNote", recording); + } } diff --git a/server/src/main/java/ctbrec/recorder/server/RecorderServlet.java b/server/src/main/java/ctbrec/recorder/server/RecorderServlet.java index 136a0037..5c71abec 100644 --- a/server/src/main/java/ctbrec/recorder/server/RecorderServlet.java +++ b/server/src/main/java/ctbrec/recorder/server/RecorderServlet.java @@ -152,6 +152,13 @@ public class RecorderServlet extends AbstractCtbrecServlet { resp.getWriter().write("]}"); break; case "unpin": + recorder.setNote(request.recording, request.recording.getNote()); + recAdapter = moshi.adapter(Recording.class); + resp.getWriter().write("{\"status\": \"success\", \"msg\": \"Note saved\", \"recordings\": ["); + resp.getWriter().write(recAdapter.toJson(request.recording)); + resp.getWriter().write("]}"); + break; + case "setNote": recorder.unpin(request.recording); recAdapter = moshi.adapter(Recording.class); resp.getWriter().write("{\"status\": \"success\", \"msg\": \"List of recordings\", \"recordings\": [");