commit
6baa47b852
|
@ -4,8 +4,8 @@
|
||||||
<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.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="con" path="org.eclipse.fx.ide.jdt.core.JAVAFX_CONTAINER"/>
|
||||||
<classpathentry kind="lib" path="src/libraries/minimal-json-0.9.4.jar"/>
|
<classpathentry kind="lib" path="src/libraries/minimal-json-0.9.4.jar"/>
|
||||||
<classpathentry kind="lib" path="src/libraries/commons-lang3-3.5.jar"/>
|
|
||||||
<classpathentry kind="lib" path="src/libraries/sqlite-jdbc-3.16.1.jar"/>
|
<classpathentry kind="lib" path="src/libraries/sqlite-jdbc-3.16.1.jar"/>
|
||||||
<classpathentry kind="lib" path="src/libraries/jfoenix-1.2.0.jar"/>
|
<classpathentry kind="lib" path="src/libraries/jfoenix-1.3.0.jar"/>
|
||||||
|
<classpathentry kind="lib" path="src/libraries/commons-io-2.5.jar"/>
|
||||||
<classpathentry kind="output" path="bin"/>
|
<classpathentry kind="output" path="bin"/>
|
||||||
</classpath>
|
</classpath>
|
||||||
|
|
|
@ -46,4 +46,5 @@ Network Trash Folder
|
||||||
Temporary Items
|
Temporary Items
|
||||||
.apdisk
|
.apdisk
|
||||||
config.xml
|
config.xml
|
||||||
|
.directory
|
||||||
|
|
||||||
|
|
|
@ -6,13 +6,12 @@ The dev branch is **only merged** into master when a **new release** is released
|
||||||
|
|
||||||
Librarys used in this Project:
|
Librarys used in this Project:
|
||||||
JFoenix: https://github.com/jfoenixadmin/JFoenix
|
JFoenix: https://github.com/jfoenixadmin/JFoenix
|
||||||
minimal-json: https://github.com/ralfstx/minimal-json
|
minimal-json: https://github.com/ralfstx/minimal-json
|
||||||
Commons Lang: https://commons.apache.org/proper/commons-lang/
|
|
||||||
sqlite-jdbc: https://github.com/xerial/sqlite-jdbc
|
sqlite-jdbc: https://github.com/xerial/sqlite-jdbc
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
[wiki](https://github.com/Seil0/Project-HomeFlix/wiki)
|
[wiki](https://github.com/Seil0/Project-HomeFlix/wiki)
|
||||||
|
|
||||||
Project HomeFlix © 2016-2017 Software Development Kellerkinder (SDK)
|
Project HomeFlix © 2016-2017 Kellerkinder ([Seil0](https://github.com/Seil0), [Windoofs](https://github.com/Windoofs))
|
||||||
www.kellerkinder.xyz
|
www.kellerkinder.xyz
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
/application/
|
Binary file not shown.
Binary file not shown.
|
@ -3,11 +3,11 @@
|
||||||
<?import com.jfoenix.controls.JFXButton?>
|
<?import com.jfoenix.controls.JFXButton?>
|
||||||
<?import com.jfoenix.controls.JFXColorPicker?>
|
<?import com.jfoenix.controls.JFXColorPicker?>
|
||||||
<?import com.jfoenix.controls.JFXSlider?>
|
<?import com.jfoenix.controls.JFXSlider?>
|
||||||
<?import com.jfoenix.controls.JFXTextArea?>
|
|
||||||
<?import com.jfoenix.controls.JFXTextField?>
|
<?import com.jfoenix.controls.JFXTextField?>
|
||||||
<?import com.jfoenix.controls.JFXToggleButton?>
|
<?import com.jfoenix.controls.JFXToggleButton?>
|
||||||
<?import javafx.scene.control.ChoiceBox?>
|
<?import javafx.scene.control.ChoiceBox?>
|
||||||
<?import javafx.scene.control.Label?>
|
<?import javafx.scene.control.Label?>
|
||||||
|
<?import javafx.scene.control.ScrollPane?>
|
||||||
<?import javafx.scene.control.TableView?>
|
<?import javafx.scene.control.TableView?>
|
||||||
<?import javafx.scene.control.TreeTableView?>
|
<?import javafx.scene.control.TreeTableView?>
|
||||||
<?import javafx.scene.image.Image?>
|
<?import javafx.scene.image.Image?>
|
||||||
|
@ -20,9 +20,12 @@
|
||||||
|
|
||||||
<AnchorPane fx:id="anpane" prefHeight="600.0" prefWidth="950.0" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.MainWindowController">
|
<AnchorPane fx:id="anpane" prefHeight="600.0" prefWidth="950.0" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.MainWindowController">
|
||||||
<children>
|
<children>
|
||||||
<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.rightAnchor="553.0" AnchorPane.topAnchor="88.0" />
|
<ScrollPane fx:id="scrollPane" fitToWidth="true" layoutX="408.0" layoutY="44.0" prefHeight="544.0" prefWidth="320.0" AnchorPane.bottomAnchor="12.0" AnchorPane.leftAnchor="408.0" AnchorPane.rightAnchor="222.0" AnchorPane.topAnchor="44.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="410.0" AnchorPane.rightAnchor="222.0" AnchorPane.topAnchor="44.0" />
|
<content>
|
||||||
<TextFlow fx:id="textFlow" layoutX="496.0" layoutY="131.0" prefHeight="200.0" prefWidth="200.0" visible="false" AnchorPane.bottomAnchor="15.0" AnchorPane.leftAnchor="410.0" AnchorPane.rightAnchor="220.0" AnchorPane.topAnchor="44.0" />
|
<TextFlow fx:id="textFlow" accessibleRole="TEXT_AREA" maxHeight="544.0" maxWidth="320.0" visible="true" />
|
||||||
|
</content>
|
||||||
|
</ScrollPane>
|
||||||
|
<TreeTableView fx:id="treeTableViewfilm" layoutX="14.0" layoutY="88.0" prefHeight="500.0" prefWidth="375.0" AnchorPane.bottomAnchor="12.0" AnchorPane.leftAnchor="12.0" AnchorPane.rightAnchor="568.0" AnchorPane.topAnchor="88.0" />
|
||||||
<JFXButton fx:id="playbtn" contentDisplay="CENTER" layoutX="690.0" layoutY="363.0" onAction="#playbtnclicked" prefHeight="25.0" prefWidth="198.0" AnchorPane.bottomAnchor="212.0" AnchorPane.rightAnchor="12.0">
|
<JFXButton fx:id="playbtn" contentDisplay="CENTER" layoutX="690.0" layoutY="363.0" onAction="#playbtnclicked" prefHeight="25.0" prefWidth="198.0" AnchorPane.bottomAnchor="212.0" AnchorPane.rightAnchor="12.0">
|
||||||
<font>
|
<font>
|
||||||
<Font name="System Bold" size="14.0" />
|
<Font name="System Bold" size="14.0" />
|
||||||
|
@ -31,7 +34,7 @@
|
||||||
<font>
|
<font>
|
||||||
<Font name="System Bold" size="14.0" />
|
<Font name="System Bold" size="14.0" />
|
||||||
</font></JFXButton>
|
</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.rightAnchor="553.0" AnchorPane.topAnchor="44.0">
|
<JFXTextField fx:id="tfsearch" layoutX="12.0" layoutY="44.0" maxWidth="477.0" minWidth="359.0" prefHeight="31.0" prefWidth="370.0" promptText="Suche ..." AnchorPane.leftAnchor="12.0" AnchorPane.rightAnchor="568.0" AnchorPane.topAnchor="44.0">
|
||||||
<font>
|
<font>
|
||||||
<Font name="Arial" size="12.0" />
|
<Font name="Arial" size="12.0" />
|
||||||
</font></JFXTextField>
|
</font></JFXTextField>
|
||||||
|
@ -78,8 +81,8 @@
|
||||||
<AnchorPane fx:id="streamingSettingsAnchor" layoutX="138.0" layoutY="33.0" prefHeight="566.0" prefWidth="760.0" style="-fx-background-color: #FFFFFF;" visible="false" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="150.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="38.0">
|
<AnchorPane fx:id="streamingSettingsAnchor" layoutX="138.0" layoutY="33.0" prefHeight="566.0" prefWidth="760.0" style="-fx-background-color: #FFFFFF;" visible="false" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="150.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="38.0">
|
||||||
<children>
|
<children>
|
||||||
<JFXTextField fx:id="tfStreamingPath" layoutX="14.0" layoutY="14.0" onAction="#tfStreamingPathAction" prefWidth="250.0" AnchorPane.leftAnchor="5.0" AnchorPane.topAnchor="5.0" />
|
<JFXTextField fx:id="tfStreamingPath" layoutX="14.0" layoutY="14.0" onAction="#tfStreamingPathAction" prefWidth="250.0" AnchorPane.leftAnchor="5.0" AnchorPane.topAnchor="5.0" />
|
||||||
<JFXButton fx:id="streamingDirectoryBtn" layoutX="263.0" layoutY="2.0" onAction="#streamingDirectoryBtnAction" AnchorPane.leftAnchor="260.0" AnchorPane.topAnchor="5.0" />
|
<JFXButton fx:id="streamingDirectoryBtn" layoutX="263.0" layoutY="2.0" onAction="#streamingDirectoryBtnAction" prefHeight="25.0" prefWidth="115.0" AnchorPane.leftAnchor="260.0" AnchorPane.topAnchor="5.0" />
|
||||||
<TableView fx:id="tableViewStreamingdata" layoutX="14.0" layoutY="44.0" prefHeight="200.0" prefWidth="300.0" AnchorPane.bottomAnchor="5.0" AnchorPane.leftAnchor="5.0" AnchorPane.topAnchor="40.0" />
|
<TableView fx:id="tableViewStreamingdata" layoutX="14.0" layoutY="44.0" prefHeight="517.0" prefWidth="370.0" AnchorPane.bottomAnchor="5.0" AnchorPane.leftAnchor="5.0" AnchorPane.topAnchor="40.0" />
|
||||||
</children></AnchorPane>
|
</children></AnchorPane>
|
||||||
<AnchorPane fx:id="settingsAnchor" layoutX="160.0" layoutY="44.0" prefHeight="566.0" prefWidth="760.0" style="-fx-background-color: #FFFFFF;" visible="false" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="150.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="38.0">
|
<AnchorPane fx:id="settingsAnchor" layoutX="160.0" layoutY="44.0" prefHeight="566.0" prefWidth="760.0" style="-fx-background-color: #FFFFFF;" visible="false" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="150.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="38.0">
|
||||||
<children>
|
<children>
|
||||||
|
|
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.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -8,6 +8,7 @@ openFolder = Ordner \u00F6ffnen
|
||||||
chooseFolder = Ordner ausw\u00E4hlen
|
chooseFolder = Ordner ausw\u00E4hlen
|
||||||
fontSize = Schriftgr\u00F6\u00DFe:
|
fontSize = Schriftgr\u00F6\u00DFe:
|
||||||
checkUpdates = Auf Update pr\u00FCfen
|
checkUpdates = Auf Update pr\u00FCfen
|
||||||
|
checkingUpdates = Es wird nach Updates gesucht...
|
||||||
updateBtnavail = Update verf\u00FCgbar
|
updateBtnavail = Update verf\u00FCgbar
|
||||||
updateBtnNotavail = Kein Update verf\u00FCgbar
|
updateBtnNotavail = Kein Update verf\u00FCgbar
|
||||||
autoUpdate = beim Start nach Updates suchen:
|
autoUpdate = beim Start nach Updates suchen:
|
||||||
|
|
|
@ -8,6 +8,7 @@ openFolder = open Folder
|
||||||
chooseFolder = choose Directory
|
chooseFolder = choose Directory
|
||||||
fontSize = font size:
|
fontSize = font size:
|
||||||
checkUpdates = check for updates
|
checkUpdates = check for updates
|
||||||
|
checkingUpdates = checking for updates...
|
||||||
updateBtnavail = update available
|
updateBtnavail = update available
|
||||||
updateBtnNotavail = no update available
|
updateBtnNotavail = no update available
|
||||||
autoUpdate = check at startup for updates:
|
autoUpdate = check at startup for updates:
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/**
|
/**
|
||||||
|
* @author Jannik
|
||||||
* DBController for Project HomeFlix
|
* DBController for Project HomeFlix
|
||||||
* connection is in manual commit!
|
* connection is in manual commit!
|
||||||
* TODO arraylists not string -> streamUIData
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package application;
|
package application;
|
||||||
|
@ -23,17 +23,21 @@ import com.eclipsesource.json.Json;
|
||||||
import com.eclipsesource.json.JsonArray;
|
import com.eclipsesource.json.JsonArray;
|
||||||
import com.eclipsesource.json.JsonObject;
|
import com.eclipsesource.json.JsonObject;
|
||||||
import com.eclipsesource.json.JsonValue;
|
import com.eclipsesource.json.JsonValue;
|
||||||
|
|
||||||
import javafx.scene.image.Image;
|
import javafx.scene.image.Image;
|
||||||
import javafx.scene.image.ImageView;
|
import javafx.scene.image.ImageView;
|
||||||
|
import javafx.scene.text.Font;
|
||||||
|
import javafx.scene.text.FontWeight;
|
||||||
|
import javafx.scene.text.Text;
|
||||||
|
|
||||||
public class DBController {
|
public class DBController {
|
||||||
|
|
||||||
public DBController(MainWindowController m) {
|
public DBController(MainWindowController m, Main main) {
|
||||||
mainWindowController = m;
|
mainWindowController = m;
|
||||||
|
this.main = main;
|
||||||
}
|
}
|
||||||
|
|
||||||
private MainWindowController mainWindowController;
|
private MainWindowController mainWindowController;
|
||||||
|
private Main main;
|
||||||
private String DB_PATH = System.getProperty("user.home") + "\\Documents\\HomeFlix" + "\\" + "Homeflix.db"; //path to database file
|
private String DB_PATH = System.getProperty("user.home") + "\\Documents\\HomeFlix" + "\\" + "Homeflix.db"; //path to database file
|
||||||
private Image favorite_black = new Image("recources/icons/ic_favorite_black_18dp_1x.png");
|
private Image favorite_black = new Image("recources/icons/ic_favorite_black_18dp_1x.png");
|
||||||
private Image favorite_border_black = new Image("recources/icons/ic_favorite_border_black_18dp_1x.png");
|
private Image favorite_border_black = new Image("recources/icons/ic_favorite_border_black_18dp_1x.png");
|
||||||
|
@ -57,15 +61,13 @@ public class DBController {
|
||||||
try {
|
try {
|
||||||
// create a database connection
|
// create a database connection
|
||||||
connection = DriverManager.getConnection("jdbc:sqlite:" + DB_PATH);
|
connection = DriverManager.getConnection("jdbc:sqlite:" + DB_PATH);
|
||||||
// Statement statement = connection.createStatement();
|
|
||||||
// statement.setQueryTimeout(30); // set timeout to 30 sec. TODO don't know what to do with this
|
|
||||||
|
|
||||||
connection.setAutoCommit(false); //AutoCommit to false -> manual commit is active
|
connection.setAutoCommit(false); //AutoCommit to false -> manual commit is active
|
||||||
// fuelleDatenbank();
|
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
// if the error message is "out of memory", it probably means no database file is found
|
// if the error message is "out of memory", it probably means no database file is found
|
||||||
System.err.println(e.getMessage());
|
System.err.println(e.getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//close connection -> at the moment this kills the program
|
||||||
// finally {
|
// finally {
|
||||||
// try {
|
// try {
|
||||||
// if (connection != null)
|
// if (connection != null)
|
||||||
|
@ -85,8 +87,8 @@ public class DBController {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Statement stmt = connection.createStatement();
|
Statement stmt = connection.createStatement();
|
||||||
stmt.executeUpdate("create table if not exists film_local (rating, titel, streamUrl, favIcon)");
|
stmt.executeUpdate("create table if not exists film_local (rating, titel, streamUrl, favIcon, cached)");
|
||||||
stmt.executeUpdate("create table if not exists film_streaming (year, season, episode, rating, resolution, titel, streamUrl, favIcon)");
|
stmt.executeUpdate("create table if not exists film_streaming (year, season, episode, rating, resolution, titel, streamUrl, favIcon, cached)");
|
||||||
stmt.close();
|
stmt.close();
|
||||||
} catch (SQLException e1) {
|
} catch (SQLException e1) {
|
||||||
e1.printStackTrace();
|
e1.printStackTrace();
|
||||||
|
@ -144,13 +146,12 @@ public class DBController {
|
||||||
System.out.println("films in directory: "+filmsAll.size());
|
System.out.println("films in directory: "+filmsAll.size());
|
||||||
System.out.println("filme in db: "+filmsdbAll.size());
|
System.out.println("filme in db: "+filmsdbAll.size());
|
||||||
|
|
||||||
|
|
||||||
if(filmsdbAll.size() == 0){
|
if(filmsdbAll.size() == 0){
|
||||||
System.out.println("creating entries ...");
|
System.out.println("creating entries ...");
|
||||||
|
|
||||||
try{
|
try{
|
||||||
ps = connection.prepareStatement("insert into film_local values (?, ?, ?, ?)");
|
ps = connection.prepareStatement("insert into film_local values (?, ?, ?, ?, ?)");
|
||||||
psS = connection.prepareStatement("insert into film_streaming values (?, ?, ?, ?, ?, ?, ?, ?)");
|
psS = connection.prepareStatement("insert into film_streaming values (?, ?, ?, ?, ?, ?, ?, ?, ?)");
|
||||||
|
|
||||||
if(mainWindowController.getPath().equals("") || mainWindowController.getPath() == null){
|
if(mainWindowController.getPath().equals("") || mainWindowController.getPath() == null){
|
||||||
System.out.println("Kein Pfad angegeben"); //if path == null or ""
|
System.out.println("Kein Pfad angegeben"); //if path == null or ""
|
||||||
|
@ -161,7 +162,8 @@ public class DBController {
|
||||||
ps.setString(2, cutOffEnd(entries[j])); //name as String without ending 2. column
|
ps.setString(2, cutOffEnd(entries[j])); //name as String without ending 2. column
|
||||||
ps.setString(3,entries[j]); //path as String 3. column
|
ps.setString(3,entries[j]); //path as String 3. column
|
||||||
ps.setString(4, "favorite_border_black");
|
ps.setString(4, "favorite_border_black");
|
||||||
ps.addBatch(); // add command to prepared statement
|
ps.setBoolean(5, false);
|
||||||
|
ps.addBatch(); // add command to prepared statement
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -182,6 +184,7 @@ public class DBController {
|
||||||
psS.setString(6, item.asObject().getString("titel",""));
|
psS.setString(6, item.asObject().getString("titel",""));
|
||||||
psS.setString(7, item.asObject().getString("streamUrl", ""));
|
psS.setString(7, item.asObject().getString("streamUrl", ""));
|
||||||
psS.setString(8, "favorite_border_black");
|
psS.setString(8, "favorite_border_black");
|
||||||
|
psS.setBoolean(9, false);
|
||||||
psS.addBatch(); // add command to prepared statement
|
psS.addBatch(); // add command to prepared statement
|
||||||
}
|
}
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
|
@ -189,7 +192,7 @@ public class DBController {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ps.executeBatch(); //execute statement to write entries into table
|
ps.executeBatch(); //execute statement to write entries into table
|
||||||
psS.executeBatch();
|
psS.executeBatch();
|
||||||
connection.commit();
|
connection.commit();
|
||||||
ps.close();
|
ps.close();
|
||||||
|
@ -203,15 +206,26 @@ public class DBController {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
try {
|
try {
|
||||||
checkAddEntry();
|
checkAddEntry(); //check if added a new file
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
} //check if added a new file
|
}
|
||||||
checkRemoveEntry(); //check if removed a file
|
checkRemoveEntry(); //check if removed a file
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//start of cache-table
|
||||||
|
try {
|
||||||
|
Statement stmt = connection.createStatement();
|
||||||
|
stmt.executeUpdate( "create table if not exists cache (streamUrl, Title, Year, Rated, Released, Runtime, Genre, Director, Writer," //streamUrl is primary key
|
||||||
|
+" Actors, Plot, Language, Country, Awards, Metascore, imdbRating, imdbVotes, imdbID, Type, Poster, Response)");
|
||||||
|
stmt.close();
|
||||||
|
} catch (SQLException e1) {
|
||||||
|
e1.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//loading data from database to mainWindowController
|
//loading data from database to mainWindowController
|
||||||
|
@ -220,24 +234,24 @@ public class DBController {
|
||||||
try {
|
try {
|
||||||
//load local Data
|
//load local Data
|
||||||
Statement stmt = connection.createStatement();
|
Statement stmt = connection.createStatement();
|
||||||
ResultSet rs = stmt.executeQuery("SELECT * FROM film_local");
|
ResultSet rs = stmt.executeQuery("SELECT * FROM film_local ORDER BY titel");
|
||||||
while (rs.next()) {
|
while (rs.next()) {
|
||||||
if(rs.getString(4).equals("favorite_black")){
|
if(rs.getString(4).equals("favorite_black")){
|
||||||
mainWindowController.newData.add( new streamUiData(1, 1, 1, rs.getDouble(1), "1", rs.getString(2), rs.getString(3), new ImageView(favorite_black)));
|
mainWindowController.localFilms.add( new tableData(1, 1, 1, rs.getDouble(1), "1", rs.getString(2), rs.getString(3), new ImageView(favorite_black),rs.getBoolean(5)));
|
||||||
}else{
|
}else{
|
||||||
mainWindowController.newData.add( new streamUiData(1, 1, 1, rs.getDouble(1), "1", rs.getString(2), rs.getString(3), new ImageView(favorite_border_black)));
|
mainWindowController.localFilms.add( new tableData(1, 1, 1, rs.getDouble(1), "1", rs.getString(2), rs.getString(3), new ImageView(favorite_border_black),rs.getBoolean(5)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stmt.close();
|
stmt.close();
|
||||||
rs.close();
|
rs.close();
|
||||||
|
|
||||||
//load streaming Data TODO check if there are streaming data before loading -> maybe there is an issue now
|
//load streaming Data FIXME check if there are streaming data before loading -> maybe there is an issue now
|
||||||
rs = stmt.executeQuery("SELECT * FROM film_streaming;");
|
rs = stmt.executeQuery("SELECT * FROM film_streaming ORDER BY titel;");
|
||||||
while (rs.next()) {
|
while (rs.next()) {
|
||||||
if(rs.getString(8).equals("favorite_black")){
|
if(rs.getString(8).equals("favorite_black")){
|
||||||
mainWindowController.streamData.add(new streamUiData(rs.getInt(1), rs.getInt(2), rs.getInt(3), rs.getDouble(4), rs.getString(5), rs.getString(6), rs.getString(7), new ImageView(favorite_black)));
|
mainWindowController.streamingFilms.add(new tableData(rs.getInt(1), rs.getInt(2), rs.getInt(3), rs.getDouble(4), rs.getString(5), rs.getString(6), rs.getString(7), new ImageView(favorite_black),rs.getBoolean(9)));
|
||||||
}else{
|
}else{
|
||||||
mainWindowController.streamData.add(new streamUiData(rs.getInt(1), rs.getInt(2), rs.getInt(3), rs.getDouble(4), rs.getString(5), rs.getString(6), rs.getString(7), new ImageView(favorite_border_black)));
|
mainWindowController.streamingFilms.add(new tableData(rs.getInt(1), rs.getInt(2), rs.getInt(3), rs.getDouble(4), rs.getString(5), rs.getString(6), rs.getString(7), new ImageView(favorite_border_black),rs.getBoolean(9)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stmt.close();
|
stmt.close();
|
||||||
|
@ -250,7 +264,7 @@ public class DBController {
|
||||||
}
|
}
|
||||||
|
|
||||||
//Refreshes the data in mainWindowController.newDaten and mainWindowController.streamData
|
//Refreshes the data in mainWindowController.newDaten and mainWindowController.streamData
|
||||||
//TODO it seems that there is an issue at the moment with streaming refreshing wrong entry if there is more than one with the same name
|
//FIXME it seems that there is an issue at the moment with streaming refreshing wrong entry if there is more than one with the same name
|
||||||
void refresh(String name,int i) throws SQLException{
|
void refresh(String name,int i) throws SQLException{
|
||||||
System.out.println("refresh ...");
|
System.out.println("refresh ...");
|
||||||
Statement stmt;
|
Statement stmt;
|
||||||
|
@ -259,9 +273,9 @@ public class DBController {
|
||||||
stmt = connection.createStatement();
|
stmt = connection.createStatement();
|
||||||
ResultSet rs = stmt.executeQuery("SELECT * FROM film_local WHERE titel = '"+name+"';" );
|
ResultSet rs = stmt.executeQuery("SELECT * FROM film_local WHERE titel = '"+name+"';" );
|
||||||
if(rs.getString(4).equals("favorite_black")){
|
if(rs.getString(4).equals("favorite_black")){
|
||||||
mainWindowController.newData.set(i, new streamUiData(1, 1, 1, rs.getDouble(1), "1", rs.getString(2), rs.getString(3), new ImageView(favorite_black)));
|
mainWindowController.localFilms.set(i, new tableData(1, 1, 1, rs.getDouble(1), "1", rs.getString(2), rs.getString(3), new ImageView(favorite_black),rs.getBoolean(5)));
|
||||||
}else{
|
}else{
|
||||||
mainWindowController.newData.set(i, new streamUiData(1, 1, 1, rs.getDouble(1), "1", rs.getString(2), rs.getString(3), new ImageView(favorite_border_black)));
|
mainWindowController.localFilms.set(i, new tableData(1, 1, 1, rs.getDouble(1), "1", rs.getString(2), rs.getString(3), new ImageView(favorite_border_black),rs.getBoolean(5)));
|
||||||
}
|
}
|
||||||
stmt.close();
|
stmt.close();
|
||||||
rs.close();
|
rs.close();
|
||||||
|
@ -270,9 +284,9 @@ public class DBController {
|
||||||
stmt = connection.createStatement();
|
stmt = connection.createStatement();
|
||||||
ResultSet rs = stmt.executeQuery("SELECT * FROM film_streaming WHERE titel = '"+name+"';" );
|
ResultSet rs = stmt.executeQuery("SELECT * FROM film_streaming WHERE titel = '"+name+"';" );
|
||||||
if(rs.getString(8).equals("favorite_black")){
|
if(rs.getString(8).equals("favorite_black")){
|
||||||
mainWindowController.streamData.set(i,new streamUiData(rs.getInt(1), rs.getInt(2), rs.getInt(3), rs.getDouble(4), rs.getString(5), rs.getString(6), rs.getString(7), new ImageView(favorite_black)));
|
mainWindowController.streamingFilms.set(i,new tableData(rs.getInt(1), rs.getInt(2), rs.getInt(3), rs.getDouble(4), rs.getString(5), rs.getString(6), rs.getString(7), new ImageView(favorite_black),rs.getBoolean(9)));
|
||||||
}else{
|
}else{
|
||||||
mainWindowController.streamData.set(i,new streamUiData(rs.getInt(1), rs.getInt(2), rs.getInt(3), rs.getDouble(4), rs.getString(5), rs.getString(6), rs.getString(7), new ImageView(favorite_border_black)));
|
mainWindowController.streamingFilms.set(i,new tableData(rs.getInt(1), rs.getInt(2), rs.getInt(3), rs.getDouble(4), rs.getString(5), rs.getString(6), rs.getString(7), new ImageView(favorite_border_black),rs.getBoolean(9)));
|
||||||
}
|
}
|
||||||
stmt.close();
|
stmt.close();
|
||||||
rs.close();
|
rs.close();
|
||||||
|
@ -282,7 +296,10 @@ public class DBController {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* check if there are any entries that have been removed from the film-directory
|
||||||
|
* @throws SQLException
|
||||||
|
*/
|
||||||
private void checkRemoveEntry() throws SQLException{
|
private void checkRemoveEntry() throws SQLException{
|
||||||
System.out.println("checking for entrys to remove to DB ...");
|
System.out.println("checking for entrys to remove to DB ...");
|
||||||
Statement stmt = connection.createStatement();
|
Statement stmt = connection.createStatement();
|
||||||
|
@ -309,17 +326,25 @@ public class DBController {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void checkAddEntry() throws SQLException, FileNotFoundException, IOException{ //TODO sort alphabetical
|
/**
|
||||||
|
* check if there are new films in the film-directory
|
||||||
|
* @throws SQLException
|
||||||
|
* @throws FileNotFoundException
|
||||||
|
* @throws IOException
|
||||||
|
* if lastName != filmsStreamData.get(b) then set i = 0, file changed
|
||||||
|
*/
|
||||||
|
private void checkAddEntry() throws SQLException, FileNotFoundException, IOException{
|
||||||
|
String lastName = "";
|
||||||
System.out.println("checking for entrys to add to DB ...");
|
System.out.println("checking for entrys to add to DB ...");
|
||||||
String[] entries = new File(mainWindowController.getPath()).list();
|
String[] entries = new File(mainWindowController.getPath()).list();
|
||||||
Statement stmt = connection.createStatement();
|
Statement stmt = connection.createStatement();
|
||||||
PreparedStatement ps = connection.prepareStatement("insert into film_streaming values (?, ?, ?, ?, ?, ?, ?, ?)");;
|
PreparedStatement ps = connection.prepareStatement("insert into film_streaming values (?, ?, ?, ?, ?, ?, ?, ?, ?)");
|
||||||
int i=0;
|
int i=0;
|
||||||
|
|
||||||
for(int a=0; a<filmsDir.size(); a++){
|
for(int a=0; a<filmsDir.size(); a++){
|
||||||
if(filmsdbLocal.contains(filmsDir.get(a))){
|
if(filmsdbLocal.contains(filmsDir.get(a))){
|
||||||
}else{
|
}else{
|
||||||
stmt.executeUpdate("insert into film_local values (0, '"+cutOffEnd(entries[a])+"', '"+entries[a]+"','favorite_border_black')");
|
stmt.executeUpdate("insert into film_local values (0, '"+cutOffEnd(entries[a])+"', '"+entries[a]+"','favorite_border_black',0)");
|
||||||
connection.commit();
|
connection.commit();
|
||||||
stmt.close();
|
stmt.close();
|
||||||
System.out.println("added \""+filmsDir.get(a)+"\" to databsae");
|
System.out.println("added \""+filmsDir.get(a)+"\" to databsae");
|
||||||
|
@ -327,16 +352,20 @@ public class DBController {
|
||||||
}
|
}
|
||||||
|
|
||||||
for(int b=0; b<filmsStreamURL.size(); b++){
|
for(int b=0; b<filmsStreamURL.size(); b++){
|
||||||
if(filmsdbStreamURL.contains(filmsStreamURL.get(b))){
|
if(filmsdbStreamURL.contains(filmsStreamURL.get(b))) {
|
||||||
}else{
|
} else {
|
||||||
|
if(lastName != "" && lastName != filmsStreamData.get(b)) {
|
||||||
|
i = 0;
|
||||||
|
}
|
||||||
|
lastName = filmsStreamData.get(b);
|
||||||
JsonObject object = Json.parse(new FileReader(filmsStreamData.get(b))).asObject();
|
JsonObject object = Json.parse(new FileReader(filmsStreamData.get(b))).asObject();
|
||||||
JsonArray items = object.get("entries").asArray();
|
JsonArray items = object.get("entries").asArray();
|
||||||
System.out.println(items.size()+", "+i);
|
System.out.println(items.size()+", "+i+"; "+b);
|
||||||
String streamURL = items.get(i).asObject().getString("streamUrl","");
|
String streamURL = items.get(i).asObject().getString("streamUrl","");
|
||||||
String titel = items.get(i).asObject().getString("titel","");
|
String titel = items.get(i).asObject().getString("titel","");
|
||||||
|
|
||||||
if(streamURL.equals(filmsStreamURL.get(b))){
|
if(streamURL.equals(filmsStreamURL.get(b))){
|
||||||
System.out.println("hinzuf<EFBFBD>gen \""+titel+"\"");
|
System.out.println("hinzufügen \""+titel+"\"");
|
||||||
|
|
||||||
ps.setInt(1, items.get(i).asObject().getInt("year", 0));
|
ps.setInt(1, items.get(i).asObject().getInt("year", 0));
|
||||||
ps.setInt(2, items.get(i).asObject().getInt("season", 0));
|
ps.setInt(2, items.get(i).asObject().getInt("season", 0));
|
||||||
|
@ -346,9 +375,8 @@ public class DBController {
|
||||||
ps.setString(6, items.get(i).asObject().getString("titel",""));
|
ps.setString(6, items.get(i).asObject().getString("titel",""));
|
||||||
ps.setString(7, items.get(i).asObject().getString("streamUrl", ""));
|
ps.setString(7, items.get(i).asObject().getString("streamUrl", ""));
|
||||||
ps.setString(8, "favorite_border_black");
|
ps.setString(8, "favorite_border_black");
|
||||||
|
ps.setBoolean(9, false);
|
||||||
ps.addBatch(); // adds the entry
|
ps.addBatch(); // adds the entry
|
||||||
|
|
||||||
// stmt.executeUpdate("insert into film_streaming values ("+items.get(i).asObject().getInt("year", 0)+", "+items.get(i).asObject().getInt("season", 0)+", "+items.get(i).asObject().getInt("episode", 0)+", 0, '"+items.get(i).asObject().getString("resolution", ""+"', '"+items.get(i).asObject().getString("titel","")+"', '"+items.get(i).asObject().getString("streamUrl", "")+"')"));
|
|
||||||
}
|
}
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
@ -359,7 +387,7 @@ public class DBController {
|
||||||
}
|
}
|
||||||
|
|
||||||
void ausgeben(){
|
void ausgeben(){
|
||||||
System.out.println("Eintraege ausgeben ... \n");
|
System.out.println("Outputting all entries ... \n");
|
||||||
try {
|
try {
|
||||||
Statement stmt = connection.createStatement();
|
Statement stmt = connection.createStatement();
|
||||||
ResultSet rs = stmt.executeQuery("SELECT * FROM film_local");
|
ResultSet rs = stmt.executeQuery("SELECT * FROM film_local");
|
||||||
|
@ -367,7 +395,8 @@ public class DBController {
|
||||||
System.out.println(rs.getString(1));
|
System.out.println(rs.getString(1));
|
||||||
System.out.println(rs.getString(2));
|
System.out.println(rs.getString(2));
|
||||||
System.out.println(rs.getString(3));
|
System.out.println(rs.getString(3));
|
||||||
System.out.println(rs.getString(4)+"\n");
|
System.out.println(rs.getString(4));
|
||||||
|
System.out.println(rs.getString(5)+"\n");
|
||||||
}
|
}
|
||||||
stmt.close();
|
stmt.close();
|
||||||
rs.close();
|
rs.close();
|
||||||
|
@ -383,7 +412,8 @@ public class DBController {
|
||||||
System.out.println(rs.getString(5));
|
System.out.println(rs.getString(5));
|
||||||
System.out.println(rs.getString(6));
|
System.out.println(rs.getString(6));
|
||||||
System.out.println(rs.getString(7));
|
System.out.println(rs.getString(7));
|
||||||
System.out.println(rs.getString(8)+"\n");
|
System.out.println(rs.getString(8));
|
||||||
|
System.out.println(rs.getString(9)+"\n");
|
||||||
}
|
}
|
||||||
stmt.close();
|
stmt.close();
|
||||||
rs.close();
|
rs.close();
|
||||||
|
@ -394,7 +424,7 @@ public class DBController {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//gibt die Favorisierung eines bestimmten Films
|
//get favorite status
|
||||||
void getFavStatus(String name){
|
void getFavStatus(String name){
|
||||||
try{
|
try{
|
||||||
Statement stmt = connection.createStatement();
|
Statement stmt = connection.createStatement();
|
||||||
|
@ -416,7 +446,7 @@ public class DBController {
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
//setzt die Defavorisierung eines bestimmten Films
|
//set rating=0 and favorite_border_black
|
||||||
void dislike(String name,String streamUrl){
|
void dislike(String name,String streamUrl){
|
||||||
System.out.println("defavorisieren ...");
|
System.out.println("defavorisieren ...");
|
||||||
try{
|
try{
|
||||||
|
@ -438,7 +468,7 @@ public class DBController {
|
||||||
e1.printStackTrace();
|
e1.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//setzt die Favorisierung eines bestimmten Films
|
//set rating=1 and favorite_black
|
||||||
void like(String name,String streamUrl){
|
void like(String name,String streamUrl){
|
||||||
System.out.println("favorisieren ...");
|
System.out.println("favorisieren ...");
|
||||||
try{
|
try{
|
||||||
|
@ -461,6 +491,124 @@ public class DBController {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setCached(String streamUrl) throws SQLException{
|
||||||
|
try{
|
||||||
|
Statement stmt = connection.createStatement();
|
||||||
|
stmt.executeUpdate("UPDATE film_local SET cached=1 WHERE streamUrl='"+streamUrl+"';");
|
||||||
|
connection.commit();
|
||||||
|
stmt.close();
|
||||||
|
}catch(SQLException e){
|
||||||
|
System.out.println("Ups! an error occured!");
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
Statement stmt = connection.createStatement();
|
||||||
|
stmt.executeUpdate("UPDATE film_streaming SET cached=1 WHERE streamUrl='"+streamUrl+"';");
|
||||||
|
connection.commit();
|
||||||
|
stmt.close();
|
||||||
|
} catch (SQLException e1) {
|
||||||
|
System.out.println("Ups! an error occured!");
|
||||||
|
e1.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void addCache( String streamUrl, String Title, String Year, String Rated, String Released, String Runtime, String Genre, String Director,
|
||||||
|
String Writer, String Actors, String Plot, String Language, String Country, String Awards, String Metascore, String imdbRating,
|
||||||
|
String Type, String imdbVotes, String imdbID, String Poster, String Response) throws SQLException{
|
||||||
|
PreparedStatement ps = connection.prepareStatement("insert into cache values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
|
||||||
|
|
||||||
|
System.out.println("adding to cache: " + Title);
|
||||||
|
ps.setString(1,streamUrl);
|
||||||
|
ps.setString(2,Title);
|
||||||
|
ps.setString(3,Year);
|
||||||
|
ps.setString(4,Rated);
|
||||||
|
ps.setString(5,Released);
|
||||||
|
ps.setString(6,Runtime);
|
||||||
|
ps.setString(7,Genre);
|
||||||
|
ps.setString(8,Director);
|
||||||
|
ps.setString(9,Writer);
|
||||||
|
ps.setString(10,Actors);
|
||||||
|
ps.setString(11,Plot);
|
||||||
|
ps.setString(12,Language);
|
||||||
|
ps.setString(13,Country);
|
||||||
|
ps.setString(14,Awards);
|
||||||
|
ps.setString(15,Metascore);
|
||||||
|
ps.setString(16,imdbRating);
|
||||||
|
ps.setString(17,imdbVotes);
|
||||||
|
ps.setString(18,imdbID);
|
||||||
|
ps.setString(19,Type);
|
||||||
|
ps.setString(20,Poster);
|
||||||
|
ps.setString(21,Response);
|
||||||
|
ps.addBatch();
|
||||||
|
ps.executeBatch();
|
||||||
|
connection.commit();
|
||||||
|
ps.close();
|
||||||
|
System.out.println("done!");
|
||||||
|
}
|
||||||
|
|
||||||
|
void readCache(String streamUrl){
|
||||||
|
try{
|
||||||
|
Statement stmt = connection.createStatement();
|
||||||
|
ResultSet rs = stmt.executeQuery("SELECT * FROM cache WHERE streamUrl='"+streamUrl+"';");
|
||||||
|
ArrayList<Text> nameText = new ArrayList<Text>();
|
||||||
|
ArrayList<Text> responseText = new ArrayList<Text>();
|
||||||
|
String fontFamily = main.getFONT_FAMILY();
|
||||||
|
Image im;
|
||||||
|
int fontSize = (int) Math.round(mainWindowController.size);
|
||||||
|
int j=2;
|
||||||
|
|
||||||
|
nameText.add(0, new Text(mainWindowController.title+": "));
|
||||||
|
nameText.add(1, new Text(mainWindowController.year+": "));
|
||||||
|
nameText.add(2, new Text(mainWindowController.rating+": "));
|
||||||
|
nameText.add(3, new Text(mainWindowController.publishedOn+": "));
|
||||||
|
nameText.add(4, new Text(mainWindowController.duration+": "));
|
||||||
|
nameText.add(5, new Text(mainWindowController.genre+": "));
|
||||||
|
nameText.add(6, new Text(mainWindowController.director+": "));
|
||||||
|
nameText.add(7, new Text(mainWindowController.writer+": "));
|
||||||
|
nameText.add(8, new Text(mainWindowController.actors+": "));
|
||||||
|
nameText.add(9, new Text(mainWindowController.plot+": "));
|
||||||
|
nameText.add(10, new Text(mainWindowController.language+": "));
|
||||||
|
nameText.add(11, new Text(mainWindowController.country+": "));
|
||||||
|
nameText.add(12, new Text(mainWindowController.awards+": "));
|
||||||
|
nameText.add(13, new Text(mainWindowController.metascore+": "));
|
||||||
|
nameText.add(14, new Text(mainWindowController.imdbRating+": "));
|
||||||
|
nameText.add(15, new Text(mainWindowController.type+": "));
|
||||||
|
|
||||||
|
for(int i=0; i<15; i++){
|
||||||
|
responseText.add(new Text(rs.getString(j)+"\n"));
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
responseText.add(new Text(rs.getString(19)+"\n"));
|
||||||
|
im = new Image(new File(rs.getString(20)).toURI().toString());
|
||||||
|
|
||||||
|
stmt.close();
|
||||||
|
rs.close();
|
||||||
|
|
||||||
|
for(int i=0; i<nameText.size(); i++){
|
||||||
|
nameText.get(i).setFont(Font.font (fontFamily, FontWeight.BOLD, fontSize));
|
||||||
|
responseText.get(i).setFont(Font.font(fontFamily, fontSize));
|
||||||
|
}
|
||||||
|
|
||||||
|
mainWindowController.textFlow.getChildren().remove(0, mainWindowController.textFlow.getChildren().size());
|
||||||
|
|
||||||
|
for(int i=0;i<nameText.size(); i++){
|
||||||
|
mainWindowController.textFlow.getChildren().addAll(nameText.get(i),responseText.get(i));
|
||||||
|
}
|
||||||
|
|
||||||
|
try{
|
||||||
|
mainWindowController.image1.setImage(im);
|
||||||
|
}catch (Exception e){
|
||||||
|
mainWindowController.image1.setImage(new Image("recources/icons/close_black_2048x2048.png"));
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
mainWindowController.image1.setImage(im);
|
||||||
|
|
||||||
|
}catch (SQLException e) {
|
||||||
|
System.out.println("Ups! an error occured!");
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//removes the ending
|
//removes the ending
|
||||||
private String cutOffEnd (String str) {
|
private String cutOffEnd (String str) {
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
* MA 02110-1301, USA.
|
* MA 02110-1301, USA.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package application;
|
package application;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
@ -40,24 +41,26 @@ import javafx.stage.Stage;
|
||||||
|
|
||||||
public class Main extends Application {
|
public class Main extends Application {
|
||||||
|
|
||||||
private Stage primaryStage;
|
Stage primaryStage;
|
||||||
private String path;
|
private String path;
|
||||||
private String streamingPathWin = System.getProperty("user.home") + "\\Documents\\HomeFlix";
|
String currentWorkingDirectory;
|
||||||
private String streamingPathLinux = System.getProperty("user.home") + "/HomeFlix";
|
private String COLOR = "ee3523";
|
||||||
private String color = "ee3523";
|
private String FONT_FAMILY = "System";
|
||||||
private String autoUpdate = "0";
|
private String mode = "local"; //local or streaming TODO
|
||||||
private String mode = "local"; //local or streaming
|
|
||||||
private String local = System.getProperty("user.language")+"_"+System.getProperty("user.country");
|
private String local = System.getProperty("user.language")+"_"+System.getProperty("user.country");
|
||||||
private double size = 12;
|
private boolean AUTO_UPDATE = false;
|
||||||
|
private double FONT_SIZE = 17;
|
||||||
private ResourceBundle bundle;
|
private ResourceBundle bundle;
|
||||||
private MainWindowController mainWindowController;
|
private MainWindowController mainWindowController;
|
||||||
private File dirWin = new File(System.getProperty("user.home") + "/Documents/HomeFlix"); //Windows: C:/Users/"User"/Documents/HomeFlix
|
private File directory;
|
||||||
private File dirLinux = new File(System.getProperty("user.home") + "/HomeFlix"); //Linux: /home/"User"/HomeFlix
|
private File settingsFile;
|
||||||
private File fileWin = new File(dirWin + "/config.xml"); //Windows: C:/Users/"User"/Documents/HomeFlix/config.xml
|
private File posterCache;
|
||||||
private File fileLinux = new File(dirLinux + "/config.xml"); //Linux: /home/"User"/HomeFlix/config.xml
|
private String dirWin = System.getProperty("user.home") + "/Documents/HomeFlix"; //Windows: C:/Users/"User"/Documents/HomeFlix
|
||||||
|
private String dirLinux = System.getProperty("user.home") + "/HomeFlix"; //Linux: /home/"User"/HomeFlix
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void start(Stage primaryStage) {
|
public void start(Stage primaryStage) throws IOException {
|
||||||
|
currentWorkingDirectory = new java.io.File( "." ).getCanonicalPath();
|
||||||
this.primaryStage = primaryStage;
|
this.primaryStage = primaryStage;
|
||||||
mainWindow();
|
mainWindow();
|
||||||
}
|
}
|
||||||
|
@ -74,41 +77,42 @@ public class Main extends Application {
|
||||||
primaryStage.getIcons().add(new Image(Main.class.getResourceAsStream("/recources/Homeflix_Icon_64x64.png"))); //adds application icon
|
primaryStage.getIcons().add(new Image(Main.class.getResourceAsStream("/recources/Homeflix_Icon_64x64.png"))); //adds application icon
|
||||||
|
|
||||||
mainWindowController = loader.getController(); //Link of FXMLController and controller class
|
mainWindowController = loader.getController(); //Link of FXMLController and controller class
|
||||||
mainWindowController.setAutoUpdate(autoUpdate); //set auto-update
|
mainWindowController.setAutoUpdate(AUTO_UPDATE); //set auto-update
|
||||||
|
mainWindowController.setCurrentWorkingDirectory(currentWorkingDirectory);
|
||||||
mainWindowController.setMain(this); //call setMain
|
mainWindowController.setMain(this); //call setMain
|
||||||
|
|
||||||
//Linux if directory exists -> check config.xml
|
/**Linux else Windows, check if directory & config exist
|
||||||
if(System.getProperty("os.name").equals("Linux")){
|
* Windows: config file: C:/Users/"User"/Documents/HomeFlix/config.xml
|
||||||
if(dirLinux.exists() != true){
|
* directory: C:/Users/"User"/Documents/HomeFlix
|
||||||
dirLinux.mkdir();
|
* Linux: config file: /home/"User"/HomeFlix/config.xml
|
||||||
}else if(fileLinux.exists() != true){
|
* directory: /home/"User"/HomeFlix
|
||||||
mainWindowController.setPath(firstStart());
|
*/
|
||||||
mainWindowController.setStreamingPath(streamingPathLinux);
|
if(System.getProperty("os.name").equals("Linux")) {
|
||||||
mainWindowController.setColor(color);
|
directory = new File(dirLinux);
|
||||||
mainWindowController.setSize(size);
|
settingsFile = new File(dirLinux + "/config.xml");
|
||||||
mainWindowController.setAutoUpdate(autoUpdate);
|
} else {
|
||||||
mainWindowController.setLocal(local);
|
directory = new File(dirWin);
|
||||||
mainWindowController.setMode(mode);
|
settingsFile = new File(dirWin + "/config.xml");
|
||||||
mainWindowController.saveSettings();
|
}
|
||||||
Runtime.getRuntime().exec("java -jar ProjectHomeFlix.jar"); //start again (preventing Bugs)
|
|
||||||
System.exit(0); //finishes itself
|
posterCache = new File(directory+"/posterCache");
|
||||||
}
|
|
||||||
//windows
|
if(!settingsFile.exists()){
|
||||||
}else{
|
directory.mkdir();
|
||||||
if(dirWin.exists() != true){
|
mainWindowController.setPath(firstStart());
|
||||||
dirWin.mkdir();
|
mainWindowController.setStreamingPath(directory.getAbsolutePath());
|
||||||
}else if(fileWin.exists() != true){
|
mainWindowController.setColor(COLOR);
|
||||||
mainWindowController.setPath(firstStart());
|
mainWindowController.setSize(FONT_SIZE);
|
||||||
mainWindowController.setStreamingPath(streamingPathWin);
|
mainWindowController.setAutoUpdate(AUTO_UPDATE);
|
||||||
mainWindowController.setColor(color);
|
mainWindowController.setLocal(local);
|
||||||
mainWindowController.setSize(size);
|
mainWindowController.setMode(mode);
|
||||||
mainWindowController.setAutoUpdate(autoUpdate);
|
mainWindowController.saveSettings();
|
||||||
mainWindowController.setLocal(local);
|
Runtime.getRuntime().exec("java -jar ProjectHomeFlix.jar"); //start again (preventing Bugs)
|
||||||
mainWindowController.setMode(mode);
|
System.exit(0); //finishes it self
|
||||||
mainWindowController.saveSettings();
|
}
|
||||||
Runtime.getRuntime().exec("java -jar ProjectHomeFlix.jar"); //start again (preventing Bugs)
|
|
||||||
System.exit(0); //finishes itself
|
if(!posterCache.exists()) {
|
||||||
}
|
posterCache.mkdir();
|
||||||
}
|
}
|
||||||
|
|
||||||
mainWindowController.loadSettings();
|
mainWindowController.loadSettings();
|
||||||
|
@ -166,4 +170,20 @@ public class Main extends Application {
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
launch(args);
|
launch(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getFONT_FAMILY() {
|
||||||
|
return FONT_FAMILY;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFONT_FAMILY(String FONT_FAMILY) {
|
||||||
|
this.FONT_FAMILY = FONT_FAMILY;
|
||||||
|
}
|
||||||
|
|
||||||
|
public File getPosterCache() {
|
||||||
|
return posterCache;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPosterCache(File posterCache) {
|
||||||
|
this.posterCache = posterCache;
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -3,11 +3,11 @@
|
||||||
<?import com.jfoenix.controls.JFXButton?>
|
<?import com.jfoenix.controls.JFXButton?>
|
||||||
<?import com.jfoenix.controls.JFXColorPicker?>
|
<?import com.jfoenix.controls.JFXColorPicker?>
|
||||||
<?import com.jfoenix.controls.JFXSlider?>
|
<?import com.jfoenix.controls.JFXSlider?>
|
||||||
<?import com.jfoenix.controls.JFXTextArea?>
|
|
||||||
<?import com.jfoenix.controls.JFXTextField?>
|
<?import com.jfoenix.controls.JFXTextField?>
|
||||||
<?import com.jfoenix.controls.JFXToggleButton?>
|
<?import com.jfoenix.controls.JFXToggleButton?>
|
||||||
<?import javafx.scene.control.ChoiceBox?>
|
<?import javafx.scene.control.ChoiceBox?>
|
||||||
<?import javafx.scene.control.Label?>
|
<?import javafx.scene.control.Label?>
|
||||||
|
<?import javafx.scene.control.ScrollPane?>
|
||||||
<?import javafx.scene.control.TableView?>
|
<?import javafx.scene.control.TableView?>
|
||||||
<?import javafx.scene.control.TreeTableView?>
|
<?import javafx.scene.control.TreeTableView?>
|
||||||
<?import javafx.scene.image.Image?>
|
<?import javafx.scene.image.Image?>
|
||||||
|
@ -20,9 +20,12 @@
|
||||||
|
|
||||||
<AnchorPane fx:id="anpane" prefHeight="600.0" prefWidth="950.0" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.MainWindowController">
|
<AnchorPane fx:id="anpane" prefHeight="600.0" prefWidth="950.0" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.MainWindowController">
|
||||||
<children>
|
<children>
|
||||||
<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.rightAnchor="553.0" AnchorPane.topAnchor="88.0" />
|
<ScrollPane fx:id="scrollPane" fitToWidth="true" layoutX="408.0" layoutY="44.0" prefHeight="544.0" prefWidth="320.0" AnchorPane.bottomAnchor="12.0" AnchorPane.leftAnchor="408.0" AnchorPane.rightAnchor="222.0" AnchorPane.topAnchor="44.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="410.0" AnchorPane.rightAnchor="222.0" AnchorPane.topAnchor="44.0" />
|
<content>
|
||||||
<TextFlow fx:id="textFlow" layoutX="496.0" layoutY="131.0" prefHeight="200.0" prefWidth="200.0" visible="false" AnchorPane.bottomAnchor="15.0" AnchorPane.leftAnchor="410.0" AnchorPane.rightAnchor="220.0" AnchorPane.topAnchor="44.0" />
|
<TextFlow fx:id="textFlow" accessibleRole="TEXT_AREA" maxHeight="544.0" maxWidth="320.0" visible="true" />
|
||||||
|
</content>
|
||||||
|
</ScrollPane>
|
||||||
|
<TreeTableView fx:id="treeTableViewfilm" layoutX="14.0" layoutY="88.0" prefHeight="500.0" prefWidth="375.0" AnchorPane.bottomAnchor="12.0" AnchorPane.leftAnchor="12.0" AnchorPane.rightAnchor="568.0" AnchorPane.topAnchor="88.0" />
|
||||||
<JFXButton fx:id="playbtn" contentDisplay="CENTER" layoutX="690.0" layoutY="363.0" onAction="#playbtnclicked" prefHeight="25.0" prefWidth="198.0" AnchorPane.bottomAnchor="212.0" AnchorPane.rightAnchor="12.0">
|
<JFXButton fx:id="playbtn" contentDisplay="CENTER" layoutX="690.0" layoutY="363.0" onAction="#playbtnclicked" prefHeight="25.0" prefWidth="198.0" AnchorPane.bottomAnchor="212.0" AnchorPane.rightAnchor="12.0">
|
||||||
<font>
|
<font>
|
||||||
<Font name="System Bold" size="14.0" />
|
<Font name="System Bold" size="14.0" />
|
||||||
|
@ -31,7 +34,7 @@
|
||||||
<font>
|
<font>
|
||||||
<Font name="System Bold" size="14.0" />
|
<Font name="System Bold" size="14.0" />
|
||||||
</font></JFXButton>
|
</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.rightAnchor="553.0" AnchorPane.topAnchor="44.0">
|
<JFXTextField fx:id="tfsearch" layoutX="12.0" layoutY="44.0" maxWidth="477.0" minWidth="359.0" prefHeight="31.0" prefWidth="370.0" promptText="Suche ..." AnchorPane.leftAnchor="12.0" AnchorPane.rightAnchor="568.0" AnchorPane.topAnchor="44.0">
|
||||||
<font>
|
<font>
|
||||||
<Font name="Arial" size="12.0" />
|
<Font name="Arial" size="12.0" />
|
||||||
</font></JFXTextField>
|
</font></JFXTextField>
|
||||||
|
@ -78,8 +81,8 @@
|
||||||
<AnchorPane fx:id="streamingSettingsAnchor" layoutX="138.0" layoutY="33.0" prefHeight="566.0" prefWidth="760.0" style="-fx-background-color: #FFFFFF;" visible="false" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="150.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="38.0">
|
<AnchorPane fx:id="streamingSettingsAnchor" layoutX="138.0" layoutY="33.0" prefHeight="566.0" prefWidth="760.0" style="-fx-background-color: #FFFFFF;" visible="false" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="150.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="38.0">
|
||||||
<children>
|
<children>
|
||||||
<JFXTextField fx:id="tfStreamingPath" layoutX="14.0" layoutY="14.0" onAction="#tfStreamingPathAction" prefWidth="250.0" AnchorPane.leftAnchor="5.0" AnchorPane.topAnchor="5.0" />
|
<JFXTextField fx:id="tfStreamingPath" layoutX="14.0" layoutY="14.0" onAction="#tfStreamingPathAction" prefWidth="250.0" AnchorPane.leftAnchor="5.0" AnchorPane.topAnchor="5.0" />
|
||||||
<JFXButton fx:id="streamingDirectoryBtn" layoutX="263.0" layoutY="2.0" onAction="#streamingDirectoryBtnAction" AnchorPane.leftAnchor="260.0" AnchorPane.topAnchor="5.0" />
|
<JFXButton fx:id="streamingDirectoryBtn" layoutX="263.0" layoutY="2.0" onAction="#streamingDirectoryBtnAction" prefHeight="25.0" prefWidth="115.0" AnchorPane.leftAnchor="260.0" AnchorPane.topAnchor="5.0" />
|
||||||
<TableView fx:id="tableViewStreamingdata" layoutX="14.0" layoutY="44.0" prefHeight="200.0" prefWidth="300.0" AnchorPane.bottomAnchor="5.0" AnchorPane.leftAnchor="5.0" AnchorPane.topAnchor="40.0" />
|
<TableView fx:id="tableViewStreamingdata" layoutX="14.0" layoutY="44.0" prefHeight="517.0" prefWidth="370.0" AnchorPane.bottomAnchor="5.0" AnchorPane.leftAnchor="5.0" AnchorPane.topAnchor="40.0" />
|
||||||
</children></AnchorPane>
|
</children></AnchorPane>
|
||||||
<AnchorPane fx:id="settingsAnchor" layoutX="160.0" layoutY="44.0" prefHeight="566.0" prefWidth="760.0" style="-fx-background-color: #FFFFFF;" visible="false" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="150.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="38.0">
|
<AnchorPane fx:id="settingsAnchor" layoutX="160.0" layoutY="44.0" prefHeight="566.0" prefWidth="760.0" style="-fx-background-color: #FFFFFF;" visible="false" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="150.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="38.0">
|
||||||
<children>
|
<children>
|
||||||
|
|
|
@ -41,12 +41,9 @@ import java.util.ArrayList;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
import java.util.ResourceBundle;
|
import java.util.ResourceBundle;
|
||||||
import org.apache.commons.lang3.SystemUtils;
|
|
||||||
|
|
||||||
import com.jfoenix.controls.JFXButton;
|
import com.jfoenix.controls.JFXButton;
|
||||||
import com.jfoenix.controls.JFXColorPicker;
|
import com.jfoenix.controls.JFXColorPicker;
|
||||||
import com.jfoenix.controls.JFXSlider;
|
import com.jfoenix.controls.JFXSlider;
|
||||||
import com.jfoenix.controls.JFXTextArea;
|
|
||||||
import com.jfoenix.controls.JFXTextField;
|
import com.jfoenix.controls.JFXTextField;
|
||||||
import com.jfoenix.controls.JFXToggleButton;
|
import com.jfoenix.controls.JFXToggleButton;
|
||||||
|
|
||||||
|
@ -99,17 +96,15 @@ public class MainWindowController {
|
||||||
@FXML
|
@FXML
|
||||||
private VBox sideMenuVBox;
|
private VBox sideMenuVBox;
|
||||||
@FXML
|
@FXML
|
||||||
private TreeTableView<streamUiData> treeTableViewfilm;
|
private TreeTableView<tableData> treeTableViewfilm;
|
||||||
@FXML
|
@FXML
|
||||||
private TableView<streamUiData> tableViewStreamingdata;
|
private TableView<tableData> tableViewStreamingdata;
|
||||||
@FXML
|
|
||||||
JFXTextArea ta1;
|
|
||||||
@FXML
|
@FXML
|
||||||
TextFlow textFlow;
|
TextFlow textFlow;
|
||||||
@FXML
|
@FXML
|
||||||
ScrollPane scrollPane;
|
ScrollPane scrollPane;
|
||||||
@FXML
|
@FXML
|
||||||
private JFXButton menubtn;
|
private JFXButton menubtn; //TODO switch to hamburger menu
|
||||||
@FXML
|
@FXML
|
||||||
private JFXButton playbtn;
|
private JFXButton playbtn;
|
||||||
@FXML
|
@FXML
|
||||||
|
@ -159,37 +154,37 @@ public class MainWindowController {
|
||||||
private ImageView imv1;
|
private ImageView imv1;
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
TreeItem<streamUiData> root = new TreeItem<>(new streamUiData(1, 1, 1, 5.0,"1", "filme","1", imv1));
|
TreeItem<tableData> root = new TreeItem<>(new tableData(1, 1, 1, 5.0,"1", "filme","1", imv1, false));
|
||||||
@FXML
|
@FXML
|
||||||
TreeTableColumn<streamUiData, ImageView> columnRating = new TreeTableColumn<>("Rating");
|
TreeTableColumn<tableData, ImageView> columnRating = new TreeTableColumn<>("Rating");
|
||||||
@FXML
|
@FXML
|
||||||
TreeTableColumn<streamUiData, String> columnTitel = new TreeTableColumn<>("Titel");
|
TreeTableColumn<tableData, String> columnTitel = new TreeTableColumn<>("Titel");
|
||||||
@FXML
|
@FXML
|
||||||
TreeTableColumn<streamUiData, String> columnStreamUrl = new TreeTableColumn<>("File Name");
|
TreeTableColumn<tableData, String> columnStreamUrl = new TreeTableColumn<>("File Name");
|
||||||
@FXML
|
@FXML
|
||||||
TreeTableColumn<streamUiData, String> columnResolution = new TreeTableColumn<>("Resolution");
|
TreeTableColumn<tableData, String> columnResolution = new TreeTableColumn<>("Resolution");
|
||||||
@FXML
|
@FXML
|
||||||
TreeTableColumn<streamUiData, Integer> columnYear = new TreeTableColumn<>("Year");
|
TreeTableColumn<tableData, Integer> columnYear = new TreeTableColumn<>("Year");
|
||||||
@FXML
|
@FXML
|
||||||
TreeTableColumn<streamUiData, Integer> columnSeason = new TreeTableColumn<>("Season");
|
TreeTableColumn<tableData, Integer> columnSeason = new TreeTableColumn<>("Season");
|
||||||
@FXML
|
@FXML
|
||||||
TreeTableColumn<streamUiData, Integer> columnEpisode = new TreeTableColumn<>("Episode");
|
TreeTableColumn<tableData, Integer> columnEpisode = new TreeTableColumn<>("Episode");
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private TreeItem<streamUiData> streamingRoot =new TreeItem<>(new streamUiData(1 ,1 ,1 ,1.0 ,"1" ,"filme" ,"1", imv1));
|
private TreeItem<tableData> streamingRoot =new TreeItem<>(new tableData(1 ,1 ,1 ,1.0 ,"1" ,"filme" ,"1", imv1, false));
|
||||||
@FXML
|
@FXML
|
||||||
private TableColumn<streamUiData, String> dataNameColumn = new TableColumn<>("Datei Name");
|
private TableColumn<tableData, String> dataNameColumn = new TableColumn<>("Datei Name");
|
||||||
@FXML
|
@FXML
|
||||||
private TableColumn<streamUiData, String> dataNameEndColumn = new TableColumn<>("Datei Name mit Endung");
|
private TableColumn<tableData, String> dataNameEndColumn = new TableColumn<>("Datei Name mit Endung");
|
||||||
|
|
||||||
|
|
||||||
private boolean menutrue = false; //saves the position of menubtn (opened or closed)
|
private boolean menutrue = false; //saves the position of menuBtn (opened or closed)
|
||||||
private boolean settingstrue = false;
|
private boolean settingstrue = false;
|
||||||
private boolean streamingSettingsTrue = false;
|
private boolean streamingSettingsTrue = false;
|
||||||
|
private boolean autoUpdate = false;
|
||||||
static boolean firststart = false;
|
static boolean firststart = false;
|
||||||
private int hashA = -2055934614;
|
private int hashA = -2055934614;
|
||||||
private String version = "0.5.0";
|
private String version = "0.5.1";
|
||||||
private String buildNumber = "117";
|
private String buildNumber = "125";
|
||||||
private String versionName = "plasma cow";
|
private String versionName = "plasma cow";
|
||||||
private String buildURL = "https://raw.githubusercontent.com/Seil0/Project-HomeFlix/master/updates/buildNumber.txt";
|
private String buildURL = "https://raw.githubusercontent.com/Seil0/Project-HomeFlix/master/updates/buildNumber.txt";
|
||||||
private String downloadLink = "https://raw.githubusercontent.com/Seil0/Project-HomeFlix/master/updates/downloadLink.txt";
|
private String downloadLink = "https://raw.githubusercontent.com/Seil0/Project-HomeFlix/master/updates/downloadLink.txt";
|
||||||
|
@ -200,22 +195,21 @@ public class MainWindowController {
|
||||||
|
|
||||||
String errorUpdateD;
|
String errorUpdateD;
|
||||||
String errorUpdateV;
|
String errorUpdateV;
|
||||||
|
String noFilmFound;
|
||||||
private String errorPlay;
|
private String errorPlay;
|
||||||
private String errorOpenStream;
|
private String errorOpenStream;
|
||||||
private String errorMode;
|
private String errorMode;
|
||||||
private String errorLoad;
|
private String errorLoad;
|
||||||
private String errorSave;
|
private String errorSave;
|
||||||
String noFilmFound;
|
|
||||||
private String infoText;
|
private String infoText;
|
||||||
private String linuxBugText;
|
private String linuxBugText;
|
||||||
private String vlcNotInstalled;
|
private String vlcNotInstalled;
|
||||||
private String aktBuildNumber;
|
private String currentWorkingDirectory;
|
||||||
private String path;
|
private String path;
|
||||||
private String streamingPath;
|
private String streamingPath;
|
||||||
private String color;
|
private String color;
|
||||||
private String Name;
|
private String name;
|
||||||
private String datPath;
|
private String datPath;
|
||||||
private String autoUpdate;
|
|
||||||
private String mode;
|
private String mode;
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
private String ratingSortType;
|
private String ratingSortType;
|
||||||
|
@ -236,7 +230,7 @@ public class MainWindowController {
|
||||||
String metascore;
|
String metascore;
|
||||||
String imdbRating;
|
String imdbRating;
|
||||||
String type;
|
String type;
|
||||||
private double size;
|
double size;
|
||||||
private int last;
|
private int last;
|
||||||
private int selected;
|
private int selected;
|
||||||
private int next;
|
private int next;
|
||||||
|
@ -244,11 +238,11 @@ public class MainWindowController {
|
||||||
private File selectedStreamingFolder;
|
private File selectedStreamingFolder;
|
||||||
ResourceBundle bundle;
|
ResourceBundle bundle;
|
||||||
|
|
||||||
private ObservableList<streamUiData> filterData = FXCollections.observableArrayList();
|
private ObservableList<tableData> filterData = FXCollections.observableArrayList();
|
||||||
private ObservableList<String> locals = FXCollections.observableArrayList("english (en_US)", "deutsch (de_DE)");
|
private ObservableList<String> locals = FXCollections.observableArrayList("English (en_US)", "Deutsch (de_DE)");
|
||||||
ObservableList<streamUiData> newData = FXCollections.observableArrayList(); //TODO rename to localFilms
|
ObservableList<tableData> localFilms = FXCollections.observableArrayList();
|
||||||
ObservableList<streamUiData> streamData = FXCollections.observableArrayList(); //TODO rename to streamingFilms
|
ObservableList<tableData> streamingFilms = FXCollections.observableArrayList();
|
||||||
ObservableList<streamUiData> streamingData = FXCollections.observableArrayList();
|
ObservableList<tableData> streamingData = FXCollections.observableArrayList();
|
||||||
private ImageView menu_icon_black = new ImageView(new Image("recources/icons/menu_icon_black.png"));
|
private ImageView menu_icon_black = new ImageView(new Image("recources/icons/menu_icon_black.png"));
|
||||||
private ImageView menu_icon_white = new ImageView(new Image("recources/icons/menu_icon_white.png"));
|
private ImageView menu_icon_white = new ImageView(new Image("recources/icons/menu_icon_white.png"));
|
||||||
private ImageView skip_previous_white = new ImageView(new Image("recources/icons/ic_skip_previous_white_18dp_1x.png"));
|
private ImageView skip_previous_white = new ImageView(new Image("recources/icons/ic_skip_previous_white_18dp_1x.png"));
|
||||||
|
@ -263,6 +257,7 @@ public class MainWindowController {
|
||||||
private ContextMenu menu = new ContextMenu(like, dislike);
|
private ContextMenu menu = new ContextMenu(like, dislike);
|
||||||
Properties props = new Properties();
|
Properties props = new Properties();
|
||||||
|
|
||||||
|
private Main main;
|
||||||
private updater Updater;
|
private updater Updater;
|
||||||
private apiQuery ApiQuery;
|
private apiQuery ApiQuery;
|
||||||
DBController dbController;
|
DBController dbController;
|
||||||
|
@ -293,8 +288,9 @@ public class MainWindowController {
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private void playbtnclicked(){
|
private void playbtnclicked(){
|
||||||
if(SystemUtils.IS_OS_LINUX){
|
System.out.println(System.getProperty("os.name"));
|
||||||
System.out.println("This is Linux");
|
if(System.getProperty("os.name").contains("Linux")){
|
||||||
|
System.out.println("This is "+System.getProperty("os.name"));
|
||||||
String line;
|
String line;
|
||||||
String output = "";
|
String output = "";
|
||||||
Process p;
|
Process p;
|
||||||
|
@ -320,6 +316,7 @@ public class MainWindowController {
|
||||||
alert.setHeaderText("");
|
alert.setHeaderText("");
|
||||||
alert.setTitle("Info");
|
alert.setTitle("Info");
|
||||||
alert.setContentText(linuxBugText);
|
alert.setContentText(linuxBugText);
|
||||||
|
alert.initOwner(main.primaryStage);
|
||||||
alert.showAndWait();
|
alert.showAndWait();
|
||||||
}else{
|
}else{
|
||||||
try {
|
try {
|
||||||
|
@ -328,8 +325,8 @@ public class MainWindowController {
|
||||||
showErrorMsg(errorPlay,e);
|
showErrorMsg(errorPlay,e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}else if(SystemUtils.IS_OS_WINDOWS || SystemUtils.IS_OS_MAC_OSX){
|
}else if(System.getProperty("os.name").contains("Windows") || System.getProperty("os.name").contains("Mac OS X")){
|
||||||
System.out.println("This is Windows or Mac OSX");
|
System.out.println("This is "+System.getProperty("os.name"));
|
||||||
if(mode.equals("local")){
|
if(mode.equals("local")){
|
||||||
try {
|
try {
|
||||||
Desktop.getDesktop().open(new File(getPath()+"\\"+ datPath));
|
Desktop.getDesktop().open(new File(getPath()+"\\"+ datPath));
|
||||||
|
@ -338,7 +335,7 @@ public class MainWindowController {
|
||||||
}
|
}
|
||||||
}else if(mode.equals("streaming")){
|
}else if(mode.equals("streaming")){
|
||||||
try {
|
try {
|
||||||
Desktop.getDesktop().browse(new URI(datPath)); //open the streaming Url in browser (TODO other option?)
|
Desktop.getDesktop().browse(new URI(datPath)); //open the streaming URL in browser (TODO other option?)
|
||||||
} catch (URISyntaxException | IOException e) {
|
} catch (URISyntaxException | IOException e) {
|
||||||
showErrorMsg(errorOpenStream, (IOException) e);
|
showErrorMsg(errorOpenStream, (IOException) e);
|
||||||
}
|
}
|
||||||
|
@ -375,6 +372,7 @@ public class MainWindowController {
|
||||||
alert.setTitle("Info");
|
alert.setTitle("Info");
|
||||||
alert.setHeaderText("Project HomeFlix");
|
alert.setHeaderText("Project HomeFlix");
|
||||||
alert.setContentText(infoText);
|
alert.setContentText(infoText);
|
||||||
|
alert.initOwner(main.primaryStage);
|
||||||
alert.showAndWait();
|
alert.showAndWait();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -472,21 +470,21 @@ public class MainWindowController {
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private void updateBtnAction(){
|
private void updateBtnAction(){
|
||||||
// Updater.update(buildURL, downloadLink, aktBuildNumber, buildNumber);
|
|
||||||
System.out.println(Updater.getState());
|
System.out.println(Updater.getState());
|
||||||
if(Updater.getState() == State.NEW){
|
if(Updater.getState() == State.NEW){
|
||||||
Updater.start();
|
Updater.start();
|
||||||
}else{
|
}else{
|
||||||
Updater.run();
|
Updater.run();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private void autoupdateBtnAction(){
|
private void autoupdateBtnAction(){
|
||||||
if(autoUpdate.equals("0")){
|
if(autoUpdate){
|
||||||
setAutoUpdate("1");
|
setAutoUpdate(false);
|
||||||
}else{
|
}else{
|
||||||
setAutoUpdate("0");
|
setAutoUpdate(true);
|
||||||
}
|
}
|
||||||
saveSettings();
|
saveSettings();
|
||||||
}
|
}
|
||||||
|
@ -516,11 +514,14 @@ public class MainWindowController {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//"Main" Method called in Main.java main() when starting
|
/**"Main" Method called in Main.java main() when starting
|
||||||
|
* Initialize other objects: Updater, dbController and ApiQuery
|
||||||
|
*/
|
||||||
void setMain(Main main) {
|
void setMain(Main main) {
|
||||||
Updater = new updater(this,buildURL, downloadLink, aktBuildNumber, buildNumber);
|
this.main = main;
|
||||||
ApiQuery = new apiQuery(this);
|
Updater = new updater(this,buildURL, downloadLink, buildNumber);
|
||||||
dbController = new DBController(this);
|
dbController = new DBController(this, this.main);
|
||||||
|
ApiQuery = new apiQuery(this, dbController, this.main);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Initialize the tables (treeTableViewfilm and tableViewStreamingdata)
|
//Initialize the tables (treeTableViewfilm and tableViewStreamingdata)
|
||||||
|
@ -532,7 +533,7 @@ public class MainWindowController {
|
||||||
columnTitel.setMaxWidth(260);
|
columnTitel.setMaxWidth(260);
|
||||||
columnStreamUrl.setMaxWidth(0);
|
columnStreamUrl.setMaxWidth(0);
|
||||||
dataNameColumn.setPrefWidth(150);
|
dataNameColumn.setPrefWidth(150);
|
||||||
dataNameEndColumn.setPrefWidth(170);
|
dataNameEndColumn.setPrefWidth(220);
|
||||||
columnRating.setStyle("-fx-alignment: CENTER;");
|
columnRating.setStyle("-fx-alignment: CENTER;");
|
||||||
|
|
||||||
treeTableViewfilm.setRoot(root);
|
treeTableViewfilm.setRoot(root);
|
||||||
|
@ -540,7 +541,7 @@ public class MainWindowController {
|
||||||
treeTableViewfilm.setShowRoot(false);
|
treeTableViewfilm.setShowRoot(false);
|
||||||
|
|
||||||
//write content into cell
|
//write content into cell
|
||||||
columnTitel.setCellValueFactory(cellData -> cellData.getValue().getValue().titelProperty());
|
columnTitel.setCellValueFactory(cellData -> cellData.getValue().getValue().titleProperty());
|
||||||
columnRating.setCellValueFactory(cellData -> cellData.getValue().getValue().imageProperty());
|
columnRating.setCellValueFactory(cellData -> cellData.getValue().getValue().imageProperty());
|
||||||
columnStreamUrl.setCellValueFactory(cellData -> cellData.getValue().getValue().streamUrlProperty());
|
columnStreamUrl.setCellValueFactory(cellData -> cellData.getValue().getValue().streamUrlProperty());
|
||||||
columnResolution.setCellValueFactory(cellData -> cellData.getValue().getValue().resolutionProperty());
|
columnResolution.setCellValueFactory(cellData -> cellData.getValue().getValue().resolutionProperty());
|
||||||
|
@ -554,16 +555,30 @@ public class MainWindowController {
|
||||||
//Change-listener for TreeTable
|
//Change-listener for TreeTable
|
||||||
treeTableViewfilm.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<Object>() {
|
treeTableViewfilm.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<Object>() {
|
||||||
@Override
|
@Override
|
||||||
public void changed(ObservableValue<?> observable, Object oldVal, Object newVal) {
|
public void changed(ObservableValue<?> observable, Object oldVal, Object newVal){
|
||||||
// last = selected; //for auto-play
|
// last = selected; //for auto-play
|
||||||
selected = treeTableViewfilm.getSelectionModel().getSelectedIndex(); //get selected item
|
selected = treeTableViewfilm.getSelectionModel().getSelectedIndex(); //get selected item
|
||||||
last = selected - 1;
|
last = selected - 1;
|
||||||
next = selected + 1;
|
next = selected + 1;
|
||||||
Name = columnTitel.getCellData(selected); //get name of selected item
|
name = columnTitel.getCellData(selected); //get name of selected item
|
||||||
datPath = columnStreamUrl.getCellData(selected); //get file path of selected item
|
datPath = columnStreamUrl.getCellData(selected); //get file path of selected item
|
||||||
ta1.setText(""); //delete text in ta1
|
|
||||||
ApiQuery.startQuery(Name); // start api query
|
if(mode.equals("local")){
|
||||||
ta1.positionCaret(0); //set cursor position in ta1
|
if(localFilms.get(selected).getCached()==true){
|
||||||
|
System.out.println("loading from cache: "+name);
|
||||||
|
dbController.readCache(datPath);
|
||||||
|
}else{
|
||||||
|
ApiQuery.startQuery(name,datPath); // start api query
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
System.out.println(streamingFilms.size());
|
||||||
|
if(streamingFilms.get(selected).getCached()==true){
|
||||||
|
System.out.println("loading from cache: "+name);
|
||||||
|
dbController.readCache(datPath);
|
||||||
|
}else{
|
||||||
|
ApiQuery.startQuery(name,datPath); // start api query
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -571,7 +586,7 @@ public class MainWindowController {
|
||||||
treeTableViewfilm.setContextMenu(menu);
|
treeTableViewfilm.setContextMenu(menu);
|
||||||
|
|
||||||
//Streaming-Settings Table
|
//Streaming-Settings Table
|
||||||
dataNameColumn.setCellValueFactory(cellData -> cellData.getValue().titelProperty());
|
dataNameColumn.setCellValueFactory(cellData -> cellData.getValue().titleProperty());
|
||||||
dataNameEndColumn.setCellValueFactory(cellData -> cellData.getValue().streamUrlProperty());
|
dataNameEndColumn.setCellValueFactory(cellData -> cellData.getValue().streamUrlProperty());
|
||||||
|
|
||||||
tableViewStreamingdata.getColumns().addAll(dataNameColumn, dataNameEndColumn);
|
tableViewStreamingdata.getColumns().addAll(dataNameColumn, dataNameEndColumn);
|
||||||
|
@ -584,24 +599,24 @@ public class MainWindowController {
|
||||||
tfsearch.textProperty().addListener(new ChangeListener<String>() {
|
tfsearch.textProperty().addListener(new ChangeListener<String>() {
|
||||||
@Override
|
@Override
|
||||||
public void changed(ObservableValue<? extends String> observable,String oldValue, String newValue) {
|
public void changed(ObservableValue<? extends String> observable,String oldValue, String newValue) {
|
||||||
ObservableList<streamUiData> helpData;
|
ObservableList<tableData> helpData;
|
||||||
filterData.removeAll(filterData);
|
filterData.removeAll(filterData);
|
||||||
root.getChildren().remove(0,root.getChildren().size());
|
root.getChildren().remove(0,root.getChildren().size());
|
||||||
|
|
||||||
if(mode.equals("local")){
|
if(mode.equals("local")){
|
||||||
helpData = newData;
|
helpData = localFilms;
|
||||||
}else{
|
}else{
|
||||||
helpData = streamData;
|
helpData = streamingFilms;
|
||||||
}
|
}
|
||||||
|
|
||||||
for(int i = 0; i < helpData.size(); i++){
|
for(int i = 0; i < helpData.size(); i++){
|
||||||
if(helpData.get(i).getTitel().toLowerCase().contains(tfsearch.getText().toLowerCase())){
|
if(helpData.get(i).getTitle().toLowerCase().contains(tfsearch.getText().toLowerCase())){
|
||||||
filterData.add(helpData.get(i)); //add data from newDaten to filteredData where title contains search input
|
filterData.add(helpData.get(i)); //add data from newDaten to filteredData where title contains search input
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for(int i = 0; i < filterData.size(); i++){
|
for(int i = 0; i < filterData.size(); i++){
|
||||||
root.getChildren().add(new TreeItem<streamUiData>(filterData.get(i))); //add filtered data to root node after search
|
root.getChildren().add(new TreeItem<tableData>(filterData.get(i))); //add filtered data to root node after search
|
||||||
}
|
}
|
||||||
if(tfsearch.getText().hashCode() == hashA){
|
if(tfsearch.getText().hashCode() == hashA){
|
||||||
setColor("000000");
|
setColor("000000");
|
||||||
|
@ -613,7 +628,7 @@ public class MainWindowController {
|
||||||
cbLocal.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener<Number>() {
|
cbLocal.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener<Number>() {
|
||||||
public void changed(ObservableValue<? extends Number> ov, Number value, Number new_value) {
|
public void changed(ObservableValue<? extends Number> ov, Number value, Number new_value) {
|
||||||
String local = cbLocal.getItems().get((int) new_value).toString();
|
String local = cbLocal.getItems().get((int) new_value).toString();
|
||||||
local = local.substring(local.length()-6,local.length()-1);
|
local = local.substring(local.length()-6,local.length()-1); //reading only en_US from English (en_US)
|
||||||
setLocal(local);
|
setLocal(local);
|
||||||
setLocalUI();
|
setLocalUI();
|
||||||
saveSettings();
|
saveSettings();
|
||||||
|
@ -624,7 +639,12 @@ public class MainWindowController {
|
||||||
@Override
|
@Override
|
||||||
public void changed(ObservableValue<? extends Number> ov,Number old_val, Number new_val) {
|
public void changed(ObservableValue<? extends Number> ov,Number old_val, Number new_val) {
|
||||||
setSize(sliderFontSize.getValue());
|
setSize(sliderFontSize.getValue());
|
||||||
ta1.setFont(Font.font("System", size));
|
|
||||||
|
if(name != null){
|
||||||
|
dbController.readCache(datPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ta1.setFont(Font.font("System", size));
|
||||||
saveSettings();
|
saveSettings();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -633,13 +653,13 @@ public class MainWindowController {
|
||||||
@Override
|
@Override
|
||||||
public void handle(ActionEvent event) {
|
public void handle(ActionEvent event) {
|
||||||
if(mode.equals("streaming")){
|
if(mode.equals("streaming")){
|
||||||
dbController.like(Name,streamData.get(selected).getStreamUrl());
|
dbController.like(name,streamingFilms.get(selected).getStreamUrl());
|
||||||
}else{
|
}else{
|
||||||
dbController.like(Name,newData.get(selected).getStreamUrl());
|
dbController.like(name,localFilms.get(selected).getStreamUrl());
|
||||||
}
|
}
|
||||||
dbController.getFavStatus(Name);
|
dbController.getFavStatus(name);
|
||||||
try {
|
try {
|
||||||
dbController.refresh(Name, selected);
|
dbController.refresh(name, selected);
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
Alert alert = new Alert(AlertType.ERROR);
|
Alert alert = new Alert(AlertType.ERROR);
|
||||||
alert.setTitle("Error");
|
alert.setTitle("Error");
|
||||||
|
@ -655,13 +675,13 @@ public class MainWindowController {
|
||||||
@Override
|
@Override
|
||||||
public void handle(ActionEvent event) {
|
public void handle(ActionEvent event) {
|
||||||
if(mode.equals("streaming")){
|
if(mode.equals("streaming")){
|
||||||
dbController.dislike(Name,streamData.get(selected).getStreamUrl());
|
dbController.dislike(name,streamingFilms.get(selected).getStreamUrl());
|
||||||
}else{
|
}else{
|
||||||
dbController.dislike(Name,newData.get(selected).getStreamUrl());
|
dbController.dislike(name,localFilms.get(selected).getStreamUrl());
|
||||||
}
|
}
|
||||||
dbController.getFavStatus(Name);
|
dbController.getFavStatus(name);
|
||||||
try {
|
try {
|
||||||
dbController.refresh(Name, selected);
|
dbController.refresh(name, selected);
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
Alert alert = new Alert(AlertType.ERROR);
|
Alert alert = new Alert(AlertType.ERROR);
|
||||||
alert.setTitle("Error");
|
alert.setTitle("Error");
|
||||||
|
@ -674,7 +694,7 @@ public class MainWindowController {
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO fix bug when sort by ASCENDING, wrong order
|
* FIXME fix bug when sort by ASCENDING, wrong order
|
||||||
*/
|
*/
|
||||||
columnRating.sortTypeProperty().addListener(new ChangeListener<SortType>() {
|
columnRating.sortTypeProperty().addListener(new ChangeListener<SortType>() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -682,14 +702,15 @@ public class MainWindowController {
|
||||||
System.out.println("NAME Clicked -- sortType = " + paramT1 + ", SortType=" + paramT2);
|
System.out.println("NAME Clicked -- sortType = " + paramT1 + ", SortType=" + paramT2);
|
||||||
ArrayList<Integer> fav_true = new ArrayList<Integer>();
|
ArrayList<Integer> fav_true = new ArrayList<Integer>();
|
||||||
ArrayList<Integer> fav_false = new ArrayList<Integer>();
|
ArrayList<Integer> fav_false = new ArrayList<Integer>();
|
||||||
ObservableList<streamUiData> helpData;
|
ObservableList<tableData> helpData;
|
||||||
filterData.removeAll(filterData);
|
filterData.removeAll(filterData);
|
||||||
|
// treeTableViewfilm.getSelectionModel().clearSelection(selected);
|
||||||
root.getChildren().remove(0,root.getChildren().size());
|
root.getChildren().remove(0,root.getChildren().size());
|
||||||
|
|
||||||
if(mode.equals("local")){
|
if(mode.equals("local")){
|
||||||
helpData = newData;
|
helpData = localFilms;
|
||||||
}else{
|
}else{
|
||||||
helpData = streamData;
|
helpData = streamingFilms;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -720,7 +741,7 @@ public class MainWindowController {
|
||||||
System.out.println(filterData.size());
|
System.out.println(filterData.size());
|
||||||
for(int i = 0; i < filterData.size(); i++){
|
for(int i = 0; i < filterData.size(); i++){
|
||||||
// System.out.println(filterData.get(i).getTitel()+"; "+filterData.get(i).getRating());
|
// System.out.println(filterData.get(i).getTitel()+"; "+filterData.get(i).getRating());
|
||||||
root.getChildren().add(new TreeItem<streamUiData>(filterData.get(i))); //add filtered data to root node after search
|
root.getChildren().add(new TreeItem<tableData>(filterData.get(i))); //add filtered data to root node after search
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -739,41 +760,41 @@ public class MainWindowController {
|
||||||
updateBtn.setFont(Font.font("System", 12));
|
updateBtn.setFont(Font.font("System", 12));
|
||||||
cbLocal.setItems(locals);
|
cbLocal.setItems(locals);
|
||||||
|
|
||||||
//TODO rework!
|
if(autoUpdate){
|
||||||
if(autoUpdate.equals("1")){
|
|
||||||
autoupdateBtn.setSelected(true);
|
autoupdateBtn.setSelected(true);
|
||||||
Updater.start();
|
try {
|
||||||
|
Updater.start();
|
||||||
|
Updater.join();
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
}else{
|
}else{
|
||||||
autoupdateBtn.setSelected(false);
|
autoupdateBtn.setSelected(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
ta1.setWrapText(true);
|
|
||||||
ta1.setEditable(false);
|
|
||||||
ta1.setFont(Font.font("System", getSize()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void refreshTable(){
|
private void refreshTable(){
|
||||||
if(mode.equals("local")){
|
if(mode.equals("local")){
|
||||||
root.getChildren().set(selected, new TreeItem<streamUiData>(newData.get(selected)));
|
root.getChildren().set(selected, new TreeItem<tableData>(localFilms.get(selected)));
|
||||||
}else if(mode.equals("streaming")){
|
}else if(mode.equals("streaming")){
|
||||||
root.getChildren().set(selected, new TreeItem<streamUiData>(streamData.get(selected)));
|
root.getChildren().set(selected, new TreeItem<tableData>(streamingFilms.get(selected)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void addDataUI(){
|
void addDataUI(){
|
||||||
if(mode.equals("local")){
|
if(mode.equals("local")){
|
||||||
for(int i = 0; i < newData.size(); i++){
|
for(int i = 0; i < localFilms.size(); i++){
|
||||||
root.getChildren().add(new TreeItem<streamUiData>(newData.get(i))); //add data to root-node
|
root.getChildren().add(new TreeItem<tableData>(localFilms.get(i))); //add data to root-node
|
||||||
}
|
}
|
||||||
columnRating.setMaxWidth(90);
|
columnRating.setMaxWidth(85);
|
||||||
columnTitel.setMaxWidth(290);
|
columnTitel.setMaxWidth(290);
|
||||||
treeTableViewfilm.getColumns().get(3).setVisible(false);
|
treeTableViewfilm.getColumns().get(3).setVisible(false);
|
||||||
treeTableViewfilm.getColumns().get(4).setVisible(false);
|
treeTableViewfilm.getColumns().get(4).setVisible(false);
|
||||||
treeTableViewfilm.getColumns().get(5).setVisible(false);
|
treeTableViewfilm.getColumns().get(5).setVisible(false);
|
||||||
treeTableViewfilm.getColumns().get(6).setVisible(false);
|
treeTableViewfilm.getColumns().get(6).setVisible(false);
|
||||||
}else if(mode.equals("streaming")){
|
}else if(mode.equals("streaming")){
|
||||||
for(int i = 0; i < streamData.size(); i++){
|
for(int i = 0; i < streamingFilms.size(); i++){
|
||||||
root.getChildren().add(new TreeItem<streamUiData>(streamData.get(i))); //add data to root-node
|
root.getChildren().add(new TreeItem<tableData>(streamingFilms.get(i))); //add data to root-node
|
||||||
}
|
}
|
||||||
columnTitel.setMaxWidth(150);
|
columnTitel.setMaxWidth(150);
|
||||||
columnResolution.setMaxWidth(65);
|
columnResolution.setMaxWidth(65);
|
||||||
|
@ -790,18 +811,18 @@ public class MainWindowController {
|
||||||
|
|
||||||
void loadStreamingSettings(){
|
void loadStreamingSettings(){
|
||||||
if(getStreamingPath().equals("")||getStreamingPath().equals(null)){
|
if(getStreamingPath().equals("")||getStreamingPath().equals(null)){
|
||||||
System.out.println("Kein Pfad angegeben"); //falls der Pfad null oder "" ist
|
System.out.println("Kein Pfad angegeben"); //if path equals "" or null
|
||||||
}else{
|
}else{
|
||||||
String[] entries = new File(getStreamingPath()).list();
|
String[] entries = new File(getStreamingPath()).list();
|
||||||
for(int i = 0; i < entries.length; i++){
|
for(int i = 0; i < entries.length; i++){
|
||||||
if(entries[i].endsWith(".json")){
|
if(entries[i].endsWith(".json")){
|
||||||
String titel = ohneEndung(entries[i]);
|
String titel = ohneEndung(entries[i]);
|
||||||
String data = entries[i];
|
String data = entries[i];
|
||||||
streamingData.add(new streamUiData(1,1,1,5.0,"1",titel ,data, imv1));
|
streamingData.add(new tableData(1,1,1,5.0,"1",titel ,data, imv1, false));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for(int i = 0; i < streamingData.size(); i++){
|
for(int i = 0; i < streamingData.size(); i++){
|
||||||
streamingRoot.getChildren().add( new TreeItem<streamUiData>(streamingData.get(i))); //fügt daten zur Rootnode hinzu
|
streamingRoot.getChildren().add( new TreeItem<tableData>(streamingData.get(i))); //adds data to root-node
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -904,7 +925,7 @@ public class MainWindowController {
|
||||||
void setLocalUI(){
|
void setLocalUI(){
|
||||||
switch(getLocal()){
|
switch(getLocal()){
|
||||||
case "en_US":
|
case "en_US":
|
||||||
bundle = ResourceBundle.getBundle("recources.HomeFlix-Local", Locale.US); //us_english
|
bundle = ResourceBundle.getBundle("recources.HomeFlix-Local", Locale.US); //us_English
|
||||||
cbLocal.getSelectionModel().select(0);
|
cbLocal.getSelectionModel().select(0);
|
||||||
break;
|
break;
|
||||||
case "de_DE":
|
case "de_DE":
|
||||||
|
@ -970,6 +991,7 @@ public class MainWindowController {
|
||||||
alert.setTitle("Error");
|
alert.setTitle("Error");
|
||||||
alert.setHeaderText("");
|
alert.setHeaderText("");
|
||||||
alert.setContentText(msg);
|
alert.setContentText(msg);
|
||||||
|
alert.initOwner(main.primaryStage);
|
||||||
|
|
||||||
// Create expandable Exception.
|
// Create expandable Exception.
|
||||||
StringWriter sw = new StringWriter();
|
StringWriter sw = new StringWriter();
|
||||||
|
@ -1000,11 +1022,12 @@ public class MainWindowController {
|
||||||
|
|
||||||
//saves the Settings
|
//saves the Settings
|
||||||
public void saveSettings(){
|
public void saveSettings(){
|
||||||
|
System.out.println("saving settings ...");
|
||||||
OutputStream outputStream; //new output-stream
|
OutputStream outputStream; //new output-stream
|
||||||
try {
|
try {
|
||||||
props.setProperty("path", getPath()); //writes path into property
|
props.setProperty("path", getPath()); //writes path into property
|
||||||
props.setProperty("color", getColor());
|
props.setProperty("color", getColor());
|
||||||
props.setProperty("autoUpdate", getAutoUpdate());
|
props.setProperty("autoUpdate", String.valueOf(isAutoUpdate()));
|
||||||
props.setProperty("size", getSize().toString());
|
props.setProperty("size", getSize().toString());
|
||||||
props.setProperty("local", getLocal());
|
props.setProperty("local", getLocal());
|
||||||
props.setProperty("streamingPath", getStreamingPath());
|
props.setProperty("streamingPath", getStreamingPath());
|
||||||
|
@ -1036,21 +1059,33 @@ public class MainWindowController {
|
||||||
inputStream = new FileInputStream(fileWin);
|
inputStream = new FileInputStream(fileWin);
|
||||||
}
|
}
|
||||||
props.loadFromXML(inputStream); //new input-stream from .xml
|
props.loadFromXML(inputStream); //new input-stream from .xml
|
||||||
path = props.getProperty("path"); //reads path from property
|
path = props.getProperty("path"); //read path from property
|
||||||
streamingPath = props.getProperty("streamingPath");
|
streamingPath = props.getProperty("streamingPath");
|
||||||
color = props.getProperty("color");
|
color = props.getProperty("color");
|
||||||
size = Double.parseDouble(props.getProperty("size"));
|
size = Double.parseDouble(props.getProperty("size"));
|
||||||
autoUpdate = props.getProperty("autoUpdate");
|
autoUpdate = Boolean.parseBoolean(props.getProperty("autoUpdate"));
|
||||||
local = props.getProperty("local");
|
local = props.getProperty("local");
|
||||||
mode = props.getProperty("mode");
|
|
||||||
ratingSortType = props.getProperty("ratingSortType");
|
ratingSortType = props.getProperty("ratingSortType");
|
||||||
|
|
||||||
|
switch (props.getProperty("mode")) {
|
||||||
|
case "local":
|
||||||
|
mode = "local";
|
||||||
|
break;
|
||||||
|
case "streaming":
|
||||||
|
mode = "streaming";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
mode = "local";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
inputStream.close();
|
inputStream.close();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
if(firststart == false){
|
if(firststart == false){
|
||||||
showErrorMsg(errorSave, e);
|
showErrorMsg(errorSave, e);
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
// showErrorMsg(errorLoad, e); //TODO das soll beim ersten start nicht erscheinen
|
// showErrorMsg(errorLoad, e); //TODO This should not be visible at first startup
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1095,11 +1130,11 @@ public class MainWindowController {
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setAutoUpdate(String input){
|
public void setAutoUpdate(boolean input){
|
||||||
this.autoUpdate = input;
|
this.autoUpdate = input;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getAutoUpdate(){
|
public boolean isAutoUpdate(){
|
||||||
return autoUpdate;
|
return autoUpdate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1118,4 +1153,12 @@ public class MainWindowController {
|
||||||
public String getMode(){
|
public String getMode(){
|
||||||
return mode;
|
return mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getCurrentWorkingDirectory() {
|
||||||
|
return currentWorkingDirectory;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCurrentWorkingDirectory(String currentWorkingDirectory) {
|
||||||
|
this.currentWorkingDirectory = currentWorkingDirectory;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,54 +1,67 @@
|
||||||
/**
|
/**
|
||||||
* apiQuery for Project HomeFlix
|
* apiQuery for Project HomeFlix
|
||||||
* sends a query to the omdb api
|
* sends a query to the omdb api
|
||||||
*
|
|
||||||
* TODO build in a caching function
|
|
||||||
*/
|
*/
|
||||||
package application;
|
package application;
|
||||||
|
|
||||||
import java.io.DataInputStream;
|
import java.awt.Graphics2D;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.File;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Scanner;
|
import java.util.Scanner;
|
||||||
|
|
||||||
|
import javax.imageio.ImageIO;
|
||||||
|
|
||||||
import com.eclipsesource.json.Json;
|
import com.eclipsesource.json.Json;
|
||||||
import com.eclipsesource.json.JsonObject;
|
import com.eclipsesource.json.JsonObject;
|
||||||
|
|
||||||
import javafx.collections.ObservableList;
|
|
||||||
import javafx.scene.Node;
|
|
||||||
import javafx.scene.image.Image;
|
import javafx.scene.image.Image;
|
||||||
import javafx.scene.paint.Color;
|
|
||||||
import javafx.scene.text.Font;
|
import javafx.scene.text.Font;
|
||||||
import javafx.scene.text.FontWeight;
|
import javafx.scene.text.FontWeight;
|
||||||
import javafx.scene.text.Text;
|
import javafx.scene.text.Text;
|
||||||
|
|
||||||
public class apiQuery{
|
public class apiQuery{
|
||||||
|
|
||||||
public apiQuery(MainWindowController m){
|
public apiQuery(MainWindowController m, DBController db, Main main){
|
||||||
mainWindowController=m;
|
mainWindowController=m;
|
||||||
|
dbController=db;
|
||||||
|
this.main = main;
|
||||||
}
|
}
|
||||||
|
|
||||||
private MainWindowController mainWindowController;
|
private MainWindowController mainWindowController;
|
||||||
|
private DBController dbController;
|
||||||
|
private Main main;
|
||||||
private Image im;
|
private Image im;
|
||||||
private int fontSize = 20;
|
private String[] responseString = new String[20];
|
||||||
private String fontFamily = "System";
|
private String posterCache;
|
||||||
|
private String apiURL = "https://www.omdbapi.com/?";
|
||||||
|
ArrayList<Text> responseText = new ArrayList<Text>();
|
||||||
|
ArrayList<Text> nameText = new ArrayList<Text>();
|
||||||
|
|
||||||
@SuppressWarnings("deprecation") //TODO
|
void startQuery(String titel, String streamUrl){
|
||||||
void startQuery(String input){
|
URL queryURL = null;
|
||||||
URL url = null;
|
|
||||||
Scanner sc = null;
|
Scanner sc = null;
|
||||||
String apiurl = "https://www.omdbapi.com/?"; //API URL
|
|
||||||
String moviename = null;
|
String moviename = null;
|
||||||
String dataurl = null;
|
|
||||||
String retdata = null;
|
String retdata = null;
|
||||||
|
String posterPath = null;
|
||||||
InputStream is = null;
|
InputStream is = null;
|
||||||
DataInputStream dis = null;
|
BufferedReader br = null;
|
||||||
|
String fontFamily = main.getFONT_FAMILY();
|
||||||
|
posterCache = main.getPosterCache().toString();
|
||||||
|
int fontSize = (int) Math.round(mainWindowController.size);
|
||||||
|
|
||||||
|
responseText.removeAll(responseText);
|
||||||
|
nameText.removeAll(nameText);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
//get film title
|
//get film title
|
||||||
sc = new Scanner(System.in);
|
sc = new Scanner(System.in);
|
||||||
moviename = input;
|
moviename = titel;
|
||||||
|
|
||||||
// in case of no or "" Film title
|
// in case of no or "" Film title
|
||||||
if (moviename == null || moviename.equals("")) {
|
if (moviename == null || moviename.equals("")) {
|
||||||
|
@ -58,171 +71,120 @@ public class apiQuery{
|
||||||
//remove unwanted blank
|
//remove unwanted blank
|
||||||
moviename = moviename.trim();
|
moviename = moviename.trim();
|
||||||
|
|
||||||
//replace blank with + for api-query
|
//replace blank with +
|
||||||
moviename = moviename.replace(" ", "+");
|
moviename = moviename.replace(" ", "+");
|
||||||
|
|
||||||
//URL wird zusammengestellt abfragetypen: http,json,xml (muss json sein um späteres trennen zu ermöglichen)
|
//queryURL is apiURL and additional parameters, response-types: http,json,xml (must be json, since the response is processed with minimal-json )
|
||||||
dataurl = apiurl + "t=" + moviename + "&plot=full&r=json";
|
queryURL = new URL(apiURL + "t=" + moviename + "&plot=full&r=json");
|
||||||
|
is = queryURL.openStream();
|
||||||
|
br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
|
||||||
|
|
||||||
url = new URL(dataurl);
|
//read data from response Stream
|
||||||
is = url.openStream();
|
while ((retdata = br.readLine()) != null) {
|
||||||
dis = new DataInputStream(is);
|
//cut the json response into separate strings
|
||||||
|
|
||||||
// lesen der Daten aus dem Antwort Stream
|
|
||||||
while ((retdata = dis.readLine()) != null) {
|
|
||||||
//retdata in json object parsen und anschließend das json Objekt "zerschneiden"
|
|
||||||
System.out.println(retdata);
|
System.out.println(retdata);
|
||||||
JsonObject object = Json.parse(retdata).asObject();
|
JsonObject object = Json.parse(retdata).asObject();
|
||||||
String titelV = object.getString("Title", "");
|
|
||||||
String yearV = object.getString("Year", "");
|
|
||||||
String ratedV = object.getString("Rated", "");
|
|
||||||
String releasedV = object.getString("Released", "");
|
|
||||||
String runtimeV = object.getString("Runtime", "");
|
|
||||||
String genreV = object.getString("Genre", "");
|
|
||||||
String directorV = object.getString("Director", "");
|
|
||||||
String writerV = object.getString("Writer", "");
|
|
||||||
String actorsV = object.getString("Actors", "");
|
|
||||||
String plotV = object.getString("Plot", "");
|
|
||||||
String languageV = object.getString("Language", "");
|
|
||||||
String countryV = object.getString("Country", "");
|
|
||||||
String awardsV = object.getString("Awards", "");
|
|
||||||
|
|
||||||
String metascoreV = object.getString("Metascore", "");
|
|
||||||
String imdbRatingV = object.getString("imdbRating", "");
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
String imdbVotesV = object.getString("imdbVotes", "");
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
String imdbIDV = object.getString("imdbID", "");
|
|
||||||
String typeV = object.getString("Type", "");
|
|
||||||
|
|
||||||
String posterURL = object.getString("Poster", "");
|
responseString[0] = object.getString("Title", "");
|
||||||
String response = object.getString("Response", "");
|
responseString[1] = object.getString("Year", "");
|
||||||
|
responseString[2] = object.getString("Rated", "");
|
||||||
|
responseString[3] = object.getString("Released", "");
|
||||||
|
responseString[4] = object.getString("Runtime", "");
|
||||||
|
responseString[5] = object.getString("Genre", "");
|
||||||
|
responseString[6] = object.getString("Director", "");
|
||||||
|
responseString[7] = object.getString("Writer", "");
|
||||||
|
responseString[8] = object.getString("Actors", "");
|
||||||
|
responseString[9] = object.getString("Plot", "");
|
||||||
|
responseString[10] = object.getString("Language", "");
|
||||||
|
responseString[11] = object.getString("Country", "");
|
||||||
|
responseString[12] = object.getString("Awards", "");
|
||||||
|
responseString[13] = object.getString("Metascore", "");
|
||||||
|
responseString[14] = object.getString("imdbRating", "");
|
||||||
|
responseString[15] = object.getString("Type", "");
|
||||||
|
responseString[16] = object.getString("imdbVotes", "");
|
||||||
|
responseString[17] = object.getString("imdbID", "");
|
||||||
|
responseString[18] = object.getString("Poster", "");
|
||||||
|
responseString[19] = object.getString("Response", "");
|
||||||
|
|
||||||
// Text titelR = new Text (object.getString("Title", "")+"\n");
|
//adding poster to cache
|
||||||
// titelR.setFont(Font.font (fontFamily, fontSize));
|
BufferedImage originalImage = ImageIO.read(new URL(responseString[18]));//change path to where file is located
|
||||||
// Text yearR = new Text (object.getString("Year", "")+"\n");
|
int type = originalImage.getType() == 0 ? BufferedImage.TYPE_INT_ARGB : originalImage.getType();
|
||||||
// yearR.setFont(Font.font (fontFamily, fontSize));
|
BufferedImage resizeImagePNG = resizeImage(originalImage, type, 198, 297);
|
||||||
// Text ratedR = new Text (object.getString("Rated", "")+"\n");
|
if(System.getProperty("os.name").equals("Linux")) {
|
||||||
// ratedR.setFont(Font.font (fontFamily, fontSize));
|
posterPath = posterCache+"/"+titel+".png";
|
||||||
// Text releasedR = new Text (object.getString("Released", "")+"\n");
|
ImageIO.write(resizeImagePNG, "png", new File(posterCache+"/"+titel+".png")); //change path where you want it saved
|
||||||
// releasedR.setFont(Font.font (fontFamily, fontSize));
|
} else {
|
||||||
// Text runtimeR = new Text (object.getString("Runtime", "")+"\n");
|
ImageIO.write(resizeImagePNG, "png", new File(posterCache+"\\"+titel+".png")); //change path where you want it saved
|
||||||
// runtimeR.setFont(Font.font (fontFamily, fontSize));
|
posterPath = posterCache+"\\"+titel+".png";
|
||||||
// Text genreR = new Text (object.getString("Genre", ""));
|
}
|
||||||
// genreR.setFont(Font.font (fontFamily, fontSize));
|
System.out.println("adding poster to cache: "+posterPath);
|
||||||
// Text directorR = new Text (object.getString("Director", "")+"\n");
|
|
||||||
// directorR.setFont(Font.font (fontFamily, fontSize));
|
|
||||||
// Text writerR = new Text (object.getString("Writer", "")+"\n");
|
|
||||||
// writerR.setFont(Font.font (fontFamily, fontSize));
|
|
||||||
// Text actorsR = new Text (object.getString("Actors", "")+"\n");
|
|
||||||
// actorsR.setFont(Font.font (fontFamily, fontSize));
|
|
||||||
// Text plotR = new Text (object.getString("Plot", "")+"\n");
|
|
||||||
// plotR.setFont(Font.font (fontFamily, fontSize));
|
|
||||||
// Text languageR = new Text (object.getString("Language", "")+"\n");
|
|
||||||
// languageR.setFont(Font.font (fontFamily, fontSize));
|
|
||||||
// Text countryR = new Text (object.getString("Country", "")+"\n");
|
|
||||||
// countryR.setFont(Font.font (fontFamily, fontSize));
|
|
||||||
// Text awardsR = new Text (object.getString("Awards", "")+"\n");
|
|
||||||
// awardsR.setFont(Font.font (fontFamily, fontSize));
|
|
||||||
// Text metascoreR = new Text (object.getString("Metascore", "")+"\n");
|
|
||||||
// metascoreR.setFont(Font.font (fontFamily, fontSize));
|
|
||||||
// Text imdbRatingR = new Text (object.getString("imdbRating", "")+"\n");
|
|
||||||
// imdbRatingR.setFont(Font.font (fontFamily, fontSize));
|
|
||||||
// @SuppressWarnings("unused")
|
|
||||||
// Text imdbVotesR = new Text (object.getString("imdbVotes", "")+"\n");
|
|
||||||
// imdbVotesR.setFont(Font.font (fontFamily, fontSize));
|
|
||||||
// @SuppressWarnings("unused")
|
|
||||||
// Text imdbIDR = new Text (object.getString("imdbID", "")+"\n");
|
|
||||||
// imdbIDR.setFont(Font.font (fontFamily, fontSize));
|
|
||||||
// Text typeR = new Text (object.getString("Type", "")+"\n");
|
|
||||||
// typeR.setFont(Font.font (fontFamily, fontSize));
|
|
||||||
|
|
||||||
|
//adding strings to the cache
|
||||||
|
dbController.addCache( streamUrl, responseString[0], responseString[1],responseString[2], responseString[3], responseString[4], responseString[5],
|
||||||
|
responseString[6], responseString[7], responseString[8], responseString[9], responseString[10],responseString[11], responseString[12],
|
||||||
|
responseString[13], responseString[14], responseString[15], responseString[16], responseString[17], posterPath,
|
||||||
|
responseString[19]);
|
||||||
|
dbController.setCached(streamUrl);
|
||||||
|
|
||||||
if(response.equals("False")){
|
for(int i=0; i<20; i++){
|
||||||
mainWindowController.ta1.appendText(mainWindowController.noFilmFound);
|
Text text = new Text(responseString[i]+"\n");
|
||||||
|
responseText.add(text);
|
||||||
|
responseText.get(i).setFont(Font.font(fontFamily, fontSize));
|
||||||
|
}
|
||||||
|
|
||||||
|
//if response == false then show mainWindowController.noFilmFound else create new Texts and add them to flowText
|
||||||
|
if(responseString[19].equals("False")){
|
||||||
|
mainWindowController.textFlow.getChildren().add(new Text(mainWindowController.noFilmFound));
|
||||||
im = new Image("recources/icons/close_black_2048x2048.png");
|
im = new Image("recources/icons/close_black_2048x2048.png");
|
||||||
mainWindowController.image1.setImage(im);
|
mainWindowController.image1.setImage(im);
|
||||||
}else{
|
}else{
|
||||||
//ausgabe des Textes in ta1 in jeweils neuer Zeile
|
//
|
||||||
mainWindowController.ta1.appendText(mainWindowController.title+": "+titelV+"\n");
|
nameText.add(0, new Text(mainWindowController.title+": "));
|
||||||
mainWindowController.ta1.appendText(mainWindowController.year+": "+ yearV+"\n");
|
nameText.add(1, new Text(mainWindowController.year+": "));
|
||||||
mainWindowController.ta1.appendText(mainWindowController.rating+": "+ratedV+"\n");
|
nameText.add(2, new Text(mainWindowController.rating+": "));
|
||||||
mainWindowController.ta1.appendText(mainWindowController.publishedOn+": "+releasedV+"\n");
|
nameText.add(3, new Text(mainWindowController.publishedOn+": "));
|
||||||
mainWindowController.ta1.appendText(mainWindowController.duration+": "+runtimeV+"\n");
|
nameText.add(4, new Text(mainWindowController.duration+": "));
|
||||||
mainWindowController.ta1.appendText(mainWindowController.genre+": "+genreV+"\n");
|
nameText.add(5, new Text(mainWindowController.genre+": "));
|
||||||
mainWindowController.ta1.appendText(mainWindowController.director+": "+directorV+"\n");
|
nameText.add(6, new Text(mainWindowController.director+": "));
|
||||||
mainWindowController.ta1.appendText(mainWindowController.writer+": "+writerV+"\n");
|
nameText.add(7, new Text(mainWindowController.writer+": "));
|
||||||
mainWindowController.ta1.appendText(mainWindowController.actors+": "+actorsV+"\n");
|
nameText.add(8, new Text(mainWindowController.actors+": "));
|
||||||
mainWindowController.ta1.appendText(mainWindowController.plot+": "+plotV+"\n");
|
nameText.add(9, new Text(mainWindowController.plot+": "));
|
||||||
mainWindowController.ta1.appendText(mainWindowController.language+": "+languageV+"\n");
|
nameText.add(10, new Text(mainWindowController.language+": "));
|
||||||
mainWindowController.ta1.appendText(mainWindowController.country+": "+countryV+"\n");
|
nameText.add(11, new Text(mainWindowController.country+": "));
|
||||||
mainWindowController.ta1.appendText(mainWindowController.awards+": "+awardsV+"\n");
|
nameText.add(12, new Text(mainWindowController.awards+": "));
|
||||||
mainWindowController.ta1.appendText(mainWindowController.metascore+": "+metascoreV+"\n");
|
nameText.add(13, new Text(mainWindowController.metascore+": "));
|
||||||
mainWindowController.ta1.appendText(mainWindowController.imdbRating+": "+imdbRatingV+"\n");
|
nameText.add(14, new Text(mainWindowController.imdbRating+": "));
|
||||||
mainWindowController.ta1.appendText(mainWindowController.type+": "+typeV+"\n");
|
nameText.add(15, new Text(mainWindowController.type+": "));
|
||||||
|
|
||||||
|
|
||||||
|
for(int i=0; i<nameText.size(); i++){
|
||||||
|
nameText.get(i).setFont(Font.font (fontFamily, FontWeight.BOLD, fontSize));
|
||||||
|
}
|
||||||
|
|
||||||
// mainWindowController.ta1.setVisible(false);
|
mainWindowController.textFlow.getChildren().remove(0, mainWindowController.textFlow.getChildren().size());
|
||||||
|
|
||||||
// Text title = new Text(15, 20, mainWindowController.title+": ");
|
for(int i=0;i<nameText.size(); i++){
|
||||||
// title.setFont(Font.font (fontFamily, FontWeight.BOLD, fontSize));
|
mainWindowController.textFlow.getChildren().addAll(nameText.get(i),responseText.get(i));
|
||||||
// Text year = new Text(15, 20, mainWindowController.year+": ");
|
}
|
||||||
// year.setFont(Font.font (fontFamily, FontWeight.BOLD, fontSize));
|
|
||||||
// Text rating = new Text(15, 20, mainWindowController.rating+": ");
|
//if there is no poster
|
||||||
// rating.setFont(Font.font (fontFamily, FontWeight.BOLD, fontSize));
|
if(responseString[18].equals("N/A")){
|
||||||
// Text publishedOn = new Text(15, 20, mainWindowController.publishedOn+": ");
|
|
||||||
// publishedOn.setFont(Font.font (fontFamily, FontWeight.BOLD, fontSize));
|
|
||||||
// Text duration = new Text(15, 20, mainWindowController.duration+": ");
|
|
||||||
// duration.setFont(Font.font (fontFamily, FontWeight.BOLD, fontSize));
|
|
||||||
// Text genre = new Text(15, 20, mainWindowController.genre+": ");
|
|
||||||
// genre.setFont(Font.font (fontFamily, FontWeight.BOLD, fontSize));
|
|
||||||
// Text director = new Text(15, 20, mainWindowController.director+": ");
|
|
||||||
// director.setFont(Font.font (fontFamily, FontWeight.BOLD, fontSize));
|
|
||||||
// Text writer = new Text(15, 20, mainWindowController.writer+": ");
|
|
||||||
// writer.setFont(Font.font (fontFamily, FontWeight.BOLD, fontSize));
|
|
||||||
// Text actors = new Text(15, 20, mainWindowController.actors+": ");
|
|
||||||
// actors.setFont(Font.font (fontFamily, FontWeight.BOLD, fontSize));
|
|
||||||
// Text plot = new Text(15, 20, mainWindowController.plot+": ");
|
|
||||||
// plot.setFont(Font.font (fontFamily, FontWeight.BOLD, fontSize));
|
|
||||||
// Text language = new Text(15, 20, mainWindowController.language+": ");
|
|
||||||
// language.setFont(Font.font (fontFamily, FontWeight.BOLD, fontSize));
|
|
||||||
// Text country = new Text(15, 20, mainWindowController.country+": ");
|
|
||||||
// country.setFont(Font.font (fontFamily, FontWeight.BOLD, fontSize));
|
|
||||||
// Text awards = new Text(15, 20, mainWindowController.awards+": ");
|
|
||||||
// awards.setFont(Font.font (fontFamily, FontWeight.BOLD, fontSize));
|
|
||||||
// Text metascore = new Text(15, 20, mainWindowController.metascore+": ");
|
|
||||||
// metascore.setFont(Font.font (fontFamily, FontWeight.BOLD, fontSize));
|
|
||||||
// Text imdbRating = new Text(15, 20, mainWindowController.imdbRating+": ");
|
|
||||||
// imdbRating.setFont(Font.font (fontFamily, FontWeight.BOLD, fontSize));
|
|
||||||
// Text type = new Text(15, 20, mainWindowController.type+": ");
|
|
||||||
// type.setFont(Font.font (fontFamily, FontWeight.BOLD, fontSize));
|
|
||||||
//
|
|
||||||
// mainWindowController.textFlow.getChildren().remove(0, mainWindowController.textFlow.getChildren().size());
|
|
||||||
//
|
|
||||||
// ObservableList<Node> list = mainWindowController.textFlow.getChildren();
|
|
||||||
//
|
|
||||||
// list.addAll(title,titelR,year,yearR,rating,ratedR,
|
|
||||||
// publishedOn,releasedR,duration,runtimeR,genre,genreR,director,directorR,writer,writerR,
|
|
||||||
// actors,actorsR,plot,plotR,language,languageR,country,countryR,awards,awardsR,metascore,
|
|
||||||
// metascoreR,imdbRating,imdbRatingR,type,typeR);
|
|
||||||
//
|
|
||||||
|
|
||||||
if(posterURL.equals("N/A")){
|
|
||||||
im = new Image("recources/icons/close_black_2048x2048.png");
|
im = new Image("recources/icons/close_black_2048x2048.png");
|
||||||
}else{
|
}else{
|
||||||
im = new Image(posterURL);
|
im = new Image(responseString[18]);
|
||||||
}
|
}
|
||||||
mainWindowController.image1.setImage(im);
|
mainWindowController.image1.setImage(im);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
mainWindowController.ta1.setText(e.toString());
|
mainWindowController.textFlow.getChildren().add(new Text(e.toString()));
|
||||||
System.out.println(e);
|
System.out.println(e);
|
||||||
} finally {
|
} finally {
|
||||||
//closes datainputStream, InputStream,Scanner if not already done
|
//closes datainputStream, InputStream,Scanner if not already done
|
||||||
try {
|
try {
|
||||||
if (dis != null) {
|
if (br != null) {
|
||||||
dis.close();
|
br.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is != null) {
|
if (is != null) {
|
||||||
|
@ -232,9 +194,18 @@ public class apiQuery{
|
||||||
if (sc != null) {
|
if (sc != null) {
|
||||||
sc.close();
|
sc.close();
|
||||||
}
|
}
|
||||||
} catch (Exception e2) {
|
} catch (Exception e) {
|
||||||
;
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static BufferedImage resizeImage(BufferedImage originalImage, int type, int IMG_WIDTH, int IMG_HEIGHT) {
|
||||||
|
BufferedImage resizedImage = new BufferedImage(IMG_WIDTH, IMG_HEIGHT, type);
|
||||||
|
Graphics2D g = resizedImage.createGraphics();
|
||||||
|
g.drawImage(originalImage, 0, 0, IMG_WIDTH, IMG_HEIGHT, null);
|
||||||
|
g.dispose();
|
||||||
|
|
||||||
|
return resizedImage;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
package application;
|
package application;
|
||||||
|
|
||||||
|
import javafx.beans.property.BooleanProperty;
|
||||||
import javafx.beans.property.DoubleProperty;
|
import javafx.beans.property.DoubleProperty;
|
||||||
import javafx.beans.property.IntegerProperty;
|
import javafx.beans.property.IntegerProperty;
|
||||||
|
import javafx.beans.property.SimpleBooleanProperty;
|
||||||
import javafx.beans.property.SimpleDoubleProperty;
|
import javafx.beans.property.SimpleDoubleProperty;
|
||||||
import javafx.beans.property.SimpleIntegerProperty;
|
import javafx.beans.property.SimpleIntegerProperty;
|
||||||
import javafx.beans.property.SimpleObjectProperty;
|
import javafx.beans.property.SimpleObjectProperty;
|
||||||
|
@ -9,27 +11,39 @@ import javafx.beans.property.SimpleStringProperty;
|
||||||
import javafx.beans.property.StringProperty;
|
import javafx.beans.property.StringProperty;
|
||||||
import javafx.scene.image.ImageView;
|
import javafx.scene.image.ImageView;
|
||||||
|
|
||||||
public class streamUiData {
|
public class tableData {
|
||||||
|
|
||||||
private final IntegerProperty year = new SimpleIntegerProperty();
|
private final IntegerProperty year = new SimpleIntegerProperty();
|
||||||
private final IntegerProperty season = new SimpleIntegerProperty();
|
private final IntegerProperty season = new SimpleIntegerProperty();
|
||||||
private final IntegerProperty episode = new SimpleIntegerProperty();
|
private final IntegerProperty episode = new SimpleIntegerProperty();
|
||||||
private final DoubleProperty rating = new SimpleDoubleProperty();
|
private final DoubleProperty rating = new SimpleDoubleProperty();
|
||||||
private final StringProperty resolution = new SimpleStringProperty();
|
private final StringProperty resolution = new SimpleStringProperty();
|
||||||
private final StringProperty titel = new SimpleStringProperty();
|
private final StringProperty title = new SimpleStringProperty();
|
||||||
private final StringProperty streamUrl = new SimpleStringProperty();
|
private final StringProperty streamUrl = new SimpleStringProperty();
|
||||||
private final SimpleObjectProperty<ImageView> image = new SimpleObjectProperty<>();
|
private final SimpleObjectProperty<ImageView> image = new SimpleObjectProperty<>();
|
||||||
|
private final BooleanProperty cached = new SimpleBooleanProperty();
|
||||||
|
|
||||||
//uiData ist der Typ der Daten in der TreeTabelView
|
/**
|
||||||
public streamUiData (final int year, final int season, final int episode, final double rating, final String resolution, final String titel, final String streamUrl, final ImageView image) {
|
* tableData is the data-type of tree-table-view
|
||||||
|
* @param year: the release year of the film
|
||||||
|
* @param season: season if it's a series
|
||||||
|
* @param episode: episode if it's a series
|
||||||
|
* @param rating: indicator for favourites, used for sorting the items
|
||||||
|
* @param resolution: resolution of the film
|
||||||
|
* @param titel: title of the film
|
||||||
|
* @param streamUrl: the concrete path to the file or the URL
|
||||||
|
* @param image: the favourite icon
|
||||||
|
* @param cached: indicator for caching status
|
||||||
|
*/
|
||||||
|
public tableData (final int year, final int season, final int episode, final double rating, final String resolution, final String title, final String streamUrl, final ImageView image, final boolean cached) {
|
||||||
this.year.set(year);
|
this.year.set(year);
|
||||||
this.season.set(season);
|
this.season.set(season);
|
||||||
this.episode.set(episode);
|
this.episode.set(episode);
|
||||||
this.rating.set(rating);
|
this.rating.set(rating);
|
||||||
this.resolution.set(resolution);
|
this.resolution.set(resolution);
|
||||||
this.titel.set(titel);
|
this.title.set(title);
|
||||||
this.streamUrl.set(streamUrl);
|
this.streamUrl.set(streamUrl);
|
||||||
this.image.set(image);
|
this.image.set(image);
|
||||||
|
this.cached.set(cached);
|
||||||
}
|
}
|
||||||
|
|
||||||
public IntegerProperty yearProperty(){
|
public IntegerProperty yearProperty(){
|
||||||
|
@ -52,8 +66,8 @@ public class streamUiData {
|
||||||
return resolution;
|
return resolution;
|
||||||
}
|
}
|
||||||
|
|
||||||
public StringProperty titelProperty(){
|
public StringProperty titleProperty(){
|
||||||
return titel;
|
return title;
|
||||||
}
|
}
|
||||||
|
|
||||||
public StringProperty streamUrlProperty(){
|
public StringProperty streamUrlProperty(){
|
||||||
|
@ -64,6 +78,10 @@ public class streamUiData {
|
||||||
return image;
|
return image;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public BooleanProperty cachedProperty(){
|
||||||
|
return cached;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public final int getYear() {
|
public final int getYear() {
|
||||||
return yearProperty().get();
|
return yearProperty().get();
|
||||||
|
@ -85,8 +103,8 @@ public class streamUiData {
|
||||||
return resolutionProperty().get();
|
return resolutionProperty().get();
|
||||||
}
|
}
|
||||||
|
|
||||||
public final String getTitel() {
|
public final String getTitle() {
|
||||||
return titelProperty().get();
|
return titleProperty().get();
|
||||||
}
|
}
|
||||||
|
|
||||||
public final String getStreamUrl() {
|
public final String getStreamUrl() {
|
||||||
|
@ -96,6 +114,10 @@ public class streamUiData {
|
||||||
public final ImageView getImage() {
|
public final ImageView getImage() {
|
||||||
return imageProperty().get();
|
return imageProperty().get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final boolean getCached(){
|
||||||
|
return cachedProperty().get();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public final void setYear(int year) {
|
public final void setYear(int year) {
|
||||||
|
@ -118,8 +140,8 @@ public class streamUiData {
|
||||||
resolutionProperty().set(resolution);
|
resolutionProperty().set(resolution);
|
||||||
}
|
}
|
||||||
|
|
||||||
public final void setTitel(String titel) {
|
public final void setTitle(String title) {
|
||||||
titelProperty().set(titel);
|
titleProperty().set(title);
|
||||||
}
|
}
|
||||||
|
|
||||||
public final void setStreamUrl(String streamUrl) {
|
public final void setStreamUrl(String streamUrl) {
|
||||||
|
@ -129,4 +151,8 @@ public class streamUiData {
|
||||||
public final void setImage(ImageView image) {
|
public final void setImage(ImageView image) {
|
||||||
imageProperty().set(image);
|
imageProperty().set(image);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final void setCached(boolean cached){
|
||||||
|
cachedProperty().set(cached);
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -5,61 +5,78 @@
|
||||||
package application;
|
package application;
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
import java.io.FileOutputStream;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
|
import java.net.HttpURLConnection;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.nio.channels.Channels;
|
import javax.swing.ProgressMonitor;
|
||||||
import java.nio.channels.ReadableByteChannel;
|
import javax.swing.ProgressMonitorInputStream;
|
||||||
|
|
||||||
|
import org.apache.commons.io.FileUtils;
|
||||||
|
|
||||||
|
import javafx.application.Platform;
|
||||||
|
|
||||||
public class updater extends Thread{
|
public class updater extends Thread{
|
||||||
|
|
||||||
private MainWindowController mainWindowController;
|
private MainWindowController mainWindowController;
|
||||||
private String buildURL;
|
private String buildURL;
|
||||||
private String downloadLink;
|
private String downloadLink;
|
||||||
private String aktBuildNumber;
|
private String updateBuildNumber;
|
||||||
private String buildNumber;
|
private String buildNumber;
|
||||||
|
|
||||||
public updater(MainWindowController m, String buildURL,String downloadLink,String aktBuildNumber,String buildNumber){
|
public updater(MainWindowController m, String buildURL,String downloadLink,String buildNumber){
|
||||||
mainWindowController=m;
|
mainWindowController=m;
|
||||||
this.buildURL=buildURL;
|
this.buildURL=buildURL;
|
||||||
this.downloadLink=downloadLink;
|
this.downloadLink=downloadLink;
|
||||||
this.aktBuildNumber=aktBuildNumber;
|
|
||||||
this.buildNumber=buildNumber;
|
this.buildNumber=buildNumber;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void run(){
|
public void run(){
|
||||||
System.out.println("check for updates ...");
|
System.out.println("check for updates ...");
|
||||||
|
Platform.runLater(() -> {
|
||||||
|
mainWindowController.updateBtn.setText(mainWindowController.bundle.getString("checkingUpdates"));
|
||||||
|
});
|
||||||
try {
|
try {
|
||||||
URL url = new URL(buildURL); //URL der Datei mit aktueller Versionsnummer
|
URL url = new URL(buildURL); //URL of the text file with the current build number
|
||||||
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
|
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
|
||||||
aktBuildNumber = in.readLine(); //schreibt inputstream in String
|
updateBuildNumber = in.readLine(); //write InputStream in String
|
||||||
in.close();
|
in.close();
|
||||||
} catch (IOException e1) {
|
} catch (IOException e1) {
|
||||||
mainWindowController.showErrorMsg(mainWindowController.errorUpdateV, e1);
|
mainWindowController.showErrorMsg(mainWindowController.errorUpdateV, e1);
|
||||||
}
|
}
|
||||||
System.out.println("Build: "+buildNumber+", Update: "+aktBuildNumber);
|
System.out.println("Build: "+buildNumber+", Update: "+updateBuildNumber);
|
||||||
|
|
||||||
//vergleicht die Versionsnummern, bei aktversion > version wird ein Update durchgrf<EFBFBD>hrt
|
//Compares the program BuildNumber with the current BuildNumber if program BuildNumber < current BuildNumber then perform a update
|
||||||
int iversion = Integer.parseInt(buildNumber);
|
int iversion = Integer.parseInt(buildNumber);
|
||||||
int iaktVersion = Integer.parseInt(aktBuildNumber.replace(".", ""));
|
int iaktVersion = Integer.parseInt(updateBuildNumber.replace(".", ""));
|
||||||
|
|
||||||
if(iversion >= iaktVersion){
|
if(iversion >= iaktVersion){
|
||||||
// mainWindowController.updateBtn.setText(mainWindowController.bundle.getString("updateBtnNotavail"));
|
Platform.runLater(() -> {
|
||||||
|
mainWindowController.updateBtn.setText(mainWindowController.bundle.getString("updateBtnNotavail"));
|
||||||
|
});
|
||||||
System.out.println("no update available");
|
System.out.println("no update available");
|
||||||
}else{
|
}else{
|
||||||
// mainWindowController.updateBtn.setText(mainWindowController.bundle.getString("updateBtnavail"));
|
Platform.runLater(() -> {
|
||||||
|
mainWindowController.updateBtn.setText(mainWindowController.bundle.getString("updateBtnavail"));
|
||||||
|
});
|
||||||
System.out.println("update available");
|
System.out.println("update available");
|
||||||
try {
|
try {
|
||||||
URL website;
|
//get the download-Data URL
|
||||||
URL downloadURL = new URL(downloadLink);
|
URL downloadURL = new URL(downloadLink);
|
||||||
BufferedReader in = new BufferedReader(new InputStreamReader(downloadURL.openStream()));
|
BufferedReader in = new BufferedReader(new InputStreamReader(downloadURL.openStream()));
|
||||||
String updateDataURL = in.readLine();
|
String updateDataURL = in.readLine();
|
||||||
website = new URL(updateDataURL); //Update URL
|
|
||||||
ReadableByteChannel rbc = Channels.newChannel(website.openStream()); //open new Stream/Channel
|
//open new Http connection, ProgressMonitorInputStream for downloading the data
|
||||||
FileOutputStream fos = new FileOutputStream("ProjectHomeFlix.jar"); //nea fileoutputstram for ProjectHomeFLix.jar
|
HttpURLConnection conn = (HttpURLConnection) new URL(updateDataURL).openConnection();
|
||||||
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); //gets file from 0 to max size
|
ProgressMonitorInputStream pmis = new ProgressMonitorInputStream(null, "Downloading...", conn.getInputStream());
|
||||||
fos.close(); //close fos (extrem wichtig!)
|
ProgressMonitor pm = pmis.getProgressMonitor();
|
||||||
|
pm.setMillisToDecideToPopup(0);
|
||||||
|
pm.setMillisToPopup(0);
|
||||||
|
pm.setMinimum(0);// tell the progress bar that we start at the beginning of the stream
|
||||||
|
pm.setMaximum(conn.getContentLength());// tell the progress bar the total number of bytes we are going to read.
|
||||||
|
FileUtils.copyInputStreamToFile(pmis, new File("ProjectHomeFlix.jar"));
|
||||||
|
|
||||||
Runtime.getRuntime().exec("java -jar ProjectHomeFlix.jar"); //start again
|
Runtime.getRuntime().exec("java -jar ProjectHomeFlix.jar"); //start again
|
||||||
System.exit(0); //finishes itself
|
System.exit(0); //finishes itself
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -8,6 +8,7 @@ openFolder = Ordner \u00F6ffnen
|
||||||
chooseFolder = Ordner ausw\u00E4hlen
|
chooseFolder = Ordner ausw\u00E4hlen
|
||||||
fontSize = Schriftgr\u00F6\u00DFe:
|
fontSize = Schriftgr\u00F6\u00DFe:
|
||||||
checkUpdates = Auf Update pr\u00FCfen
|
checkUpdates = Auf Update pr\u00FCfen
|
||||||
|
checkingUpdates = Es wird nach Updates gesucht...
|
||||||
updateBtnavail = Update verf\u00FCgbar
|
updateBtnavail = Update verf\u00FCgbar
|
||||||
updateBtnNotavail = Kein Update verf\u00FCgbar
|
updateBtnNotavail = Kein Update verf\u00FCgbar
|
||||||
autoUpdate = beim Start nach Updates suchen:
|
autoUpdate = beim Start nach Updates suchen:
|
||||||
|
|
|
@ -8,6 +8,7 @@ openFolder = open Folder
|
||||||
chooseFolder = choose Directory
|
chooseFolder = choose Directory
|
||||||
fontSize = font size:
|
fontSize = font size:
|
||||||
checkUpdates = check for updates
|
checkUpdates = check for updates
|
||||||
|
checkingUpdates = checking for updates...
|
||||||
updateBtnavail = update available
|
updateBtnavail = update available
|
||||||
updateBtnNotavail = no update available
|
updateBtnNotavail = no update available
|
||||||
autoUpdate = check at startup for updates:
|
autoUpdate = check at startup for updates:
|
||||||
|
|
Binary file not shown.
|
@ -1 +1 @@
|
||||||
117
|
125
|
||||||
|
|
Loading…
Reference in New Issue