initial release

This commit is contained in:
Seil0
2016-08-14 15:17:14 +02:00
parent 833c85dad6
commit c3a3398112
41 changed files with 1475 additions and 0 deletions

9
.classpath Normal file
View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
<classpathentry kind="con" path="org.eclipse.fx.ide.jdt.core.JAVAFX_CONTAINER"/>
<classpathentry kind="lib" path="C:/Users/Jannik/workspace/Project HomeFlix/jfoenix.jar"/>
<classpathentry kind="lib" path="C:/Users/Jannik/workspace/Project HomeFlix/minimal-json-0.9.4.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>

3
.gitignore vendored
View File

@ -45,3 +45,6 @@ $RECYCLE.BIN/
Network Trash Folder
Temporary Items
.apdisk
ProjectHomeFlix.jar
jfoenix.jar
minimal-json-0.9.4.jar

23
.project Normal file
View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>Project HomeFlix</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>

View File

@ -0,0 +1,11 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.8

BIN
bin/Homeflix_Icon_64x64.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
bin/Homeflix_Poster.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,15 @@
# HomeFlix-Local_de_DE.properties German Local
info = Info
settings = Einstellungen
play = play
openFolder = Ordner \u00F6ffnen
chooseFolder = Ordner auswählen
fontSize = Schriftgr\u00F6\u00DFe:
checkUpdates = Auf Update pr\u00FCfen
autoUpdate = beim Start nach Updates suchen:
version = Version:
columnName = Name
columnRating = Bewertung
columnDatName = Datei Name
errorUpdate = Es ist ein Fehler aufgetreten! \n Um Hilfe zu erhalten besuchen Sie \nwww.kellerkinder.xyz oder support@kellerkinder.xyz
infoText = \nMaintainer: seilo@kellerkinder.xyz und \nhendrik.schutter@coptersicht.de \n(c) 2016 Kellerkinder www.kellerkinder.xyz

View File

@ -0,0 +1,15 @@
# HomeFlix-Local_en_US.properties US-English Local and default
info = Info
settings = Settings
play = play
openFolder = open Folder
chooseFolder = choose Directory
fontSize = font size:
checkUpdates = check for updates
autoUpdate = check at startup for updates:
version = Version:
columnName = Name
columnRating = Rating
columnDatName = File Name
errorUpdate = An error has occurred! \n To get help, visit \n nwww.kellerkinder.xyz or support@kellerkinder.xyz
infoText = \nMaintainer: seilo@kellerkinder.xyz and \nhendrik.schutter@coptersicht.de \n(c) 2016 Kellerkinder www.kellerkinder.xyz

BIN
bin/application/Main.class Normal file

Binary file not shown.

View File

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import com.jfoenix.controls.JFXButton?>
<?import com.jfoenix.controls.JFXTextArea?>
<?import com.jfoenix.controls.JFXTextField?>
<?import javafx.scene.control.TreeTableView?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>
<AnchorPane fx:id="anpane" prefHeight="600.0" prefWidth="900.0" xmlns="http://javafx.com/javafx/8.0.60" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.MainWindowController">
<children>
<VBox fx:id="topVBox" prefHeight="32.0" prefWidth="800.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<children>
<JFXButton fx:id="menubtn" onAction="#menubtnclicked" prefHeight="32.0" prefWidth="67.0" text="Menu" />
</children>
</VBox>
<TreeTableView fx:id="treeTableViewfilm" layoutX="14.0" layoutY="88.0" prefHeight="400.0" prefWidth="360.0" AnchorPane.bottomAnchor="12.0" AnchorPane.leftAnchor="12.0" AnchorPane.topAnchor="88.0" />
<JFXTextArea fx:id="ta1" layoutX="385.0" layoutY="42.0" maxWidth="503.0" minWidth="275.0" prefHeight="546.0" prefWidth="293.0" AnchorPane.bottomAnchor="12.0" AnchorPane.leftAnchor="385.0" AnchorPane.rightAnchor="222.0" AnchorPane.topAnchor="44.0" />
<JFXButton fx:id="playbtn" layoutX="690.0" layoutY="363.0" onAction="#playbtnclicked" prefHeight="25.0" prefWidth="198.0" text="play" AnchorPane.bottomAnchor="212.0" AnchorPane.rightAnchor="12.0">
<font>
<Font name="System Bold" size="14.0" />
</font></JFXButton>
<JFXButton fx:id="openfolderbtn" layoutX="690.0" layoutY="404.0" onAction="#openfolderbtnclicked" prefHeight="25.0" prefWidth="198.0" text="open Folder" AnchorPane.bottomAnchor="171.0" AnchorPane.rightAnchor="12.0">
<font>
<Font name="System Bold" size="14.0" />
</font></JFXButton>
<JFXTextField fx:id="tfsearch" layoutX="12.0" layoutY="44.0" maxWidth="477.0" minWidth="359.0" prefHeight="31.0" prefWidth="359.0" promptText="Suche ..." AnchorPane.leftAnchor="12.0" AnchorPane.topAnchor="44.0">
<font>
<Font name="Arial" size="12.0" />
</font></JFXTextField>
<ImageView fx:id="image1" fitHeight="297.0" fitWidth="198.0" layoutX="481.0" layoutY="46.0" pickOnBounds="true" preserveRatio="true" AnchorPane.rightAnchor="12.0" AnchorPane.topAnchor="44.0" />
<JFXButton fx:id="returnBtn" layoutX="690.0" layoutY="443.0" onAction="#returnBtnclicked" prefHeight="25.0" prefWidth="90.0" text="&lt;&lt;" AnchorPane.bottomAnchor="132.0" AnchorPane.rightAnchor="120.0" />
<JFXButton fx:id="forwardBtn" layoutX="798.0" layoutY="443.0" onAction="#forwardBtnclicked" prefHeight="25.0" prefWidth="90.0" text="&gt;&gt;" AnchorPane.bottomAnchor="132.0" AnchorPane.rightAnchor="12.0" />
</children>
</AnchorPane>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1 @@
/* JavaFX CSS - Leave this comment until you have at least create one rule which uses -fx-Property */

