Project-HomeFlix/src/main/java/kellerkinder/HomeFlix/application/FilmDetailView.java

248 lines
7.1 KiB
Java

package kellerkinder.HomeFlix.application;
import java.awt.Desktop;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import com.jfoenix.controls.JFXButton;
import javafx.animation.FadeTransition;
import javafx.fxml.FXML;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.AnchorPane;
import javafx.scene.text.Text;
import javafx.util.Duration;
import kellerkinder.HomeFlix.controller.DBController;
import kellerkinder.HomeFlix.controller.XMLController;
import kellerkinder.HomeFlix.player.Player;
public class FilmDetailView {
@FXML private AnchorPane filmDVPane;
@FXML private Label lblTitle;
@FXML private Label lblYear;
@FXML private Label lblScore;
@FXML private Label lblCrew;
@FXML private Label lblDirectors;
@FXML private Label lblDirectorsInfo;
@FXML private Label lblWriters;
@FXML private Label lblWritersInfo;
@FXML private Label lblActors;
@FXML private Label lblActorsInfo;
@FXML private Label lblInfo;
@FXML private Label lblRuntimeInfo;
@FXML private Label lblRuntime;
@FXML private Label lblLanguageInfo;
@FXML private Label lblLanguage;
@FXML private Label lblRevenueInfo;
@FXML private Label lblRevenue;
@FXML private Label lblRatingInfo;
@FXML private Label lblRating;
@FXML private JFXButton btnWishlist;
@FXML private JFXButton btnFavourite;
@FXML private JFXButton btnHide;
@FXML private JFXButton btnPlay;
@FXML private JFXButton btnDirectory;
@FXML private ImageView wishlistIcon;
@FXML private ImageView favoriteIcon;
@FXML private ImageView imgPoster;
@FXML private Text textPlot;
private DBController dbController;
private static final Logger LOGGER = LogManager.getLogger(FilmDetailView.class.getName());
private String currentStreamURL;
public void initialize() {
dbController = DBController.getInstance();
filmDVPane.setStyle("-fx-background-color: rgba(89,89,89,0.9);");
}
@FXML
private void btnWishlistAction() {
}
@FXML
private void btnFavouriteAction() {
dbController.toggleFavoriteState(currentStreamURL);
// update the favorite icon
if(dbController.getFavoriteState(currentStreamURL) == 1) {
favoriteIcon.setImage(new Image("icons/baseline_favorite_black_48dp.png"));
} else {
favoriteIcon.setImage(new Image("icons/baseline_favorite_border_black_48dp.png"));
}
}
@FXML
private void btnHideAction() {
hidePane();
}
@FXML
private void btnPlayAction() {
playFilm();
}
@FXML
private void btnDirectoryAction() {
File dest = new File(currentStreamURL).getParentFile();
if (!System.getProperty("os.name").contains("Linux")) {
try {
Desktop.getDesktop().open(dest);
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* set the cached data of a stream to the FilmDetailView
* @param streamURL URL of the stream
*/
public void setFilm(String streamURL) {
currentStreamURL = streamURL;
String[] cacheInfo = dbController.readCache(streamURL); // get the cache data from the database
// add the cache data to the GUI
lblTitle.setText(cacheInfo[0]);
lblYear.setText("(" + cacheInfo[1] + ")");
lblScore.setText(XMLController.getLocalBundle().getString("score") + ": " + cacheInfo[15] + "%");
textPlot.setText(cacheInfo[11]);
lblDirectors.setText(cacheInfo[8]);
lblWriters.setText(cacheInfo[9]);
lblActors.setText(cacheInfo[10]);
lblRuntime.setText(cacheInfo[6]);
lblLanguage.setText(cacheInfo[12]);
lblRevenue.setText(cacheInfo[18]);
lblRating.setText(cacheInfo[2]);
try {
if (new File(cacheInfo[20]).isFile()) {
imgPoster.setImage(new Image(new File(cacheInfo[20]).toURI().toString()));
} else {
imgPoster.setImage(new Image(cacheInfo[20]));
}
} catch (Exception e) {
imgPoster.setImage(new Image("icons/Homeflix_Poster.png"));
LOGGER.error("No Poster found, useing default.");
}
// set the favorite correct icon
if(dbController.getFavoriteState(streamURL) == 1) {
favoriteIcon.setImage(new Image("icons/baseline_favorite_black_48dp.png"));
} else {
favoriteIcon.setImage(new Image("icons/baseline_favorite_border_black_48dp.png"));
}
}
/**
* update the text of all static GUI elements of FilmDeatilView
*/
public void updateGUILocal() {
lblCrew.setText(XMLController.getLocalBundle().getString("crew"));
lblDirectorsInfo.setText(XMLController.getLocalBundle().getString("directors"));
lblWritersInfo.setText(XMLController.getLocalBundle().getString("writers"));
lblActorsInfo.setText(XMLController.getLocalBundle().getString("actors"));
lblInfo.setText(XMLController.getLocalBundle().getString("info"));
lblRuntimeInfo.setText(XMLController.getLocalBundle().getString("runtime"));
lblLanguageInfo.setText(XMLController.getLocalBundle().getString("language"));
lblRevenueInfo.setText(XMLController.getLocalBundle().getString("boxOffice"));
lblRatingInfo.setText(XMLController.getLocalBundle().getString("rated"));
}
/**
* show the FilmDVpane
*/
public void showPane() {
filmDVPane.setVisible(true);
FadeTransition fadeIn = new FadeTransition(Duration.millis(300), filmDVPane);
fadeIn.setFromValue(0.3);
fadeIn.setToValue(1.0);
fadeIn.play();
}
/**
* hide the FilmDVpane
*/
private void hidePane() {
FadeTransition fadeOut = new FadeTransition(Duration.millis(200), filmDVPane);
fadeOut.setFromValue(1.0);
fadeOut.setToValue(0.3);
fadeOut.play();
filmDVPane.setVisible(false);
MainWindowController.getInstance().disableBlur(); // disable blur
}
// TODO rework
private void playFilm() {
if(new File(currentStreamURL).isDirectory()) {
return;
}
if (Player.isSupportedFormat(currentStreamURL)) {
new Player(currentStreamURL);
} else {
LOGGER.error("using fallback player!");
if (System.getProperty("os.name").contains("Linux")) {
String line;
String output = "";
Process p;
try {
p = Runtime.getRuntime().exec("which vlc");
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((line = input.readLine()) != null) {
output = line;
}
LOGGER.info("which vlc: " + output);
input.close();
} catch (IOException e1) {
e1.printStackTrace();
}
if (output.contains("which: no vlc") || output == "") {
// JFXInfoAlert vlcInfoAlert = new JFXInfoAlert("Info",
// XMLController.getLocalBundle().getString("vlcNotInstalled"), btnStyle, primaryStage);
// vlcInfoAlert.showAndWait();
} else {
try {
new ProcessBuilder("vlc", currentStreamURL).start();
} catch (IOException e) {
LOGGER.warn("An error has occurred while opening the file!", e);
}
}
} else if (System.getProperty("os.name").contains("Windows") || System.getProperty("os.name").contains("Mac OS X")) {
try {
Desktop.getDesktop().open(new File(currentStreamURL));
} catch (IOException e) {
LOGGER.warn("An error has occurred while opening the file!", e);
}
} else {
LOGGER.error(System.getProperty("os.name") + ", OS is not supported, please contact a developer! ");
}
}
}
}