diff --git a/pom.xml b/pom.xml index 1e91303..000963b 100644 --- a/pom.xml +++ b/pom.xml @@ -45,7 +45,7 @@ uk.co.caprica vlcj - 4.4.0 + 4.5.1 diff --git a/src/main/java/kellerkinder/HomeFlix/player/PlayerController.java b/src/main/java/kellerkinder/HomeFlix/player/PlayerController.java index 1cdc86e..92c506d 100644 --- a/src/main/java/kellerkinder/HomeFlix/player/PlayerController.java +++ b/src/main/java/kellerkinder/HomeFlix/player/PlayerController.java @@ -25,6 +25,7 @@ package kellerkinder.HomeFlix.player; import java.nio.ByteBuffer; import java.util.Timer; import java.util.TimerTask; +import java.util.concurrent.TimeUnit; import com.jfoenix.controls.JFXButton; import com.jfoenix.controls.JFXSlider; @@ -36,6 +37,7 @@ import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.fxml.FXML; import javafx.scene.Cursor; +import javafx.scene.control.Label; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.image.PixelBuffer; @@ -45,11 +47,9 @@ import javafx.scene.input.MouseEvent; import javafx.scene.layout.HBox; import javafx.scene.layout.VBox; import javafx.scene.media.MediaView; - import kellerkinder.HomeFlix.controller.DBController; import kellerkinder.HomeFlix.controller.XMLController; import kellerkinder.HomeFlix.datatypes.FilmTabelDataType; - import uk.co.caprica.vlcj.factory.MediaPlayerFactory; import uk.co.caprica.vlcj.player.base.MediaPlayer; import uk.co.caprica.vlcj.player.embedded.EmbeddedMediaPlayer; @@ -65,9 +65,10 @@ public class PlayerController { @FXML private MediaView mediaView; @FXML private ImageView videoImageView; - @FXML private VBox bottomVBox; - + @FXML private HBox hBoxTop; @FXML private HBox controlsHBox; + + @FXML private VBox bottomVBox; @FXML private JFXSlider timeSlider; @@ -79,6 +80,9 @@ public class PlayerController { @FXML private ImageView stopIcon; @FXML private ImageView playIcon; @FXML private ImageView fullscreenIcon; + + @FXML private Label lblTitle; + @FXML private Label lblEndTime; private Player player; private MediaPlayerFactory mediaPlayerFactory; @@ -130,11 +134,53 @@ public class PlayerController { season = !film.getSeason().isEmpty() ? Integer.parseInt(film.getSeason()) : 0; episode = !film.getEpisode().isEmpty() ? Integer.parseInt(film.getEpisode()) : 0; + lblTitle.setText(film.getTitle()); + initPlayerWindow(); initMediaPlayer(); initSlider(); } + /** + * initialize some PlayerWindow GUI-Elements actions + */ + private void initPlayerWindow() { + + player.getScene().addEventFilter(MouseEvent.MOUSE_MOVED, new EventHandler() { + + // hide controls timer initialization + final Timer timer = new Timer(); + TimerTask controlAnimationTask = null; // task to execute save operation + final long delayTime = 3000; // hide the controls after 2 seconds + + @Override + public void handle(MouseEvent mouseEvent) { + + // show controls + if (!showControls) { + player.getScene().setCursor(Cursor.DEFAULT); + hBoxTop.setVisible(true); + bottomVBox.setVisible(true); + } + + // hide controls + if (controlAnimationTask != null) + controlAnimationTask.cancel(); + + controlAnimationTask = new TimerTask() { + @Override + public void run() { + hBoxTop.setVisible(false); + bottomVBox.setVisible(false); + player.getScene().setCursor(Cursor.NONE); + showControls = false; + } + }; + timer.schedule(controlAnimationTask, delayTime); + } + }); + } + private void initMediaPlayer() { embeddedMediaPlayer.events().addMediaPlayerEventListener( new HFMediaPlayerEventListener() { @@ -188,44 +234,6 @@ public class PlayerController { }); } - /** - * initialize some PlayerWindow GUI-Elements actions - */ - private void initPlayerWindow() { - - player.getScene().addEventFilter(MouseEvent.MOUSE_MOVED, new EventHandler() { - - // hide controls timer initialization - final Timer timer = new Timer(); - TimerTask controlAnimationTask = null; // task to execute save operation - final long delayTime = 3000; // hide the controls after 2 seconds - - @Override - public void handle(MouseEvent mouseEvent) { - - // show controls - if (!showControls) { - player.getScene().setCursor(Cursor.DEFAULT); - bottomVBox.setVisible(true); - } - - // hide controls - if (controlAnimationTask != null) - controlAnimationTask.cancel(); - - controlAnimationTask = new TimerTask() { - @Override - public void run() { - bottomVBox.setVisible(false); - player.getScene().setCursor(Cursor.NONE); - showControls = false; - } - }; - timer.schedule(controlAnimationTask, delayTime); - } - }); - } - public void start() { embeddedMediaPlayer.media().play(film.getStreamUrl()); embeddedMediaPlayer.controls().skipTime((long) startTime); // skipt to the start time @@ -247,9 +255,13 @@ public class PlayerController { timeSlider.setValue((currentTime / 1000) / 60); } - // TODO update endTime label + // update endTime label + lblEndTime.setText(String.format("%d:%02d:%02d", + TimeUnit.MILLISECONDS.toHours(endTime) % 24, + TimeUnit.MILLISECONDS.toMinutes(endTime) % 60, + TimeUnit.MILLISECONDS.toSeconds(endTime) % 60)); - System.out.println(endTime / 1000); + // show the next episode button 20 seconds before the end of a episode if (endTime < 21000 && episode != 0 && autoplay) { int countdown = (int) ((endTime / 1000) - 10); // a 10 seconds countdown @@ -300,10 +312,10 @@ public class PlayerController { @FXML void nextEpBtnAction(ActionEvent event) { - autoPlayNewFilm(); // TODO + playNextMedia(); // TODO } - private void autoPlayNewFilm() { + private void playNextMedia() { autoplay = false; DBController.getInstance().setCurrentTime(film.getStreamUrl(), 0); // reset old video start time FilmTabelDataType nextFilm = DBController.getInstance().getNextEpisode(film.getTitle(), episode, season); diff --git a/src/main/resources/fxml/PlayerWindow.fxml b/src/main/resources/fxml/PlayerWindow.fxml index 2e89abe..662d461 100644 --- a/src/main/resources/fxml/PlayerWindow.fxml +++ b/src/main/resources/fxml/PlayerWindow.fxml @@ -3,6 +3,7 @@ + @@ -19,13 +20,41 @@ + + + + + + + + + + + + + - + + + + + + + + + + + - + - +