Binary file not shown.

BIN
bin/menu_icon_black.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

8
build.fxbuild Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="ASCII"?>
<anttasks:AntTask xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:anttasks="http://org.eclipse.fx.ide.jdt/1.0" buildDirectory="${project}/build">
<deploy>
<application name="Project HomeFlix"/>
<info/>
</deploy>
<signjar/>
</anttasks:AntTask>

10
config.xml Normal file
View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>Project HomeFlix settings</comment>
<entry key="color">ee3523</entry>
<entry key="autoUpdate">0</entry>
<entry key="size">12.0</entry>
<entry key="local">1</entry>
<entry key="path">C:\Users\Jannik\Videos\Beispielfilme</entry>
</properties>

BIN
src/Homeflix_Icon_64x64.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
src/Homeflix_Poster.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

View File

@ -0,0 +1,216 @@
package application;
import java.sql.Connection; //f<>r Datenbank
import java.sql.DriverManager; //f<>r Datenbank
import java.sql.PreparedStatement; //f<>r Datenbank
import java.sql.ResultSet; //f<>r Datenbank
import java.sql.SQLException; //f<>r Datenbank
import java.sql.Statement; //f<>r Datenbank
import java.io.File;//f<>r Dateien einlesen
class DBController {
@SuppressWarnings("unused")
private MainWindowController mainWindowController;
private static final DBController dbcontroller = new DBController();
private static Connection connection;
private static final String DB_PATH = System.getProperty("user.dir") + "/" + "Homeflix.db"; // der Pfad der Datenbank-Datei
private String path;
File f;
File file[]; //ArrayList f<>r die Dateien
static {
try {
Class.forName("org.sqlite.JDBC"); //Datenbanktreiber
} catch (ClassNotFoundException e) {
System.err.println("Fehler beim Laden des JDBC-Treibers");
e.printStackTrace();
}
}
public static void main(String input) {
DBController datenbank = DBController.getInstance(); //neues Datenbank-Objekt wird erstellt
datenbank.setPath(input); // Pfad zuweisen
datenbank.f = new File(datenbank.getPath()); // f<>r Datenbank-Datei einlesen
datenbank.file = datenbank.f.listFiles(); // f<>r Datenbank-Datei einlesen
datenbank.verbindeDatenbank();
datenbank.fuelleDatenbank();
//datenbank.defavorisieren("Frozen");
//datenbank.favorisieren("Frozen");
//datenbank.ausgebenTitel();
//System.out.println("Pfad: " + datenbank.getPfad("Frozen"));
//System.out.println("Bewertung: " + datenbank.getFavStatus("Frozen"));
}
DBController(){
}
private static DBController getInstance(){
return dbcontroller;
}
// Die Datenbak wird mit Hilfe des JDBC-Treibers eingebunden
public void verbindeDatenbank() {
try {
if (connection != null)
return;
System.out.println("Erstelle Verbindung zur Datenbank...");
connection = DriverManager.getConnection("jdbc:sqlite:" + DB_PATH);
if (!connection.isClosed())
System.out.println("...Verbindung hergestellt");
} catch (SQLException e) {
throw new RuntimeException(e);
}
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
try {
if (!connection.isClosed() && connection != null) {
connection.close();
if (connection.isClosed())
System.out.println("Verbindung getrennt");
}
} catch (SQLException e) {
e.printStackTrace();
}
}
});
}
// Die Dateien werden in die Datenbank geschrieben
public void fuelleDatenbank() {
try {
System.out.println("Erstelle Eintr<74>ge");
Statement stmt = connection.createStatement();
stmt.executeUpdate("DROP TABLE IF EXISTS filme;");
stmt.executeUpdate("CREATE TABLE filme (titel, pfad, bewertung);"); // Tabelle "filme" und die Spalten "titel", "pfad", "bewertung" erstellen
PreparedStatement ps = connection.prepareStatement("INSERT INTO filme VALUES (?, ?, ?);"); // SQL Befehl
//System.out.println(file.length);
for(int i=0;i!=file.length;i++) // Geht alle Dateien im Verzeichniss durch
{
//System.out.println(file[i].getName());
ps.setString(1, ohneEndung(file[i].getName())); // definiert Name als String in der ersten Spalte
ps.setString(2,file[i].getName()); // definiert Pfad als String in der zweiten Spalte
ps.setInt(3, 0); // definiert Bewertung als Integer in der dritten Spalte
ps.addBatch(); // f<>gt den Eintrag hinzu
}
connection.setAutoCommit(false);
ps.executeBatch(); // scheibt alle Eintr<74>ge in die Datenbank
connection.setAutoCommit(true);
//connection.close();
} catch (SQLException e) {
System.err.println("Konnte nicht ausgef<65>hrt werden");
e.printStackTrace();
}
}
public void ausgeben(){
System.out.println("Eintr<EFBFBD>ge ausgeben");
try {
Statement stmt = connection.createStatement();
mainWindowController = new MainWindowController();
ResultSet rs = stmt.executeQuery("SELECT * FROM filme;");
while (rs.next()) {
// MainWindowController mainWindowController = new MainWindowController();
}
//rs.close();
// mainWindowController.initTabel();
} catch (SQLException e) {
System.err.println("Konnte nicht ausgef<65>hrt werden");
e.printStackTrace();
}
}
// Kontroll Methode, ob ein Film wirklich in der Datenbank ist
public String getTitel(String name){
try {
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery("SELECT titel, pfad FROM filme WHERE titel = '"+name+"';" );
return rs.getString("titel");
} catch (SQLException e) {
System.err.println("Konnte nicht ausgef<65>hrt werden");
e.printStackTrace();
}
return "Error 404";
}
// gibt den Pfad eines bestimmten Films
public String getPfad(String name){
try {
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery("SELECT titel, pfad FROM filme WHERE titel = '"+name+"';" ); //SQL Befehl
return rs.getString("pfad");
} catch (SQLException e) {
System.err.println("Konnte nicht ausgef<65>hrt werden");
e.printStackTrace();
}
return "Error 404";
}
// gibt die Favorisierung eines bestimmten Films
public boolean getFavStatus(String name){
try {
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery("SELECT titel, bewertung FROM filme WHERE titel = '"+name+"';" ); //SQL Befehl
System.out.println(rs.getInt("bewertung"));
if((rs.getInt("bewertung")) == 1){
return true;
}
else{
return false;
}
} catch (SQLException e) {
System.err.println("Konnte nicht ausgef<65>hrt werden");
e.printStackTrace();
return false;
}
}
// setzt die Defavorisierung eines bestimmten Films
public void defavorisieren(String name){
System.out.println("setze Bewertung");
try {
Statement stmt = connection.createStatement();
String sql = ("UPDATE filme SET bewertung=0 WHERE titel='"+name+"';"); //SQL Befehl
stmt.executeUpdate(sql);
connection.setAutoCommit(false);
connection.setAutoCommit(true);
} catch (SQLException e) {
System.err.println("Konnte nicht ausgef<65>hrt werden");
e.printStackTrace();
}
}
// setzt die Favorisierung eines bestimmten Films
public void favorisieren(String name){
System.out.println("setze Bewertung");
try {
Statement stmt = connection.createStatement();
String sql = ("UPDATE filme SET bewertung=1 WHERE titel='"+name+"';"); //SQL Befehl
stmt.executeUpdate(sql);
connection.setAutoCommit(false);
connection.setAutoCommit(true);
} catch (SQLException e) {
System.err.println("Konnte nicht ausgef<65>hrt werden");
e.printStackTrace();
}
}
//entfernt die Endung
private static String ohneEndung (String str) {
if (str == null) return null;
int pos = str.lastIndexOf(".");
if (pos == -1) return str;
return str.substring(0, pos);
}
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path.replace("\\", "\\\\");
}
}

