2016-08-14 15:17:14 +02:00
/ * *
* Project HomeFlix
*
2017-02-09 20:39:43 +01:00
* Copyright 2016 - 2017 < admin @kellerkinder >
2016-08-14 15:17:14 +02:00
*
* 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 .
*
* /
package application ;
import java.awt.Desktop ;
import java.io.BufferedReader ;
import java.io.File ;
import java.io.FileInputStream ;
import java.io.FileOutputStream ;
import java.io.IOException ;
import java.io.InputStream ;
import java.io.InputStreamReader ;
import java.io.OutputStream ;
2016-11-12 15:02:55 +01:00
import java.io.PrintWriter ;
import java.io.StringWriter ;
2016-08-14 15:17:14 +02:00
import java.math.BigInteger ;
2016-09-09 20:41:20 +02:00
import java.net.URI ;
import java.net.URISyntaxException ;
2017-01-06 00:04:07 +01:00
import java.sql.SQLException ;
2017-03-05 18:29:24 +01:00
import java.util.ArrayList ;
2016-08-14 15:17:14 +02:00
import java.util.Locale ;
import java.util.Properties ;
import java.util.ResourceBundle ;
import com.jfoenix.controls.JFXButton ;
import com.jfoenix.controls.JFXColorPicker ;
import com.jfoenix.controls.JFXSlider ;
import com.jfoenix.controls.JFXTextField ;
import com.jfoenix.controls.JFXToggleButton ;
2016-10-10 16:55:26 +02:00
import javafx.animation.FadeTransition ;
import javafx.animation.ParallelTransition ;
import javafx.animation.TranslateTransition ;
2016-08-14 15:17:14 +02:00
import javafx.beans.value.ChangeListener ;
import javafx.beans.value.ObservableValue ;
import javafx.collections.FXCollections ;
import javafx.collections.ObservableList ;
2017-01-06 00:04:07 +01:00
import javafx.event.ActionEvent ;
import javafx.event.EventHandler ;
2016-08-14 15:17:14 +02:00
import javafx.fxml.FXML ;
import javafx.scene.control.Alert ;
import javafx.scene.control.Alert.AlertType ;
import javafx.scene.control.ChoiceBox ;
2017-01-06 00:04:07 +01:00
import javafx.scene.control.ContextMenu ;
2016-08-14 15:17:14 +02:00
import javafx.scene.control.Label ;
2017-01-06 00:04:07 +01:00
import javafx.scene.control.MenuItem ;
2017-03-05 18:29:24 +01:00
import javafx.scene.control.ScrollPane ;
2016-09-09 20:41:20 +02:00
import javafx.scene.control.TableColumn ;
import javafx.scene.control.TableView ;
2016-11-12 15:02:55 +01:00
import javafx.scene.control.TextArea ;
2016-08-14 15:17:14 +02:00
import javafx.scene.control.TreeItem ;
import javafx.scene.control.TreeTableColumn ;
2017-03-05 18:29:24 +01:00
import javafx.scene.control.TreeTableColumn.SortType ;
2016-08-14 15:17:14 +02:00
import javafx.scene.control.TreeTableView ;
import javafx.scene.image.Image ;
import javafx.scene.image.ImageView ;
import javafx.scene.layout.AnchorPane ;
2016-11-12 15:02:55 +01:00
import javafx.scene.layout.GridPane ;
2016-10-09 16:05:44 +02:00
import javafx.scene.layout.HBox ;
2016-11-12 15:02:55 +01:00
import javafx.scene.layout.Priority ;
2016-08-14 15:17:14 +02:00
import javafx.scene.layout.VBox ;
import javafx.scene.paint.Color ;
import javafx.scene.text.Font ;
2017-03-05 18:29:24 +01:00
import javafx.scene.text.TextFlow ;
2016-08-14 15:17:14 +02:00
import javafx.stage.DirectoryChooser ;
2016-10-10 16:55:26 +02:00
import javafx.util.Duration ;
2016-08-14 15:17:14 +02:00
2017-03-05 18:29:24 +01:00
public class MainWindowController {
2016-08-14 15:17:14 +02:00
@FXML
private AnchorPane anpane ;
@FXML
2016-10-09 18:35:55 +02:00
private AnchorPane settingsAnchor ;
2016-09-09 20:41:20 +02:00
@FXML
2016-10-09 18:35:55 +02:00
private AnchorPane streamingSettingsAnchor ;
2016-08-14 15:17:14 +02:00
@FXML
2016-10-09 16:05:44 +02:00
private HBox topHBox ;
2016-08-14 15:17:14 +02:00
@FXML
2016-10-09 16:05:44 +02:00
private VBox sideMenuVBox ;
2016-08-14 15:17:14 +02:00
@FXML
2017-03-06 17:59:44 +01:00
private TreeTableView < tableData > treeTableViewfilm ;
2016-09-09 20:41:20 +02:00
@FXML
2017-03-06 17:59:44 +01:00
private TableView < tableData > tableViewStreamingdata ;
2017-01-03 23:29:45 +01:00
@FXML
2017-03-05 18:29:24 +01:00
TextFlow textFlow ;
@FXML
ScrollPane scrollPane ;
@FXML
2017-04-30 23:17:55 +02:00
private JFXButton menubtn ; //TODO switch to hamburger menu
2016-08-14 15:17:14 +02:00
@FXML
private JFXButton playbtn ;
@FXML
private JFXButton openfolderbtn ;
@FXML
private JFXButton returnBtn ;
@FXML
private JFXButton forwardBtn ;
@FXML
2016-10-09 16:05:44 +02:00
private JFXButton infoBtn ;
2016-08-14 15:17:14 +02:00
@FXML
2016-10-09 16:05:44 +02:00
private JFXButton settingsBtn ;
2016-08-14 15:17:14 +02:00
@FXML
2016-10-09 16:05:44 +02:00
private JFXButton streamingSettingsBtn ;
2016-08-14 15:17:14 +02:00
@FXML
2016-10-09 16:05:44 +02:00
private JFXButton switchBtn ;
2016-09-09 20:41:20 +02:00
@FXML
2016-10-09 16:05:44 +02:00
private JFXButton debugBtn ;
2016-09-09 20:41:20 +02:00
@FXML
2016-12-01 18:24:58 +01:00
public JFXButton updateBtn ;
2016-09-09 20:41:20 +02:00
@FXML
2016-10-09 18:35:55 +02:00
private JFXButton directoryBtn ;
2016-08-14 15:17:14 +02:00
@FXML
2016-10-09 18:35:55 +02:00
private JFXButton streamingDirectoryBtn ;
2016-08-14 15:17:14 +02:00
@FXML
2016-10-09 18:35:55 +02:00
private JFXToggleButton autoupdateBtn ;
2016-08-14 15:17:14 +02:00
@FXML
2016-10-09 18:35:55 +02:00
public JFXTextField tfPath ;
2016-08-14 15:17:14 +02:00
@FXML
2016-10-09 18:35:55 +02:00
public JFXTextField tfStreamingPath ;
2016-09-09 20:41:20 +02:00
@FXML
2016-08-14 15:17:14 +02:00
private JFXTextField tfsearch ;
@FXML
2016-10-09 18:35:55 +02:00
public JFXColorPicker mainColor ;
2016-08-14 15:17:14 +02:00
@FXML
2017-03-05 18:29:24 +01:00
public ChoiceBox < String > cbLocal = new ChoiceBox < > ( ) ;
2016-08-14 15:17:14 +02:00
@FXML
2016-10-09 18:35:55 +02:00
public JFXSlider sliderFontSize ;
2016-08-14 15:17:14 +02:00
@FXML
2016-10-09 18:35:55 +02:00
private Label versionlbl ;
2016-08-14 15:17:14 +02:00
@FXML
2016-10-09 18:35:55 +02:00
private Label sizelbl ;
2016-08-14 15:17:14 +02:00
@FXML
2016-10-09 18:35:55 +02:00
private Label aulbl ;
2017-01-03 23:29:45 +01:00
@FXML
ImageView image1 ;
2017-02-02 20:41:38 +01:00
private ImageView imv1 ;
2016-08-14 15:17:14 +02:00
@FXML
2017-03-06 17:59:44 +01:00
TreeItem < tableData > root = new TreeItem < > ( new tableData ( 1 , 1 , 1 , 5 . 0 , " 1 " , " filme " , " 1 " , imv1 , false ) ) ;
2016-09-09 20:41:20 +02:00
@FXML
2017-03-06 17:59:44 +01:00
TreeTableColumn < tableData , ImageView > columnRating = new TreeTableColumn < > ( " Rating " ) ;
2016-09-09 20:41:20 +02:00
@FXML
2017-03-06 17:59:44 +01:00
TreeTableColumn < tableData , String > columnTitel = new TreeTableColumn < > ( " Titel " ) ;
2016-09-09 20:41:20 +02:00
@FXML
2017-03-06 17:59:44 +01:00
TreeTableColumn < tableData , String > columnStreamUrl = new TreeTableColumn < > ( " File Name " ) ;
2016-08-14 15:17:14 +02:00
@FXML
2017-03-06 17:59:44 +01:00
TreeTableColumn < tableData , String > columnResolution = new TreeTableColumn < > ( " Resolution " ) ;
2016-08-14 15:17:14 +02:00
@FXML
2017-03-06 17:59:44 +01:00
TreeTableColumn < tableData , Integer > columnYear = new TreeTableColumn < > ( " Year " ) ;
2016-08-14 15:17:14 +02:00
@FXML
2017-03-06 17:59:44 +01:00
TreeTableColumn < tableData , Integer > columnSeason = new TreeTableColumn < > ( " Season " ) ;
2016-10-10 16:55:26 +02:00
@FXML
2017-03-06 17:59:44 +01:00
TreeTableColumn < tableData , Integer > columnEpisode = new TreeTableColumn < > ( " Episode " ) ;
2016-09-09 20:41:20 +02:00
@FXML
2017-03-06 17:59:44 +01:00
private TreeItem < tableData > streamingRoot = new TreeItem < > ( new tableData ( 1 , 1 , 1 , 1 . 0 , " 1 " , " filme " , " 1 " , imv1 , false ) ) ;
2016-09-09 20:41:20 +02:00
@FXML
2017-03-06 17:59:44 +01:00
private TableColumn < tableData , String > dataNameColumn = new TableColumn < > ( " Datei Name " ) ;
2016-09-09 20:41:20 +02:00
@FXML
2017-03-06 17:59:44 +01:00
private TableColumn < tableData , String > dataNameEndColumn = new TableColumn < > ( " Datei Name mit Endung " ) ;
2016-08-14 15:17:14 +02:00
2017-04-30 23:17:55 +02:00
private boolean menutrue = false ; //saves the position of menuBtn (opened or closed)
2016-08-14 15:17:14 +02:00
private boolean settingstrue = false ;
2016-09-09 20:41:20 +02:00
private boolean streamingSettingsTrue = false ;
2017-03-25 16:20:48 +01:00
private boolean autoUpdate = false ;
2017-02-09 20:39:43 +01:00
static boolean firststart = false ;
2017-02-04 16:15:47 +01:00
private int hashA = - 2055934614 ;
2017-04-25 23:35:20 +02:00
private String version = " 0.5.1 " ;
2017-05-07 18:56:41 +02:00
private String buildNumber = " 127 " ;
2017-03-05 18:29:24 +01:00
private String versionName = " plasma cow " ;
2017-02-05 17:14:34 +01:00
private File dirWin = new File ( System . getProperty ( " user.home " ) + " /Documents/HomeFlix " ) ;
private File dirLinux = new File ( System . getProperty ( " user.home " ) + " /HomeFlix " ) ;
private File fileWin = new File ( dirWin + " /config.xml " ) ;
private File fileLinux = new File ( dirLinux + " /config.xml " ) ;
2016-08-14 15:17:14 +02:00
2016-12-01 18:24:58 +01:00
String errorUpdateD ;
String errorUpdateV ;
2017-03-25 16:20:48 +01:00
String noFilmFound ;
2016-08-15 18:36:57 +02:00
private String errorPlay ;
2016-10-09 16:05:44 +02:00
private String errorOpenStream ;
private String errorMode ;
2016-11-21 18:24:06 +01:00
private String errorLoad ;
private String errorSave ;
2016-08-14 15:17:14 +02:00
private String infoText ;
2016-08-15 18:36:57 +02:00
private String linuxBugText ;
private String vlcNotInstalled ;
2017-04-25 23:35:20 +02:00
private String currentWorkingDirectory ;
2016-08-14 15:17:14 +02:00
private String path ;
2016-09-09 20:41:20 +02:00
private String streamingPath ;
2016-08-14 15:17:14 +02:00
private String color ;
2017-03-06 17:59:44 +01:00
private String name ;
2016-08-14 15:17:14 +02:00
private String datPath ;
2017-01-06 00:04:07 +01:00
private String mode ;
@SuppressWarnings ( " unused " )
private String ratingSortType ;
2017-02-09 20:39:43 +01:00
private String local ;
2016-12-01 18:24:58 +01:00
String title ;
String year ;
String rating ;
String publishedOn ;
String duration ;
String genre ;
String director ;
String writer ;
String actors ;
String plot ;
String language ;
String country ;
String awards ;
String metascore ;
String imdbRating ;
String type ;
2017-03-09 22:26:37 +01:00
double size ;
2016-08-14 15:17:14 +02:00
private int last ;
private int selected ;
private int next ;
private File selectedFolder ;
2016-09-09 20:41:20 +02:00
private File selectedStreamingFolder ;
2016-12-01 18:24:58 +01:00
ResourceBundle bundle ;
2016-08-14 15:17:14 +02:00
2017-03-06 17:59:44 +01:00
private ObservableList < tableData > filterData = FXCollections . observableArrayList ( ) ;
2017-04-30 23:17:55 +02:00
private ObservableList < String > locals = FXCollections . observableArrayList ( " English (en_US) " , " Deutsch (de_DE) " ) ;
2017-03-06 17:59:44 +01:00
ObservableList < tableData > localFilms = FXCollections . observableArrayList ( ) ;
ObservableList < tableData > streamingFilms = FXCollections . observableArrayList ( ) ;
ObservableList < tableData > streamingData = FXCollections . observableArrayList ( ) ;
2017-06-04 20:24:08 +02:00
private ImageView menu_icon_black = new ImageView ( new Image ( " resources/icons/menu_icon_black.png " ) ) ;
private ImageView menu_icon_white = new ImageView ( new Image ( " resources/icons/menu_icon_white.png " ) ) ;
private ImageView skip_previous_white = new ImageView ( new Image ( " resources/icons/ic_skip_previous_white_18dp_1x.png " ) ) ;
private ImageView skip_previous_black = new ImageView ( new Image ( " resources/icons/ic_skip_previous_black_18dp_1x.png " ) ) ;
private ImageView skip_next_white = new ImageView ( new Image ( " resources/icons/ic_skip_next_white_18dp_1x.png " ) ) ;
private ImageView skip_next_black = new ImageView ( new Image ( " resources/icons/ic_skip_next_black_18dp_1x.png " ) ) ;
private ImageView play_arrow_white = new ImageView ( new Image ( " resources/icons/ic_play_arrow_white_18dp_1x.png " ) ) ;
private ImageView play_arrow_black = new ImageView ( new Image ( " resources/icons/ic_play_arrow_black_18dp_1x.png " ) ) ;
2016-08-14 15:17:14 +02:00
private DirectoryChooser directoryChooser = new DirectoryChooser ( ) ;
2017-01-06 00:04:07 +01:00
private MenuItem like = new MenuItem ( " like " ) ;
private MenuItem dislike = new MenuItem ( " dislike " ) ; //TODO one option (like or dislike)
2017-02-09 20:39:43 +01:00
private ContextMenu menu = new ContextMenu ( like , dislike ) ;
2016-08-14 15:17:14 +02:00
Properties props = new Properties ( ) ;
2017-03-20 22:32:54 +01:00
private Main main ;
2016-12-01 18:24:58 +01:00
private updater Updater ;
private apiQuery ApiQuery ;
2017-01-06 00:04:07 +01:00
DBController dbController ;
2016-12-01 18:24:58 +01:00
2016-08-14 15:17:14 +02:00
/ * *
* TODO change value of Text - color change
* /
@FXML
private void menubtnclicked ( ) {
if ( menutrue = = false ) {
2016-10-10 16:55:26 +02:00
sideMenuSlideIn ( ) ;
2016-08-14 15:17:14 +02:00
menutrue = true ;
} else {
2016-10-10 16:55:26 +02:00
sideMenuSlideOut ( ) ;
2016-08-14 15:17:14 +02:00
menutrue = false ;
}
if ( settingstrue = = true ) {
2016-10-09 18:35:55 +02:00
settingsAnchor . setVisible ( false ) ;
setPath ( tfPath . getText ( ) ) ;
2017-03-05 18:29:24 +01:00
saveSettings ( ) ;
2016-08-14 15:17:14 +02:00
settingstrue = false ;
}
2016-09-09 20:41:20 +02:00
if ( streamingSettingsTrue = = true ) {
2016-10-09 18:35:55 +02:00
streamingSettingsAnchor . setVisible ( false ) ;
2016-09-09 20:41:20 +02:00
streamingSettingsTrue = false ;
}
2016-08-14 15:17:14 +02:00
}
@FXML
private void playbtnclicked ( ) {
2017-03-28 17:36:05 +02:00
System . out . println ( System . getProperty ( " os.name " ) ) ;
if ( System . getProperty ( " os.name " ) . contains ( " Linux " ) ) {
System . out . println ( " This is " + System . getProperty ( " os.name " ) ) ;
2016-08-15 18:36:57 +02:00
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 ;
}
System . out . println ( output ) ;
input . close ( ) ;
} catch ( IOException e1 ) {
e1 . printStackTrace ( ) ;
}
if ( output . contains ( " which: no vlc " ) | | output = = " " ) {
Alert alert = new Alert ( AlertType . INFORMATION ) ;
alert . setHeaderText ( " " ) ;
alert . setTitle ( " Info " ) ;
alert . setContentText ( vlcNotInstalled ) ;
alert . showAndWait ( ) ;
} else if ( datPath . contains ( " " ) ) {
Alert alert = new Alert ( AlertType . INFORMATION ) ;
alert . setHeaderText ( " " ) ;
alert . setTitle ( " Info " ) ;
alert . setContentText ( linuxBugText ) ;
2017-03-20 22:32:54 +01:00
alert . initOwner ( main . primaryStage ) ;
2016-08-15 18:36:57 +02:00
alert . showAndWait ( ) ;
} else {
try {
Runtime . getRuntime ( ) . exec ( " vlc " + getPath ( ) + " / " + datPath ) ;
} catch ( IOException e ) {
2016-11-12 15:02:55 +01:00
showErrorMsg ( errorPlay , e ) ;
2016-08-15 18:36:57 +02:00
}
}
2017-03-28 17:36:05 +02:00
} else if ( System . getProperty ( " os.name " ) . contains ( " Windows " ) | | System . getProperty ( " os.name " ) . contains ( " Mac OS X " ) ) {
System . out . println ( " This is " + System . getProperty ( " os.name " ) ) ;
2016-09-09 20:41:20 +02:00
if ( mode . equals ( " local " ) ) {
try {
Desktop . getDesktop ( ) . open ( new File ( getPath ( ) + " \\ " + datPath ) ) ;
} catch ( IOException e ) {
2016-11-12 15:02:55 +01:00
showErrorMsg ( errorPlay , e ) ;
2016-09-09 20:41:20 +02:00
}
} else if ( mode . equals ( " streaming " ) ) {
try {
2017-03-06 17:59:44 +01:00
Desktop . getDesktop ( ) . browse ( new URI ( datPath ) ) ; //open the streaming URL in browser (TODO other option?)
2016-09-09 20:41:20 +02:00
} catch ( URISyntaxException | IOException e ) {
2016-11-12 15:02:55 +01:00
showErrorMsg ( errorOpenStream , ( IOException ) e ) ;
2016-09-09 20:41:20 +02:00
}
} else {
2016-11-12 15:02:55 +01:00
IOException e = new IOException ( " error " ) ;
showErrorMsg ( errorMode , e ) ;
2016-08-15 18:36:57 +02:00
}
2016-08-14 15:17:14 +02:00
}
}
@FXML
private void openfolderbtnclicked ( ) {
try {
2017-02-04 16:15:47 +01:00
Desktop . getDesktop ( ) . open ( new File ( getPath ( ) ) ) ; //open path when button is clicked
2016-08-14 15:17:14 +02:00
} catch ( IOException e ) {
e . printStackTrace ( ) ;
}
}
@FXML
private void returnBtnclicked ( ) {
treeTableViewfilm . getSelectionModel ( ) . select ( last ) ;
}
@FXML
private void forwardBtnclicked ( ) {
treeTableViewfilm . getSelectionModel ( ) . select ( next ) ;
}
2016-10-09 16:05:44 +02:00
@FXML
private void infoBtnclicked ( ) {
Alert alert = new Alert ( AlertType . INFORMATION ) ;
alert . setTitle ( " Info " ) ;
alert . setHeaderText ( " Project HomeFlix " ) ;
alert . setContentText ( infoText ) ;
2017-03-20 22:32:54 +01:00
alert . initOwner ( main . primaryStage ) ;
2016-10-09 16:05:44 +02:00
alert . showAndWait ( ) ;
}
@FXML
private void settingsBtnclicked ( ) {
if ( settingstrue = = false ) {
2016-10-09 18:35:55 +02:00
if ( streamingSettingsTrue = = true ) {
streamingSettingsAnchor . setVisible ( false ) ;
streamingSettingsTrue = false ;
}
settingsAnchor . setVisible ( true ) ;
2016-10-09 16:05:44 +02:00
settingstrue = true ;
} else {
2016-10-09 18:35:55 +02:00
settingsAnchor . setVisible ( false ) ;
setPath ( tfPath . getText ( ) ) ;
2017-03-05 18:29:24 +01:00
saveSettings ( ) ;
2016-10-09 16:05:44 +02:00
settingstrue = false ;
}
}
/ * *
2017-02-04 16:15:47 +01:00
* TODO additional info about the " streaming.json "
2016-10-09 16:05:44 +02:00
* /
@FXML
private void streamingSettingsBtnclicked ( ) {
if ( streamingSettingsTrue = = false ) {
2016-10-09 18:35:55 +02:00
if ( settingstrue = = true ) {
settingsAnchor . setVisible ( false ) ;
settingstrue = false ;
}
streamingSettingsAnchor . setVisible ( true ) ;
2016-10-09 16:05:44 +02:00
streamingSettingsTrue = true ;
} else {
2016-10-09 18:35:55 +02:00
streamingSettingsAnchor . setVisible ( false ) ;
2016-10-09 16:05:44 +02:00
streamingSettingsTrue = false ;
}
}
@FXML
private void switchBtnclicked ( ) {
if ( mode . equals ( " local " ) ) { //switch to streaming mode
setMode ( " streaming " ) ;
switchBtn . setText ( " local " ) ;
} else if ( mode . equals ( " streaming " ) ) { //switch to local mode
setMode ( " local " ) ;
switchBtn . setText ( " streaming " ) ;
}
2017-03-05 18:29:24 +01:00
saveSettings ( ) ;
2016-10-09 16:05:44 +02:00
root . getChildren ( ) . remove ( 0 , root . getChildren ( ) . size ( ) ) ;
addDataUI ( ) ;
2016-10-09 18:35:55 +02:00
settingsAnchor . setVisible ( false ) ;
streamingSettingsAnchor . setVisible ( false ) ;
2017-02-04 16:15:47 +01:00
sideMenuSlideOut ( ) ; //disables side-menu
2016-10-09 16:05:44 +02:00
menutrue = false ;
2016-10-09 18:35:55 +02:00
settingstrue = false ;
streamingSettingsTrue = false ;
2016-10-09 16:05:44 +02:00
}
@FXML
private void debugBtnclicked ( ) {
//for testing
}
2016-10-09 18:35:55 +02:00
@FXML
private void tfPathAction ( ) {
setPath ( tfPath . getText ( ) ) ;
2017-03-05 18:29:24 +01:00
saveSettings ( ) ;
2016-10-09 18:35:55 +02:00
}
@FXML
private void directoryBtnAction ( ) {
selectedFolder = directoryChooser . showDialog ( null ) ;
if ( selectedFolder = = null ) {
System . out . println ( " No Directory selected " ) ;
} else {
setPath ( selectedFolder . getAbsolutePath ( ) ) ;
2017-03-05 18:29:24 +01:00
saveSettings ( ) ;
2016-10-09 18:35:55 +02:00
tfPath . setText ( getPath ( ) ) ;
try {
2016-11-12 15:02:55 +01:00
Runtime . getRuntime ( ) . exec ( " java -jar ProjectHomeFlix.jar " ) ; //start again
System . exit ( 0 ) ; //finishes itself
2016-10-09 18:35:55 +02:00
} catch ( IOException e ) {
System . out . println ( " es ist ein Fehler aufgetreten " ) ;
e . printStackTrace ( ) ;
}
}
}
@FXML
private void mainColorAction ( ) {
editColor ( mainColor . getValue ( ) . toString ( ) ) ;
applyColor ( ) ;
}
@FXML
private void updateBtnAction ( ) {
2017-05-07 18:56:41 +02:00
Thread updateThread = new Thread ( Updater ) ;
updateThread . setName ( " Updater " ) ;
updateThread . start ( ) ;
2016-10-09 18:35:55 +02:00
}
@FXML
private void autoupdateBtnAction ( ) {
2017-03-25 16:20:48 +01:00
if ( autoUpdate ) {
setAutoUpdate ( false ) ;
2016-10-09 18:35:55 +02:00
} else {
2017-03-25 16:20:48 +01:00
setAutoUpdate ( true ) ;
2016-10-09 18:35:55 +02:00
}
2017-03-05 18:29:24 +01:00
saveSettings ( ) ;
2016-10-09 18:35:55 +02:00
}
@FXML
private void tfStreamingPathAction ( ) {
//
}
@FXML
private void streamingDirectoryBtnAction ( ) {
selectedStreamingFolder = directoryChooser . showDialog ( null ) ;
if ( selectedStreamingFolder = = null ) {
System . out . println ( " No Directory selected " ) ;
} else {
setStreamingPath ( selectedStreamingFolder . getAbsolutePath ( ) ) ;
2017-03-05 18:29:24 +01:00
saveSettings ( ) ;
2016-10-09 18:35:55 +02:00
tfStreamingPath . setText ( getStreamingPath ( ) ) ;
try {
2016-11-12 15:02:55 +01:00
Runtime . getRuntime ( ) . exec ( " java -jar ProjectHomeFlix.jar " ) ; //start again
System . exit ( 0 ) ; //finishes itself
2016-10-09 18:35:55 +02:00
} catch ( IOException e ) {
System . out . println ( " es ist ein Fehler aufgetreten " ) ;
e . printStackTrace ( ) ;
}
}
}
2016-10-09 16:05:44 +02:00
2017-04-30 23:17:55 +02:00
/ * * " Main " Method called in Main . java main ( ) when starting
* Initialize other objects : Updater , dbController and ApiQuery
* /
2017-03-05 18:29:24 +01:00
void setMain ( Main main ) {
2017-03-20 22:32:54 +01:00
this . main = main ;
2017-06-01 17:13:26 +02:00
Updater = new updater ( this , buildNumber ) ;
2017-04-06 12:07:34 +02:00
dbController = new DBController ( this , this . main ) ;
ApiQuery = new apiQuery ( this , dbController , this . main ) ;
2016-08-14 15:17:14 +02:00
}
2017-02-04 16:15:47 +01:00
//Initialize the tables (treeTableViewfilm and tableViewStreamingdata)
2017-02-09 20:39:43 +01:00
@SuppressWarnings ( { " unchecked " } ) //TODO
void initTabel ( ) {
2016-08-14 15:17:14 +02:00
2017-02-09 20:39:43 +01:00
//film Table
2017-02-02 20:41:38 +01:00
columnRating . setMaxWidth ( 80 ) ;
columnTitel . setMaxWidth ( 260 ) ;
2016-09-09 20:41:20 +02:00
columnStreamUrl . setMaxWidth ( 0 ) ;
2017-02-02 20:41:38 +01:00
dataNameColumn . setPrefWidth ( 150 ) ;
2017-04-30 23:17:55 +02:00
dataNameEndColumn . setPrefWidth ( 220 ) ;
2017-02-02 20:41:38 +01:00
columnRating . setStyle ( " -fx-alignment: CENTER; " ) ;
2016-08-14 15:17:14 +02:00
treeTableViewfilm . setRoot ( root ) ;
treeTableViewfilm . setColumnResizePolicy ( TreeTableView . CONSTRAINED_RESIZE_POLICY ) ;
treeTableViewfilm . setShowRoot ( false ) ;
2016-09-09 20:41:20 +02:00
2017-02-04 16:15:47 +01:00
//write content into cell
2017-03-09 22:26:37 +01:00
columnTitel . setCellValueFactory ( cellData - > cellData . getValue ( ) . getValue ( ) . titleProperty ( ) ) ;
2017-02-02 20:41:38 +01:00
columnRating . setCellValueFactory ( cellData - > cellData . getValue ( ) . getValue ( ) . imageProperty ( ) ) ;
columnStreamUrl . setCellValueFactory ( cellData - > cellData . getValue ( ) . getValue ( ) . streamUrlProperty ( ) ) ;
columnResolution . setCellValueFactory ( cellData - > cellData . getValue ( ) . getValue ( ) . resolutionProperty ( ) ) ;
columnYear . setCellValueFactory ( cellData - > cellData . getValue ( ) . getValue ( ) . yearProperty ( ) . asObject ( ) ) ;
columnSeason . setCellValueFactory ( cellData - > cellData . getValue ( ) . getValue ( ) . seasonProperty ( ) . asObject ( ) ) ;
columnEpisode . setCellValueFactory ( cellData - > cellData . getValue ( ) . getValue ( ) . episodeProperty ( ) . asObject ( ) ) ;
2016-08-14 15:17:14 +02:00
2016-10-10 16:55:26 +02:00
treeTableViewfilm . getColumns ( ) . addAll ( columnTitel , columnRating , columnStreamUrl , columnResolution , columnYear , columnSeason , columnEpisode ) ;
2017-02-04 16:15:47 +01:00
treeTableViewfilm . getColumns ( ) . get ( 2 ) . setVisible ( false ) ; //hide columnStreamUrl (column with file path important for the player)
2016-08-14 15:17:14 +02:00
2017-02-09 20:39:43 +01:00
//Change-listener for TreeTable
2016-09-09 20:41:20 +02:00
treeTableViewfilm . getSelectionModel ( ) . selectedItemProperty ( ) . addListener ( new ChangeListener < Object > ( ) {
2016-08-14 15:17:14 +02:00
@Override
2017-03-06 17:59:44 +01:00
public void changed ( ObservableValue < ? > observable , Object oldVal , Object newVal ) {
2017-02-04 16:15:47 +01:00
// last = selected; //for auto-play
selected = treeTableViewfilm . getSelectionModel ( ) . getSelectedIndex ( ) ; //get selected item
2016-08-14 15:17:14 +02:00
last = selected - 1 ;
next = selected + 1 ;
2017-03-06 17:59:44 +01:00
name = columnTitel . getCellData ( selected ) ; //get name of selected item
2017-02-04 16:15:47 +01:00
datPath = columnStreamUrl . getCellData ( selected ) ; //get file path of selected item
2017-03-06 17:59:44 +01:00
if ( mode . equals ( " local " ) ) {
if ( localFilms . get ( selected ) . getCached ( ) = = true ) {
System . out . println ( " loading from cache: " + name ) ;
dbController . readCache ( datPath ) ;
} else {
ApiQuery . startQuery ( name , datPath ) ; // start api query
}
} else {
2017-03-09 22:26:37 +01:00
System . out . println ( streamingFilms . size ( ) ) ;
2017-03-06 17:59:44 +01:00
if ( streamingFilms . get ( selected ) . getCached ( ) = = true ) {
System . out . println ( " loading from cache: " + name ) ;
dbController . readCache ( datPath ) ;
} else {
ApiQuery . startQuery ( name , datPath ) ; // start api query
}
}
2016-08-14 15:17:14 +02:00
}
} ) ;
2017-01-06 00:04:07 +01:00
//context menu for treetableview
treeTableViewfilm . setContextMenu ( menu ) ;
2017-02-09 20:39:43 +01:00
//Streaming-Settings Table
2017-03-09 22:26:37 +01:00
dataNameColumn . setCellValueFactory ( cellData - > cellData . getValue ( ) . titleProperty ( ) ) ;
2016-09-09 20:41:20 +02:00
dataNameEndColumn . setCellValueFactory ( cellData - > cellData . getValue ( ) . streamUrlProperty ( ) ) ;
2016-10-09 18:35:55 +02:00
tableViewStreamingdata . getColumns ( ) . addAll ( dataNameColumn , dataNameEndColumn ) ;
2017-02-09 20:39:43 +01:00
tableViewStreamingdata . setItems ( streamingData ) ;
2016-09-09 20:41:20 +02:00
}
2017-01-06 00:04:07 +01:00
//Initializing the actions
2017-02-09 20:39:43 +01:00
void initActions ( ) {
2016-09-09 20:41:20 +02:00
2016-10-09 16:05:44 +02:00
tfsearch . textProperty ( ) . addListener ( new ChangeListener < String > ( ) {
2017-01-06 00:04:07 +01:00
@Override
2016-10-09 16:05:44 +02:00
public void changed ( ObservableValue < ? extends String > observable , String oldValue , String newValue ) {
2017-03-06 17:59:44 +01:00
ObservableList < tableData > helpData ;
2016-10-09 16:05:44 +02:00
filterData . removeAll ( filterData ) ;
root . getChildren ( ) . remove ( 0 , root . getChildren ( ) . size ( ) ) ;
2017-03-05 18:29:24 +01:00
if ( mode . equals ( " local " ) ) {
2017-03-06 17:59:44 +01:00
helpData = localFilms ;
2017-03-05 18:29:24 +01:00
} else {
2017-03-06 17:59:44 +01:00
helpData = streamingFilms ;
2017-03-05 18:29:24 +01:00
}
for ( int i = 0 ; i < helpData . size ( ) ; i + + ) {
2017-03-09 22:26:37 +01:00
if ( helpData . get ( i ) . getTitle ( ) . toLowerCase ( ) . contains ( tfsearch . getText ( ) . toLowerCase ( ) ) ) {
2017-03-05 18:29:24 +01:00
filterData . add ( helpData . get ( i ) ) ; //add data from newDaten to filteredData where title contains search input
2016-10-09 16:05:44 +02:00
}
}
for ( int i = 0 ; i < filterData . size ( ) ; i + + ) {
2017-03-06 17:59:44 +01:00
root . getChildren ( ) . add ( new TreeItem < tableData > ( filterData . get ( i ) ) ) ; //add filtered data to root node after search
2016-10-09 16:05:44 +02:00
}
2017-02-04 16:15:47 +01:00
if ( tfsearch . getText ( ) . hashCode ( ) = = hashA ) {
2017-01-11 20:24:29 +01:00
setColor ( " 000000 " ) ;
applyColor ( ) ;
}
2016-10-09 16:05:44 +02:00
}
} ) ;
2017-02-09 20:39:43 +01:00
cbLocal . getSelectionModel ( ) . selectedIndexProperty ( ) . addListener ( new ChangeListener < Number > ( ) {
public void changed ( ObservableValue < ? extends Number > ov , Number value , Number new_value ) {
String local = cbLocal . getItems ( ) . get ( ( int ) new_value ) . toString ( ) ;
2017-04-30 23:17:55 +02:00
local = local . substring ( local . length ( ) - 6 , local . length ( ) - 1 ) ; //reading only en_US from English (en_US)
2017-02-09 20:39:43 +01:00
setLocal ( local ) ;
setLocalUI ( ) ;
2017-03-05 18:29:24 +01:00
saveSettings ( ) ;
2016-10-09 16:05:44 +02:00
}
} ) ;
2016-10-09 18:35:55 +02:00
sliderFontSize . valueProperty ( ) . addListener ( new ChangeListener < Number > ( ) {
@Override
public void changed ( ObservableValue < ? extends Number > ov , Number old_val , Number new_val ) {
setSize ( sliderFontSize . getValue ( ) ) ;
2017-03-09 22:26:37 +01:00
if ( name ! = null ) {
dbController . readCache ( datPath ) ;
}
// ta1.setFont(Font.font("System", size));
2017-03-05 18:29:24 +01:00
saveSettings ( ) ;
2016-10-09 18:35:55 +02:00
}
} ) ;
2017-01-06 00:04:07 +01:00
like . setOnAction ( new EventHandler < ActionEvent > ( ) {
@Override
public void handle ( ActionEvent event ) {
2017-01-11 20:24:29 +01:00
if ( mode . equals ( " streaming " ) ) {
2017-03-06 17:59:44 +01:00
dbController . like ( name , streamingFilms . get ( selected ) . getStreamUrl ( ) ) ;
2017-01-11 20:24:29 +01:00
} else {
2017-03-06 17:59:44 +01:00
dbController . like ( name , localFilms . get ( selected ) . getStreamUrl ( ) ) ;
2017-01-11 20:24:29 +01:00
}
2017-03-06 17:59:44 +01:00
dbController . getFavStatus ( name ) ;
2017-01-06 00:04:07 +01:00
try {
2017-03-06 17:59:44 +01:00
dbController . refresh ( name , selected ) ;
2017-01-06 00:04:07 +01:00
} catch ( SQLException e ) {
2017-01-11 20:24:29 +01:00
Alert alert = new Alert ( AlertType . ERROR ) ;
alert . setTitle ( " Error " ) ;
alert . setHeaderText ( " " ) ;
alert . setContentText ( " There should be an error message in the future (like problem) \ nIt seems as a cat has stolen the like-methode " ) ;
2017-01-06 00:04:07 +01:00
e . printStackTrace ( ) ;
2016-09-09 20:41:20 +02:00
}
2017-01-06 00:04:07 +01:00
refreshTable ( ) ;
2016-09-09 20:41:20 +02:00
}
2017-01-06 00:04:07 +01:00
} ) ;
dislike . setOnAction ( new EventHandler < ActionEvent > ( ) {
@Override
public void handle ( ActionEvent event ) {
2017-01-11 20:24:29 +01:00
if ( mode . equals ( " streaming " ) ) {
2017-03-06 17:59:44 +01:00
dbController . dislike ( name , streamingFilms . get ( selected ) . getStreamUrl ( ) ) ;
2017-01-11 20:24:29 +01:00
} else {
2017-03-06 17:59:44 +01:00
dbController . dislike ( name , localFilms . get ( selected ) . getStreamUrl ( ) ) ;
2017-01-11 20:24:29 +01:00
}
2017-03-06 17:59:44 +01:00
dbController . getFavStatus ( name ) ;
2016-09-09 20:41:20 +02:00
try {
2017-03-06 17:59:44 +01:00
dbController . refresh ( name , selected ) ;
2017-01-06 00:04:07 +01:00
} catch ( SQLException e ) {
2017-01-11 20:24:29 +01:00
Alert alert = new Alert ( AlertType . ERROR ) ;
alert . setTitle ( " Error " ) ;
alert . setHeaderText ( " " ) ;
alert . setContentText ( " There should be an error message in the future (dislike problem) " ) ;
2016-09-09 20:41:20 +02:00
e . printStackTrace ( ) ;
}
2017-01-06 00:04:07 +01:00
refreshTable ( ) ;
2016-09-09 20:41:20 +02:00
}
2017-01-06 00:04:07 +01:00
} ) ;
2017-03-05 18:29:24 +01:00
/ * *
2017-04-30 23:17:55 +02:00
* FIXME fix bug when sort by ASCENDING , wrong order
2017-03-05 18:29:24 +01:00
* /
columnRating . sortTypeProperty ( ) . addListener ( new ChangeListener < SortType > ( ) {
@Override
public void changed ( ObservableValue < ? extends SortType > paramObservableValue , SortType paramT1 , SortType paramT2 ) {
System . out . println ( " NAME Clicked -- sortType = " + paramT1 + " , SortType= " + paramT2 ) ;
ArrayList < Integer > fav_true = new ArrayList < Integer > ( ) ;
ArrayList < Integer > fav_false = new ArrayList < Integer > ( ) ;
2017-03-06 17:59:44 +01:00
ObservableList < tableData > helpData ;
2017-03-05 18:29:24 +01:00
filterData . removeAll ( filterData ) ;
2017-03-09 22:26:37 +01:00
// treeTableViewfilm.getSelectionModel().clearSelection(selected);
2017-03-05 18:29:24 +01:00
root . getChildren ( ) . remove ( 0 , root . getChildren ( ) . size ( ) ) ;
if ( mode . equals ( " local " ) ) {
2017-03-06 17:59:44 +01:00
helpData = localFilms ;
2017-03-05 18:29:24 +01:00
} else {
2017-03-06 17:59:44 +01:00
helpData = streamingFilms ;
2017-03-05 18:29:24 +01:00
}
for ( int i = 0 ; i < helpData . size ( ) ; i + + ) {
if ( helpData . get ( i ) . getRating ( ) = = 1 . 0 ) {
fav_true . add ( i ) ;
} else {
fav_false . add ( i ) ;
}
}
if ( paramT2 . toString ( ) . equals ( " DESCENDING " ) ) {
System . out . println ( " Absteigend " ) ;
for ( int i = 0 ; i < fav_true . size ( ) ; i + + ) {
filterData . add ( helpData . get ( fav_true . get ( i ) ) ) ;
}
for ( int i = 0 ; i < fav_false . size ( ) ; i + + ) {
filterData . add ( helpData . get ( fav_false . get ( i ) ) ) ;
}
} else {
for ( int i = 0 ; i < fav_false . size ( ) ; i + + ) {
filterData . add ( helpData . get ( fav_false . get ( i ) ) ) ;
}
for ( int i = 0 ; i < fav_true . size ( ) ; i + + ) {
filterData . add ( helpData . get ( fav_true . get ( i ) ) ) ;
}
}
System . out . println ( filterData . size ( ) ) ;
for ( int i = 0 ; i < filterData . size ( ) ; i + + ) {
// System.out.println(filterData.get(i).getTitel()+"; "+filterData.get(i).getRating());
2017-03-06 17:59:44 +01:00
root . getChildren ( ) . add ( new TreeItem < tableData > ( filterData . get ( i ) ) ) ; //add filtered data to root node after search
2017-03-05 18:29:24 +01:00
}
}
} ) ;
2016-09-09 20:41:20 +02:00
}
2017-02-09 20:39:43 +01:00
//initialize UI elements
void initUI ( ) {
System . out . println ( " Mode: " + mode ) ; //TODO debugging
debugBtn . setDisable ( true ) ; //debugging button for tests
debugBtn . setVisible ( false ) ;
tfPath . setText ( getPath ( ) ) ;
sliderFontSize . setValue ( getSize ( ) ) ;
mainColor . setValue ( Color . valueOf ( getColor ( ) ) ) ;
updateBtn . setFont ( Font . font ( " System " , 12 ) ) ;
2017-03-05 18:29:24 +01:00
cbLocal . setItems ( locals ) ;
2017-02-09 20:39:43 +01:00
2017-03-25 16:20:48 +01:00
if ( autoUpdate ) {
2017-02-09 20:39:43 +01:00
autoupdateBtn . setSelected ( true ) ;
2017-03-25 16:20:48 +01:00
try {
2017-05-07 18:56:41 +02:00
Thread updateThread = new Thread ( Updater ) ;
updateThread . setName ( " Updater " ) ;
updateThread . start ( ) ;
updateThread . join ( ) ;
2017-03-25 16:20:48 +01:00
} catch ( InterruptedException e ) {
e . printStackTrace ( ) ;
}
2017-02-09 20:39:43 +01:00
} else {
autoupdateBtn . setSelected ( false ) ;
}
}
2017-01-06 00:04:07 +01:00
private void refreshTable ( ) {
2017-01-11 20:24:29 +01:00
if ( mode . equals ( " local " ) ) {
2017-03-06 17:59:44 +01:00
root . getChildren ( ) . set ( selected , new TreeItem < tableData > ( localFilms . get ( selected ) ) ) ;
2017-01-11 20:24:29 +01:00
} else if ( mode . equals ( " streaming " ) ) {
2017-03-06 17:59:44 +01:00
root . getChildren ( ) . set ( selected , new TreeItem < tableData > ( streamingFilms . get ( selected ) ) ) ;
2017-01-11 20:24:29 +01:00
}
2017-01-06 00:04:07 +01:00
}
2016-12-01 18:24:58 +01:00
void addDataUI ( ) {
2016-09-09 20:41:20 +02:00
if ( mode . equals ( " local " ) ) {
2017-03-06 17:59:44 +01:00
for ( int i = 0 ; i < localFilms . size ( ) ; i + + ) {
root . getChildren ( ) . add ( new TreeItem < tableData > ( localFilms . get ( i ) ) ) ; //add data to root-node
2016-09-09 20:41:20 +02:00
}
2017-03-09 22:26:37 +01:00
columnRating . setMaxWidth ( 85 ) ;
2017-02-04 16:15:47 +01:00
columnTitel . setMaxWidth ( 290 ) ;
2016-09-09 20:41:20 +02:00
treeTableViewfilm . getColumns ( ) . get ( 3 ) . setVisible ( false ) ;
treeTableViewfilm . getColumns ( ) . get ( 4 ) . setVisible ( false ) ;
treeTableViewfilm . getColumns ( ) . get ( 5 ) . setVisible ( false ) ;
2016-10-10 16:55:26 +02:00
treeTableViewfilm . getColumns ( ) . get ( 6 ) . setVisible ( false ) ;
2016-09-09 20:41:20 +02:00
} else if ( mode . equals ( " streaming " ) ) {
2017-03-06 17:59:44 +01:00
for ( int i = 0 ; i < streamingFilms . size ( ) ; i + + ) {
root . getChildren ( ) . add ( new TreeItem < tableData > ( streamingFilms . get ( i ) ) ) ; //add data to root-node
2016-09-09 20:41:20 +02:00
}
columnTitel . setMaxWidth ( 150 ) ;
columnResolution . setMaxWidth ( 65 ) ;
2017-02-04 16:15:47 +01:00
columnRating . setMaxWidth ( 50 ) ;
columnYear . setMaxWidth ( 43 ) ;
columnSeason . setMaxWidth ( 42 ) ;
columnEpisode . setMaxWidth ( 44 ) ;
2016-09-09 20:41:20 +02:00
treeTableViewfilm . getColumns ( ) . get ( 3 ) . setVisible ( true ) ;
treeTableViewfilm . getColumns ( ) . get ( 4 ) . setVisible ( true ) ;
treeTableViewfilm . getColumns ( ) . get ( 5 ) . setVisible ( true ) ;
2016-10-10 16:55:26 +02:00
treeTableViewfilm . getColumns ( ) . get ( 6 ) . setVisible ( true ) ;
2016-08-14 15:17:14 +02:00
}
}
2017-01-06 00:04:07 +01:00
void loadStreamingSettings ( ) {
2016-09-09 20:41:20 +02:00
if ( getStreamingPath ( ) . equals ( " " ) | | getStreamingPath ( ) . equals ( null ) ) {
2017-03-06 17:59:44 +01:00
System . out . println ( " Kein Pfad angegeben " ) ; //if path equals "" or null
2016-09-09 20:41:20 +02:00
} else {
String [ ] entries = new File ( getStreamingPath ( ) ) . list ( ) ;
for ( int i = 0 ; i < entries . length ; i + + ) {
if ( entries [ i ] . endsWith ( " .json " ) ) {
String titel = ohneEndung ( entries [ i ] ) ;
String data = entries [ i ] ;
2017-03-06 17:59:44 +01:00
streamingData . add ( new tableData ( 1 , 1 , 1 , 5 . 0 , " 1 " , titel , data , imv1 , false ) ) ;
2016-09-09 20:41:20 +02:00
}
}
for ( int i = 0 ; i < streamingData . size ( ) ; i + + ) {
2017-03-06 17:59:44 +01:00
streamingRoot . getChildren ( ) . add ( new TreeItem < tableData > ( streamingData . get ( i ) ) ) ; //adds data to root-node
2016-09-09 20:41:20 +02:00
}
}
}
2017-02-09 20:39:43 +01:00
//removes the ending
2016-08-14 15:17:14 +02:00
private String ohneEndung ( String str ) {
if ( str = = null ) return null ;
int pos = str . lastIndexOf ( " . " ) ;
if ( pos = = - 1 ) return str ;
return str . substring ( 0 , pos ) ;
}
2017-02-09 20:39:43 +01:00
//set color of UI-Elements
2016-12-01 18:24:58 +01:00
void applyColor ( ) {
2016-08-14 15:17:14 +02:00
String style = " -fx-background-color: # " + getColor ( ) + " ; " ;
2016-11-21 18:24:06 +01:00
String btnStyleBlack = " -fx-button-type: RAISED; -fx-background-color: # " + getColor ( ) + " ; -fx-text-fill: BLACK; " ;
String btnStyleWhite = " -fx-button-type: RAISED; -fx-background-color: # " + getColor ( ) + " ; -fx-text-fill: WHITE; " ;
2016-08-14 15:17:14 +02:00
BigInteger icolor = new BigInteger ( getColor ( ) , 16 ) ;
BigInteger ccolor = new BigInteger ( " 78909cff " , 16 ) ;
2016-10-09 16:05:44 +02:00
sideMenuVBox . setStyle ( style ) ;
topHBox . setStyle ( style ) ;
2016-08-14 15:17:14 +02:00
tfsearch . setFocusColor ( Color . valueOf ( getColor ( ) ) ) ;
2016-10-09 18:35:55 +02:00
tfPath . setFocusColor ( Color . valueOf ( getColor ( ) ) ) ;
2016-08-14 15:17:14 +02:00
if ( icolor . compareTo ( ccolor ) = = - 1 ) {
settingsBtn . setStyle ( " -fx-text-fill: WHITE; " ) ;
2016-09-09 20:41:20 +02:00
streamingSettingsBtn . setStyle ( " -fx-text-fill: WHITE; " ) ;
switchBtn . setStyle ( " -fx-text-fill: WHITE; " ) ;
2016-08-14 15:17:14 +02:00
infoBtn . setStyle ( " -fx-text-fill: WHITE; " ) ;
2016-10-09 16:05:44 +02:00
debugBtn . setStyle ( " -fx-text-fill: WHITE; " ) ;
2016-11-21 18:24:06 +01:00
directoryBtn . setStyle ( btnStyleWhite ) ;
streamingDirectoryBtn . setStyle ( btnStyleWhite ) ;
updateBtn . setStyle ( btnStyleWhite ) ;
playbtn . setStyle ( btnStyleWhite ) ;
openfolderbtn . setStyle ( btnStyleWhite ) ;
returnBtn . setStyle ( btnStyleWhite ) ;
forwardBtn . setStyle ( btnStyleWhite ) ;
playbtn . setGraphic ( play_arrow_white ) ;
returnBtn . setGraphic ( skip_previous_white ) ;
forwardBtn . setGraphic ( skip_next_white ) ;
2016-08-14 16:03:36 +02:00
menubtn . setGraphic ( menu_icon_white ) ;
2016-08-14 15:17:14 +02:00
} else {
settingsBtn . setStyle ( " -fx-text-fill: BLACK; " ) ;
2016-09-09 20:41:20 +02:00
streamingSettingsBtn . setStyle ( " -fx-text-fill: BLACK; " ) ;
switchBtn . setStyle ( " -fx-text-fill: BLACK; " ) ;
2016-08-14 15:17:14 +02:00
infoBtn . setStyle ( " -fx-text-fill: BLACK; " ) ;
2016-10-09 16:05:44 +02:00
debugBtn . setStyle ( " -fx-text-fill: BLACK; " ) ;
2016-11-21 18:24:06 +01:00
directoryBtn . setStyle ( btnStyleBlack ) ;
streamingDirectoryBtn . setStyle ( btnStyleBlack ) ;
updateBtn . setStyle ( btnStyleBlack ) ;
playbtn . setStyle ( btnStyleBlack ) ;
openfolderbtn . setStyle ( btnStyleBlack ) ;
returnBtn . setStyle ( btnStyleBlack ) ;
forwardBtn . setStyle ( btnStyleBlack ) ;
playbtn . setGraphic ( play_arrow_black ) ;
returnBtn . setGraphic ( skip_previous_black ) ;
forwardBtn . setGraphic ( skip_next_black ) ;
2016-08-14 15:17:14 +02:00
menubtn . setGraphic ( menu_icon_black ) ;
}
2016-09-09 20:41:20 +02:00
if ( mode . equals ( " local " ) ) {
2017-02-04 16:15:47 +01:00
switchBtn . setText ( " streaming " ) ;
2016-09-09 20:41:20 +02:00
} else if ( mode . equals ( " streaming " ) ) {
switchBtn . setText ( " local " ) ;
}
2016-08-14 15:17:14 +02:00
}
2016-10-10 16:55:26 +02:00
private void sideMenuSlideIn ( ) {
sideMenuVBox . setVisible ( true ) ;
2016-11-21 18:24:06 +01:00
//fade in from 40% to 100% opacity in 400ms
2016-10-10 16:55:26 +02:00
FadeTransition fadeTransition = new FadeTransition ( Duration . millis ( 400 ) , sideMenuVBox ) ;
fadeTransition . setFromValue ( 0 . 4 ) ;
fadeTransition . setToValue ( 1 . 0 ) ;
2016-11-21 18:24:06 +01:00
//slide in in 400ms
2016-10-10 16:55:26 +02:00
TranslateTransition translateTransition = new TranslateTransition ( Duration . millis ( 400 ) , sideMenuVBox ) ;
translateTransition . setFromX ( - 150 ) ;
translateTransition . setToX ( 0 ) ;
2016-11-21 18:24:06 +01:00
//in case both animations are used (add (fadeTransition, translateTransition) in the second line under this command)
2016-10-10 16:55:26 +02:00
ParallelTransition parallelTransition = new ParallelTransition ( ) ;
parallelTransition . getChildren ( ) . addAll ( translateTransition ) ; //(fadeTransition, translateTransition);
parallelTransition . play ( ) ;
}
2016-08-14 15:17:14 +02:00
2016-10-10 16:55:26 +02:00
private void sideMenuSlideOut ( ) {
// sideMenuVBox.setVisible(false);
2016-11-21 18:24:06 +01:00
//fade out from 100% to 40% opacity in 400ms
2016-10-10 16:55:26 +02:00
FadeTransition fadeTransition = new FadeTransition ( Duration . millis ( 400 ) , sideMenuVBox ) ;
fadeTransition . setFromValue ( 1 . 0 ) ;
fadeTransition . setToValue ( 0 . 4 ) ;
2016-11-21 18:24:06 +01:00
//slide out in 400ms
2016-10-10 16:55:26 +02:00
TranslateTransition translateTransition = new TranslateTransition ( Duration . millis ( 400 ) , sideMenuVBox ) ;
translateTransition . setFromX ( 0 ) ;
translateTransition . setToX ( - 150 ) ;
2016-11-21 18:24:06 +01:00
//in case both animations are used (add (fadeTransition, translateTransition) in the second line under this command)
2016-10-10 16:55:26 +02:00
ParallelTransition parallelTransition = new ParallelTransition ( ) ;
parallelTransition . getChildren ( ) . addAll ( translateTransition ) ; //(fadeTransition, translateTransition);
parallelTransition . play ( ) ;
}
2016-08-14 15:17:14 +02:00
2017-03-05 18:29:24 +01:00
void setLocalUI ( ) {
2017-02-09 20:39:43 +01:00
switch ( getLocal ( ) ) {
case " en_US " :
2017-06-04 20:24:08 +02:00
bundle = ResourceBundle . getBundle ( " resources.HomeFlix-Local " , Locale . US ) ; //us_English
2017-02-09 20:39:43 +01:00
cbLocal . getSelectionModel ( ) . select ( 0 ) ;
break ;
case " de_DE " :
2017-06-04 20:24:08 +02:00
bundle = ResourceBundle . getBundle ( " resources.HomeFlix-Local " , Locale . GERMAN ) ; //German
2017-02-09 20:39:43 +01:00
cbLocal . getSelectionModel ( ) . select ( 1 ) ;
break ;
default :
2017-06-04 20:24:08 +02:00
bundle = ResourceBundle . getBundle ( " resources.HomeFlix-Local " , Locale . US ) ; //default local
2017-02-09 20:39:43 +01:00
cbLocal . getSelectionModel ( ) . select ( 0 ) ;
break ;
2016-08-14 15:17:14 +02:00
}
infoBtn . setText ( bundle . getString ( " info " ) ) ;
2016-10-09 16:05:44 +02:00
settingsBtn . setText ( bundle . getString ( " settings " ) ) ;
streamingSettingsBtn . setText ( bundle . getString ( " streamingSettings " ) ) ;
2016-10-09 18:35:55 +02:00
tfPath . setPromptText ( bundle . getString ( " tfPath " ) ) ;
tfStreamingPath . setPromptText ( bundle . getString ( " tfPath " ) ) ;
2016-11-21 18:24:06 +01:00
tfsearch . setPromptText ( bundle . getString ( " tfSearch " ) ) ;
2016-08-14 15:17:14 +02:00
openfolderbtn . setText ( bundle . getString ( " openFolder " ) ) ;
updateBtn . setText ( bundle . getString ( " checkUpdates " ) ) ;
2016-08-14 16:03:36 +02:00
directoryBtn . setText ( bundle . getString ( " chooseFolder " ) ) ;
2016-10-09 18:35:55 +02:00
streamingDirectoryBtn . setText ( bundle . getString ( " chooseFolder " ) ) ;
2016-08-14 16:03:36 +02:00
sizelbl . setText ( bundle . getString ( " fontSize " ) ) ;
2016-08-14 15:17:14 +02:00
aulbl . setText ( bundle . getString ( " autoUpdate " ) ) ;
2016-11-18 09:41:38 +01:00
versionlbl . setText ( bundle . getString ( " version " ) + " " + version + " (Build: " + buildNumber + " ) " ) ;
2016-09-09 20:41:20 +02:00
columnTitel . setText ( bundle . getString ( " columnName " ) ) ;
2016-08-14 15:17:14 +02:00
columnRating . setText ( bundle . getString ( " columnRating " ) ) ;
2016-10-09 16:05:44 +02:00
columnStreamUrl . setText ( bundle . getString ( " columnStreamUrl " ) ) ;
columnResolution . setText ( bundle . getString ( " columnResolution " ) ) ;
columnSeason . setText ( bundle . getString ( " columnSeason " ) ) ;
columnYear . setText ( bundle . getString ( " columnYear " ) ) ;
2016-08-14 16:03:36 +02:00
errorUpdateD = bundle . getString ( " errorUpdateD " ) ;
errorUpdateV = bundle . getString ( " errorUpdateV " ) ;
2016-10-09 16:05:44 +02:00
errorPlay = bundle . getString ( " errorPlay " ) ;
errorOpenStream = bundle . getString ( " errorOpenStream " ) ;
errorMode = bundle . getString ( " errorMode " ) ;
2016-11-21 18:24:06 +01:00
errorLoad = bundle . getString ( " errorLoad " ) ;
errorSave = bundle . getString ( " errorSave " ) ;
noFilmFound = bundle . getString ( " noFilmFound " ) ;
2016-11-18 09:41:38 +01:00
infoText = bundle . getString ( " version " ) + " " + version + " (Build: " + buildNumber + " ) " + versionName + bundle . getString ( " infoText " ) ;
2016-08-15 18:36:57 +02:00
linuxBugText = bundle . getString ( " linuxBug " ) ;
vlcNotInstalled = bundle . getString ( " vlcNotInstalled " ) ;
2016-11-21 18:24:06 +01:00
title = bundle . getString ( " title " ) ;
year = bundle . getString ( " year " ) ;
rating = bundle . getString ( " rating " ) ;
publishedOn = bundle . getString ( " publishedOn " ) ;
duration = bundle . getString ( " duration " ) ;
genre = bundle . getString ( " genre " ) ;
director = bundle . getString ( " director " ) ;
writer = bundle . getString ( " writer " ) ;
actors = bundle . getString ( " actors " ) ;
plot = bundle . getString ( " plot " ) ;
language = bundle . getString ( " language " ) ;
country = bundle . getString ( " country " ) ;
awards = bundle . getString ( " awards " ) ;
metascore = bundle . getString ( " metascore " ) ;
imdbRating = bundle . getString ( " imdbRating " ) ;
type = bundle . getString ( " type " ) ;
2016-08-14 15:17:14 +02:00
}
2017-03-05 18:29:24 +01:00
void showErrorMsg ( String msg , IOException exception ) {
2016-11-12 15:02:55 +01:00
Alert alert = new Alert ( AlertType . ERROR ) ;
alert . setTitle ( " Error " ) ;
alert . setHeaderText ( " " ) ;
alert . setContentText ( msg ) ;
2017-03-20 22:32:54 +01:00
alert . initOwner ( main . primaryStage ) ;
2016-11-12 15:02:55 +01:00
// Create expandable Exception.
StringWriter sw = new StringWriter ( ) ;
PrintWriter pw = new PrintWriter ( sw ) ;
exception . printStackTrace ( pw ) ;
String exceptionText = sw . toString ( ) ;
TextArea textArea = new TextArea ( exceptionText ) ;
textArea . setEditable ( false ) ;
textArea . setWrapText ( true ) ;
textArea . setMaxWidth ( Double . MAX_VALUE ) ;
textArea . setMaxHeight ( Double . MAX_VALUE ) ;
GridPane . setVgrow ( textArea , Priority . ALWAYS ) ;
GridPane . setHgrow ( textArea , Priority . ALWAYS ) ;
GridPane expContent = new GridPane ( ) ;
expContent . setMaxWidth ( Double . MAX_VALUE ) ;
expContent . add ( textArea , 0 , 1 ) ;
// Set expandable Exception into the dialog pane.
alert . getDialogPane ( ) . setExpandableContent ( expContent ) ;
alert . showAndWait ( ) ;
exception . printStackTrace ( ) ;
}
2016-11-21 18:24:06 +01:00
//saves the Settings
2017-03-05 18:29:24 +01:00
public void saveSettings ( ) {
2017-04-30 23:17:55 +02:00
System . out . println ( " saving settings ... " ) ;
2017-02-09 20:39:43 +01:00
OutputStream outputStream ; //new output-stream
2016-08-14 15:17:14 +02:00
try {
2016-11-21 18:24:06 +01:00
props . setProperty ( " path " , getPath ( ) ) ; //writes path into property
2016-08-14 15:17:14 +02:00
props . setProperty ( " color " , getColor ( ) ) ;
2017-03-25 16:20:48 +01:00
props . setProperty ( " autoUpdate " , String . valueOf ( isAutoUpdate ( ) ) ) ;
2016-08-14 15:17:14 +02:00
props . setProperty ( " size " , getSize ( ) . toString ( ) ) ;
2017-02-09 20:39:43 +01:00
props . setProperty ( " local " , getLocal ( ) ) ;
2016-09-09 20:41:20 +02:00
props . setProperty ( " streamingPath " , getStreamingPath ( ) ) ;
props . setProperty ( " mode " , getMode ( ) ) ;
2017-01-06 00:04:07 +01:00
props . setProperty ( " ratingSortType " , columnRating . getSortType ( ) . toString ( ) ) ;
2017-02-05 17:14:34 +01:00
if ( System . getProperty ( " os.name " ) . equals ( " Linux " ) ) {
outputStream = new FileOutputStream ( fileLinux ) ;
} else {
outputStream = new FileOutputStream ( fileWin ) ;
}
2016-11-21 18:24:06 +01:00
props . storeToXML ( outputStream , " Project HomeFlix settings " ) ; //writes new .xml
2016-08-14 15:17:14 +02:00
outputStream . close ( ) ;
} catch ( IOException e ) {
2017-02-09 20:39:43 +01:00
if ( firststart = = false ) {
showErrorMsg ( errorLoad , e ) ;
e . printStackTrace ( ) ;
}
2016-08-14 15:17:14 +02:00
}
}
2016-11-21 18:24:06 +01:00
//loads the Settings
2016-08-14 15:17:14 +02:00
public void loadSettings ( ) {
2017-02-09 20:39:43 +01:00
System . out . println ( " loading settings ... " ) ;
2017-02-05 17:14:34 +01:00
InputStream inputStream ;
2016-08-14 15:17:14 +02:00
try {
2017-02-05 17:14:34 +01:00
if ( System . getProperty ( " os.name " ) . equals ( " Linux " ) ) {
inputStream = new FileInputStream ( fileLinux ) ;
} else {
inputStream = new FileInputStream ( fileWin ) ;
}
2017-02-09 20:39:43 +01:00
props . loadFromXML ( inputStream ) ; //new input-stream from .xml
2017-04-30 23:17:55 +02:00
path = props . getProperty ( " path " ) ; //read path from property
2016-09-09 20:41:20 +02:00
streamingPath = props . getProperty ( " streamingPath " ) ;
2016-08-14 15:17:14 +02:00
color = props . getProperty ( " color " ) ;
size = Double . parseDouble ( props . getProperty ( " size " ) ) ;
2017-03-25 16:20:48 +01:00
autoUpdate = Boolean . parseBoolean ( props . getProperty ( " autoUpdate " ) ) ;
2017-02-09 20:39:43 +01:00
local = props . getProperty ( " local " ) ;
2017-01-06 00:04:07 +01:00
ratingSortType = props . getProperty ( " ratingSortType " ) ;
2017-04-30 23:17:55 +02:00
switch ( props . getProperty ( " mode " ) ) {
case " local " :
mode = " local " ;
break ;
case " streaming " :
mode = " streaming " ;
break ;
default :
mode = " local " ;
break ;
}
2016-08-14 15:17:14 +02:00
inputStream . close ( ) ;
} catch ( IOException e ) {
2017-02-09 20:39:43 +01:00
if ( firststart = = false ) {
showErrorMsg ( errorSave , e ) ;
e . printStackTrace ( ) ;
}
2017-03-25 16:20:48 +01:00
// showErrorMsg(errorLoad, e); //TODO This should not be visible at first startup
2016-08-14 15:17:14 +02:00
}
}
2017-02-09 20:39:43 +01:00
//cuts 0x of the Color-pickers return value
2016-09-09 20:41:20 +02:00
private void editColor ( String input ) {
StringBuilder sb = new StringBuilder ( input ) ;
sb . delete ( 0 , 2 ) ;
this . color = sb . toString ( ) ;
2017-03-05 18:29:24 +01:00
saveSettings ( ) ;
2016-09-09 20:41:20 +02:00
}
2016-11-21 18:24:06 +01:00
//getter and setter
2016-08-14 15:17:14 +02:00
public void setColor ( String input ) {
this . color = input ;
}
public String getColor ( ) {
return color ;
}
2016-09-09 20:41:20 +02:00
2016-08-14 15:17:14 +02:00
public void setPath ( String input ) {
this . path = input ;
}
public String getPath ( ) {
return path ;
}
2016-09-09 20:41:20 +02:00
public void setStreamingPath ( String input ) {
this . streamingPath = input ;
}
public String getStreamingPath ( ) {
return streamingPath ;
}
2016-08-14 15:17:14 +02:00
public void setSize ( Double input ) {
this . size = input ;
}
public Double getSize ( ) {
return size ;
}
2017-03-25 16:20:48 +01:00
public void setAutoUpdate ( boolean input ) {
2016-08-14 15:17:14 +02:00
this . autoUpdate = input ;
}
2017-03-25 16:20:48 +01:00
public boolean isAutoUpdate ( ) {
2016-08-14 15:17:14 +02:00
return autoUpdate ;
}
2017-02-09 20:39:43 +01:00
public void setLocal ( String input ) {
2016-08-14 15:17:14 +02:00
this . local = input ;
}
2017-02-09 20:39:43 +01:00
public String getLocal ( ) {
2016-08-14 15:17:14 +02:00
return local ;
}
2016-09-09 20:41:20 +02:00
public void setMode ( String input ) {
this . mode = input ;
}
public String getMode ( ) {
return mode ;
}
2017-04-25 23:35:20 +02:00
public String getCurrentWorkingDirectory ( ) {
return currentWorkingDirectory ;
}
public void setCurrentWorkingDirectory ( String currentWorkingDirectory ) {
this . currentWorkingDirectory = currentWorkingDirectory ;
}
2017-01-26 16:32:47 +01:00
}