From 8ae41142d119c76c69756074bbb189171f1e350e Mon Sep 17 00:00:00 2001 From: 0xboobface <0xboobface@gmail.com> Date: Fri, 3 Jan 2020 15:13:57 +0100 Subject: [PATCH] Add menu entry to open the recording dir of a model --- .../java/ctbrec/ui/RecordedModelsTab.java | 5 ++- .../main/java/ctbrec/ui/ThumbOverviewTab.java | 7 +++- .../ctbrec/ui/action/OpenRecordingsDir.java | 34 +++++++++++++++++++ 3 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 client/src/main/java/ctbrec/ui/action/OpenRecordingsDir.java diff --git a/client/src/main/java/ctbrec/ui/RecordedModelsTab.java b/client/src/main/java/ctbrec/ui/RecordedModelsTab.java index c797ef06..09565885 100644 --- a/client/src/main/java/ctbrec/ui/RecordedModelsTab.java +++ b/client/src/main/java/ctbrec/ui/RecordedModelsTab.java @@ -27,6 +27,7 @@ import ctbrec.recorder.Recorder; import ctbrec.sites.Site; import ctbrec.ui.action.EditNotesAction; import ctbrec.ui.action.FollowAction; +import ctbrec.ui.action.OpenRecordingsDir; import ctbrec.ui.action.PauseAction; import ctbrec.ui.action.PlayAction; import ctbrec.ui.action.ResumeAction; @@ -513,6 +514,8 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener { follow.setOnAction(e -> follow(selectedModels)); MenuItem notes = new MenuItem("Notes"); notes.setOnAction(e -> notes(selectedModels)); + MenuItem openRecDir = new MenuItem("Open recording directory"); + openRecDir.setOnAction(e -> new OpenRecordingsDir(table, selectedModels.get(0)).execute()); ContextMenu menu = new ContextMenu(stop); if (selectedModels.size() == 1) { @@ -520,7 +523,7 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener { } else { menu.getItems().addAll(resumeRecording, pauseRecording); } - menu.getItems().addAll(copyUrl, openInPlayer, openInBrowser, switchStreamSource, follow, notes); + menu.getItems().addAll(copyUrl, openInPlayer, openInBrowser, openRecDir, switchStreamSource, follow, notes); if (selectedModels.size() > 1) { copyUrl.setDisable(true); diff --git a/client/src/main/java/ctbrec/ui/ThumbOverviewTab.java b/client/src/main/java/ctbrec/ui/ThumbOverviewTab.java index 25901d6f..4f1b50db 100644 --- a/client/src/main/java/ctbrec/ui/ThumbOverviewTab.java +++ b/client/src/main/java/ctbrec/ui/ThumbOverviewTab.java @@ -35,6 +35,7 @@ import ctbrec.recorder.Recorder; import ctbrec.sites.Site; import ctbrec.sites.mfc.MyFreeCamsClient; import ctbrec.sites.mfc.MyFreeCamsModel; +import ctbrec.ui.action.OpenRecordingsDir; import ctbrec.ui.controls.SearchBox; import ctbrec.ui.controls.SearchPopover; import ctbrec.ui.controls.SearchPopoverTreeList; @@ -448,6 +449,9 @@ public class ThumbOverviewTab extends Tab implements TabSelectionListener { MenuItem refresh = new MenuItem("Refresh"); refresh.setOnAction(e -> refresh()); + MenuItem openRecDir = new MenuItem("Open recording directory"); + openRecDir.setOnAction(e -> new OpenRecordingsDir(cell, cell.getModel()).execute()); + MenuItem copyUrl = createCopyUrlMenuItem(cell); MenuItem sendTip = createTipMenuItem(cell); @@ -469,12 +473,13 @@ public class ThumbOverviewTab extends Tab implements TabSelectionListener { if(site.supportsTips()) { contextMenu.getItems().add(sendTip); } - contextMenu.getItems().addAll(copyUrl, ignore, refresh); + contextMenu.getItems().addAll(copyUrl, ignore, refresh, openRecDir); if(cell.getModel() instanceof MyFreeCamsModel && Objects.equals(System.getenv("CTBREC_DEV"), "1")) { MenuItem debug = new MenuItem("debug"); debug.setOnAction(e -> MyFreeCamsClient.getInstance().getSessionState(cell.getModel())); contextMenu.getItems().add(debug); } + return contextMenu; } diff --git a/client/src/main/java/ctbrec/ui/action/OpenRecordingsDir.java b/client/src/main/java/ctbrec/ui/action/OpenRecordingsDir.java new file mode 100644 index 00000000..c1390cc9 --- /dev/null +++ b/client/src/main/java/ctbrec/ui/action/OpenRecordingsDir.java @@ -0,0 +1,34 @@ +package ctbrec.ui.action; + +import java.io.File; +import java.time.Instant; + +import ctbrec.Config; +import ctbrec.Model; +import ctbrec.ui.DesktopIntegration; +import ctbrec.ui.controls.Dialogs; +import javafx.scene.Cursor; +import javafx.scene.Node; + +public class OpenRecordingsDir { + + private Model selectedModel; + private Node source; + + public OpenRecordingsDir(Node source, Model selectedModel) { + this.source = source; + this.selectedModel = selectedModel; + } + + public void execute() { + source.setCursor(Cursor.WAIT); + File fileForRecording = Config.getInstance().getFileForRecording(selectedModel, ".mp4", Instant.now()); + File dir = fileForRecording.getParentFile(); + if (dir.exists()) { + new Thread(() -> DesktopIntegration.open(dir)).start(); + } else { + Dialogs.showError(source.getScene(), "Directory does not exist", "There are no recordings for this model", null); + } + source.setCursor(Cursor.DEFAULT); + } +}