2016-08-14 15:17:14 +02:00
/ * *
* Project HomeFlix
*
* Copyright 2016 < admin @kellerkinder >
*
* 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.DataInputStream ;
import java.io.File ;
import java.io.FileInputStream ;
import java.io.FileOutputStream ;
2016-09-09 20:41:20 +02:00
import java.io.FileReader ;
2016-08-14 15:17:14 +02:00
import java.io.IOException ;
import java.io.InputStream ;
import java.io.InputStreamReader ;
import java.io.OutputStream ;
import java.math.BigInteger ;
2016-09-09 20:41:20 +02:00
import java.net.URI ;
import java.net.URISyntaxException ;
2016-08-14 15:17:14 +02:00
import java.net.URL ;
import java.nio.channels.Channels ;
import java.nio.channels.ReadableByteChannel ;
import java.util.Locale ;
import java.util.Properties ;
import java.util.ResourceBundle ;
import java.util.Scanner ;
2016-08-15 18:36:57 +02:00
import org.apache.commons.lang3.SystemUtils ;
2016-08-14 15:17:14 +02:00
import com.eclipsesource.json.Json ;
2016-09-09 20:41:20 +02:00
import com.eclipsesource.json.JsonArray ;
2016-08-14 15:17:14 +02:00
import com.eclipsesource.json.JsonObject ;
2016-09-09 20:41:20 +02:00
import com.eclipsesource.json.JsonValue ;
2016-08-14 15:17:14 +02:00
import com.jfoenix.controls.JFXButton ;
import com.jfoenix.controls.JFXColorPicker ;
import com.jfoenix.controls.JFXDialog ;
import com.jfoenix.controls.JFXSlider ;
import com.jfoenix.controls.JFXTextArea ;
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.property.ReadOnlyObjectWrapper ;
import javafx.beans.property.ReadOnlyStringWrapper ;
import javafx.beans.value.ChangeListener ;
import javafx.beans.value.ObservableValue ;
import javafx.collections.FXCollections ;
import javafx.collections.ObservableList ;
import javafx.fxml.FXML ;
import javafx.scene.control.Alert ;
import javafx.scene.control.Alert.AlertType ;
import javafx.scene.control.ChoiceBox ;
import javafx.scene.control.Label ;
2016-09-09 20:41:20 +02:00
import javafx.scene.control.TableColumn ;
import javafx.scene.control.TableView ;
2016-08-14 15:17:14 +02:00
import javafx.scene.control.TreeItem ;
import javafx.scene.control.TreeTableColumn ;
import javafx.scene.control.TreeTableColumn.CellDataFeatures ;
import javafx.scene.control.TreeTableView ;
import javafx.scene.image.Image ;
import javafx.scene.image.ImageView ;
import javafx.scene.layout.AnchorPane ;
2016-10-09 16:05:44 +02:00
import javafx.scene.layout.HBox ;
2016-08-14 15:17:14 +02:00
import javafx.scene.layout.VBox ;
import javafx.scene.paint.Color ;
import javafx.scene.text.Font ;
import javafx.stage.DirectoryChooser ;
2016-10-10 16:55:26 +02:00
import javafx.util.Duration ;
2016-08-14 15:17:14 +02:00
public class MainWindowController {
@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
2016-09-09 20:41:20 +02:00
private TreeTableView < streamUiData > treeTableViewfilm ;
@FXML
2016-10-09 18:35:55 +02:00
private TableView < streamUiData > tableViewStreamingdata ;
2016-08-14 15:17:14 +02:00
@FXML
private JFXTextArea ta1 ;
@FXML
private JFXButton menubtn ;
@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-10-09 18:35:55 +02:00
private 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
2016-10-09 18:35:55 +02:00
public ChoiceBox < String > cbLocal ;
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
private JFXDialog dialog = new JFXDialog ( ) ;
@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 ;
2016-08-14 15:17:14 +02:00
@FXML
private ImageView image1 ;
@FXML
2016-10-10 16:55:26 +02:00
TreeItem < streamUiData > root = new TreeItem < > ( new streamUiData ( 1 , 1 , 1 , 5 . 0 , " 1 " , " filme " , " 1 " ) ) ;
2016-09-09 20:41:20 +02:00
@FXML
TreeTableColumn < streamUiData , Double > columnRating = new TreeTableColumn < > ( " Bewertung " ) ;
@FXML
TreeTableColumn < streamUiData , String > columnTitel = new TreeTableColumn < > ( " Name " ) ;
@FXML
TreeTableColumn < streamUiData , String > columnStreamUrl = new TreeTableColumn < > ( " Datei Name " ) ;
2016-08-14 15:17:14 +02:00
@FXML
2016-10-09 16:05:44 +02:00
TreeTableColumn < streamUiData , String > columnResolution = new TreeTableColumn < > ( " Aufl<EFBFBD> sung " ) ;
2016-08-14 15:17:14 +02:00
@FXML
2016-10-09 16:05:44 +02:00
TreeTableColumn < streamUiData , Integer > columnYear = new TreeTableColumn < > ( " Jahr " ) ;
2016-08-14 15:17:14 +02:00
@FXML
2016-10-09 16:05:44 +02:00
TreeTableColumn < streamUiData , Integer > columnSeason = new TreeTableColumn < > ( " Staffel " ) ;
2016-10-10 16:55:26 +02:00
@FXML
TreeTableColumn < streamUiData , Integer > columnEpisode = new TreeTableColumn < > ( " Episode " ) ;
2016-09-09 20:41:20 +02:00
@FXML
2016-10-10 16:55:26 +02:00
private TreeItem < streamUiData > streamingRoot = new TreeItem < > ( new streamUiData ( 1 , 1 , 1 , 1 . 0 , " 1 " , " filme " , " 1 " ) ) ;
2016-09-09 20:41:20 +02:00
@FXML
private TableColumn < streamUiData , String > dataNameColumn = new TableColumn < > ( " Datei Name " ) ;
@FXML
private TableColumn < streamUiData , String > dataNameEndColumn = new TableColumn < > ( " Datei Name mit Endung " ) ;
2016-08-14 15:17:14 +02:00
2016-10-09 18:35:55 +02:00
private boolean menutrue = false ; //merker f<> r menubtn (<28> ffnen oder schlie<69> en)
2016-08-14 15:17:14 +02:00
private boolean settingstrue = false ;
2016-09-09 20:41:20 +02:00
private boolean streamingSettingsTrue = false ;
2016-10-10 16:55:26 +02:00
private String version = " 0.3.8 " ;
private String versionName = " half glowing bucket " ;
2016-08-14 16:03:36 +02:00
private String versionURL = " https://raw.githubusercontent.com/Seil0/Project-HomeFlix/master/updates/version.txt " ;
2016-09-09 20:41:20 +02:00
private String downloadLink = " https://raw.githubusercontent.com/Seil0/Project-HomeFlix/master/updates/downloadLink.txt " ;
private File dir = new File ( System . getProperty ( " user.home " ) + " /Documents/HomeFlix " ) ;
private File file = new File ( dir + " /config.xml " ) ;
2016-08-14 15:17:14 +02:00
2016-08-14 16:03:36 +02:00
private String updateDataURL ;
private String errorUpdateD ;
private String errorUpdateV ;
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-08-14 15:17:14 +02:00
private String infoText ;
2016-08-15 18:36:57 +02:00
private String linuxBugText ;
private String vlcNotInstalled ;
2016-08-14 15:17:14 +02:00
private String aktVersion ;
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 ;
private String Name ;
private String datPath ;
private String autoUpdate ;
2016-09-09 20:41:20 +02:00
private String mode ;
2016-08-14 15:17:14 +02:00
private double size ;
private int last ;
private int selected ;
private int next ;
private int local ;
private File selectedFolder ;
2016-09-09 20:41:20 +02:00
private File selectedStreamingFolder ;
2016-08-14 15:17:14 +02:00
private ResourceBundle bundle ;
2016-09-09 20:41:20 +02:00
private ObservableList < streamUiData > newDaten = FXCollections . observableArrayList ( ) ;
private ObservableList < streamUiData > filterData = FXCollections . observableArrayList ( ) ;
private ObservableList < streamUiData > streamData = FXCollections . observableArrayList ( ) ;
2016-08-14 15:17:14 +02:00
private ObservableList < String > locals = FXCollections . observableArrayList ( " english " , " deutsch " ) ;
2016-09-09 20:41:20 +02:00
private ObservableList < streamUiData > streamingData = FXCollections . observableArrayList ( ) ;
2016-08-15 12:51:08 +02:00
private ImageView menu_icon_black = new ImageView ( new Image ( " recources/menu_icon_black.png " ) ) ;
private ImageView menu_icon_white = new ImageView ( new Image ( " recources/menu_icon_white.png " ) ) ;
2016-08-14 15:17:14 +02:00
private DirectoryChooser directoryChooser = new DirectoryChooser ( ) ;
Properties props = new Properties ( ) ;
//wenn menubtn clicked
/ * *
* 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 ( ) ) ;
2016-08-14 15:17:14 +02:00
saveSettings ( ) ;
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 ( ) {
2016-08-15 18:36:57 +02:00
if ( SystemUtils . IS_OS_LINUX ) {
System . out . println ( " This is 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 ;
}
System . out . println ( output ) ;
input . close ( ) ;
} catch ( IOException e1 ) {
// Auto-generated catch block
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 ) ;
alert . showAndWait ( ) ;
} else {
try {
Runtime . getRuntime ( ) . exec ( " vlc " + getPath ( ) + " / " + datPath ) ;
} catch ( IOException e ) {
Alert alert = new Alert ( AlertType . ERROR ) ;
alert . setHeaderText ( " " ) ;
alert . setTitle ( " Info " ) ;
alert . setContentText ( errorPlay ) ;
alert . showAndWait ( ) ;
e . printStackTrace ( ) ;
}
}
} else if ( SystemUtils . IS_OS_WINDOWS | | SystemUtils . IS_OS_MAC_OSX ) {
System . out . println ( " This is Windows or Mac OSX " ) ;
2016-09-09 20:41:20 +02:00
if ( mode . equals ( " local " ) ) {
try {
Desktop . getDesktop ( ) . open ( new File ( getPath ( ) + " \\ " + datPath ) ) ;
} catch ( IOException e ) {
Alert alert = new Alert ( AlertType . ERROR ) ;
alert . setHeaderText ( " " ) ;
alert . setTitle ( " Info " ) ;
alert . setContentText ( errorPlay ) ;
alert . showAndWait ( ) ;
e . printStackTrace ( ) ;
}
} else if ( mode . equals ( " streaming " ) ) {
try {
2016-10-09 16:05:44 +02:00
Desktop . getDesktop ( ) . browse ( new URI ( datPath ) ) ; //opening streaming url in browser (other option?)
2016-09-09 20:41:20 +02:00
} catch ( URISyntaxException | IOException e ) {
2016-10-09 16:05:44 +02:00
Alert alert = new Alert ( AlertType . ERROR ) ;
alert . setHeaderText ( " " ) ;
alert . setTitle ( " Error " ) ;
alert . setContentText ( errorOpenStream ) ;
alert . showAndWait ( ) ;
2016-09-09 20:41:20 +02:00
e . printStackTrace ( ) ;
}
} else {
2016-10-09 16:05:44 +02:00
Alert alert = new Alert ( AlertType . ERROR ) ;
alert . setHeaderText ( " " ) ;
alert . setTitle ( " Error " ) ;
alert . setContentText ( errorMode ) ;
alert . showAndWait ( ) ;
2016-08-15 18:36:57 +02:00
}
2016-08-14 15:17:14 +02:00
}
}
@FXML
private void openfolderbtnclicked ( ) {
try {
2016-09-09 20:41:20 +02:00
Desktop . getDesktop ( ) . open ( new File ( getPath ( ) ) ) ; //<2F> ffnet den aktuellen Pfad
2016-08-14 15:17:14 +02:00
} catch ( IOException e ) {
// Auto-generated catch block
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 ) ;
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 ( ) ) ;
2016-10-09 16:05:44 +02:00
saveSettings ( ) ;
settingstrue = false ;
}
}
/ * *
* TODO zus <EFBFBD> tzliche infos <EFBFBD> ber die dateien
* /
@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 " ) ;
}
saveSettings ( ) ;
root . getChildren ( ) . remove ( 0 , root . getChildren ( ) . size ( ) ) ;
addDataUI ( ) ;
2016-10-09 18:35:55 +02:00
settingsAnchor . setVisible ( false ) ;
streamingSettingsAnchor . setVisible ( false ) ;
2016-10-10 16:55:26 +02:00
sideMenuSlideOut ( ) ; //disables sidemenu
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 ( ) ) ;
saveSettings ( ) ;
}
@FXML
private void directoryBtnAction ( ) {
selectedFolder = directoryChooser . showDialog ( null ) ;
if ( selectedFolder = = null ) {
System . out . println ( " No Directory selected " ) ;
} else {
setPath ( selectedFolder . getAbsolutePath ( ) ) ;
saveSettings ( ) ;
tfPath . setText ( getPath ( ) ) ;
try {
Runtime . getRuntime ( ) . exec ( " java -jar ProjectHomeFlix.jar " ) ; //starte neu
System . exit ( 0 ) ; //beendet sich selbst
} 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 ( ) {
update ( ) ;
}
@FXML
private void autoupdateBtnAction ( ) {
if ( autoUpdate . equals ( " 0 " ) ) {
setAutoUpdate ( " 1 " ) ;
} else {
setAutoUpdate ( " 0 " ) ;
}
saveSettings ( ) ;
}
@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 ( ) ) ;
saveSettings ( ) ;
tfStreamingPath . setText ( getStreamingPath ( ) ) ;
try {
Runtime . getRuntime ( ) . exec ( " java -jar ProjectHomeFlix.jar " ) ; //starte neu
System . exit ( 0 ) ; //beendet sich selbst
} catch ( IOException e ) {
System . out . println ( " es ist ein Fehler aufgetreten " ) ;
e . printStackTrace ( ) ;
}
}
}
2016-10-09 16:05:44 +02:00
2016-08-14 15:17:14 +02:00
//"Main" Methode die beim start von der Klasse Main aufgerufen wird, initialiesirung der einzellnen UI-Objekte
public void setMain ( Main main ) {
loadSettings ( ) ;
initTabel ( ) ;
2016-10-09 16:05:44 +02:00
initActions ( ) ;
2016-09-09 20:41:20 +02:00
System . out . println ( " Mode: " + mode ) ;
2016-08-14 15:17:14 +02:00
2016-10-09 16:05:44 +02:00
debugBtn . setDisable ( true ) ; //debugging btn for tests
debugBtn . setVisible ( false ) ;
2016-09-09 20:41:20 +02:00
2016-10-09 18:35:55 +02:00
tfPath . setText ( getPath ( ) ) ;
2016-08-14 15:17:14 +02:00
2016-10-09 18:35:55 +02:00
sliderFontSize . setValue ( getSize ( ) ) ;
2016-08-14 15:17:14 +02:00
cbLocal . setItems ( locals ) ;
updateBtn . setFont ( Font . font ( " System " , 12 ) ) ;
if ( autoUpdate . equals ( " 1 " ) ) {
autoupdateBtn . setSelected ( true ) ;
update ( ) ;
} else {
autoupdateBtn . setSelected ( false ) ;
}
versionlbl . setText ( " Version: " + version ) ;
2016-10-09 18:35:55 +02:00
2016-08-14 15:17:14 +02:00
ta1 . setWrapText ( true ) ;
ta1 . setEditable ( false ) ;
ta1 . setFont ( Font . font ( " System " , getSize ( ) ) ) ;
}
2016-09-09 20:41:20 +02:00
//initialisierung der Tabellen f<> r filme(beide Modi) und Streaming-Settings
@SuppressWarnings ( { " unchecked " , " rawtypes " } )
2016-08-14 15:17:14 +02:00
private void initTabel ( ) {
2016-10-09 18:35:55 +02:00
//Filmtabelle
2016-08-14 15:17:14 +02:00
columnRating . setMaxWidth ( 120 ) ;
2016-09-09 20:41:20 +02:00
columnTitel . setMaxWidth ( 240 ) ;
columnStreamUrl . setMaxWidth ( 0 ) ;
2016-10-09 18:35:55 +02:00
dataNameColumn . setPrefWidth ( 130 ) ;
dataNameEndColumn . setPrefWidth ( 170 ) ;
2016-08-14 15:17:14 +02:00
treeTableViewfilm . setRoot ( root ) ;
treeTableViewfilm . setColumnResizePolicy ( TreeTableView . CONSTRAINED_RESIZE_POLICY ) ;
treeTableViewfilm . setShowRoot ( false ) ;
//inhalt in Zelle schreiben
2016-09-09 20:41:20 +02:00
columnTitel . setCellValueFactory ( ( CellDataFeatures < streamUiData , String > p ) - >
new ReadOnlyStringWrapper ( p . getValue ( ) . getValue ( ) . getTitel ( ) ) ) ;
2016-08-14 15:17:14 +02:00
2016-09-09 20:41:20 +02:00
columnRating . setCellValueFactory ( ( CellDataFeatures < streamUiData , Double > p ) - >
new ReadOnlyObjectWrapper < Double > ( p . getValue ( ) . getValue ( ) . getRating ( ) ) ) ;
columnStreamUrl . setCellValueFactory ( ( CellDataFeatures < streamUiData , String > p ) - >
new ReadOnlyStringWrapper ( p . getValue ( ) . getValue ( ) . getStreamUrl ( ) ) ) ;
2016-08-14 15:17:14 +02:00
2016-09-09 20:41:20 +02:00
columnResolution . setCellValueFactory ( ( CellDataFeatures < streamUiData , String > p ) - >
new ReadOnlyStringWrapper ( p . getValue ( ) . getValue ( ) . getResolution ( ) ) ) ;
columnYear . setCellValueFactory ( ( CellDataFeatures < streamUiData , Integer > p ) - >
new ReadOnlyObjectWrapper ( p . getValue ( ) . getValue ( ) . getYear ( ) ) ) ;
columnSeason . setCellValueFactory ( ( CellDataFeatures < streamUiData , Integer > p ) - >
new ReadOnlyObjectWrapper ( p . getValue ( ) . getValue ( ) . getSeason ( ) ) ) ;
2016-10-10 16:55:26 +02:00
columnEpisode . setCellValueFactory ( ( CellDataFeatures < streamUiData , Integer > p ) - >
new ReadOnlyObjectWrapper ( p . getValue ( ) . getValue ( ) . getEpisode ( ) ) ) ;
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 ) ;
2016-09-09 20:41:20 +02:00
treeTableViewfilm . getColumns ( ) . get ( 2 ) . setVisible ( false ) ; //blendet die Column mit den Dateinamen aus (wichtig um sie abzuspielen)
2016-08-14 15:17:14 +02:00
2016-09-09 20:41:20 +02:00
//Changelistener f<> r TreeTable
treeTableViewfilm . getSelectionModel ( ) . selectedItemProperty ( ) . addListener ( new ChangeListener < Object > ( ) {
2016-08-14 15:17:14 +02:00
@Override
public void changed ( ObservableValue < ? > observable , Object oldVal , Object newVal ) {
2016-09-09 20:41:20 +02:00
// last = selected; //f<> r autoplay
2016-08-14 15:17:14 +02:00
selected = treeTableViewfilm . getSelectionModel ( ) . getSelectedIndex ( ) ; // holt aktuelles Item
last = selected - 1 ;
next = selected + 1 ;
2016-09-09 20:41:20 +02:00
Name = columnTitel . getCellData ( selected ) ; // holt Namen des Aktuelle Items aus der ColumnName
datPath = columnStreamUrl . getCellData ( selected ) ; // holt den aktuellen Datei Pfad aus der ColumnDatName
ta1 . setText ( " " ) ; // l<> scht Text in ta1
2016-08-14 15:17:14 +02:00
apiAbfrage ( Name ) ; // startet die api abfrage
ta1 . positionCaret ( 0 ) ; // setzt die startposition des Cursors in
// ta1
}
} ) ;
2016-09-09 20:41:20 +02:00
//Streaming-Settings Tabelle
dataNameColumn . setCellValueFactory ( cellData - > cellData . getValue ( ) . titelProperty ( ) ) ;
dataNameEndColumn . setCellValueFactory ( cellData - > cellData . getValue ( ) . streamUrlProperty ( ) ) ;
2016-10-09 18:35:55 +02:00
tableViewStreamingdata . getColumns ( ) . addAll ( dataNameColumn , dataNameEndColumn ) ;
tableViewStreamingdata . setItems ( streamingData ) ;
2016-09-09 20:41:20 +02:00
}
//initialisierung der Button Actions
2016-10-09 16:05:44 +02:00
private void initActions ( ) {
2016-09-09 20:41:20 +02:00
2016-10-09 16:05:44 +02:00
//TODO unterscheiden zwischen streaming und local
tfsearch . textProperty ( ) . addListener ( new ChangeListener < String > ( ) {
@SuppressWarnings ( " unchecked " )
2016-09-09 20:41:20 +02:00
@Override
2016-10-09 16:05:44 +02:00
public void changed ( ObservableValue < ? extends String > observable , String oldValue , String newValue ) {
int counter = newDaten . size ( ) ;
filterData . removeAll ( filterData ) ;
root . getChildren ( ) . remove ( 0 , root . getChildren ( ) . size ( ) ) ;
for ( int i = 0 ; i < counter ; i + + ) {
if ( newDaten . get ( i ) . getTitel ( ) . toLowerCase ( ) . contains ( tfsearch . getText ( ) . toLowerCase ( ) ) ) {
filterData . add ( newDaten . get ( i ) ) ;
}
}
for ( int i = 0 ; i < filterData . size ( ) ; i + + ) {
root . getChildren ( ) . addAll ( new TreeItem < streamUiData > ( filterData . get ( i ) ) ) ; //f<> gt daten zur Rootnode hinzu
}
}
} ) ;
cbLocal . getSelectionModel ( ) . selectedIndexProperty ( )
. addListener ( new ChangeListener < Number > ( ) {
public void changed ( ObservableValue < ? extends Number > ov , Number value , Number new_value ) {
setLocal ( new_value . intValue ( ) ) ;
setLoaclUI ( local ) ;
saveSettings ( ) ;
}
} ) ;
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 ( ) ) ;
ta1 . setFont ( Font . font ( " System " , size ) ) ;
saveSettings ( ) ;
}
} ) ;
2016-08-14 15:17:14 +02:00
}
2016-09-09 20:41:20 +02:00
//pr<70> ft auf Update und f<> rht es gegebenenfalls aus
2016-08-14 15:17:14 +02:00
private void update ( ) {
System . out . println ( " check for updates ... " ) ;
try {
URL url = new URL ( versionURL ) ; //URL der Datei mit aktueller Versionsnummer
BufferedReader in = new BufferedReader ( new InputStreamReader ( url . openStream ( ) ) ) ;
aktVersion = in . readLine ( ) ; //schreibt inputstream in String
in . close ( ) ;
} catch ( IOException e1 ) {
2016-08-14 16:03:36 +02:00
Alert alert = new Alert ( AlertType . ERROR ) ;
alert . setTitle ( " Error " ) ;
alert . setHeaderText ( " " ) ;
alert . setContentText ( errorUpdateV ) ;
alert . showAndWait ( ) ;
2016-08-14 15:17:14 +02:00
e1 . printStackTrace ( ) ;
}
System . out . println ( " Version: " + version + " , Update: " + aktVersion ) ;
2016-08-15 18:36:57 +02:00
//vergleicht die Versionsnummern, bei aktversion > version wird ein Update durchgrf<72> hrt
2016-08-14 15:17:14 +02:00
int iversion = Integer . parseInt ( version . replace ( " . " , " " ) ) ;
int iaktVersion = Integer . parseInt ( aktVersion . replace ( " . " , " " ) ) ;
if ( iversion > = iaktVersion ) {
2016-09-09 20:41:20 +02:00
updateBtn . setText ( " kein Update ver<65> gbar " ) ;
System . out . println ( " kein Update verf<72> gbar " ) ;
2016-08-14 15:17:14 +02:00
} else {
2016-09-09 20:41:20 +02:00
updateBtn . setText ( " Update verf<72> gbar " ) ;
System . out . println ( " Update verf<72> gbar " ) ;
2016-08-14 15:17:14 +02:00
try {
URL website ;
URL downloadURL = new URL ( downloadLink ) ;
BufferedReader in = new BufferedReader ( new InputStreamReader ( downloadURL . openStream ( ) ) ) ;
2016-08-14 16:03:36 +02:00
updateDataURL = in . readLine ( ) ;
2016-08-14 15:17:14 +02:00
website = new URL ( updateDataURL ) ; //Update URL
2016-08-15 18:36:57 +02:00
ReadableByteChannel rbc = Channels . newChannel ( website . openStream ( ) ) ; //<2F> ffnet neuen Stream/Channel
FileOutputStream fos = new FileOutputStream ( " ProjectHomeFlix.jar " ) ; //neuer fileoutputstram f<> r ProjectHomeFLix.jar
fos . getChannel ( ) . transferFrom ( rbc , 0 , Long . MAX_VALUE ) ; //holt datei von 0 bis max gr<67> <72> e
fos . close ( ) ; //schlie<69> t den fos (extrem wichtig!)
2016-08-14 15:17:14 +02:00
Runtime . getRuntime ( ) . exec ( " java -jar ProjectHomeFlix.jar " ) ; //starte neu
System . exit ( 0 ) ; //beendet sich selbst
} catch ( IOException e ) {
2016-08-14 16:03:36 +02:00
//Falls ein Fehler auftritt
2016-08-14 15:17:14 +02:00
e . printStackTrace ( ) ;
Alert alert = new Alert ( AlertType . ERROR ) ;
alert . setTitle ( " Error " ) ;
alert . setHeaderText ( " " ) ;
2016-08-14 16:03:36 +02:00
alert . setContentText ( errorUpdateD ) ;
2016-08-14 15:17:14 +02:00
alert . showAndWait ( ) ;
e . printStackTrace ( ) ;
}
}
}
2016-09-09 20:41:20 +02:00
//l<> dt die Daten im angegeben Ordner in newDaten
2016-08-14 15:17:14 +02:00
public void loadData ( ) {
2016-09-09 20:41:20 +02:00
//load local Data
if ( getPath ( ) . equals ( " " ) | | getPath ( ) . equals ( null ) ) {
System . out . println ( " Kein Pfad angegeben " ) ; //falls der Pfad null oder "" ist
} else {
String [ ] entries = new File ( getPath ( ) ) . list ( ) ;
for ( int i = 0 ; i < entries . length ; i + + ) {
String titel = ohneEndung ( entries [ i ] ) ;
String data = entries [ i ] ;
2016-10-10 16:55:26 +02:00
newDaten . add ( new streamUiData ( 1 , 1 , 1 , 5 . 0 , " 1 " , titel , data ) ) ;
2016-09-09 20:41:20 +02:00
}
}
//load streaming Data TODO pr<70> fen ob streaming daten vorhanden -> momentan evtl. fehler
String titel = null ;
String resolution = null ;
String streamUrl = null ;
int season ;
2016-10-10 16:55:26 +02:00
int episode ;
2016-09-09 20:41:20 +02:00
int year ;
double rating = 5 . 0 ;
if ( getStreamingPath ( ) . equals ( " " ) | | getStreamingPath ( ) . equals ( null ) ) {
System . out . println ( " Kein Pfad angegeben " ) ; //falls der Pfad null oder "" ist
} else {
for ( int i = 0 ; i < streamingData . size ( ) ; i + + ) {
String fileName = streamingPath + " / " + streamingData . get ( i ) . getStreamUrl ( ) ;
try {
JsonObject object = Json . parse ( new FileReader ( fileName ) ) . asObject ( ) ;
JsonArray items = object . get ( " entries " ) . asArray ( ) ;
for ( JsonValue item : items ) {
titel = item . asObject ( ) . getString ( " titel " , " " ) ;
season = item . asObject ( ) . getInt ( " season " , 0 ) ;
2016-10-10 16:55:26 +02:00
episode = item . asObject ( ) . getInt ( " episode " , 0 ) ;
2016-09-09 20:41:20 +02:00
year = item . asObject ( ) . getInt ( " year " , 0 ) ;
resolution = item . asObject ( ) . getString ( " resolution " , " " ) ;
streamUrl = item . asObject ( ) . getString ( " streamUrl " , " " ) ;
2016-10-10 16:55:26 +02:00
streamData . add ( new streamUiData ( year , season , episode , rating , resolution , titel , streamUrl ) ) ;
2016-09-09 20:41:20 +02:00
}
} catch ( IOException e ) {
//Auto-generated catch block
e . printStackTrace ( ) ;
}
}
}
}
public void addDataUI ( ) {
if ( mode . equals ( " local " ) ) {
for ( int i = 0 ; i < newDaten . size ( ) ; i + + ) {
root . getChildren ( ) . add ( new TreeItem < streamUiData > ( newDaten . get ( i ) ) ) ; //f<> gt daten zur Rootnode hinzu
}
columnRating . setMaxWidth ( 120 ) ;
columnTitel . setMaxWidth ( 240 ) ;
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 " ) ) {
for ( int i = 0 ; i < streamData . size ( ) ; i + + ) {
root . getChildren ( ) . add ( new TreeItem < streamUiData > ( streamData . get ( i ) ) ) ; //f<> gt daten zur Rootnode hinzu
}
columnTitel . setMaxWidth ( 150 ) ;
columnResolution . setMaxWidth ( 65 ) ;
columnRating . setMaxWidth ( 52 . 5 ) ;
columnYear . setMaxWidth ( 40 ) ;
columnSeason . setMaxWidth ( 52 . 5 ) ;
2016-10-10 16:55:26 +02:00
columnEpisode . setMaxWidth ( 0 ) ; //disabled for ui size reasons
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
}
}
2016-09-09 20:41:20 +02:00
public void loadStreamingSettings ( ) {
if ( getStreamingPath ( ) . equals ( " " ) | | getStreamingPath ( ) . equals ( null ) ) {
System . out . println ( " Kein Pfad angegeben " ) ; //falls der Pfad null oder "" ist
} 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 ] ;
2016-10-10 16:55:26 +02:00
streamingData . add ( new streamUiData ( 1 , 1 , 1 , 5 . 0 , " 1 " , titel , data ) ) ;
2016-09-09 20:41:20 +02:00
}
}
for ( int i = 0 ; i < streamingData . size ( ) ; i + + ) {
streamingRoot . getChildren ( ) . add ( new TreeItem < streamUiData > ( streamingData . get ( i ) ) ) ; //f<> gt daten zur Rootnode hinzu
}
}
}
2016-08-14 15:17:14 +02:00
//entfernt die Endung vom String
private String ohneEndung ( String str ) {
if ( str = = null ) return null ;
int pos = str . lastIndexOf ( " . " ) ;
if ( pos = = - 1 ) return str ;
return str . substring ( 0 , pos ) ;
}
2016-09-09 20:41:20 +02:00
//setzt die Farben f<> r die UI-Elemente
2016-08-14 15:17:14 +02:00
public void applyColor ( ) {
String style = " -fx-background-color: # " + getColor ( ) + " ; " ;
String btnStyle = " -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; " ;
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-08-14 15:17:14 +02:00
directoryBtn . setStyle ( btnStylewhite ) ;
2016-09-09 20:41:20 +02:00
streamingDirectoryBtn . setStyle ( btnStyle ) ;
2016-08-14 15:17:14 +02:00
updateBtn . setStyle ( btnStylewhite ) ;
playbtn . setStyle ( btnStylewhite ) ;
openfolderbtn . setStyle ( btnStylewhite ) ;
returnBtn . setStyle ( btnStylewhite ) ;
forwardBtn . setStyle ( btnStylewhite ) ;
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-08-14 15:17:14 +02:00
directoryBtn . setStyle ( btnStyle ) ;
2016-09-09 20:41:20 +02:00
streamingDirectoryBtn . setStyle ( btnStyle ) ;
2016-08-14 15:17:14 +02:00
updateBtn . setStyle ( btnStyle ) ;
playbtn . setStyle ( btnStyle ) ;
openfolderbtn . setStyle ( btnStyle ) ;
returnBtn . setStyle ( btnStyle ) ;
forwardBtn . setStyle ( btnStyle ) ;
menubtn . setGraphic ( menu_icon_black ) ;
}
2016-09-09 20:41:20 +02:00
//das solte weg kann aber hier bleiben wicht ist dass es zum selben zeitpunkt wie aply color ausgef<65> hrt wird
if ( mode . equals ( " local " ) ) {
2016-10-09 16:05:44 +02:00
switchBtn . setText ( " streaming " ) ; //TODO translate
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 ) ;
//einblenden von 40% nach 100% deckkraft in 400ms
FadeTransition fadeTransition = new FadeTransition ( Duration . millis ( 400 ) , sideMenuVBox ) ;
fadeTransition . setFromValue ( 0 . 4 ) ;
fadeTransition . setToValue ( 1 . 0 ) ;
//einfahren des side munes in 400ms
TranslateTransition translateTransition = new TranslateTransition ( Duration . millis ( 400 ) , sideMenuVBox ) ;
translateTransition . setFromX ( - 150 ) ;
translateTransition . setToX ( 0 ) ;
//falls beides verwendet werden soll
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);
//ausblenden von 100% nach 40% deckkraft in 400ms
FadeTransition fadeTransition = new FadeTransition ( Duration . millis ( 400 ) , sideMenuVBox ) ;
fadeTransition . setFromValue ( 1 . 0 ) ;
fadeTransition . setToValue ( 0 . 4 ) ;
//ausfahren des side munes in 400ms
TranslateTransition translateTransition = new TranslateTransition ( Duration . millis ( 400 ) , sideMenuVBox ) ;
translateTransition . setFromX ( 0 ) ;
translateTransition . setToX ( - 150 ) ;
//falls beides verwendet werden soll
ParallelTransition parallelTransition = new ParallelTransition ( ) ;
parallelTransition . getChildren ( ) . addAll ( translateTransition ) ; //(fadeTransition, translateTransition);
parallelTransition . play ( ) ;
}
2016-08-14 15:17:14 +02:00
public void setLoaclUI ( int local ) {
switch ( local ) {
2016-08-15 18:36:57 +02:00
case 0 : bundle = ResourceBundle . getBundle ( " recources.HomeFlix-Local " , Locale . US ) ; //us_english
2016-08-14 15:17:14 +02:00
break ;
2016-08-15 18:36:57 +02:00
case 1 : bundle = ResourceBundle . getBundle ( " recources.HomeFlix-Local " , Locale . GERMAN ) ; //german
2016-08-14 15:17:14 +02:00
break ;
2016-08-15 18:36:57 +02:00
default : bundle = ResourceBundle . getBundle ( " recources.HomeFlix-Local " , Locale . US ) ; //default local
2016-08-14 15:17:14 +02:00
break ;
}
infoBtn . setText ( bundle . getString ( " info " ) ) ;
2016-10-09 16:05:44 +02:00
settingsBtn . setText ( bundle . getString ( " settings " ) ) ;
streamingSettingsBtn . setText ( bundle . getString ( " streamingSettings " ) ) ;
2016-08-14 15:17:14 +02:00
playbtn . setText ( bundle . getString ( " play " ) ) ;
2016-10-09 18:35:55 +02:00
tfPath . setPromptText ( bundle . getString ( " tfPath " ) ) ;
tfStreamingPath . setPromptText ( bundle . getString ( " tfPath " ) ) ;
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 " ) ) ;
versionlbl . setText ( bundle . getString ( " version " ) + " " + version ) ;
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-10-10 16:55:26 +02:00
infoText = bundle . getString ( " version " ) + " " + version + " " + versionName + bundle . getString ( " infoText " ) ;
2016-08-15 18:36:57 +02:00
linuxBugText = bundle . getString ( " linuxBug " ) ;
vlcNotInstalled = bundle . getString ( " vlcNotInstalled " ) ;
2016-08-14 15:17:14 +02:00
}
//speichert die Einstellungen
public void saveSettings ( ) {
try {
props . setProperty ( " path " , getPath ( ) ) ; //setzt pfad in propselement
props . setProperty ( " color " , getColor ( ) ) ;
props . setProperty ( " autoUpdate " , getAutoUpdate ( ) ) ;
props . setProperty ( " size " , getSize ( ) . toString ( ) ) ;
props . setProperty ( " local " , Integer . toString ( getLocal ( ) ) ) ;
2016-09-09 20:41:20 +02:00
props . setProperty ( " streamingPath " , getStreamingPath ( ) ) ;
props . setProperty ( " mode " , getMode ( ) ) ;
OutputStream outputStream = new FileOutputStream ( file ) ; //neuer outputstream
2016-08-14 15:17:14 +02:00
props . storeToXML ( outputStream , " Project HomeFlix settings " ) ;
outputStream . close ( ) ;
} catch ( IOException e ) {
System . out . println ( " An error has occurred! " ) ;
e . printStackTrace ( ) ;
}
}
2016-09-09 20:41:20 +02:00
//l<> dt die Einstellungen
2016-08-14 15:17:14 +02:00
public void loadSettings ( ) {
try {
2016-09-09 20:41:20 +02:00
InputStream inputStream = new FileInputStream ( file ) ;
2016-08-14 15:17:14 +02:00
props . loadFromXML ( inputStream ) ;
path = props . getProperty ( " path " ) ; //setzt Propselement in Pfad
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 " ) ) ;
autoUpdate = props . getProperty ( " autoUpdate " ) ;
local = Integer . parseInt ( props . getProperty ( " local " ) ) ;
2016-09-09 20:41:20 +02:00
mode = props . getProperty ( " mode " ) ;
2016-08-14 15:17:14 +02:00
inputStream . close ( ) ;
} catch ( IOException e ) {
System . out . println ( " An error has occurred! " ) ;
e . printStackTrace ( ) ;
}
}
2016-09-09 20:41:20 +02:00
//entfernt 0x von dem R<> ckgabewert des Colorpickers
private void editColor ( String input ) {
StringBuilder sb = new StringBuilder ( input ) ;
sb . delete ( 0 , 2 ) ;
this . color = sb . toString ( ) ;
saveSettings ( ) ;
}
2016-08-14 15:17:14 +02:00
//getter Und setter
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 ;
}
public void setAutoUpdate ( String input ) {
this . autoUpdate = input ;
}
public String getAutoUpdate ( ) {
return autoUpdate ;
}
public void setLocal ( int input ) {
this . local = input ;
}
public int getLocal ( ) {
return local ;
}
2016-09-09 20:41:20 +02:00
public void setMode ( String input ) {
this . mode = input ;
}
public String getMode ( ) {
return mode ;
}
2016-08-14 15:17:14 +02:00
//methode der API-Abfrage
@SuppressWarnings ( " deprecation " )
private void apiAbfrage ( String input ) {
URL url = null ;
Scanner sc = null ;
String apiurl = " https://www.omdbapi.com/? " ; //API URL
String moviename = null ;
String dataurl = null ;
String retdata = null ;
InputStream is = null ;
DataInputStream dis = null ;
try {
// hohlen des Filmtitels
sc = new Scanner ( System . in ) ;
moviename = input ;
2016-09-09 20:41:20 +02:00
// f<> r keinen oder "" Filmtitel
2016-08-14 15:17:14 +02:00
if ( moviename = = null | | moviename . equals ( " " ) ) {
System . out . println ( " No movie found " ) ;
}
//entfernen ungewolter leerzeichen
moviename = moviename . trim ( ) ;
2016-09-09 20:41:20 +02:00
// ersetzen der Leerzeichen durch + f<> r api-abfrage
2016-08-14 15:17:14 +02:00
moviename = moviename . replace ( " " , " + " ) ;
2016-09-09 20:41:20 +02:00
//URL wird zusammengestellt abfragetypen: http,json,xml (muss json sein um sp<73> teres trennen zu erm<72> glichen)
2016-08-14 15:17:14 +02:00
dataurl = apiurl + " t= " + moviename + " &plot=full&r=json " ;
url = new URL ( dataurl ) ;
is = url . openStream ( ) ;
dis = new DataInputStream ( is ) ;
// lesen der Daten aus dem Antwort Stream
while ( ( retdata = dis . readLine ( ) ) ! = null ) {
2016-09-09 20:41:20 +02:00
//retdata in json object parsen und anschlie<69> end das json Objekt "zerschneiden"
2016-08-14 15:17:14 +02:00
System . out . println ( retdata ) ;
JsonObject object = Json . parse ( retdata ) . asObject ( ) ;
String titel = object . getString ( " Title " , " " ) ;
String year = object . getString ( " Year " , " " ) ;
String rated = object . getString ( " Rated " , " " ) ;
String released = object . getString ( " Released " , " " ) ;
String runtime = object . getString ( " Runtime " , " " ) ;
String genre = object . getString ( " Genre " , " " ) ;
String director = object . getString ( " Director " , " " ) ;
String writer = object . getString ( " Writer " , " " ) ;
String actors = object . getString ( " Actors " , " " ) ;
String plot = object . getString ( " Plot " , " " ) ;
String language = object . getString ( " Language " , " " ) ;
String country = object . getString ( " Country " , " " ) ;
String awards = object . getString ( " Awards " , " " ) ;
String posterURL = object . getString ( " Poster " , " " ) ;
String metascore = object . getString ( " Metascore " , " " ) ;
String imdbRating = object . getString ( " imdbRating " , " " ) ;
@SuppressWarnings ( " unused " )
String imdbVotes = object . getString ( " imdbVotes " , " " ) ;
@SuppressWarnings ( " unused " )
String imdbID = object . getString ( " imdbID " , " " ) ;
String type = object . getString ( " Type " , " " ) ;
String response = object . getString ( " Response " , " " ) ;
if ( response . equals ( " False " ) ) {
2016-08-14 17:03:39 +02:00
ta1 . appendText ( " Kein Film mit diesem Titel gefunden!! " ) ;
2016-08-14 15:17:14 +02:00
Image im2 = new Image ( " http://publicdomainvectors.org/photos/jean_victor_balin_cross.png " ) ;
image1 . setImage ( im2 ) ;
} else {
//ausgabe des Textes in ta1 in jeweils neuer Zeile
ta1 . appendText ( " Titel: " + titel + " \ n " ) ;
ta1 . appendText ( " Jahr: " + year + " \ n " ) ;
ta1 . appendText ( " Einstufung: " + rated + " \ n " ) ;
2016-10-09 18:35:55 +02:00
ta1 . appendText ( " Ver<EFBFBD> ffentlicht am: " + released + " \ n " ) ;
2016-08-14 15:17:14 +02:00
ta1 . appendText ( " Laufzeit: " + runtime + " \ n " ) ;
ta1 . appendText ( " Genre: " + genre + " \ n " ) ;
ta1 . appendText ( " Regisseur: " + director + " \ n " ) ;
ta1 . appendText ( " Autor: " + writer + " \ n " ) ;
ta1 . appendText ( " Schauspieler: " + actors + " \ n " ) ;
ta1 . appendText ( " Beschreibung: " + plot + " \ n " ) ;
ta1 . appendText ( " Original Sprache: " + language + " \ n " ) ;
ta1 . appendText ( " Produktionsland: " + country + " \ n " ) ;
ta1 . appendText ( " Auszeichnungen: " + awards + " \ n " ) ;
ta1 . appendText ( " Metascore: " + metascore + " \ n " ) ;
ta1 . appendText ( " imdb Bewertung: " + imdbRating + " \ n " ) ;
ta1 . appendText ( " Type: " + type + " \ n " ) ;
Image im1 = new Image ( posterURL ) ;
image1 . setImage ( im1 ) ;
}
}
} catch ( Exception e ) {
System . out . println ( e ) ;
} finally {
try {
2016-09-09 20:41:20 +02:00
//schlie<69> t datainputStream, InputStream,Scanner
2016-08-14 15:17:14 +02:00
if ( dis ! = null ) {
dis . close ( ) ;
}
if ( is ! = null ) {
is . close ( ) ;
}
if ( sc ! = null ) {
sc . close ( ) ;
}
} catch ( Exception e2 ) {
;
}
}
}
2016-08-14 17:03:39 +02:00
}