View File

@ -0,0 +1,15 @@
# HomeFlix-Local_de_DE.properties German Local
info = Info
settings = Einstellungen
play = play
openFolder = Ordner \u00F6ffnen
chooseFolder = Ordner auswählen
fontSize = Schriftgr\u00F6\u00DFe:
checkUpdates = Auf Update pr\u00FCfen
autoUpdate = beim Start nach Updates suchen:
version = Version:
columnName = Name
columnRating = Bewertung
columnDatName = Datei Name
errorUpdate = Es ist ein Fehler aufgetreten! \n Um Hilfe zu erhalten besuchen Sie \nwww.kellerkinder.xyz oder support@kellerkinder.xyz
infoText = \nMaintainer: seilo@kellerkinder.xyz und \nhendrik.schutter@coptersicht.de \n(c) 2016 Kellerkinder www.kellerkinder.xyz

View File

@ -0,0 +1,15 @@
# HomeFlix-Local_en_US.properties US-English Local and default
info = Info
settings = Settings
play = play
openFolder = open Folder
chooseFolder = choose Directory
fontSize = font size:
checkUpdates = check for updates
autoUpdate = check at startup for updates:
version = Version:
columnName = Name
columnRating = Rating
columnDatName = File Name
errorUpdate = An error has occurred! \n To get help, visit \n nwww.kellerkinder.xyz or support@kellerkinder.xyz
infoText = \nMaintainer: seilo@kellerkinder.xyz and \nhendrik.schutter@coptersicht.de \n(c) 2016 Kellerkinder www.kellerkinder.xyz

148
src/application/Main.java Normal file
View File

