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\": [");