2019-06-21 21:16:53 +02:00
/ * *
* Project - HomeFlix
*
* Copyright 2016 - 2019 < @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
* the Free Software Foundation ; either version 3 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 51 Franklin Street , Fifth Floor , Boston ,
* MA 02110 - 1301 , USA .
*
* /
2019-06-16 13:00:29 +02:00
package kellerkinder.HomeFlix.application ;
2019-06-16 21:44:42 +02:00
import java.awt.Desktop ;
2019-06-17 00:44:44 +02:00
import java.io.BufferedReader ;
2019-06-16 21:44:42 +02:00
import java.io.File ;
import java.io.IOException ;
2019-06-17 00:44:44 +02:00
import java.io.InputStreamReader ;
2019-06-16 21:44:42 +02:00
import org.apache.logging.log4j.LogManager ;
import org.apache.logging.log4j.Logger ;
2019-06-16 15:23:17 +02:00
import com.jfoenix.controls.JFXButton ;
2019-06-16 21:44:42 +02:00
import javafx.animation.FadeTransition ;
2019-06-16 13:00:29 +02:00
import javafx.fxml.FXML ;
import javafx.scene.control.Label ;
2019-06-16 15:23:17 +02:00
import javafx.scene.image.Image ;
import javafx.scene.image.ImageView ;
import javafx.scene.layout.AnchorPane ;
import javafx.scene.text.Text ;
2019-06-16 21:44:42 +02:00
import javafx.util.Duration ;
import kellerkinder.HomeFlix.controller.DBController ;
import kellerkinder.HomeFlix.controller.XMLController ;
2019-06-17 00:44:44 +02:00
import kellerkinder.HomeFlix.player.Player ;
2019-06-16 13:00:29 +02:00
public class FilmDetailView {
2019-06-16 15:23:17 +02:00
@FXML private AnchorPane filmDVPane ;
2019-06-16 21:44:42 +02:00
2019-06-16 15:23:17 +02:00
@FXML private Label lblTitle ;
@FXML private Label lblYear ;
@FXML private Label lblScore ;
2019-06-16 21:44:42 +02:00
@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 ;
2019-06-16 15:23:17 +02:00
@FXML private JFXButton btnFavourite ;
2019-06-16 21:44:42 +02:00
@FXML private JFXButton btnHide ;
@FXML private JFXButton btnPlay ;
@FXML private JFXButton btnDirectory ;
2019-06-17 00:44:44 +02:00
@FXML private ImageView wishlistIcon ;
2019-06-16 21:44:42 +02:00
@FXML private ImageView favoriteIcon ;
@FXML private ImageView imgPoster ;
2019-06-16 15:23:17 +02:00
@FXML private Text textPlot ;
2019-06-16 13:00:29 +02:00
2019-06-16 21:44:42 +02:00
private DBController dbController ;
private static final Logger LOGGER = LogManager . getLogger ( FilmDetailView . class . getName ( ) ) ;
private String currentStreamURL ;
2019-06-16 13:00:29 +02:00
public void initialize ( ) {
2019-06-16 21:44:42 +02:00
dbController = DBController . getInstance ( ) ;
2019-06-16 15:23:17 +02:00
filmDVPane . setStyle ( " -fx-background-color: rgba(89,89,89,0.9); " ) ;
2019-06-16 13:00:29 +02:00
}
2019-06-16 21:44:42 +02:00
@FXML
private void btnWishlistAction ( ) {
2019-06-16 13:00:29 +02:00
}
2019-06-16 15:23:17 +02:00
@FXML
2019-06-16 21:44:42 +02:00
private void btnFavouriteAction ( ) {
dbController . toggleFavoriteState ( currentStreamURL ) ;
2019-06-16 15:23:17 +02:00
2019-06-16 21:44:42 +02:00
// 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 " ) ) ;
}
2019-06-16 15:23:17 +02:00
}
@FXML
2019-06-16 21:44:42 +02:00
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
}
2019-06-17 00:44:44 +02:00
// TODO rework
2019-06-16 21:44:42 +02:00
private void playFilm ( ) {
2019-06-17 00:44:44 +02:00
if ( new File ( currentStreamURL ) . isDirectory ( ) ) {
return ;
}
2019-06-16 15:23:17 +02:00
2019-06-17 00:44:44 +02:00
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! " ) ;
}
}
2019-06-16 15:23:17 +02:00
}
2019-06-16 13:00:29 +02:00
}