@ -0,0 +1,148 @@
/**
* 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.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Optional;
import java.util.Properties;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.ButtonType;
import javafx.scene.image.Image;
import javafx.scene.layout.AnchorPane;
import javafx.scene.paint.Color;
import javafx.stage.DirectoryChooser;
import javafx.stage.Stage;
public class Main extends Application {
public Stage primaryStage;
private String path;
private String color = "ee3523";
private String autoUpdate = "0";
private double size = 12;
private int local = 0;
Properties props = new Properties();
private MainWindowController mainWindowController;
@Override
public void start(Stage primaryStage) {
this.primaryStage = primaryStage;
mainWindow();
}
public void mainWindow(){
File file = new File("config.xml");
try {
FXMLLoader loader = new FXMLLoader(Main.class.getResource("MainWindow.fxml"));
AnchorPane pane = loader.load();
primaryStage.setMinHeight(600.00);
primaryStage.setMinWidth(900.00);
primaryStage.setResizable(false);
primaryStage.setTitle("Project HomeFlix");
primaryStage.getIcons().add(new Image(Main.class.getResourceAsStream("/Homeflix_Icon_64x64.png"))); //f<>gt Anwendungsicon hinzu
mainWindowController = loader.getController(); //verkn<6B>pfung von FXMLController und Controller Klasse
mainWindowController.setAutoUpdate(autoUpdate); //setzt autoupdate
mainWindowController.setMain(this); //aufruf setMain
//pr<70>ft ob config.xml vorhanden, wenn nicht hole Pfad und schreibe Daten in Controller
if (file.exists() != true) {
mainWindowController.setPath(firstStart());
mainWindowController.setColor(color);
mainWindowController.setSize(size);
mainWindowController.setAutoUpdate(autoUpdate);
mainWindowController.setLoaclUI(local);
mainWindowController.saveSettings();
Runtime.getRuntime().exec("java -jar ProjectHomeFlix.jar"); //starte neu um Bugs zu verhindern
System.exit(0); //beendet sich selbst
}else{
loadSettings();
}
mainWindowController.applyColor(); //setzt die Theme Farbe
mainWindowController.cbLocal.getSelectionModel().select(mainWindowController.getLocal()); //setzt local
mainWindowController.mainColor.setValue(Color.valueOf(mainWindowController.getColor()));
mainWindowController.loadData(); //l<>d die Daten im Controller
Scene scene = new Scene(pane); //neue Scen um inhalt der stage anzuzeigen
primaryStage.setScene(scene);
primaryStage.show(); //zeige scene
} catch (IOException e) {
// Auto-generated catch block
e.printStackTrace();
}
}
//methode f<>r den erstmaligen Start
private String firstStart(){
Alert alert = new Alert(AlertType.CONFIRMATION); //neuer alert mit filechooser
alert.setTitle("Project HomeFlix");
alert.setHeaderText("Es ist kein Stammverzeichniss f<>r Filme angegeben!");
alert.setContentText("Stammverzeichniss angeben?");
Optional<ButtonType> result = alert.showAndWait();
if (result.get() == ButtonType.OK){
DirectoryChooser directoryChooser = new DirectoryChooser();
File selectedDirectory =
directoryChooser.showDialog(primaryStage);
path = selectedDirectory.getAbsolutePath();
} else {
path = "";
}
return path;
}
//l<>dt die einstellungen aus der XML
public void loadSettings(){
File configFile = new File("config.xml");
try {
InputStream inputStream = new FileInputStream(configFile);
props.loadFromXML(inputStream);
path = props.getProperty("path");
color = props.getProperty("color");
autoUpdate = props.getProperty("autoUpdate");
size = Double.parseDouble(props.getProperty("size"));
local = Integer.parseInt(props.getProperty("local"));
inputStream.close();
} catch (IOException e) {
// Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
}

View File

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import com.jfoenix.controls.JFXButton?>
<?import com.jfoenix.controls.JFXTextArea?>
<?import com.jfoenix.controls.JFXTextField?>
<?import javafx.scene.control.TreeTableView?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>
<AnchorPane fx:id="anpane" prefHeight="600.0" prefWidth="900.0" xmlns="http://javafx.com/javafx/8.0.60" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.MainWindowController">
<children>
<VBox fx:id="topVBox" prefHeight="32.0" prefWidth="800.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<children>
<JFXButton fx:id="menubtn" onAction="#menubtnclicked" prefHeight="32.0" prefWidth="67.0" text="Menu" />
</children>
</VBox>
<TreeTableView fx:id="treeTableViewfilm" layoutX="14.0" layoutY="88.0" prefHeight="400.0" prefWidth="360.0" AnchorPane.bottomAnchor="12.0" AnchorPane.leftAnchor="12.0" AnchorPane.topAnchor="88.0" />
<JFXTextArea fx:id="ta1" layoutX="385.0" layoutY="42.0" maxWidth="503.0" minWidth="275.0" prefHeight="546.0" prefWidth="293.0" AnchorPane.bottomAnchor="12.0" AnchorPane.leftAnchor="385.0" AnchorPane.rightAnchor="222.0" AnchorPane.topAnchor="44.0" />
<JFXButton fx:id="playbtn" layoutX="690.0" layoutY="363.0" onAction="#playbtnclicked" prefHeight="25.0" prefWidth="198.0" text="play" AnchorPane.bottomAnchor="212.0" AnchorPane.rightAnchor="12.0">
<font>
<Font name="System Bold" size="14.0" />
</font></JFXButton>
<JFXButton fx:id="openfolderbtn" layoutX="690.0" layoutY="404.0" onAction="#openfolderbtnclicked" prefHeight="25.0" prefWidth="198.0" text="open Folder" AnchorPane.bottomAnchor="171.0" AnchorPane.rightAnchor="12.0">
<font>
<Font name="System Bold" size="14.0" />
</font></JFXButton>
<JFXTextField fx:id="tfsearch" layoutX="12.0" layoutY="44.0" maxWidth="477.0" minWidth="359.0" prefHeight="31.0" prefWidth="359.0" promptText="Suche ..." AnchorPane.leftAnchor="12.0" AnchorPane.topAnchor="44.0">
<font>
<Font name="Arial" size="12.0" />
</font></JFXTextField>
<ImageView fx:id="image1" fitHeight="297.0" fitWidth="198.0" layoutX="481.0" layoutY="46.0" pickOnBounds="true" preserveRatio="true" AnchorPane.rightAnchor="12.0" AnchorPane.topAnchor="44.0" />
<JFXButton fx:id="returnBtn" layoutX="690.0" layoutY="443.0" onAction="#returnBtnclicked" prefHeight="25.0" prefWidth="90.0" text="&lt;&lt;" AnchorPane.bottomAnchor="132.0" AnchorPane.rightAnchor="120.0" />
<JFXButton fx:id="forwardBtn" layoutX="798.0" layoutY="443.0" onAction="#forwardBtnclicked" prefHeight="25.0" prefWidth="90.0" text="&gt;&gt;" AnchorPane.bottomAnchor="132.0" AnchorPane.rightAnchor="12.0" />
</children>
</AnchorPane>

View File

@ -0,0 +1,854 @@
/**
* 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;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.math.BigInteger;
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;
import com.eclipsesource.json.Json;
import com.eclipsesource.json.JsonObject;
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;
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.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.geometry.Insets;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.ChoiceBox;
import javafx.scene.control.Label;
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;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.stage.DirectoryChooser;
public class MainWindowController {
@FXML
private AnchorPane anpane;
@FXML
private AnchorPane settingsan = new AnchorPane();
@FXML
private VBox topVBox;
@FXML
private VBox menuBox = new VBox();
@FXML
private VBox settingsBox = new VBox();
@FXML
private TreeTableView<uiData> treeTableViewfilm;
@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
private JFXButton infoBtn = new JFXButton("Info");
@FXML
private JFXButton demoBtn = new JFXButton("Beheben");
@FXML
private JFXButton settingsBtn = new JFXButton("Settings");
@FXML
private JFXButton updateBtn = new JFXButton("Auf Update pr<70>fen");
@FXML
private JFXButton directoryBtn = new JFXButton("Ordner ausw<73>hlen");
@FXML
private JFXToggleButton autoupdateBtn = new JFXToggleButton();
@FXML
public JFXTextField tfPfad = new JFXTextField();
@FXML
private JFXTextField tfsearch;
@FXML
public JFXColorPicker mainColor = new JFXColorPicker();
@FXML
public ChoiceBox<String> cbLocal = new ChoiceBox<String>();
@FXML
public JFXSlider sl1 = new JFXSlider();
@FXML
private JFXDialog dialog = new JFXDialog();
@FXML
private Label versionlbl = new Label();
@FXML
private Label sizelbl = new Label("Schriftgr<EFBFBD><EFBFBD>e:");
@FXML
private Label aulbl = new Label("beim starten nach Updates suchen:");
@FXML
private ImageView image1;
@FXML
TreeItem<uiData> root = new TreeItem<>(new uiData(1.0, "filme","1"));
@FXML
TreeTableColumn<uiData, Double> columnRating = new TreeTableColumn<>("Bewertung");
@FXML
TreeTableColumn<uiData, String> columnName = new TreeTableColumn<>("Name");
@FXML
TreeTableColumn<uiData, String> columnDatName = new TreeTableColumn<>("Datei Name");
private boolean menutrue = false; //merker f<>r menubtn (<28>ffnen oder schlie<69>en)
private boolean settingstrue = false;
private String version = "0.3.5";
private String versionURL = "https://raw.githubusercontent.com/Seil0/Project-HomeFlix/master/version";
private String downloadLink = "";
private String updateDataURL = "https://raw.githubusercontent.com/Seil0/Project-HomeFlix/master/ProjectHomeFlix.jar";
private String errorUpdate;
private String infoText;
private String aktVersion;
private String path;
private String color;
private String Name;
private String datPath;
private String autoUpdate;
private double size;
private int last;
private int selected;
private int next;
private int local;
private File selectedFolder;
private ResourceBundle bundle;
private ObservableList<uiData> newDaten = FXCollections.observableArrayList();
private ObservableList<uiData> filterData = FXCollections.observableArrayList();
private ObservableList<String> locals = FXCollections.observableArrayList("english", "deutsch");
private Image imHF = new Image("Homeflix_Poster.png");
private ImageView menu_icon_black = new ImageView(new Image("menu_icon_black.png"));
// private ImageView menu_icon_white = new ImageView(new Image("menu_icon_white.png"));
private DirectoryChooser directoryChooser = new DirectoryChooser();
Properties props = new Properties();
//wenn menubtn clicked
/**
* TODO fix directory bug under linux
* TODO change value of Text-color change
* TODO menu icon white
*/
@FXML
private void menubtnclicked(){
if(menutrue == false){
anpane.getChildren().addAll(menuBox);
//infobtn clicked
infoBtn.setOnAction(new EventHandler<ActionEvent>(){
@Override
public void handle(ActionEvent event) {
Alert alert = new Alert(AlertType.INFORMATION);
alert.setTitle("Info");
alert.setHeaderText("Project HomeFlix");
alert.setContentText(infoText);
alert.showAndWait();
}
});
//setteingsbtn clicked, deklarieren der actions der Objekte die bei settingsbtn angezeigt werden
settingsBtn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event){
if(settingstrue == false){
anpane.getChildren().addAll(settingsBox);
tfPfad.setOnAction(new EventHandler<ActionEvent>(){
@Override
public void handle(ActionEvent event){
setPath(tfPfad.getText());
saveSettings();
}
});
directoryBtn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event){
selectedFolder = directoryChooser.showDialog(null);
if(selectedFolder == null){
System.out.println("No Directory selected");
}else{
setPath(selectedFolder.getAbsolutePath());
saveSettings();
tfPfad.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();
}
}
}
});
mainColor.setOnAction(new EventHandler<ActionEvent>(){
@Override
public void handle(ActionEvent event){
editColor(mainColor.getValue().toString());
applyColor();
}
});
sl1.valueProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> ov,Number old_val, Number new_val) {
setSize(sl1.getValue());
ta1.setFont(Font.font("System", size));
saveSettings();
}
});
//updater
updateBtn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event){
update();
}
});
autoupdateBtn.setOnAction(new EventHandler<ActionEvent>(){
@Override
public void handle(ActionEvent event) {
if(autoUpdate.equals("0")){
setAutoUpdate("1");
saveSettings();
}else{
setAutoUpdate("0");
saveSettings();
}
}
});
settingstrue = true;
}else{
anpane.getChildren().removeAll(settingsBox);
setPath(tfPfad.getText());
saveSettings();
settingstrue = false;
}
}
});
//demoBtn clicked
demoBtn.setOnAction(new EventHandler<ActionEvent>(){
@Override
public void handle(ActionEvent event) {
/**
* TODO DBController
*/
// loadData();
}
});
menutrue = true;
}else{
anpane.getChildren().removeAll(menuBox);
menutrue = false;
}
if(settingstrue == true){
anpane.getChildren().removeAll(settingsBox);
setPath(tfPfad.getText());
saveSettings();
settingstrue = false;
}
}
@FXML
private void playbtnclicked(){
try {
Desktop.getDesktop().open(new File(getPath()+"\\"+ datPath)); //<2F>ffnt die aktuell ausgew<65>hlte Datei
} catch (IOException e) {
// Auto-generated catch block
e.printStackTrace();
}
}
@FXML
private void openfolderbtnclicked(){
try {
Desktop.getDesktop().open(new File(getPath())); //<2F>ffnet den aktuellen Pfad
} 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);
}
//"Main" Methode die beim start von der Klasse Main aufgerufen wird, initialiesirung der einzellnen UI-Objekte
@SuppressWarnings({ "static-access"})
public void setMain(Main main) {
loadSettings();
initTabel();
infoBtn.setPrefWidth(130);
infoBtn.setPrefHeight(32);
infoBtn.setFont(Font.font("System", FontWeight.BOLD, 15));
settingsBtn.setPrefWidth(130);
settingsBtn.setPrefHeight(32);
settingsBtn.setFont(Font.font("System", FontWeight.BOLD, 15));
demoBtn.setPrefWidth(130);
demoBtn.setPrefHeight(32);
demoBtn.setFont(Font.font("System", FontWeight.BOLD, 15));
demoBtn.setDisable(false);
menubtn.setText("");
menubtn.setMaxSize(32, 32);
tfPfad.setPrefWidth(250);
tfPfad.setPromptText("Pfad");
tfPfad.setText(getPath());
sl1.setMaxWidth(250);
sl1.setMin(2);
sl1.setMax(48);
sl1.setValue(getSize());
cbLocal.setItems(locals);
updateBtn.setFont(Font.font("System", 12));
directoryBtn.setFont(Font.font("System", 12));
directoryBtn.setMaxSize(180, 25);
if(autoUpdate.equals("1")){
autoupdateBtn.setSelected(true);
update();
}else{
autoupdateBtn.setSelected(false);
}
versionlbl.setText("Version: "+version);
menuBox.setSpacing(2.5); //Zeilenabstand
menuBox.setPadding(new Insets(2.5,0,0,2.5)); // abstand zum Rand
menuBox.getChildren().addAll(infoBtn, settingsBtn,demoBtn);
menuBox.setFillWidth(true);
AnchorPane.setTopAnchor(menuBox, 33d);
AnchorPane.setBottomAnchor(menuBox, 0d);
settingsBox.setStyle("-fx-background-color: #FFFFFF;");
settingsBox.getChildren().add(settingsan);
settingsan.getChildren().addAll(tfPfad, directoryBtn, mainColor, sizelbl, sl1, cbLocal, updateBtn, aulbl, autoupdateBtn, versionlbl);
settingsan.setTopAnchor(tfPfad, 5d);
settingsan.setLeftAnchor(tfPfad, 5d);
settingsan.setTopAnchor(directoryBtn, 5d);
settingsan.setLeftAnchor(directoryBtn, 260d);
settingsan.setTopAnchor(mainColor, 40d);
settingsan.setLeftAnchor(mainColor, 5d);
settingsan.setTopAnchor(sizelbl, 75d);
settingsan.setLeftAnchor(sizelbl, 5d);
settingsan.setTopAnchor(sl1, 110d);
settingsan.setLeftAnchor(sl1, 5d);
settingsan.setTopAnchor(cbLocal, 145d);
settingsan.setLeftAnchor(cbLocal, 5d);
settingsan.setTopAnchor(updateBtn, 180d);
settingsan.setLeftAnchor(updateBtn, 5d);
settingsan.setTopAnchor(aulbl, 215d);
settingsan.setLeftAnchor(aulbl, 5d);
settingsan.setTopAnchor(autoupdateBtn, 230d);
settingsan.setLeftAnchor(autoupdateBtn, 5d);
settingsan.setTopAnchor(versionlbl, 280d);
settingsan.setLeftAnchor(versionlbl, 5d);
AnchorPane.setTopAnchor(settingsBox, 34d);
AnchorPane.setRightAnchor(settingsBox, 0d);
AnchorPane.setBottomAnchor(settingsBox, 0d);
AnchorPane.setLeftAnchor(settingsBox, 130d);
ta1.setWrapText(true);
ta1.setEditable(false);
ta1.setFont(Font.font("System", getSize()));
image1.setImage(imHF);
tfsearch.textProperty().addListener(new ChangeListener<String>() {
@SuppressWarnings("unchecked")
@Override
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).getFilmName().toLowerCase().contains(tfsearch.getText().toLowerCase())){
filterData.add(newDaten.get(i));
}
}
for(int i = 0; i < filterData.size(); i++){
root.getChildren().addAll(new TreeItem<uiData>(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();
}
});
}
//initialisierung der TreeTabelView
@SuppressWarnings("unchecked")
private void initTabel(){
root.setExpanded(true);
columnRating.setMaxWidth(120);
columnName.setMaxWidth(240);
columnDatName.setMaxWidth(0);
treeTableViewfilm.setRoot(root);
treeTableViewfilm.setColumnResizePolicy( TreeTableView.CONSTRAINED_RESIZE_POLICY );
treeTableViewfilm.setShowRoot(false);
//inhalt in Zelle schreiben
columnName.setCellValueFactory((CellDataFeatures<uiData, String> p) ->
new ReadOnlyStringWrapper(p.getValue().getValue().getFilmName()));
columnRating.setCellValueFactory((CellDataFeatures<uiData, Double> p) ->
new ReadOnlyObjectWrapper<Double>(p.getValue().getValue().getFilmBewertung()));
columnDatName.setCellValueFactory((CellDataFeatures<uiData, String> p) ->
new ReadOnlyStringWrapper(p.getValue().getValue().getDataName()));
treeTableViewfilm.getColumns().addAll(columnName, columnRating, columnDatName);
//Changelistener f<>r TreeTable
treeTableViewfilm.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<Object>() {
@Override
public void changed(ObservableValue<?> observable, Object oldVal, Object newVal) {
// last = selected; //f<>r autoplay
selected = treeTableViewfilm.getSelectionModel().getSelectedIndex(); // holt aktuelles Item
last = selected - 1;
next = selected + 1;
Name = columnName.getCellData(selected); // holt Namen des Aktuelle Items aus der ColumnName
datPath = columnDatName.getCellData(selected); // holt den aktuellen Datei Pfad aus der ColumnDatName
ta1.setText(""); // l<>scht Text in ta1
apiAbfrage(Name); // startet die api abfrage
ta1.positionCaret(0); // setzt die startposition des Cursors in
// ta1
}
});
treeTableViewfilm.getColumns().get(2).setVisible(false); //blendet die Column mit den Dateinamen aus (wichtig um sie abzuspielen)
}
//pr<70>ft auf Update und f<>ht es gegebenenfalls aus
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) {
// Auto-generated catch block
e1.printStackTrace();
}
System.out.println("Version: "+version+", Update: "+aktVersion);
//vergleicht die Versionsnummern, bei aktversion > version wird ein Update durchgrf<72>hrt
int iversion = Integer.parseInt(version.replace(".", ""));
int iaktVersion = Integer.parseInt(aktVersion.replace(".", ""));
if(iversion >= iaktVersion){
updateBtn.setText("kein Update verf<72>gbar");
System.out.println("kein Update verf<72>gbar");
}else{
updateBtn.setText("Update verf<72>gbar");
System.out.println("Update verf<72>gbar");
try {
URL website;
URL downloadURL = new URL(downloadLink);
BufferedReader in = new BufferedReader(new InputStreamReader(downloadURL.openStream()));
//updateDataURL = in.readLine();
website = new URL(updateDataURL); //Update URL
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!)
Runtime.getRuntime().exec("java -jar ProjectHomeFlix.jar"); //starte neu
System.exit(0); //beendet sich selbst
} catch (IOException e) {
//Falls ein Fehler auftritt (ungetestet)
e.printStackTrace();
Alert alert = new Alert(AlertType.ERROR);
alert.setTitle("Error");
alert.setHeaderText("");
alert.setContentText(errorUpdate);
alert.showAndWait();
e.printStackTrace();
}
}
}
//l<>dt die Daten im angegeben Ordner in newDaten
public void loadData(){
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];
newDaten.add(new uiData(5.0, titel ,data));
}
for(int i = 0; i < newDaten.size(); i++){
root.getChildren().add(new TreeItem<uiData>(newDaten.get(i))); //f<>gt daten zur Rootnode hinzu
}
}
}
//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);
}
//setzt die Farben f<>r die UI-Elemente
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);
menuBox.setStyle(style);
topVBox.setStyle(style);
tfsearch.setFocusColor(Color.valueOf(getColor()));
tfPfad.setFocusColor(Color.valueOf(getColor()));
if(icolor.compareTo(ccolor) == -1){
settingsBtn.setStyle("-fx-text-fill: WHITE;");
infoBtn.setStyle("-fx-text-fill: WHITE;");
demoBtn.setStyle("-fx-text-fill: WHITE;");
directoryBtn.setStyle(btnStylewhite);
updateBtn.setStyle(btnStylewhite);
playbtn.setStyle(btnStylewhite);
openfolderbtn.setStyle(btnStylewhite);
returnBtn.setStyle(btnStylewhite);
forwardBtn.setStyle(btnStylewhite);
//TODO menubtn.setGraphic(menu_icon_white);
menubtn.setGraphic(menu_icon_black);
}else{
settingsBtn.setStyle("-fx-text-fill: BLACK;");
infoBtn.setStyle("-fx-text-fill: BLACK;");
demoBtn.setStyle("-fx-text-fill: BLACK;");
directoryBtn.setStyle(btnStyle);
updateBtn.setStyle(btnStyle);
playbtn.setStyle(btnStyle);
openfolderbtn.setStyle(btnStyle);
returnBtn.setStyle(btnStyle);
forwardBtn.setStyle(btnStyle);
menubtn.setGraphic(menu_icon_black);
}
}
public void setLoaclUI(int local){
switch(local){
case 0: bundle = ResourceBundle.getBundle("application.HomeFlix-Local", Locale.US); //us_english
break;
case 1: bundle = ResourceBundle.getBundle("application.HomeFlix-Local", Locale.GERMAN); //german
break;
default:bundle = ResourceBundle.getBundle("application.HomeFlix-Local", Locale.US); //default local
break;
}
settingsBtn.setText(bundle.getString("settings"));
infoBtn.setText(bundle.getString("info"));
playbtn.setText(bundle.getString("play"));
openfolderbtn.setText(bundle.getString("openFolder"));
sizelbl.setText(bundle.getString("fontSize"));
updateBtn.setText(bundle.getString("checkUpdates"));
aulbl.setText(bundle.getString("autoUpdate"));
versionlbl.setText(bundle.getString("version")+" "+version);
columnName.setText(bundle.getString("columnName"));
columnRating.setText(bundle.getString("columnRating"));
columnDatName.setText(bundle.getString("columnDatName"));
errorUpdate = bundle.getString("errorUpdate");
infoText = bundle.getString("version")+" "+version+bundle.getString("infoText");
}
//speichert die Einstellungen
public void saveSettings(){
File configFile = new File("config.xml"); //neue Datei "config.xml"
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()));
OutputStream outputStream = new FileOutputStream(configFile); //neuer outputstream
props.storeToXML(outputStream, "Project HomeFlix settings");
outputStream.close();
} catch (IOException e) {
System.out.println("An error has occurred!");
e.printStackTrace();
}
}
//l<>dt die Einstellungen
public void loadSettings(){
File configFile = new File("config.xml");
try {
InputStream inputStream = new FileInputStream(configFile);
props.loadFromXML(inputStream);
path = props.getProperty("path"); //setzt Propselement in Pfad
color = props.getProperty("color");
size = Double.parseDouble(props.getProperty("size"));
autoUpdate = props.getProperty("autoUpdate");
local = Integer.parseInt(props.getProperty("local"));
inputStream.close();
} catch (IOException e) {
System.out.println("An error has occurred!");
e.printStackTrace();
}
}
//getter Und setter
public void setColor(String input){
this.color = input;
}
public String getColor(){
return color;
}
//entfernt 0x von dem r<>ckgabe wert des Colorpickers
private void editColor(String input){
StringBuilder sb = new StringBuilder(input);
sb.delete(0, 2);
this.color = sb.toString();
saveSettings();
}
public void setPath(String input){
this.path = input;
}
public String getPath(){
return path;
}
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;
}
//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;
// f<>r keinen oder "" Filmtitel
if (moviename == null || moviename.equals("")) {
System.out.println("No movie found");
}
//entfernen ungewolter leerzeichen
moviename = moviename.trim();
// ersetzen der Leerzeichen durch + f<>r api-abfrage
moviename = moviename.replace(" ", "+");
//URL wird zusammengestellt abfragetypen: http,json,xml (muss json sein um sp<73>teres trennen zu erm<72>glichen)
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) {
//retdata in json object parsen und anschlie<69>end das json Objekt "zerschneiden"
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")){
ta1.appendText("Kein Film mit diesem Titel gefunden!");
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");
ta1.appendText("Ver<EFBFBD>ffentlicht am: "+released+"\n");
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 {
//schlie<69>t datainputStream, InputStream,Scanner
if (dis != null) {
dis.close();
}
if (is != null) {
is.close();
}
if (sc != null) {
sc.close();
}
} catch (Exception e2) {
;
}
}
}
}

