diff --git a/.classpath b/.classpath
index e83910a..d9ff1e3 100644
--- a/.classpath
+++ b/.classpath
@@ -17,11 +17,16 @@
+
+
+
+
+
+
-
diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs
index 4a6c6b8..6f1d295 100644
--- a/.settings/org.eclipse.jdt.core.prefs
+++ b/.settings/org.eclipse.jdt.core.prefs
@@ -1,5 +1,13 @@
eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
org.eclipse.jdt.core.compiler.codegen.targetPlatform=9
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=9
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
org.eclipse.jdt.core.compiler.source=9
diff --git a/README.md b/README.md
index 7a798c0..2491954 100644
--- a/README.md
+++ b/README.md
@@ -18,7 +18,7 @@ sqlite-jdbc: https://github.com/xerial/sqlite-jdbc
apache commons io : https://commons.apache.org/proper/commons-io/
## screenshots
-![Screenshot](https://github.com/Seil0/Seil0.github.io/blob/master/pictures/Project-HomeFlix_MainWindow.png)
+![Screenshot](https://github.com/Seil0/Seil0.github.io/blob/master/images/Project-HomeFlix_MainWindow.png)
Project-HomeFlix © 2016-2018 Kellerkinder ([Seil0](https://github.com/Seil0), [Windoofs](https://github.com/Windoofs))
www.kellerkinder.xyz
diff --git a/pom.xml b/pom.xml
index b5a8a73..95f22a2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
org.kellerkinder
Project-HomeFlix
- 0.6.0
+ 0.7.0
jar
Project-HomeFlix
@@ -19,7 +19,7 @@
junit
junit
- 4.11
+ 4.12
test
@@ -32,7 +32,7 @@
com.jfoenix
jfoenix
- 9.0.2
+ 9.0.3
@@ -50,13 +50,13 @@
org.apache.logging.log4j
log4j-api
- 2.10.0
+ 2.11.0
org.apache.logging.log4j
log4j-core
- 2.10.0
+ 2.11.0
@@ -78,21 +78,21 @@
org.apache.maven.plugins
maven-shade-plugin
- 3.1.0
+ 3.1.1
+
+ true
+
+
+ kellerkinder.HomeFlix.application.Main
+
+
+
package
shade
-
- true
-
-
- kellerkinder.HomeFlix.application.Main
-
-
-
diff --git a/src/main/java/com/cemu_UI/uiElements/JFXOkayCancelDialog.java b/src/main/java/com/cemu_UI/uiElements/JFXOkayCancelDialog.java
deleted file mode 100644
index 5dd4d1a..0000000
--- a/src/main/java/com/cemu_UI/uiElements/JFXOkayCancelDialog.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/**
- * cemu_UI
- *
- * Copyright 2017 <@Seil0>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-
-package com.cemu_UI.uiElements;
-
-import java.util.ResourceBundle;
-
-import com.jfoenix.controls.JFXButton;
-import com.jfoenix.controls.JFXDialog;
-import com.jfoenix.controls.JFXDialogLayout;
-
-import javafx.event.ActionEvent;
-import javafx.event.EventHandler;
-import javafx.scene.layout.AnchorPane;
-import javafx.scene.layout.Pane;
-import javafx.scene.layout.StackPane;
-import javafx.scene.text.Text;
-
-public class JFXOkayCancelDialog {
-
- private String headingText;
- private String bodyText;
- private String dialogBtnStyle;
- private String okayText;
- private String cancelText;
- private int dialogWidth;
- private int dialogHeight;
- private EventHandler okayAction;
- private EventHandler cancelAction;
- private Pane pane;
-
- /**
- * Creates a new JFoenix Dialog to show some information with okay and cancel option
- * @param headingText Heading Text, just the heading
- * @param bodyText body Text, all other text belongs here
- * @param dialogBtnStyle Style of the okay button
- * @param dialogWidth dialog width
- * @param dialogHeight dialog height
- * @param okayAction action which is performed if the okay button is clicked
- * @param cancelAction action which is performed if the cancel button is clicked
- * @param pane pane to which the dialog belongs
- */
- public JFXOkayCancelDialog(String headingText, String bodyText, String dialogBtnStyle, int dialogWidth,
- int dialogHeight, EventHandler okayAction, EventHandler cancelAction, Pane pane,
- ResourceBundle bundle) {
- this.headingText = headingText;
- this.bodyText = bodyText;
- this.dialogBtnStyle = dialogBtnStyle;
- this.dialogWidth = dialogWidth;
- this.dialogHeight = dialogHeight;
- this.okayAction = okayAction;
- this.cancelAction = cancelAction;
- this.pane = pane;
- okayText = bundle.getString("okayBtnText");
- cancelText = bundle.getString("cancelBtnText");
- }
-
- public void show() {
-
- JFXDialogLayout content = new JFXDialogLayout();
- content.setHeading(new Text(headingText));
- content.setBody(new Text(bodyText));
- StackPane stackPane = new StackPane();
- stackPane.autosize();
- JFXDialog dialog = new JFXDialog(stackPane, content, JFXDialog.DialogTransition.LEFT, true);
- JFXButton okayBtn = new JFXButton(okayText);
- okayBtn.addEventHandler(ActionEvent.ACTION, (e)-> {
- dialog.close();
- });
- okayBtn.addEventHandler(ActionEvent.ACTION, okayAction);
- okayBtn.setButtonType(com.jfoenix.controls.JFXButton.ButtonType.RAISED);
- okayBtn.setPrefHeight(32);
- okayBtn.setStyle(dialogBtnStyle);
- JFXButton cancelBtn = new JFXButton(cancelText);
- cancelBtn.addEventHandler(ActionEvent.ACTION, (e)-> {
- dialog.close();
- });
- cancelBtn.addEventHandler(ActionEvent.ACTION, cancelAction);
- cancelBtn.setButtonType(com.jfoenix.controls.JFXButton.ButtonType.RAISED);
- cancelBtn.setPrefHeight(32);
- cancelBtn.setStyle(dialogBtnStyle);
- content.setActions(cancelBtn, okayBtn);
- content.setPrefSize(dialogWidth, dialogHeight);
- pane.getChildren().add(stackPane);
- AnchorPane.setTopAnchor(stackPane, (pane.getHeight()-content.getPrefHeight())/2);
- AnchorPane.setLeftAnchor(stackPane, (pane.getWidth()-content.getPrefWidth())/2);
- dialog.show();
- }
-
- public String getOkayText() {
- return okayText;
- }
-
- public void setOkayText(String okayText) {
- this.okayText = okayText;
- }
-
- public String getCancelText() {
- return cancelText;
- }
-
- public void setCancelText(String cancelText) {
- this.cancelText = cancelText;
- }
-
- public EventHandler getOkayAction() {
- return okayAction;
- }
-
- public void setOkayAction(EventHandler okayAction) {
- this.okayAction = okayAction;
- }
-
- public EventHandler getCancelAction() {
- return cancelAction;
- }
-
- public void setCancelAction(EventHandler cancelAction) {
- this.cancelAction = cancelAction;
- }
-
-}
-
diff --git a/src/main/java/com/cemu_UI/uiElements/JFXTextAreaInfoDialog.java b/src/main/java/com/cemu_UI/uiElements/JFXTextAreaInfoDialog.java
deleted file mode 100644
index fd8ff2f..0000000
--- a/src/main/java/com/cemu_UI/uiElements/JFXTextAreaInfoDialog.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/**
- * cemu_UI
- *
- * Copyright 2017 <@Seil0>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-package com.cemu_UI.uiElements;
-
-import com.jfoenix.controls.JFXButton;
-import com.jfoenix.controls.JFXDialog;
-import com.jfoenix.controls.JFXDialogLayout;
-import com.jfoenix.controls.JFXTextArea;
-
-import javafx.event.ActionEvent;
-import javafx.event.EventHandler;
-import javafx.scene.layout.AnchorPane;
-import javafx.scene.layout.Pane;
-import javafx.scene.layout.StackPane;
-import javafx.scene.text.Text;
-
-public class JFXTextAreaInfoDialog {
-
- private String headingText;
- private String bodyText;
- private String dialogBtnStyle;
- private int dialogWidth;
- private int dialogHeight;
- private JFXTextArea textArea;
- private Pane pane;
-
- /**
- * Creates a new JFoenix Dialog to show some information
- * @param headingText Heading Text, just the heading
- * @param bodyText body Text, all other text belongs here
- * @param dialogBtnStyle Style of the okay button
- * @param dialogWidth dialog width
- * @param dialogHeight dialog height
- * @param pane pane to which the dialog belongs
- */
- public JFXTextAreaInfoDialog(String headingText, String bodyText, String dialogBtnStyle, int dialogWidth, int dialogHeight, Pane pane) {
- this.headingText = headingText;
- this.bodyText = bodyText;
- this.dialogBtnStyle = dialogBtnStyle;
- this.dialogWidth = dialogWidth;
- this.dialogHeight = dialogHeight;
- this.pane = pane;
- }
-
- public void show() {
- textArea = new JFXTextArea(bodyText);
-
- JFXDialogLayout content = new JFXDialogLayout();
- content.setHeading(new Text(headingText));
- content.setBody(textArea);
- content.setPrefSize(dialogWidth, dialogHeight);
- StackPane stackPane = new StackPane();
- stackPane.autosize();
- JFXDialog dialog = new JFXDialog(stackPane, content, JFXDialog.DialogTransition.LEFT, true);
- JFXButton button = new JFXButton("Okay");
- button.setOnAction(new EventHandler() {
- @Override
- public void handle(ActionEvent event) {
- dialog.close();
- }
- });
- button.setButtonType(com.jfoenix.controls.JFXButton.ButtonType.RAISED);
- button.setPrefHeight(32);
- button.setStyle(dialogBtnStyle);
- content.setActions(button);
- pane.getChildren().add(stackPane);
- AnchorPane.setTopAnchor(stackPane, (pane.getHeight() - content.getPrefHeight()) / 2);
- AnchorPane.setLeftAnchor(stackPane, (pane.getWidth() - content.getPrefWidth()) / 2);
- dialog.show();
- }
-
- public JFXTextArea getTextArea() {
- return textArea;
- }
-
- public void setTextArea(JFXTextArea textArea) {
- this.textArea = textArea;
- }
-}
diff --git a/src/main/java/kellerkinder/HomeFlix/application/Main.java b/src/main/java/kellerkinder/HomeFlix/application/Main.java
index 9d211f6..d9012c4 100644
--- a/src/main/java/kellerkinder/HomeFlix/application/Main.java
+++ b/src/main/java/kellerkinder/HomeFlix/application/Main.java
@@ -19,31 +19,31 @@
* MA 02110-1301, USA.
*
*/
-
package kellerkinder.HomeFlix.application;
import java.io.File;
import java.io.IOException;
import java.util.Locale;
-import java.util.Optional;
import java.util.ResourceBundle;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
+import org.kellerkinder.Alerts.JFX2BtnCancelAlert;
import javafx.application.Application;
+import javafx.event.ActionEvent;
+import javafx.event.EventHandler;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
-import javafx.scene.control.Alert;
-import javafx.scene.control.Alert.AlertType;
-import javafx.scene.control.ButtonType;
import javafx.scene.image.Image;
import javafx.scene.layout.AnchorPane;
import javafx.stage.DirectoryChooser;
+import javafx.stage.FileChooser;
import javafx.stage.Stage;
+import javafx.stage.WindowEvent;
public class Main extends Application {
-
+
private Stage primaryStage;
private Scene scene;
private AnchorPane pane;
@@ -54,30 +54,30 @@ public class Main extends Application {
private static String osArch = System.getProperty("os.arch");
private static String osVers = System.getProperty("os.version");
private static String javaVers = System.getProperty("java.version");
- private static String javaVend= System.getProperty("java.vendor");
- private String dirWin = userHome + "/Documents/HomeFlix"; //Windows: C:/Users/"User"/Documents/HomeFlix
- private String dirLinux = userHome + "/HomeFlix"; //Linux: /home/"User"/HomeFlix
+ private static String javaVend = System.getProperty("java.vendor");
+ private static String local = System.getProperty("user.language") + "_" + System.getProperty("user.country");
+ private String dirWin = userHome + "/Documents/HomeFlix"; // Windows: C:/Users/"User"/Documents/HomeFlix
+ private String dirLinux = userHome + "/HomeFlix"; // Linux: /home/"User"/HomeFlix
private File directory;
private File configFile;
private File posterCache;
-
- private String path;
- private String FONT_FAMILY = "System";
- private String local = System.getProperty("user.language")+"_"+System.getProperty("user.country");
- private double FONT_SIZE = 17;
private ResourceBundle bundle;
private static Logger LOGGER;
-
+
@Override
public void start(Stage primaryStage) throws IOException {
LOGGER.info("OS: " + osName + " " + osVers + " " + osArch);
LOGGER.info("Java: " + javaVend + " " + javaVers);
LOGGER.info("User: " + userName + " " + userHome);
-
- this.primaryStage = primaryStage;
+
+ this.primaryStage = primaryStage;
mainWindow();
}
-
+
+ /**
+ * initialize the mainWindowController, GUI and load the saved settings or call addFirstSource
+ * initialize the primaryStage and set the file/directory paths
+ */
private void mainWindow(){
try {
FXMLLoader loader = new FXMLLoader();
@@ -88,12 +88,18 @@ public class Main extends Application {
primaryStage.setResizable(false);
primaryStage.setTitle("Project HomeFlix");
primaryStage.getIcons().add(new Image(Main.class.getResourceAsStream("/icons/Homeflix_Icon_64x64.png"))); //adds application icon
+ primaryStage.setOnCloseRequest(new EventHandler() {
+ public void handle(WindowEvent we) {
+ System.exit(1);
+ }
+ });
+
mainWindowController = loader.getController(); //Link of FXMLController and controller class
mainWindowController.setMain(this); //call setMain
// get OS and the specific paths
- if (osName.equals("Windows")) {
+ if (osName.contains("Windows")) {
directory = new File(dirWin);
configFile = new File(dirWin + "/config.xml");
posterCache = new File(dirWin + "/posterCache");
@@ -103,33 +109,27 @@ public class Main extends Application {
posterCache = new File(dirLinux + "/posterCache");
}
- // startup checks
- if (!configFile.exists()) {
- directory.mkdir();
- mainWindowController.addSource(firstStart(), "local");
- mainWindowController.setColor("ee3523");
- mainWindowController.setSize(FONT_SIZE);
- mainWindowController.setAutoUpdate(false);
- mainWindowController.setLocal(local);
- mainWindowController.saveSettings();
- try {
- Runtime.getRuntime().exec("java -jar ProjectHomeFlix.jar"); // start again (preventing Bugs) TODO is this really needed
- System.exit(0); // finishes it self
- } catch (Exception e) {
- LOGGER.error("error while restarting HomeFlix", e);
- }
- }
-
- if (!posterCache.exists()) {
- posterCache.mkdir();
- }
-
// generate window
scene = new Scene(pane); // create new scene, append pane to scene
scene.getStylesheets().add(getClass().getResource("/css/MainWindow.css").toExternalForm());
primaryStage.setScene(scene); // append scene to stage
primaryStage.show(); // show stage
+ // startup checks
+ if (!configFile.exists()) {
+ directory.mkdir();
+ addFirstSource();
+ mainWindowController.setColor("ee3523");
+ mainWindowController.setFontSize(17.0);
+ mainWindowController.setAutoUpdate(false);
+ mainWindowController.setLocal(local);
+ mainWindowController.saveSettings();
+ }
+
+ if (!posterCache.exists()) {
+ posterCache.mkdir();
+ }
+
// init here as it loads the games to the mwc and the gui, therefore the window must exist
mainWindowController.init();
mainWindowController.getDbController().init();
@@ -137,10 +137,13 @@ public class Main extends Application {
LOGGER.error(e);
}
}
-
- // Method for first Start
- private String firstStart(){
- switch (System.getProperty("user.language") + "_" + System.getProperty("user.country")) {
+
+ /**
+ * we need to get the path for the first source from the user and add it to
+ * sources.json, if the user ends the file-/directory-chooser the program will exit
+ */
+ private void addFirstSource() {
+ switch (local) {
case "en_US":
bundle = ResourceBundle.getBundle("locals.HomeFlix-Local", Locale.US); // us_english
break;
@@ -152,30 +155,61 @@ public class Main extends Application {
break;
}
- Alert alert = new Alert(AlertType.CONFIRMATION); //new alert with file-chooser
- alert.setTitle("Project HomeFlix");
- alert.setHeaderText(bundle.getString("firstStartHeader"));
- alert.setContentText(bundle.getString("firstStartContent"));
+ JFX2BtnCancelAlert selectFirstSource = new JFX2BtnCancelAlert(bundle.getString("addSourceHeader"),
+ bundle.getString("addSourceBody"),
+ "-fx-button-type: RAISED; -fx-background-color: #ee3523; -fx-text-fill: BLACK;",
+ bundle.getString("addDirectory"), bundle.getString("addStreamSource"),
+ bundle.getString("cancelBtnText"), primaryStage);
- Optional result = alert.showAndWait();
- if (result.get() == ButtonType.OK){
- DirectoryChooser directoryChooser = new DirectoryChooser();
- File selectedDirectory =
- directoryChooser.showDialog(primaryStage);
- path = selectedDirectory.getAbsolutePath();
-
- } else {
- path = "";
- }
- return path;
+ // directory action
+ EventHandler btn1Action = new EventHandler() {
+ @Override
+ public void handle(ActionEvent event) {
+ DirectoryChooser directoryChooser = new DirectoryChooser();
+ directoryChooser.setTitle(bundle.getString("addDirectory"));
+ File selectedFolder = directoryChooser.showDialog(primaryStage);
+ if (selectedFolder != null && selectedFolder.exists()) {
+ mainWindowController.addSource(selectedFolder.getPath(), "local");
+ selectFirstSource.getAlert().close();
+ } else {
+ LOGGER.error("The selected folder dosen't exist!");
+ System.exit(1);
+ }
+ }
+ };
+
+ // streaming action
+ EventHandler btn2Action = new EventHandler() {
+ @Override
+ public void handle(ActionEvent event) {
+ FileChooser fileChooser = new FileChooser();
+ fileChooser.setTitle("addStreamSource");
+ File selectedFile = fileChooser.showOpenDialog(getPrimaryStage());
+ if (selectedFile != null && selectedFile.exists()) {
+ mainWindowController.addSource(selectedFile.getPath(), "stream");
+ selectFirstSource.getAlert().close();
+ } else {
+ LOGGER.error("The selected file dosen't exist!");
+ System.exit(1);
+ }
+ }
+ };
+ selectFirstSource.setBtn1Action(btn1Action);
+ selectFirstSource.setBtn2Action(btn2Action);
+ selectFirstSource.showAndWait();
}
+ /**
+ * set the log file location and initialize the logger
+ * launch the GUI
+ * @param args arguments given at the start
+ */
public static void main(String[] args) {
- if(System.getProperty("os.name").equals("Windows")){
+ if (System.getProperty("os.name").equals("Windows")) {
System.setProperty("logFilename", userHome + "/Documents/HomeFlix/app.log");
File logFile = new File(userHome + "/Documents/HomeFlix/app.log");
logFile.delete();
- }else{
+ } else {
System.setProperty("logFilename", userHome + "/HomeFlix/app.log");
File logFile = new File(userHome + "/HomeFlix/app.log");
logFile.delete();
@@ -188,22 +222,10 @@ public class Main extends Application {
return primaryStage;
}
- public void setPrimaryStage(Stage primaryStage) {
- this.primaryStage = primaryStage;
- }
-
- public AnchorPane getPane( ) {
+ public AnchorPane getPane() {
return pane;
}
- public String getFONT_FAMILY() {
- return FONT_FAMILY;
- }
-
- public void setFONT_FAMILY(String FONT_FAMILY) {
- this.FONT_FAMILY = FONT_FAMILY;
- }
-
public File getDirectory() {
return directory;
}
diff --git a/src/main/java/kellerkinder/HomeFlix/application/MainWindowController.java b/src/main/java/kellerkinder/HomeFlix/application/MainWindowController.java
index 918c9e6..45cb8b0 100644
--- a/src/main/java/kellerkinder/HomeFlix/application/MainWindowController.java
+++ b/src/main/java/kellerkinder/HomeFlix/application/MainWindowController.java
@@ -1,6 +1,6 @@
/**
* Project-HomeFlix
- *
+ *
* Copyright 2016-2018 <@Seil0>
*
* This program is free software; you can redistribute it and/or modify
@@ -19,7 +19,6 @@
* MA 02110-1301, USA.
*
*/
-
package kellerkinder.HomeFlix.application;
import java.awt.Desktop;
@@ -33,19 +32,17 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
-import java.io.PrintWriter;
-import java.io.StringWriter;
import java.io.Writer;
import java.math.BigInteger;
-import java.util.ArrayList;
+import java.net.URLConnection;
import java.util.Locale;
import java.util.Properties;
import java.util.ResourceBundle;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
+import org.kellerkinder.Alerts.JFXInfoAlert;
-import com.cemu_UI.uiElements.JFXInfoDialog;
import com.eclipsesource.json.Json;
import com.eclipsesource.json.JsonArray;
import com.eclipsesource.json.JsonObject;
@@ -65,8 +62,6 @@ import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
-import javafx.scene.control.Alert;
-import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.ChoiceBox;
import javafx.scene.control.ContextMenu;
import javafx.scene.control.Label;
@@ -74,7 +69,6 @@ import javafx.scene.control.MenuItem;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
-import javafx.scene.control.TextArea;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeTableColumn;
import javafx.scene.control.TreeTableColumn.SortType;
@@ -83,9 +77,7 @@ import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.AnchorPane;
-import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
-import javafx.scene.layout.Priority;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
@@ -97,16 +89,18 @@ import kellerkinder.HomeFlix.controller.DBController;
import kellerkinder.HomeFlix.controller.OMDbAPIController;
import kellerkinder.HomeFlix.controller.UpdateController;
import kellerkinder.HomeFlix.datatypes.SourceDataType;
+import kellerkinder.HomeFlix.player.Player;
import kellerkinder.HomeFlix.datatypes.FilmTabelDataType;
public class MainWindowController {
@FXML
private AnchorPane mainAnchorPane;
+ @FXML
+ private AnchorPane tableModeAnchorPane;
@FXML
private ScrollPane settingsScrollPane;
-
@FXML
private ScrollPane textScrollPane;
@@ -127,82 +121,65 @@ public class MainWindowController {
@FXML
private JFXButton playbtn;
-
@FXML
private JFXButton openfolderbtn;
-
@FXML
private JFXButton returnBtn;
-
@FXML
private JFXButton forwardBtn;
-
- @FXML
- private JFXButton aboutBtn;
-
- @FXML
- private JFXButton settingsBtn;
-
- @FXML
- private JFXButton debugBtn;
-
- @FXML
- public JFXButton updateBtn;
-
- @FXML
- private JFXButton addDirectoryBtn;
-
- @FXML
- private JFXButton addStreamSourceBtn;
-
- @FXML
- private JFXHamburger menuHam;
-
- @FXML
- private JFXToggleButton autoUpdateToggleBtn;
-
- @FXML
- private JFXTextField searchTextField;
-
- @FXML
- public JFXColorPicker colorPicker;
-
@FXML
- public ChoiceBox languageChoisBox = new ChoiceBox<>();
+ private JFXButton aboutBtn;
+ @FXML
+ private JFXButton settingsBtn;
+ @FXML
+ private JFXButton updateBtn;
+ @FXML
+ private JFXButton addDirectoryBtn;
+ @FXML
+ private JFXButton addStreamSourceBtn;
+
+ @FXML
+ private JFXHamburger menuHam;
@FXML
- public ChoiceBox branchChoisBox = new ChoiceBox<>();
+ private JFXToggleButton autoUpdateToggleBtn;
+ @FXML
+ private JFXToggleButton autoplayToggleBtn;
@FXML
- public JFXSlider fontsizeSlider;
-
- @FXML
- private Label homeflixSettingsLbl;
-
- @FXML
- private Label mainColorLbl;
-
+ private JFXTextField searchTextField;
+
+ @FXML
+ private JFXColorPicker colorPicker;
+
+ @FXML
+ private ChoiceBox languageChoisBox = new ChoiceBox<>();
+ @FXML
+ private ChoiceBox branchChoisBox = new ChoiceBox<>();
+
+ @FXML
+ private JFXSlider fontsizeSlider;
+
+ @FXML
+ private Label homeflixSettingsLbl;
+ @FXML
+ private Label mainColorLbl;
@FXML
private Label fontsizeLbl;
-
- @FXML
- private Label languageLbl;
-
+ @FXML
+ private Label languageLbl;
@FXML
private Label updateLbl;
-
@FXML
private Label branchLbl;
-
@FXML
private Label sourcesLbl;
-
@FXML
private Label versionLbl;
- @FXML
+ @FXML
private ImageView posterImageView;
- private ImageView imv1;
+ private ImageView imv1;
@FXML
private TreeItem filmRoot = new TreeItem<>(new FilmTabelDataType("", "", "", "", false, false, imv1));
@@ -216,46 +193,44 @@ public class MainWindowController {
private TreeTableColumn columnEpisode = new TreeTableColumn<>("Episode");
@FXML
private TreeTableColumn columnFavorite = new TreeTableColumn<>("Favorite");
-
- @FXML
- private TreeItem sourceRoot =new TreeItem<>(new SourceDataType("", ""));
- @FXML
- private TableColumn sourceColumn;
- @FXML
- private TableColumn modeColumn;
-
+
+ @FXML
+ private TreeItem sourceRoot = new TreeItem<>(new SourceDataType("", ""));
+ @FXML
+ private TableColumn sourceColumn;
+ @FXML
+ private TableColumn modeColumn;
+
private boolean menuTrue = false;
private boolean settingsTrue = false;
private boolean autoUpdate = false;
private boolean useBeta = false;
- private static final Logger LOGGER = LogManager.getLogger(MainWindowController.class.getName());
+ private boolean autoplay = false;
+ private static final Logger LOGGER = LogManager.getLogger(MainWindowController.class.getName());
private int hashA = -647380320;
-
- private String version = "0.6.0";
- private String buildNumber = "141";
- private String versionName = "plasma vampire";
+
+ private final String version = "0.7.0";
+ private final String buildNumber = "151";
+ private final String versionName = "toothless dragon";
private String dialogBtnStyle;
private String color;
- private String title;
- private String streamUrl;
- private String ratingSortType;
private String local;
private String omdbAPIKey;
// text strings
- private String errorPlay;
private String errorLoad;
private String errorSave;
private String infoText;
private String vlcNotInstalled;
- public double size;
+ private double fontSize;
private int last;
private int indexTable;
private int indexList;
private int next;
private ResourceBundle bundle;
-
+ private FilmTabelDataType currentTableFilm = new FilmTabelDataType("", "", "", "", false, false, null);
+
private ObservableList languages = FXCollections.observableArrayList("English (en_US)", "Deutsch (de_DE)");
private ObservableList branches = FXCollections.observableArrayList("stable", "beta");
private ObservableList filterData = FXCollections.observableArrayList();
@@ -267,9 +242,8 @@ public class MainWindowController {
private ImageView skip_next_black = new ImageView(new Image("icons/ic_skip_next_black_18dp_1x.png"));
private ImageView play_arrow_white = new ImageView(new Image("icons/ic_play_arrow_white_18dp_1x.png"));
private ImageView play_arrow_black = new ImageView(new Image("icons/ic_play_arrow_black_18dp_1x.png"));
- private DirectoryChooser directoryChooser = new DirectoryChooser();
- private MenuItem like = new MenuItem("like");
- private MenuItem dislike = new MenuItem("dislike"); //TODO one option (like or dislike)
+ private MenuItem like = new MenuItem("like");
+ private MenuItem dislike = new MenuItem("dislike"); // TODO one option (like or dislike)
private ContextMenu menu = new ContextMenu(like, dislike);
private Properties props = new Properties();
@@ -290,12 +264,14 @@ public class MainWindowController {
omdbAPIController = new OMDbAPIController(this, dbController, this.main);
}
+ // call all initialize methods
void init() {
+ LOGGER.info("Initializing Project-HomeFlix build " + buildNumber);
loadSettings();
checkAutoUpdate();
initTabel();
- initActions();
initUI();
+ initActions();
}
// Initialize the tables (treeTableViewfilm and sourcesTable)
@@ -326,18 +302,18 @@ public class MainWindowController {
filmsTreeTable.getColumns().add(columnFavorite);
filmsTreeTable.getColumns().add(columnSeason);
filmsTreeTable.getColumns().add(columnEpisode);
- filmsTreeTable.getColumns().get(0).setVisible(false); //hide columnStreamUrl (important)
-
- // context menu for treeTableViewfilm
+ filmsTreeTable.getColumns().get(0).setVisible(false); // hide columnStreamUrl (important)
+
+ // context menu for treeTableViewfilm
filmsTreeTable.setContextMenu(menu);
-
- // sourcesTreeTable
- sourceColumn.setCellValueFactory(cellData -> cellData.getValue().pathProperty());
- modeColumn.setCellValueFactory(cellData -> cellData.getValue().modeProperty());
- sourcesTable.setItems(sourcesList);
+
+ // sourcesTreeTable
+ sourceColumn.setCellValueFactory(cellData -> cellData.getValue().pathProperty());
+ modeColumn.setCellValueFactory(cellData -> cellData.getValue().modeProperty());
+ sourcesTable.setItems(sourcesList);
}
-
- //Initializing the actions
+
+ // Initializing the actions
private void initActions() {
HamburgerBackArrowBasicTransition burgerTask = new HamburgerBackArrowBasicTransition(menuHam);
@@ -364,7 +340,7 @@ public class MainWindowController {
@Override
public void changed(ObservableValue extends String> observable, String oldValue, String newValue) {
ObservableList helpData;
- filterData.removeAll(filterData);
+ filterData.clear();
filmRoot.getChildren().removeAll(filmRoot.getChildren());
helpData = filmsList;
@@ -412,9 +388,9 @@ public class MainWindowController {
fontsizeSlider.valueProperty().addListener(new ChangeListener() {
@Override
public void changed(ObservableValue extends Number> ov, Number old_val, Number new_val) {
- setSize(fontsizeSlider.getValue());
- if (title != null) {
- dbController.readCache(streamUrl);
+ setFontSize(fontsizeSlider.getValue());
+ if (!getCurrentTitle().isEmpty()) {
+ dbController.readCache(getCurrentStreamUrl());
}
// ta1.setFont(Font.font("System", size));
saveSettings();
@@ -424,8 +400,8 @@ public class MainWindowController {
like.setOnAction(new EventHandler() {
@Override
public void handle(ActionEvent event) {
- dbController.like(streamUrl);
- dbController.refresh(streamUrl, indexList);
+ dbController.like(getCurrentStreamUrl());
+ dbController.refresh(getCurrentStreamUrl(), indexList);
refreshTable();
}
});
@@ -433,59 +409,41 @@ public class MainWindowController {
dislike.setOnAction(new EventHandler() {
@Override
public void handle(ActionEvent event) {
- dbController.dislike(streamUrl);
- dbController.refresh(streamUrl, indexList);
+ dbController.dislike(getCurrentStreamUrl());
+ dbController.refresh(getCurrentStreamUrl(), indexList);
refreshTable();
}
});
/**
* FIXME fix bug when sort by ASCENDING, wrong order
- * FIXME when sorting, series are expanded
*/
columnFavorite.sortTypeProperty().addListener(new ChangeListener() {
@Override
public void changed(ObservableValue extends SortType> paramObservableValue, SortType paramT1, SortType paramT2) {
- LOGGER.info("NAME Clicked -- sortType = " + paramT1 + ", SortType=" + paramT2);
- ArrayList fav_true = new ArrayList();
- ArrayList fav_false = new ArrayList();
- ObservableList helpData;
- filterData.removeAll(filterData);
-// treeTableViewfilm.getSelectionModel().clearSelection(selected);
- filmRoot.getChildren().removeAll(filmRoot.getChildren());
-
- helpData = filmsList;
-
- for (int i = 0; i < helpData.size(); i++) {
- if (helpData.get(i).getFavorite() == true) {
- fav_true.add(i);
- } else {
- fav_false.add(i);
- }
- }
- if (paramT2.toString().equals("DESCENDING")) {
- LOGGER.info("Absteigend"); // Debug, delete?
- for (int i = 0; i < fav_true.size(); i++) {
- filterData.add(helpData.get(fav_true.get(i)));
- }
- for (int i = 0; i < fav_false.size(); i++) {
- filterData.add(helpData.get(fav_false.get(i)));
+ filmRoot.getChildren().clear();
+ filterData.clear();
+
+ if (paramT2.equals(SortType.DESCENDING)) {
+ for (FilmTabelDataType film : filmsList) {
+ if (film.getFavorite()) {
+ filterData.add(0, film);
+ } else {
+ filterData.add(film);
+ }
}
} else {
- for (int i = 0; i < fav_false.size(); i++) {
- filterData.add(helpData.get(fav_false.get(i)));
- }
- for (int i = 0; i < fav_true.size(); i++) {
- filterData.add(helpData.get(fav_true.get(i)));
+// System.out.println("ascending");
+ for (FilmTabelDataType film : filmsList) {
+ if (!film.getFavorite()) {
+ filterData.add(0, film);
+ } else {
+ filterData.add(film);
+ }
}
}
-
- LOGGER.info(filterData.size()); // Debug, delete?
- for (int i = 0; i < filterData.size(); i++) {
-// LOGGER.info(filterData.get(i).getTitle()+"; "+filterData.get(i).getRating()); // Debugging
- // add filtered data to root node after search
- filmRoot.getChildren().add(new TreeItem(filterData.get(i)));
- }
+
+ addDataUI(filterData);
}
});
@@ -493,22 +451,25 @@ public class MainWindowController {
filmsTreeTable.getSelectionModel().selectedItemProperty().addListener(new ChangeListener