forked from j62/ctbrec
1
0
Fork 0

Disallow playback of running remote recordings

Instead allow to open the live stream
This commit is contained in:
0xb00bface 2020-12-19 20:29:50 +01:00
parent 672d2a77d4
commit ae8e4acf7a
2 changed files with 68 additions and 27 deletions

View File

@ -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 3.10.9
======================== ========================
* Added more category tabs for CamSoda * Added more category tabs for CamSoda

View File

@ -1,5 +1,32 @@
package ctbrec.ui.tabs; 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.Config;
import ctbrec.Model; import ctbrec.Model;
import ctbrec.Recording; import ctbrec.Recording;
@ -12,9 +39,15 @@ import ctbrec.recorder.ProgressListener;
import ctbrec.recorder.Recorder; import ctbrec.recorder.Recorder;
import ctbrec.recorder.RecordingPinnedException; import ctbrec.recorder.RecordingPinnedException;
import ctbrec.recorder.download.hls.MergedFfmpegHlsDownload; 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.FollowAction;
import ctbrec.ui.action.PauseAction; import ctbrec.ui.action.PauseAction;
import ctbrec.ui.action.PlayAction;
import ctbrec.ui.action.StopRecordingAction; import ctbrec.ui.action.StopRecordingAction;
import ctbrec.ui.controls.DateTimeCellFactory; import ctbrec.ui.controls.DateTimeCellFactory;
import ctbrec.ui.controls.Dialogs; import ctbrec.ui.controls.Dialogs;
@ -30,9 +63,24 @@ import javafx.geometry.Insets;
import javafx.scene.Cursor; import javafx.scene.Cursor;
import javafx.scene.Node; import javafx.scene.Node;
import javafx.scene.control.Alert.AlertType; 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.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.BorderPane;
import javafx.scene.layout.FlowPane; import javafx.scene.layout.FlowPane;
import javafx.scene.layout.HBox; import javafx.scene.layout.HBox;
@ -40,29 +88,6 @@ import javafx.scene.layout.StackPane;
import javafx.scene.text.Font; import javafx.scene.text.Font;
import javafx.stage.FileChooser; import javafx.stage.FileChooser;
import javafx.util.Duration; 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 { public class RecordingsTab extends Tab implements TabSelectionListener {
private static final String ERROR_WHILE_DOWNLOADING_RECORDING = "Error while downloading recording"; private static final String ERROR_WHILE_DOWNLOADING_RECORDING = "Error while downloading recording";
@ -213,10 +238,13 @@ public class RecordingsTab extends Tab implements TabSelectionListener {
if (event.getButton() == MouseButton.PRIMARY && event.getClickCount() == 2) { if (event.getButton() == MouseButton.PRIMARY && event.getClickCount() == 2) {
Recording recording = table.getSelectionModel().getSelectedItem(); Recording recording = table.getSelectionModel().getSelectedItem();
if (recording != null) { if (recording != null) {
State state = recording.getStatus();
if(state == FINISHED || state == RECORDING && config.getSettings().localRecording) {
play(recording); play(recording);
} }
} }
} }
}
private void onKeyPressed(KeyEvent event) { private void onKeyPressed(KeyEvent event) {
List<JavaFxRecording> recordings = table.getSelectionModel().getSelectedItems(); List<JavaFxRecording> recordings = table.getSelectionModel().getSelectedItems();
@ -359,6 +387,10 @@ public class RecordingsTab extends Tab implements TabSelectionListener {
openInPlayer.setOnAction(e -> play(first)); openInPlayer.setOnAction(e -> play(first));
if (first.getStatus() == FINISHED || Config.getInstance().getSettings().localRecording) { if (first.getStatus() == FINISHED || Config.getInstance().getSettings().localRecording) {
contextMenu.getItems().add(openInPlayer); 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"); MenuItem openContactSheet = new MenuItem("Open contact sheet");
@ -716,6 +748,10 @@ public class RecordingsTab extends Tab implements TabSelectionListener {
}).start(); }).start();
} }
private void play(Model model) {
new PlayAction(table, model).execute();
}
private void delete(List<JavaFxRecording> recordings) { private void delete(List<JavaFxRecording> recordings) {
table.setCursor(Cursor.WAIT); table.setCursor(Cursor.WAIT);
String msg; String msg;