View File

@ -0,0 +1 @@
/* JavaFX CSS - Leave this comment until you have at least create one rule which uses -fx-Property */

View File

@ -0,0 +1,57 @@
package application;
import javafx.beans.property.DoubleProperty;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
public class uiData {
private DoubleProperty filmBewertung = new SimpleDoubleProperty();
private StringProperty filmName = new SimpleStringProperty();
private StringProperty dataName = new SimpleStringProperty();
//uiData ist der Typ der Daten in der TreeTabelView
public uiData (final Double filmBewertung, final String filmName, final String dataName) {
this.filmBewertung.set(filmBewertung);
this.filmName.set(filmName);
this.dataName.set(dataName);
}
public Double getFilmBewertung() {
return filmBewertung.get();
}
public String getFilmName() {
return filmName.get();
}
public String getDataName() {
return dataName.get();
}
public void setFilmBewertung(Double filmBewertung) {
this.filmBewertung.set(filmBewertung);
}
public void setFilmName(String filmName) {
this.filmName.set(filmName);
}
public void setDataName(StringProperty dataName) {
this.dataName = dataName;
}
public DoubleProperty FilmBewertungProperty(){
return filmBewertung;
}
public StringProperty FilmNameProperty(){
return filmName;
}
public StringProperty DataNameProperty(){
return dataName;
}
}

BIN
src/menu_icon_black.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB