diff --git a/pom.xml b/pom.xml
index bb2e83f..6814065 100644
--- a/pom.xml
+++ b/pom.xml
@@ -76,13 +76,13 @@
org.apache.logging.log4j
log4j-api
- 2.17.0
+ 2.17.1
org.apache.logging.log4j
log4j-core
- 2.17.0
+ 2.17.1
diff --git a/src/main/java/org/mosad/homeflix/application/Main.java b/src/main/java/org/mosad/homeflix/application/Main.java
index ab33544..4f76d2d 100644
--- a/src/main/java/org/mosad/homeflix/application/Main.java
+++ b/src/main/java/org/mosad/homeflix/application/Main.java
@@ -1,7 +1,7 @@
/**
* Project-HomeFlix
*
- * Copyright 2016-2019 <@Seil0>
+ * Copyright 2016-2022 <@Seil0>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/main/java/org/mosad/homeflix/application/MainWindowController.java b/src/main/java/org/mosad/homeflix/application/MainWindowController.java
index 3ff34a8..d101d84 100644
--- a/src/main/java/org/mosad/homeflix/application/MainWindowController.java
+++ b/src/main/java/org/mosad/homeflix/application/MainWindowController.java
@@ -1,7 +1,7 @@
/**
* Project-HomeFlix
*
- * Copyright 2016-2019 <@Seil0>
+ * Copyright 2016-2022 <@Seil0>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/main/java/org/mosad/homeflix/application/SettingsView.java b/src/main/java/org/mosad/homeflix/application/SettingsView.java
index 6b15d0a..2b90beb 100644
--- a/src/main/java/org/mosad/homeflix/application/SettingsView.java
+++ b/src/main/java/org/mosad/homeflix/application/SettingsView.java
@@ -1,7 +1,7 @@
/**
* Project-HomeFlix
*
- * Copyright 2016-2019 <@Seil0>
+ * Copyright 2016-2022 <@Seil0>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/main/java/org/mosad/homeflix/application/view/FilmDetailView.java b/src/main/java/org/mosad/homeflix/application/view/FilmDetailView.java
index 06f8bb1..0ff894f 100644
--- a/src/main/java/org/mosad/homeflix/application/view/FilmDetailView.java
+++ b/src/main/java/org/mosad/homeflix/application/view/FilmDetailView.java
@@ -1,7 +1,7 @@
/**
* Project-HomeFlix
*
- * Copyright 2016-2019 <@Seil0>
+ * Copyright 2016-2022 <@Seil0>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/main/java/org/mosad/homeflix/application/view/SeriesDetailView.java b/src/main/java/org/mosad/homeflix/application/view/SeriesDetailView.java
index 9da00e8..331c88a 100644
--- a/src/main/java/org/mosad/homeflix/application/view/SeriesDetailView.java
+++ b/src/main/java/org/mosad/homeflix/application/view/SeriesDetailView.java
@@ -1,7 +1,7 @@
/**
* Project-HomeFlix
*
- * Copyright 2016-2019 <@Seil0>
+ * Copyright 2016-2022 <@Seil0>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/main/java/org/mosad/homeflix/controller/DBController.java b/src/main/java/org/mosad/homeflix/controller/DBController.java
index 9b70cde..8a8d5ac 100644
--- a/src/main/java/org/mosad/homeflix/controller/DBController.java
+++ b/src/main/java/org/mosad/homeflix/controller/DBController.java
@@ -1,7 +1,7 @@
/**
* Project-HomeFlix
*
- * Copyright 2016-2019 <@Seil0>
+ * Copyright 2016-2022 <@Seil0>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/main/java/org/mosad/homeflix/controller/SourcesController.java b/src/main/java/org/mosad/homeflix/controller/SourcesController.java
index a88b957..8b4e783 100644
--- a/src/main/java/org/mosad/homeflix/controller/SourcesController.java
+++ b/src/main/java/org/mosad/homeflix/controller/SourcesController.java
@@ -1,7 +1,7 @@
/**
* Project-HomeFlix
*
- * Copyright 2016-2019 <@Seil0>
+ * Copyright 2016-2022 <@Seil0>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/main/java/org/mosad/homeflix/controller/XMLController.java b/src/main/java/org/mosad/homeflix/controller/XMLController.java
index fbe1f5a..2fee842 100644
--- a/src/main/java/org/mosad/homeflix/controller/XMLController.java
+++ b/src/main/java/org/mosad/homeflix/controller/XMLController.java
@@ -1,7 +1,7 @@
/**
* Project-HomeFlix
*
- * Copyright 2016-2019 <@Seil0>
+ * Copyright 2016-2022 <@Seil0>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/main/java/org/mosad/homeflix/datatypes/DatabaseDataType.java b/src/main/java/org/mosad/homeflix/datatypes/DatabaseDataType.java
index 8dd08e6..5763f4b 100644
--- a/src/main/java/org/mosad/homeflix/datatypes/DatabaseDataType.java
+++ b/src/main/java/org/mosad/homeflix/datatypes/DatabaseDataType.java
@@ -1,7 +1,7 @@
/**
* Project-HomeFlix
*
- * Copyright 2016-2019 <@Seil0>
+ * Copyright 2016-2022 <@Seil0>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/main/java/org/mosad/homeflix/datatypes/FilmTabelDataType.java b/src/main/java/org/mosad/homeflix/datatypes/FilmTabelDataType.java
index 68f50cc..c1dd12d 100644
--- a/src/main/java/org/mosad/homeflix/datatypes/FilmTabelDataType.java
+++ b/src/main/java/org/mosad/homeflix/datatypes/FilmTabelDataType.java
@@ -1,7 +1,7 @@
/**
* Project-HomeFlix
*
- * Copyright 2016-2019 <@Seil0>
+ * Copyright 2016-2022 <@Seil0>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/main/java/org/mosad/homeflix/datatypes/PosterModeElement.java b/src/main/java/org/mosad/homeflix/datatypes/PosterModeElement.java
index bbe6a75..78412fa 100644
--- a/src/main/java/org/mosad/homeflix/datatypes/PosterModeElement.java
+++ b/src/main/java/org/mosad/homeflix/datatypes/PosterModeElement.java
@@ -1,7 +1,7 @@
/**
* Project-HomeFlix
*
- * Copyright 2016-2019 <@Seil0>
+ * Copyright 2016-2022 <@Seil0>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/main/java/org/mosad/homeflix/datatypes/SourceDataType.java b/src/main/java/org/mosad/homeflix/datatypes/SourceDataType.java
index 6ffedec..9be00f2 100644
--- a/src/main/java/org/mosad/homeflix/datatypes/SourceDataType.java
+++ b/src/main/java/org/mosad/homeflix/datatypes/SourceDataType.java
@@ -1,7 +1,7 @@
/**
* Project-HomeFlix
*
- * Copyright 2016-2019 <@Seil0>
+ * Copyright 2016-2022 <@Seil0>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/main/java/org/mosad/homeflix/player/HFMediaPlayerEventListener.java b/src/main/java/org/mosad/homeflix/player/HFMediaPlayerEventListener.java
index 6828556..72e45ac 100644
--- a/src/main/java/org/mosad/homeflix/player/HFMediaPlayerEventListener.java
+++ b/src/main/java/org/mosad/homeflix/player/HFMediaPlayerEventListener.java
@@ -1,7 +1,7 @@
/**
* Project-HomeFlix
*
- * Copyright 2016-2020
+ * Copyright 2016-2022
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/main/java/org/mosad/homeflix/player/Player.java b/src/main/java/org/mosad/homeflix/player/Player.java
index 99bb532..3dbb504 100644
--- a/src/main/java/org/mosad/homeflix/player/Player.java
+++ b/src/main/java/org/mosad/homeflix/player/Player.java
@@ -1,7 +1,7 @@
/**
* Project-HomeFlix
*
- * Copyright 2016-2020
+ * Copyright 2016-2022
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/main/java/org/mosad/homeflix/player/PlayerController.java b/src/main/java/org/mosad/homeflix/player/PlayerController.java
index b69000f..7fcb9f6 100644
--- a/src/main/java/org/mosad/homeflix/player/PlayerController.java
+++ b/src/main/java/org/mosad/homeflix/player/PlayerController.java
@@ -1,7 +1,7 @@
/**
* Project-HomeFlix
*
- * Copyright 2016-2020
+ * Copyright 2016-2022
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -28,13 +28,13 @@ import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.TimeUnit;
-
import org.mosad.homeflix.controller.DBController;
import org.mosad.homeflix.controller.XMLController;
import org.mosad.homeflix.datatypes.FilmTabelDataType;
import com.jfoenix.controls.JFXButton;
import com.jfoenix.controls.JFXDialogLayout;
+import com.jfoenix.controls.JFXListCell;
import com.jfoenix.controls.JFXListView;
import com.jfoenix.controls.JFXPopup;
import com.jfoenix.controls.JFXPopup.PopupHPosition;
@@ -61,6 +61,8 @@ import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
+import javafx.scene.text.Font;
+import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.util.StringConverter;
import uk.co.caprica.vlcj.factory.MediaPlayerFactory;
@@ -125,8 +127,10 @@ public class PlayerController {
private long endTime = 0;
private long skipTime = 0;
private long duration = 0;
- private List tracks = new ArrayList<>();
- private int currentTrack = 0;
+ private List audioTracks = new ArrayList<>();
+ private List subtitleTracks = new ArrayList<>();
+ private int currentAudioTrack = 0;
+ private int currentSubtitleTrack = 0;
private int season = 0;
private int episode = 0;
@@ -244,8 +248,10 @@ public class PlayerController {
@Override
public void mediaPlayerReady(MediaPlayer mediaPlayer) {
- tracks = mediaPlayer.audio().trackDescriptions();
- currentTrack = mediaPlayer.audio().track();
+ audioTracks = mediaPlayer.audio().trackDescriptions();
+ subtitleTracks = mediaPlayer.subpictures().trackDescriptions();
+ currentAudioTrack = mediaPlayer.audio().track();
+ currentSubtitleTrack = mediaPlayer.subpictures().track();
}
@Override
@@ -440,7 +446,8 @@ public class PlayerController {
@FXML
void btnReplayAction(ActionEvent event) {
embeddedMediaPlayer.controls().skipTime(-10000);
-
+
+ // update currentTime, endTime and controls if play back is paused
if (!embeddedMediaPlayer.status().isPlaying()) {
currentTime = currentTime - 10000;
endTime = endTime + 10000;
@@ -455,6 +462,7 @@ public class PlayerController {
void btnForwardAction(ActionEvent event) {
embeddedMediaPlayer.controls().skipTime(10000);
+ // update currentTime, endTime and controls if play back is paused
if (!embeddedMediaPlayer.status().isPlaying()) {
currentTime = currentTime + 10000;
endTime = endTime - 10000;
@@ -470,24 +478,53 @@ public class PlayerController {
if (audioPopup == null) {
audioPopup = new JFXPopup();
- JFXListView list = new JFXListView();
- tracks.forEach(track -> {
- list.getItems().add(track.description());
- });
-
- list.getSelectionModel().select(currentTrack);
- list.setOnMouseClicked(ev -> {
- setAudioTrack(list.getSelectionModel().getSelectedIndex());
+ // audio track
+ JFXListView audioList = new JFXListView<>();
+ audioList.setCellFactory(param -> new TrackDescriptionCellFactory());
+ audioList.setOnMouseClicked(ev -> {
+ setAudioTrack(audioList.getSelectionModel().getSelectedItem().id());
audioPopup.hide();
});
- Text heading = new Text("Audio");
- heading.setFill(Color.WHITE);
+ audioTracks.forEach(track -> {
+ audioList.getItems().add(track);
+ if (track.id() == currentAudioTrack) {
+ audioList.getSelectionModel().select(track);
+ }
+ });
+
+
+ Text audioHeading = new Text("Audio");
+ audioHeading.setFill(Color.WHITE);
+ audioHeading.setFont(Font.font(null, FontWeight.BOLD, 16));
+
+ // subtitle track
+ JFXListView subtitleList = new JFXListView<>();
+ subtitleList.setCellFactory(param -> new TrackDescriptionCellFactory());
+ subtitleList.setOnMouseClicked(ev -> {
+ setSubtitleTrack(subtitleList.getSelectionModel().getSelectedItem().id());
+ audioPopup.hide();
+ });
+
+ subtitleTracks.forEach(track -> {
+ subtitleList.getItems().add(track);
+ if (track.id() == currentSubtitleTrack) {
+ subtitleList.getSelectionModel().select(track);
+ }
+ });
+
+ Text subtitleHeading = new Text("Subtitles");
+ subtitleHeading.setFill(Color.WHITE);
+ subtitleHeading.setFont(Font.font(null, FontWeight.BOLD, 16));
+
+
+ // build dialog layout
+ VBox audioBox = new VBox(audioHeading, audioList);
+ VBox subtileBox = new VBox(subtitleHeading, subtitleList);
+ HBox hbox = new HBox(audioBox, subtileBox);
JFXDialogLayout content = new JFXDialogLayout();
- content.setPrefSize(150, 200);
- content.setHeading(heading);
- content.setBody(list);
+ content.setBody(hbox);
content.setPadding(new Insets(-20, -20, -20, -20)); // fix JFXDialogLayout padding
content.setSpacing(-10); // fix JFXDialogLayout spacing
@@ -535,7 +572,12 @@ public class PlayerController {
*/
private void setAudioTrack(int track) {
embeddedMediaPlayer.audio().setTrack(track);
- currentTrack = track;
+ currentAudioTrack = track;
+ }
+
+ private void setSubtitleTrack(int track) {
+ embeddedMediaPlayer.subpictures().setTrack(track);
+ currentSubtitleTrack = track;
}
public double getCurrentTime() {
@@ -576,4 +618,18 @@ public class PlayerController {
Platform.runLater(() -> videoPixelBuffer.updateBuffer(pb -> null));
}
}
+
+ private class TrackDescriptionCellFactory extends JFXListCell {
+
+ @Override
+ protected void updateItem(TrackDescription item, boolean empty) {
+ super.updateItem(item, empty);
+
+ if (empty || item == null || item.description() == null) {
+ setText(null);
+ } else {
+ setText(item.description());
+ }
+ }
+ }
}