diff --git a/CHANGELOG.md b/CHANGELOG.md index 456a9b1a..878ca96c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +4.4.3 +======================== +* Changed Camsoda audio codec back to AAC. Sound should be back for recordings +* Unified all model related context menus + 4.4.2 ======================== * Fixed memory leak caused by minimizing to tray diff --git a/client/src/main/java/ctbrec/ui/sites/myfreecams/MyFreeCamsTabProvider.java b/client/src/main/java/ctbrec/ui/sites/myfreecams/MyFreeCamsTabProvider.java index eba2495b..ee1f9ed0 100644 --- a/client/src/main/java/ctbrec/ui/sites/myfreecams/MyFreeCamsTabProvider.java +++ b/client/src/main/java/ctbrec/ui/sites/myfreecams/MyFreeCamsTabProvider.java @@ -43,7 +43,7 @@ public class MyFreeCamsTabProvider implements TabProvider { updateService = new NewModelService(); tabs.add(createTab("New", updateService)); - tabs.add(new MyFreeCamsTableTab(myFreeCams)); + tabs.add(new MyFreeCamsTableTab(myFreeCams, recorder)); return tabs; } diff --git a/client/src/main/java/ctbrec/ui/sites/myfreecams/MyFreeCamsTableTab.java b/client/src/main/java/ctbrec/ui/sites/myfreecams/MyFreeCamsTableTab.java index 7a8d6bda..c420c5eb 100644 --- a/client/src/main/java/ctbrec/ui/sites/myfreecams/MyFreeCamsTableTab.java +++ b/client/src/main/java/ctbrec/ui/sites/myfreecams/MyFreeCamsTableTab.java @@ -36,17 +36,15 @@ import ctbrec.Config; import ctbrec.GlobalThreadPool; import ctbrec.Model; import ctbrec.StringUtil; +import ctbrec.recorder.Recorder; import ctbrec.recorder.download.StreamSource; import ctbrec.sites.mfc.MyFreeCams; import ctbrec.sites.mfc.MyFreeCamsModel; import ctbrec.sites.mfc.SessionState; import ctbrec.sites.mfc.User; -import ctbrec.ui.DesktopIntegration; -import ctbrec.ui.action.FollowAction; -import ctbrec.ui.action.PlayAction; -import ctbrec.ui.action.StartRecordingAction; import ctbrec.ui.controls.CustomMouseBehaviorContextMenu; import ctbrec.ui.controls.SearchBox; +import ctbrec.ui.menu.ModelMenuContributor; import ctbrec.ui.tabs.TabSelectionListener; import javafx.beans.property.BooleanProperty; import javafx.beans.property.DoubleProperty; @@ -66,6 +64,7 @@ import javafx.event.ActionEvent; import javafx.geometry.Insets; import javafx.geometry.Point2D; import javafx.geometry.Pos; +import javafx.scene.Cursor; import javafx.scene.control.Button; import javafx.scene.control.CheckMenuItem; import javafx.scene.control.ContextMenu; @@ -73,13 +72,12 @@ import javafx.scene.control.Label; import javafx.scene.control.MenuItem; import javafx.scene.control.ScrollPane; import javafx.scene.control.SelectionMode; +import javafx.scene.control.SeparatorMenuItem; import javafx.scene.control.Tab; import javafx.scene.control.TableColumn; import javafx.scene.control.TableColumn.SortType; import javafx.scene.control.TableView; import javafx.scene.control.Tooltip; -import javafx.scene.input.Clipboard; -import javafx.scene.input.ClipboardContent; import javafx.scene.input.ContextMenuEvent; import javafx.scene.input.MouseEvent; import javafx.scene.layout.BorderPane; @@ -102,9 +100,11 @@ public class MyFreeCamsTableTab extends Tab implements TabSelectionListener { private List> columns = new ArrayList<>(); private ContextMenu popup; private long lastJsonWrite = 0; + private Recorder recorder; - public MyFreeCamsTableTab(MyFreeCams mfc) { + public MyFreeCamsTableTab(MyFreeCams mfc, Recorder recorder) { this.mfc = mfc; + this.recorder = recorder; setText("Tabular"); setClosable(false); createGui(); @@ -306,26 +306,12 @@ public class MyFreeCamsTableTab extends Tab implements TabSelectionListener { return null; } - var copyUrl = new MenuItem("Copy URL"); - copyUrl.setOnAction(e -> copyUrl(selectedModels.get(0))); - - var startRecording = new MenuItem("Start Recording"); - startRecording.setOnAction(e -> startRecording(selectedModels)); - var openInBrowser = new MenuItem("Open in Browser"); - openInBrowser.setOnAction(e -> DesktopIntegration.open(selectedModels.get(0).getUrl())); - var openInPlayer = new MenuItem("Open in Player"); - openInPlayer.setOnAction(e -> openInPlayer(selectedModels.get(0))); - var follow = new MenuItem("Follow"); - follow.setOnAction(e -> new FollowAction(getTabPane(), selectedModels).execute()); - ContextMenu menu = new CustomMouseBehaviorContextMenu(); - menu.getItems().addAll(startRecording, copyUrl, openInPlayer, openInBrowser, follow); - if (selectedModels.size() > 1) { - copyUrl.setDisable(true); - openInPlayer.setDisable(true); - openInBrowser.setDisable(true); - } + ModelMenuContributor.newContributor(getTabPane(), Config.getInstance(), recorder) // + .withStartStopCallback(m -> getTabPane().setCursor(Cursor.DEFAULT)) // + .afterwards(table::refresh) + .contributeToMenu(selectedModels, menu); addDebuggingInDevMode(menu, selectedModels); @@ -333,6 +319,7 @@ public class MyFreeCamsTableTab extends Tab implements TabSelectionListener { } private void addDebuggingInDevMode(ContextMenu menu, List selectedModels) { + menu.getItems().add(new SeparatorMenuItem()); if (Objects.equals(System.getenv("CTBREC_DEV"), "1")) { var debug = new MenuItem("debug"); debug.setOnAction(e -> GlobalThreadPool.submit(() -> { @@ -365,21 +352,6 @@ public class MyFreeCamsTableTab extends Tab implements TabSelectionListener { return selectedModels; } - private void copyUrl(Model selected) { - final var content = new ClipboardContent(); - content.putString(selected.getUrl()); - Clipboard.getSystemClipboard().setContent(content); - } - - - private void startRecording(List selectedModels) { - new StartRecordingAction(getTabPane(), selectedModels, mfc.getRecorder()).execute(); - } - - private void openInPlayer(Model selectedModel) { - new PlayAction(getTabPane(), selectedModel).execute(); - } - private void addTableColumnIfEnabled(TableColumn tc) { if(isColumnEnabled(tc)) { table.getColumns().add(tc);