From ae8e4acf7a93ffbc90c4c0b837a2254fab4b88ce Mon Sep 17 00:00:00 2001 From: 0xb00bface <0xboobface@gmail.com> Date: Sat, 19 Dec 2020 20:29:50 +0100 Subject: [PATCH] Disallow playback of running remote recordings Instead allow to open the live stream --- CHANGELOG.md | 5 ++ .../java/ctbrec/ui/tabs/RecordingsTab.java | 90 +++++++++++++------ 2 files changed, 68 insertions(+), 27 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f6a96470..9d39e8b9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +3.10.10 +======================== +* Fix: "Check URLs" button stays inactive +* Fix: recordings for some Cam4 models still didn't start + 3.10.9 ======================== * Added more category tabs for CamSoda diff --git a/client/src/main/java/ctbrec/ui/tabs/RecordingsTab.java b/client/src/main/java/ctbrec/ui/tabs/RecordingsTab.java index d0dcb5ab..43728def 100644 --- a/client/src/main/java/ctbrec/ui/tabs/RecordingsTab.java +++ b/client/src/main/java/ctbrec/ui/tabs/RecordingsTab.java @@ -1,5 +1,32 @@ package ctbrec.ui.tabs; +import static ctbrec.Recording.State.*; +import static javafx.scene.control.ButtonType.*; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.net.URL; +import java.nio.file.NoSuchFileException; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.text.DecimalFormat; +import java.time.Instant; +import java.util.ArrayList; +import java.util.Collections; +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; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; +import java.util.stream.Collectors; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import ctbrec.Config; import ctbrec.Model; import ctbrec.Recording; @@ -12,9 +39,15 @@ import ctbrec.recorder.ProgressListener; import ctbrec.recorder.Recorder; import ctbrec.recorder.RecordingPinnedException; import ctbrec.recorder.download.hls.MergedFfmpegHlsDownload; -import ctbrec.ui.*; +import ctbrec.ui.AutosizeAlert; +import ctbrec.ui.CamrecApplication; +import ctbrec.ui.DesktopIntegration; +import ctbrec.ui.FileDownload; +import ctbrec.ui.JavaFxRecording; +import ctbrec.ui.Player; import ctbrec.ui.action.FollowAction; import ctbrec.ui.action.PauseAction; +import ctbrec.ui.action.PlayAction; import ctbrec.ui.action.StopRecordingAction; import ctbrec.ui.controls.DateTimeCellFactory; import ctbrec.ui.controls.Dialogs; @@ -30,9 +63,24 @@ import javafx.geometry.Insets; import javafx.scene.Cursor; import javafx.scene.Node; import javafx.scene.control.Alert.AlertType; -import javafx.scene.control.*; +import javafx.scene.control.ButtonType; +import javafx.scene.control.ContextMenu; +import javafx.scene.control.Label; +import javafx.scene.control.MenuItem; +import javafx.scene.control.ProgressBar; +import javafx.scene.control.ScrollPane; +import javafx.scene.control.SelectionMode; +import javafx.scene.control.Tab; +import javafx.scene.control.TableCell; +import javafx.scene.control.TableColumn; import javafx.scene.control.TableColumn.SortType; -import javafx.scene.input.*; +import javafx.scene.control.TableView; +import javafx.scene.control.Tooltip; +import javafx.scene.input.ContextMenuEvent; +import javafx.scene.input.KeyCode; +import javafx.scene.input.KeyEvent; +import javafx.scene.input.MouseButton; +import javafx.scene.input.MouseEvent; import javafx.scene.layout.BorderPane; import javafx.scene.layout.FlowPane; import javafx.scene.layout.HBox; @@ -40,29 +88,6 @@ import javafx.scene.layout.StackPane; import javafx.scene.text.Font; import javafx.stage.FileChooser; import javafx.util.Duration; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.net.URL; -import java.nio.file.NoSuchFileException; -import java.security.InvalidKeyException; -import java.security.NoSuchAlgorithmException; -import java.text.DecimalFormat; -import java.time.Instant; -import java.util.*; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.locks.Lock; -import java.util.concurrent.locks.ReentrantLock; -import java.util.stream.Collectors; - -import static ctbrec.Recording.State.*; -import static javafx.scene.control.ButtonType.NO; -import static javafx.scene.control.ButtonType.YES; public class RecordingsTab extends Tab implements TabSelectionListener { private static final String ERROR_WHILE_DOWNLOADING_RECORDING = "Error while downloading recording"; @@ -213,7 +238,10 @@ public class RecordingsTab extends Tab implements TabSelectionListener { if (event.getButton() == MouseButton.PRIMARY && event.getClickCount() == 2) { Recording recording = table.getSelectionModel().getSelectedItem(); if (recording != null) { - play(recording); + State state = recording.getStatus(); + if(state == FINISHED || state == RECORDING && config.getSettings().localRecording) { + play(recording); + } } } } @@ -359,6 +387,10 @@ public class RecordingsTab extends Tab implements TabSelectionListener { openInPlayer.setOnAction(e -> play(first)); if (first.getStatus() == FINISHED || Config.getInstance().getSettings().localRecording) { contextMenu.getItems().add(openInPlayer); + } else if (first.getStatus() == RECORDING && !Config.getInstance().getSettings().localRecording) { + openInPlayer.setText("Open live stream"); + openInPlayer.setOnAction(e -> play(first.getModel())); + contextMenu.getItems().add(openInPlayer); } MenuItem openContactSheet = new MenuItem("Open contact sheet"); @@ -716,6 +748,10 @@ public class RecordingsTab extends Tab implements TabSelectionListener { }).start(); } + private void play(Model model) { + new PlayAction(table, model).execute(); + } + private void delete(List recordings) { table.setCursor(Cursor.WAIT); String msg;