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! "); } } } }