Add open in player to menu in "Recording" tab
This commit is contained in:
parent
549181f5ed
commit
f7c581a517
|
@ -2,16 +2,22 @@ package ctbrec.ui;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import ctbrec.Config;
|
import ctbrec.Config;
|
||||||
import ctbrec.Hmac;
|
import ctbrec.Hmac;
|
||||||
|
import ctbrec.Model;
|
||||||
import ctbrec.OS;
|
import ctbrec.OS;
|
||||||
import ctbrec.Recording;
|
import ctbrec.Recording;
|
||||||
import ctbrec.io.DevNull;
|
import ctbrec.io.DevNull;
|
||||||
import ctbrec.io.StreamRedirectThread;
|
import ctbrec.io.StreamRedirectThread;
|
||||||
|
import ctbrec.recorder.download.StreamSource;
|
||||||
|
import javafx.application.Platform;
|
||||||
|
import javafx.scene.control.Alert;
|
||||||
|
|
||||||
public class Player {
|
public class Player {
|
||||||
private static final transient Logger LOG = LoggerFactory.getLogger(Player.class);
|
private static final transient Logger LOG = LoggerFactory.getLogger(Player.class);
|
||||||
|
@ -43,6 +49,39 @@ public class Player {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void play(Model model) {
|
||||||
|
try {
|
||||||
|
if(model.isOnline(true)) {
|
||||||
|
boolean singlePlayer = Config.getInstance().getSettings().singlePlayer;
|
||||||
|
if (singlePlayer && playerThread != null && playerThread.isRunning()) {
|
||||||
|
playerThread.stopThread();
|
||||||
|
}
|
||||||
|
List<StreamSource> sources = model.getStreamSources();
|
||||||
|
Collections.sort(sources);
|
||||||
|
StreamSource best = sources.get(sources.size()-1);
|
||||||
|
LOG.debug("Playing {}", best.getMediaPlaylistUrl());
|
||||||
|
Player.play(best.getMediaPlaylistUrl());
|
||||||
|
} else {
|
||||||
|
Platform.runLater(() -> {
|
||||||
|
Alert alert = new AutosizeAlert(Alert.AlertType.INFORMATION);
|
||||||
|
alert.setTitle("Room not public");
|
||||||
|
alert.setHeaderText("Room is currently not public");
|
||||||
|
alert.showAndWait();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} catch (Exception e1) {
|
||||||
|
LOG.error("Couldn't get stream information for model {}", model, e1);
|
||||||
|
Platform.runLater(() -> {
|
||||||
|
Alert alert = new AutosizeAlert(Alert.AlertType.ERROR);
|
||||||
|
alert.setTitle("Error");
|
||||||
|
alert.setHeaderText("Couldn't determine stream URL");
|
||||||
|
alert.setContentText(e1.getLocalizedMessage());
|
||||||
|
alert.showAndWait();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public static void stop() {
|
public static void stop() {
|
||||||
if (playerThread != null) {
|
if (playerThread != null) {
|
||||||
playerThread.stopThread();
|
playerThread.stopThread();
|
||||||
|
|
|
@ -315,16 +315,24 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener {
|
||||||
MenuItem openInBrowser = new MenuItem("Open in Browser");
|
MenuItem openInBrowser = new MenuItem("Open in Browser");
|
||||||
openInBrowser.setOnAction((e) -> DesktopIntegration.open(selectedModel.getUrl()));
|
openInBrowser.setOnAction((e) -> DesktopIntegration.open(selectedModel.getUrl()));
|
||||||
MenuItem openInPlayer = new MenuItem("Open in Player");
|
MenuItem openInPlayer = new MenuItem("Open in Player");
|
||||||
openInPlayer.setOnAction((e) -> Player.play(selectedModel.getUrl()));
|
openInPlayer.setOnAction((e) -> openInPlayer(selectedModel));
|
||||||
MenuItem switchStreamSource = new MenuItem("Switch resolution");
|
MenuItem switchStreamSource = new MenuItem("Switch resolution");
|
||||||
switchStreamSource.setOnAction((e) -> switchStreamSource(selectedModel));
|
switchStreamSource.setOnAction((e) -> switchStreamSource(selectedModel));
|
||||||
|
|
||||||
ContextMenu menu = new ContextMenu(stop);
|
ContextMenu menu = new ContextMenu(stop);
|
||||||
menu.getItems().add(selectedModel.isSuspended() ? resumeRecording : pauseRecording);
|
menu.getItems().add(selectedModel.isSuspended() ? resumeRecording : pauseRecording);
|
||||||
menu.getItems().addAll(copyUrl, openInBrowser, switchStreamSource);
|
menu.getItems().addAll(copyUrl, openInPlayer, openInBrowser, switchStreamSource);
|
||||||
return menu;
|
return menu;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void openInPlayer(JavaFxModel selectedModel) {
|
||||||
|
table.setCursor(Cursor.WAIT);
|
||||||
|
new Thread(() -> {
|
||||||
|
Player.play(selectedModel);
|
||||||
|
Platform.runLater(() -> table.setCursor(Cursor.DEFAULT));
|
||||||
|
}).start();
|
||||||
|
}
|
||||||
|
|
||||||
private void switchStreamSource(JavaFxModel fxModel) {
|
private void switchStreamSource(JavaFxModel fxModel) {
|
||||||
try {
|
try {
|
||||||
if(!fxModel.isOnline()) {
|
if(!fxModel.isOnline()) {
|
||||||
|
|
|
@ -2,8 +2,6 @@ package ctbrec.ui;
|
||||||
|
|
||||||
import java.io.EOFException;
|
import java.io.EOFException;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
import java.util.concurrent.ExecutionException;
|
import java.util.concurrent.ExecutionException;
|
||||||
|
@ -17,7 +15,6 @@ import com.iheartradio.m3u8.ParseException;
|
||||||
import ctbrec.Config;
|
import ctbrec.Config;
|
||||||
import ctbrec.Model;
|
import ctbrec.Model;
|
||||||
import ctbrec.recorder.Recorder;
|
import ctbrec.recorder.Recorder;
|
||||||
import ctbrec.recorder.download.StreamSource;
|
|
||||||
import javafx.animation.FadeTransition;
|
import javafx.animation.FadeTransition;
|
||||||
import javafx.animation.FillTransition;
|
import javafx.animation.FillTransition;
|
||||||
import javafx.animation.ParallelTransition;
|
import javafx.animation.ParallelTransition;
|
||||||
|
@ -300,32 +297,10 @@ public class ThumbCell extends StackPane {
|
||||||
}
|
}
|
||||||
|
|
||||||
void startPlayer() {
|
void startPlayer() {
|
||||||
|
setCursor(Cursor.WAIT);
|
||||||
new Thread(() -> {
|
new Thread(() -> {
|
||||||
try {
|
Player.play(model);
|
||||||
if(model.isOnline(true)) {
|
Platform.runLater(() -> setCursor(Cursor.DEFAULT));
|
||||||
List<StreamSource> sources = model.getStreamSources();
|
|
||||||
Collections.sort(sources);
|
|
||||||
StreamSource best = sources.get(sources.size()-1);
|
|
||||||
LOG.debug("Playing {}", best.getMediaPlaylistUrl());
|
|
||||||
Player.play(best.getMediaPlaylistUrl());
|
|
||||||
} else {
|
|
||||||
Platform.runLater(() -> {
|
|
||||||
Alert alert = new AutosizeAlert(Alert.AlertType.INFORMATION);
|
|
||||||
alert.setTitle("Room not public");
|
|
||||||
alert.setHeaderText("Room is currently not public");
|
|
||||||
alert.showAndWait();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
} catch (Exception e1) {
|
|
||||||
LOG.error("Couldn't get stream information for model {}", model, e1);
|
|
||||||
Platform.runLater(() -> {
|
|
||||||
Alert alert = new AutosizeAlert(Alert.AlertType.ERROR);
|
|
||||||
alert.setTitle("Error");
|
|
||||||
alert.setHeaderText("Couldn't determine stream URL");
|
|
||||||
alert.setContentText(e1.getLocalizedMessage());
|
|
||||||
alert.showAndWait();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}).start();
|
}).start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue