Browse Source

moved static vars and save & load code to XMLController

* moved static vars and save & load code to XMLController
* code clean up
* happy new year
pull/12/head
Jannik 4 years ago
parent
commit
d3d22db7a8
  1. 181
      src/main/java/kellerkinder/HomeFlix/application/Main.java
  2. 149
      src/main/java/kellerkinder/HomeFlix/application/MainWindowController.java
  3. 15
      src/main/java/kellerkinder/HomeFlix/controller/DBController.java
  4. 10
      src/main/java/kellerkinder/HomeFlix/controller/OMDbAPIController.java
  5. 9
      src/main/java/kellerkinder/HomeFlix/controller/SourcesController.java
  6. 3
      src/main/java/kellerkinder/HomeFlix/controller/UpdateController.java
  7. 294
      src/main/java/kellerkinder/HomeFlix/controller/XMLController.java
  8. 2
      src/main/java/kellerkinder/HomeFlix/datatypes/DatabaseDataType.java
  9. 2
      src/main/java/kellerkinder/HomeFlix/datatypes/FilmTabelDataType.java
  10. 3
      src/main/java/kellerkinder/HomeFlix/datatypes/OMDbAPIResponseDataType.java
  11. 2
      src/main/java/kellerkinder/HomeFlix/datatypes/SourceDataType.java
  12. 3
      src/main/java/kellerkinder/HomeFlix/player/Player.java
  13. 5
      src/main/java/kellerkinder/HomeFlix/player/PlayerController.java
  14. 3
      src/main/java/org/kellerkinder/Alerts/JFX2BtnCancelAlert.java
  15. 3
      src/main/java/org/kellerkinder/Alerts/JFXInfoAlert.java
  16. 2
      src/main/resources/locals/HomeFlix-Local_de_DE.properties
  17. 2
      src/main/resources/locals/HomeFlix-Local_en_US.properties

181
src/main/java/kellerkinder/HomeFlix/application/Main.java

@ -1,7 +1,7 @@
/**
* Project-HomeFlix
*
* Copyright 2016-2018 <@Seil0>
* Copyright 2016-2019 <@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
@ -21,25 +21,15 @@
*/
package kellerkinder.HomeFlix.application;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
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.JFX2BtnCancelAlert;
import com.eclipsesource.json.Json;
import com.eclipsesource.json.JsonObject;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
@ -50,6 +40,7 @@ import javafx.scene.layout.AnchorPane;
import javafx.stage.DirectoryChooser;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
import kellerkinder.HomeFlix.controller.XMLController;
public class Main extends Application {
@ -57,27 +48,15 @@ public class Main extends Application {
private Scene scene;
private AnchorPane pane;
private MainWindowController mainWindowController;
private static String userHome = System.getProperty("user.home");
private static String userName = System.getProperty("user.name");
private static String osName = System.getProperty("os.name");
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 static String local = System.getProperty("user.language") + "_" + System.getProperty("user.country");
private static String dirHomeFlix;
private static File directory;
private static File configFile;
private static File posterCache;
private static XMLController xmlController;
private ResourceBundle bundle;
private static Logger LOGGER;
private Properties props = new Properties();
@Override
public void start(Stage primaryStage) throws IOException {
LOGGER.info("OS: " + osName + " " + osVers + " " + osArch);
LOGGER.info("Java: " + javaVend + " " + javaVers);
LOGGER.info("User: " + userName + " " + userHome);
LOGGER.info("OS: " + XMLController.getOsName() + " " + XMLController.getOsVers() + " " + XMLController.getOsVers());
LOGGER.info("Java: " + XMLController.getJavaVend() + " " + XMLController.getJavaVers());
LOGGER.info("User: " + XMLController.getUserName() + " " + XMLController.getUserHome());
this.primaryStage = primaryStage;
mainWindowController = new MainWindowController(this);
@ -109,20 +88,16 @@ public class Main extends Application {
primaryStage.show(); // show stage
// startup checks
if (!configFile.exists()) {
directory.mkdir();
if (!XMLController.getConfigFile().exists()) {
XMLController.getDirHomeFlix().mkdir();
System.out.println("config not found");
addFirstSource();
mainWindowController.setColor("ee3523");
mainWindowController.setFontSize(17.0);
mainWindowController.setAutoUpdate(false);
mainWindowController.setLocal(local);
saveSettings();
xmlController.saveSettings();
}
if (!posterCache.exists()) {
posterCache.mkdir();
if (!XMLController.getPosterCache().exists()) {
XMLController.getPosterCache().mkdir();
}
mainWindowController.init();
@ -136,31 +111,30 @@ public class Main extends Application {
* @param args arguments given at the start
*/
public static void main(String[] args) {
if (osName.contains("Windows")) {
dirHomeFlix = userHome + "/Documents/HomeFlix";
// Logger initialization
String logPath = "";
if (System.getProperty("os.name").contains("Windows")) {
logPath = System.getProperty("user.home") + "/Documents/HomeFlix/app.log";
} else {
dirHomeFlix = userHome + "/HomeFlix";
logPath = System.getProperty("user.home") + "/HomeFlix/app.log";
}
// set the concrete files
directory = new File(dirHomeFlix);
configFile = new File(dirHomeFlix + "/config.xml");
posterCache = new File(dirHomeFlix + "/posterCache");
System.setProperty("logFilename", dirHomeFlix + "/app.log");
File logFile = new File(dirHomeFlix + "/app.log");
System.setProperty("logFilename", logPath);
File logFile = new File(logPath);
logFile.delete();
LOGGER = LogManager.getLogger(Main.class.getName());
xmlController = new XMLController();
launch(args);
}
/**
/** TODO this should move
* 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
*/
void addFirstSource() {
switch (local) {
switch (XMLController.getSysLocal()) {
case "en_US":
bundle = ResourceBundle.getBundle("locals.HomeFlix-Local", Locale.US); // us_english
break;
@ -217,103 +191,6 @@ public class Main extends Application {
selectFirstSource.showAndWait();
}
/**
* save the configuration to the config.xml file
*/
public void saveSettings() {
LOGGER.info("saving settings ...");
try {
props.setProperty("color", mainWindowController.getColor());
props.setProperty("autoUpdate", String.valueOf(mainWindowController.isAutoUpdate()));
props.setProperty("useBeta", String.valueOf(mainWindowController.isUseBeta()));
props.setProperty("autoplay", String.valueOf(mainWindowController.isAutoplay()));
props.setProperty("size", mainWindowController.getFontSize().toString());
props.setProperty("local", mainWindowController.getLocal());
OutputStream outputStream = new FileOutputStream(getConfigFile()); // new output-stream
props.storeToXML(outputStream, "Project HomeFlix settings"); // write new .xml
outputStream.close();
} catch (IOException e) {
LOGGER.error("An error occurred while saving the settings!", e);
}
}
/**
* load the configuration from the config.xml file
* and try to load the API keys from apiKeys.json
*/
public void loadSettings() {
LOGGER.info("loading settings ...");
try {
InputStream inputStream = new FileInputStream(getConfigFile());
props.loadFromXML(inputStream); // new input-stream from .xml
try {
mainWindowController.setColor(props.getProperty("color"));
} catch (Exception e) {
LOGGER.error("cloud not load color", e);
mainWindowController.setColor("00a8cc");
}
try {
mainWindowController.setFontSize(Double.parseDouble(props.getProperty("size")));
} catch (Exception e) {
LOGGER.error("cloud not load fontsize", e);
mainWindowController.setFontSize(17.0);
}
try {
mainWindowController.setAutoUpdate(Boolean.parseBoolean(props.getProperty("autoUpdate")));
} catch (Exception e) {
LOGGER.error("cloud not load autoUpdate", e);
mainWindowController.setAutoUpdate(false);
}
try {
mainWindowController.setUseBeta(Boolean.parseBoolean(props.getProperty("useBeta")));
} catch (Exception e) {
LOGGER.error("cloud not load autoUpdate", e);
mainWindowController.setUseBeta(false);
}
try {
mainWindowController.setAutoplay(Boolean.parseBoolean(props.getProperty("autoplay")));
} catch (Exception e) {
LOGGER.error("cloud not load autoplay", e);
mainWindowController.setAutoplay(false);
}
try {
mainWindowController.setLocal(props.getProperty("local"));
} catch (Exception e) {
LOGGER.error("cloud not load local", e);
mainWindowController.setLocal(System.getProperty("user.language") + "_" + System.getProperty("user.country"));
}
inputStream.close();
} catch (IOException e) {
LOGGER.error("An error occurred while loading the settings!", e);
}
// try loading the omdbAPI key
try {
InputStream in = getClass().getClassLoader().getResourceAsStream("apiKeys.json");
if (in != null) {
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
JsonObject apiKeys = Json.parse(reader).asObject();
mainWindowController.setOmdbAPIKey(apiKeys.getString("omdbAPIKey", ""));
reader.close();
in.close();
} else {
LOGGER.warn("Cloud not load apiKeys.json. No such file");
}
} catch (Exception e) {
LOGGER.error("Cloud not load the omdbAPI key. Please contact the developer!", e);
}
}
public Stage getPrimaryStage() {
return primaryStage;
}
@ -321,16 +198,4 @@ public class Main extends Application {
public AnchorPane getPane() {
return pane;
}
public File getDirectory() {
return directory;
}
public File getConfigFile() {
return configFile;
}
public File getPosterCache() {
return posterCache;
}
}

149
src/main/java/kellerkinder/HomeFlix/application/MainWindowController.java

@ -1,7 +1,7 @@
/**
* Project-HomeFlix
*
* Copyright 2016-2018 <@Seil0>
* Copyright 2016-2019 <@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
@ -86,6 +86,7 @@ import javafx.util.Duration;
import kellerkinder.HomeFlix.controller.DBController;
import kellerkinder.HomeFlix.controller.OMDbAPIController;
import kellerkinder.HomeFlix.controller.UpdateController;
import kellerkinder.HomeFlix.controller.XMLController;
import kellerkinder.HomeFlix.datatypes.SourceDataType;
import kellerkinder.HomeFlix.player.Player;
import kellerkinder.HomeFlix.datatypes.FilmTabelDataType;
@ -153,29 +154,22 @@ public class MainWindowController {
// poster-mode
// @FXML private AnchorPane posterModeAnchorPane;
private Main main;
private MainWindowController mainWindowController;
private UpdateController updateController;
private DBController dbController;
private XMLController xmlController;
private static final Logger LOGGER = LogManager.getLogger(MainWindowController.class.getName());
private boolean menuTrue = false;
private boolean settingsTrue = false;
private boolean autoUpdate = false;
private boolean useBeta = false;
private boolean autoplay = false;
private final String version = "0.7.0";
private final String buildNumber = "165";
private final String buildNumber = "167";
private final String versionName = "toothless dragon";
private String btnStyle;
private String color;
private String local;
private String omdbAPIKey;
private double fontSize;
private final int hashA = -647380320;
private int last;
private int indexTable;
@ -200,14 +194,15 @@ public class MainWindowController {
public MainWindowController(Main main) {
this.main = main;
mainWindowController = this;
dbController = new DBController(this.main, this);
xmlController = new XMLController(); // TODO pass it over from main?
dbController = new DBController(this);
}
public void init() {
LOGGER.info("Initializing Project-HomeFlix build " + buildNumber);
main.loadSettings(); // load settings
xmlController.loadSettings(); // load settings
checkAutoUpdate();
// initialize the GUI and the DBController
@ -222,16 +217,16 @@ public class MainWindowController {
// Initialize general UI elements
private void initUI() {
versionLbl.setText("Version: " + version + " (Build: " + buildNumber + ")");
fontsizeSlider.setValue(getFontSize());
colorPicker.setValue(Color.valueOf(getColor()));
fontsizeSlider.setValue(XMLController.getFontSize());
colorPicker.setValue(Color.valueOf(XMLController.getColor()));
updateBtn.setFont(Font.font("System", 12));
autoUpdateToggleBtn.setSelected(isAutoUpdate());
autoplayToggleBtn.setSelected(isAutoplay());
autoUpdateToggleBtn.setSelected(XMLController.isAutoUpdate());
autoplayToggleBtn.setSelected(XMLController.isAutoplay());
languageChoisBox.setItems(languages);
branchChoisBox.setItems(branches);
if (isUseBeta()) {
if (XMLController.isUseBeta()) {
branchChoisBox.getSelectionModel().select(1);
} else {
branchChoisBox.getSelectionModel().select(0);
@ -303,7 +298,7 @@ public class MainWindowController {
}
if (settingsTrue) {
settingsScrollPane.setVisible(false);
main.saveSettings();
xmlController.saveSettings();
settingsTrue = false;
}
});
@ -313,9 +308,9 @@ public class MainWindowController {
public void changed(ObservableValue<? extends Number> ov, Number value, Number new_value) {
String local = languageChoisBox.getItems().get((int) new_value).toString();
local = local.substring(local.length() - 6, local.length() - 1); // reading only en_US from English (en_US)
setLocal(local);
XMLController.setUsrLocal(local);
setLocalUI();
main.saveSettings();
xmlController.saveSettings();
}
});
@ -323,22 +318,22 @@ public class MainWindowController {
@Override
public void changed(ObservableValue<? extends Number> ov, Number value, Number new_value) {
if (branchChoisBox.getItems().get((int) new_value).toString() == "beta") {
setUseBeta(true);
XMLController.setUseBeta(true);
} else {
setUseBeta(false);
XMLController.setUseBeta(false);
}
main.saveSettings();
xmlController.saveSettings();
}
});
fontsizeSlider.valueProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> ov, Number old_val, Number new_val) {
setFontSize(fontsizeSlider.getValue());
XMLController.setFontSize(fontsizeSlider.getValue());
if (!getCurrentTitle().isEmpty()) {
dbController.readCache(getCurrentStreamUrl());
}
main.saveSettings();
xmlController.saveSettings();
}
});
@ -362,7 +357,7 @@ public class MainWindowController {
filmRoot.getChildren().add(new TreeItem<FilmTabelDataType>(filterData.get(i))); // add filtered data to root node after search
}
if (searchTextField.getText().hashCode() == hashA) {
setColor("000000");
XMLController.setColor("000000");
colorPicker.setValue(new Color(0, 0, 0, 1));
applyColor();
}
@ -443,7 +438,7 @@ public class MainWindowController {
LOGGER.info("loading from cache: " + getCurrentTitle());
dbController.readCache(getCurrentStreamUrl());
} else {
Thread omdbAPIThread = new Thread(new OMDbAPIController(main, dbController, currentTableFilm, omdbAPIKey, true));
Thread omdbAPIThread = new Thread(new OMDbAPIController(dbController, currentTableFilm, XMLController.getOmdbAPIKey(), true));
omdbAPIThread.setName("OMDbAPI");
omdbAPIThread.start();
}
@ -538,7 +533,7 @@ public class MainWindowController {
private void settingsBtnclicked() {
if (settingsTrue) {
settingsScrollPane.setVisible(false);
main.saveSettings();
xmlController.saveSettings();
settingsTrue = false;
} else {
settingsScrollPane.setVisible(true);
@ -572,29 +567,29 @@ public class MainWindowController {
@FXML
private void colorPickerAction() {
setColor(colorPicker.getValue().toString().substring(2, 10));
main.saveSettings();
XMLController.setColor(colorPicker.getValue().toString().substring(2, 10));
xmlController.saveSettings();
applyColor();
}
@FXML
private void updateBtnAction() {
updateController = new UpdateController(this, buildNumber, useBeta);
updateController = new UpdateController(this, buildNumber, XMLController.isUseBeta());
Thread updateThread = new Thread(updateController);
updateThread.setName("Updater");
updateThread.start();
}
@FXML
private void autoUpdateToggleBtnAction(){
autoUpdate = isAutoUpdate() ? false : true;
main.saveSettings();
private void autoUpdateToggleBtnAction() {
XMLController.setAutoUpdate(!XMLController.isAutoUpdate());
xmlController.saveSettings();
}
@FXML
private void autoplayToggleBtnAction(){
autoplay = isAutoplay() ? false : true;
main.saveSettings();
XMLController.setAutoplay(!XMLController.isAutoplay());
xmlController.saveSettings();
}
// refresh the selected child of the root node
@ -652,9 +647,9 @@ public class MainWindowController {
try {
// read old array
File oldSources = new File(main.getDirectory() + "/sources.json");
File oldSources = new File(XMLController.getDirHomeFlix() + "/sources.json");
if (oldSources.exists()) {
newsources = Json.parse(new FileReader(main.getDirectory() + "/sources.json")).asArray();
newsources = Json.parse(new FileReader(XMLController.getDirHomeFlix() + "/sources.json")).asArray();
} else {
newsources = Json.array();
}
@ -662,7 +657,7 @@ public class MainWindowController {
// add new source
source = Json.object().add("path", path).add("mode", mode);
newsources.add(source);
Writer writer = new FileWriter(main.getDirectory() + "/sources.json");
Writer writer = new FileWriter(XMLController.getDirHomeFlix() + "/sources.json");
newsources.writeTo(writer);
writer.close();
} catch (IOException e) {
@ -682,11 +677,11 @@ public class MainWindowController {
*/
private void applyColor() {
String menuBtnStyle;
BigInteger usedColor = new BigInteger(getColor(), 16);
BigInteger usedColor = new BigInteger(XMLController.getColor(), 16);
BigInteger checkColor = new BigInteger("78909cff", 16);
if (usedColor.compareTo(checkColor) == -1) {
btnStyle = "-fx-button-type: RAISED; -fx-background-color: #" + getColor() + "; -fx-text-fill: WHITE;";
btnStyle = "-fx-button-type: RAISED; -fx-background-color: #" + XMLController.getColor() + "; -fx-text-fill: WHITE;";
menuBtnStyle = "-fx-text-fill: WHITE;";
playbtn.setGraphic(new ImageView(new Image("icons/ic_play_arrow_white_18dp_1x.png")));
@ -696,7 +691,7 @@ public class MainWindowController {
menuHam.getStyleClass().clear();
menuHam.getStyleClass().add("jfx-hamburgerW");
} else {
btnStyle = "-fx-button-type: RAISED; -fx-background-color: #" + getColor() + "; -fx-text-fill: BLACK;";
btnStyle = "-fx-button-type: RAISED; -fx-background-color: #" + XMLController.getColor() + "; -fx-text-fill: BLACK;";
menuBtnStyle = "-fx-text-fill: BLACK;";
playbtn.setGraphic(new ImageView(new Image("icons/ic_play_arrow_black_18dp_1x.png")));
@ -708,9 +703,9 @@ public class MainWindowController {
}
// boxes and TextFields
sideMenuVBox.setStyle("-fx-background-color: #" + getColor() + ";");
topHBox.setStyle("-fx-background-color: #" + getColor() + ";");
searchTextField.setFocusColor(Color.valueOf(getColor()));
sideMenuVBox.setStyle("-fx-background-color: #" + XMLController.getColor() + ";");
topHBox.setStyle("-fx-background-color: #" + XMLController.getColor() + ";");
searchTextField.setFocusColor(Color.valueOf(XMLController.getColor()));
// normal buttons
addDirectoryBtn.setStyle(btnStyle);
@ -747,7 +742,7 @@ public class MainWindowController {
* set the local based on the languageChoisBox selection
*/
void setLocalUI() {
switch (getLocal()) {
switch (XMLController.getUsrLocal()) {
case "en_US":
setBundle(ResourceBundle.getBundle("locals.HomeFlix-Local", Locale.US)); // us_English
languageChoisBox.getSelectionModel().select(0);
@ -785,10 +780,10 @@ public class MainWindowController {
// if AutoUpdate, then check for updates
private void checkAutoUpdate() {
if (isAutoUpdate()) {
if (XMLController.isAutoUpdate()) {
try {
LOGGER.info("AutoUpdate: looking for updates on startup ...");
updateController = new UpdateController(this, buildNumber, useBeta);
updateController = new UpdateController(this, buildNumber, XMLController.isUseBeta());
Thread updateThread = new Thread(updateController);
updateThread.setName("Updater");
updateThread.start();
@ -824,7 +819,7 @@ public class MainWindowController {
for (FilmTabelDataType entry : dbController.getAllNotCachedEntries()) {
System.out.println(entry.getStreamUrl() + " is NOT cached!");
Runnable OMDbAPIWorker = new OMDbAPIController(main, dbController, entry, omdbAPIKey, false);
Runnable OMDbAPIWorker = new OMDbAPIController(dbController, entry, XMLController.getOmdbAPIKey(), false);
executor.execute(OMDbAPIWorker);
}
executor.shutdown();
@ -836,14 +831,6 @@ public class MainWindowController {
public DBController getDbController() {
return dbController;
}
public String getColor() {
return color;
}
public void setColor(String input) {
this.color = input;
}
public FilmTabelDataType getCurrentTableFilm() {
return currentTableFilm;
@ -857,14 +844,6 @@ public class MainWindowController {
return currentTableFilm.getStreamUrl();
}
public Double getFontSize() {
return fontSize;
}
public void setFontSize(Double input) {
this.fontSize = input;
}
public int getIndexTable() {
return indexTable;
}
@ -873,46 +852,6 @@ public class MainWindowController {
return indexList;
}
public boolean isAutoUpdate() {
return autoUpdate;
}
public void setAutoUpdate(boolean input) {
this.autoUpdate = input;
}
public boolean isUseBeta() {
return useBeta;
}
public void setUseBeta(boolean useBeta) {
this.useBeta = useBeta;
}
public boolean isAutoplay() {
return autoplay;
}
public void setAutoplay(boolean autoplay) {
this.autoplay = autoplay;
}
public String getLocal() {
return local;
}
public void setLocal(String input) {
this.local = input;
}
public String getOmdbAPIKey() {
return omdbAPIKey;
}
public void setOmdbAPIKey(String omdbAPIKey) {
this.omdbAPIKey = omdbAPIKey;
}
public ObservableList<FilmTabelDataType> getFilmsList() {
return filmsList;
}

15
src/main/java/kellerkinder/HomeFlix/controller/DBController.java

@ -1,7 +1,7 @@
/**
* Project-HomeFlix
*
* Copyright 2016-2018 <@Seil0>
* Copyright 2016-2019 <@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
@ -44,7 +44,6 @@ import javafx.scene.image.ImageView;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import kellerkinder.HomeFlix.application.Main;
import kellerkinder.HomeFlix.application.MainWindowController;
import kellerkinder.HomeFlix.datatypes.DatabaseDataType;
import kellerkinder.HomeFlix.datatypes.FilmTabelDataType;
@ -53,7 +52,6 @@ import kellerkinder.HomeFlix.datatypes.OMDbAPIResponseDataType;
public class DBController {
private MainWindowController mainWindowController;
private Main main;
private String DB_PATH;
private Image favorite_black = new Image("icons/ic_favorite_black_18dp_1x.png");
private Image favorite_border_black = new Image("icons/ic_favorite_border_black_18dp_1x.png");
@ -67,8 +65,7 @@ public class DBController {
* @param main the Main object
* @param mainWindowController the MainWindowController object
*/
public DBController(Main main, MainWindowController mainWindowController) {
this.main = main;
public DBController(MainWindowController mainWindowController) {
this.mainWindowController = mainWindowController;
}
@ -91,7 +88,7 @@ public class DBController {
* AutoCommit is set to false to prevent some issues, so manual commit is active!
*/
private void initDatabaseConnection() {
DB_PATH = main.getDirectory() + "/Homeflix.db";
DB_PATH = XMLController.getDirHomeFlix() + "/Homeflix.db";
try {
// create a database connection
connection = DriverManager.getConnection("jdbc:sqlite:" + DB_PATH);
@ -146,7 +143,7 @@ public class DBController {
* load all sources
*/
private void loadSources() {
SourcesController sourcesController = new SourcesController(main, mainWindowController);
SourcesController sourcesController = new SourcesController(mainWindowController);
sourceStreams = sourcesController.loadSources();
}
@ -456,7 +453,7 @@ public class DBController {
PreparedStatement ps = connection.prepareStatement("SELECT * FROM cache WHERE streamUrl = ?");
ps.setString(1, streamUrl);
ResultSet rs = ps.executeQuery();
Font font = Font.font("System", FontWeight.BOLD, (int) Math.round(mainWindowController.getFontSize()));
Font font = Font.font("System", FontWeight.BOLD, (int) Math.round(XMLController.getFontSize()));
ObservableList<Node> textFlow = mainWindowController.getTextFlow().getChildren();
ArrayList<Text> nameText = new ArrayList<Text>();
@ -513,7 +510,7 @@ public class DBController {
textFlow.addAll(nameText.get(18), new Text(rs.getString("BoxOffice") + "\n"));
textFlow.addAll(nameText.get(19), new Text(rs.getString("Website") + "\n"));
mainWindowController.getTextFlow().setStyle("-fx-font-size : " + ((int) Math.round(mainWindowController.getFontSize()) + 1) + "px;");
mainWindowController.getTextFlow().setStyle("-fx-font-size : " + ((int) Math.round(XMLController.getFontSize()) + 1) + "px;");
// add the image
try {

10
src/main/java/kellerkinder/HomeFlix/controller/OMDbAPIController.java

@ -1,7 +1,7 @@
/**
* Project-HomeFlix
*
* Copyright 2018 <@Seil0>
* Copyright 2018-2019 <@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
@ -19,6 +19,7 @@
* MA 02110-1301, USA.
*
*/
package kellerkinder.HomeFlix.controller;
import java.awt.image.BufferedImage;
@ -37,14 +38,12 @@ import com.eclipsesource.json.JsonObject;
import com.eclipsesource.json.JsonValue;
import javafx.application.Platform;
import kellerkinder.HomeFlix.application.Main;
import kellerkinder.HomeFlix.application.MainWindowController;
import kellerkinder.HomeFlix.datatypes.FilmTabelDataType;
import kellerkinder.HomeFlix.datatypes.OMDbAPIResponseDataType;
public class OMDbAPIController implements Runnable {
private Main main;
private DBController dbController;
private FilmTabelDataType currentTableFilm;
private String omdbAPIKey;
@ -60,8 +59,7 @@ public class OMDbAPIController implements Runnable {
* @param currentTableFilm the current film object
* @param omdbAPIKey the omdbAPI key
*/
public OMDbAPIController(Main main, DBController dbController, FilmTabelDataType currentTableFilm, String omdbAPIKey, boolean refresh) {
this.main = main;
public OMDbAPIController(DBController dbController, FilmTabelDataType currentTableFilm, String omdbAPIKey, boolean refresh) {
this.dbController = dbController;
this.currentTableFilm = currentTableFilm;
this.omdbAPIKey = omdbAPIKey;
@ -126,7 +124,7 @@ public class OMDbAPIController implements Runnable {
try {
BufferedImage originalImage = ImageIO.read(new URL(object.getString("Poster", "")));
// change path to where file is located
omdbResponse.setPoster(main.getPosterCache() + "/" + omdbResponse.getTitle() + ".png");
omdbResponse.setPoster(XMLController.getPosterCache() + "/" + omdbResponse.getTitle() + ".png");
ImageIO.write(originalImage, "png", new File(omdbResponse.getPoster()));
LOGGER.info("adding poster to cache: " + omdbResponse.getPoster());
} catch (Exception e) {

9
src/main/java/kellerkinder/HomeFlix/controller/SourcesController.java

@ -1,7 +1,7 @@
/**
* Project-HomeFlix
*
* Copyright 2016-2018 <@Seil0>
* Copyright 2016-2019 <@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
@ -37,19 +37,16 @@ import com.eclipsesource.json.JsonArray;
import com.eclipsesource.json.JsonObject;
import com.eclipsesource.json.JsonValue;
import kellerkinder.HomeFlix.application.Main;
import kellerkinder.HomeFlix.application.MainWindowController;
import kellerkinder.HomeFlix.datatypes.DatabaseDataType;
public class SourcesController {
private MainWindowController mainWindowController;
private Main main;
private List<DatabaseDataType> sourceStreams = new ArrayList<DatabaseDataType>();
private static final Logger LOGGER = LogManager.getLogger(SourcesController.class.getName());
public SourcesController(Main main, MainWindowController mainWindowController) {
this.main = main;
public SourcesController(MainWindowController mainWindowController) {
this.mainWindowController = mainWindowController;
}
@ -60,7 +57,7 @@ public class SourcesController {
try {
// create a JsonArray, containing all sources, add each source to the mwc, get all films from it
JsonArray sources = Json.parse(new FileReader(main.getDirectory() + "/sources.json")).asArray();
JsonArray sources = Json.parse(new FileReader(XMLController.getDirHomeFlix() + "/sources.json")).asArray();
for (JsonValue source : sources) {
String path = source.asObject().getString("path", "");
String mode = source.asObject().getString("mode", "");

3
src/main/java/kellerkinder/HomeFlix/controller/UpdateController.java

@ -1,7 +1,7 @@
/**
* Project-HomeFlix
*
* Copyright 2018 <@Seil0>
* Copyright 2018-2019 <@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
@ -18,6 +18,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*/
package kellerkinder.HomeFlix.controller;
import java.io.BufferedReader;

294
src/main/java/kellerkinder/HomeFlix/controller/XMLController.java

@ -0,0 +1,294 @@
/**
* Project-HomeFlix
*
* Copyright 2016-2019 <@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 kellerkinder.HomeFlix.controller;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.util.Properties;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import com.eclipsesource.json.Json;
import com.eclipsesource.json.JsonObject;
public class XMLController {
private static String userHome = System.getProperty("user.home");
private static String userName = System.getProperty("user.name");
private static String osName = System.getProperty("os.name");
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 static String sysLocal = System.getProperty("user.language") + "_" + System.getProperty("user.country");
private static String dirHomeFlixPath;
private static File dirHomeFlix;
private static File configFile;
private static File posterCache;
// user settings
private static String color = "ee3523";
private static String usrLocal = sysLocal;
private static boolean autoUpdate = false;
private static boolean useBeta = false;
private static boolean autoplay = false;
private static double fontSize = 17;
// user settings
private static String omdbAPIKey;
private static final Logger LOGGER = LogManager.getLogger(XMLController.class.getName());
private Properties props = new Properties();
/**
* prepare the start up, this is the first thing call by main
*/
public XMLController() {
if (osName.contains("Windows")) {
dirHomeFlixPath = userHome + "/Documents/HomeFlix";
} else {
dirHomeFlixPath = userHome + "/HomeFlix";
}
// set the concrete files
dirHomeFlix = new File(dirHomeFlixPath);
configFile = new File(dirHomeFlix + "/config.xml");
posterCache = new File(dirHomeFlix + "/posterCache");
}
/**
* save the configuration to the config.xml file
*/
public void saveSettings() {
LOGGER.info("saving settings ...");
try {
props.setProperty("color", color);
props.setProperty("autoUpdate", String.valueOf(autoUpdate));
props.setProperty("useBeta", String.valueOf(useBeta));
props.setProperty("autoplay", String.valueOf(autoplay));
props.setProperty("size", Double.toString(fontSize));
props.setProperty("local", usrLocal);
OutputStream outputStream = new FileOutputStream(getConfigFile()); // new output-stream
props.storeToXML(outputStream, "Project HomeFlix settings"); // write new .xml
outputStream.close();
} catch (IOException e) {
LOGGER.error("An error occurred while saving the settings!", e);
}
}
/**
* load the configuration from the config.xml file
* and try to load the API keys from apiKeys.json
*/
public void loadSettings() {
LOGGER.info("loading settings ...");
try {
InputStream inputStream = new FileInputStream(getConfigFile());
props.loadFromXML(inputStream); // new input-stream from .xml
try {
setColor(props.getProperty("color"));
} catch (Exception e) {
LOGGER.error("cloud not load color", e);
setColor("00a8cc");
}
try {
setFontSize(Double.parseDouble(props.getProperty("size")));
} catch (Exception e) {
LOGGER.error("cloud not load fontsize", e);
setFontSize(17.0);
}
try {
setAutoUpdate(Boolean.parseBoolean(props.getProperty("autoUpdate")));
} catch (Exception e) {
LOGGER.error("cloud not load autoUpdate", e);
setAutoUpdate(false);
}
try {
setUseBeta(Boolean.parseBoolean(props.getProperty("useBeta")));
} catch (Exception e) {
LOGGER.error("cloud not load autoUpdate", e);
setUseBeta(false);
}
try {
setAutoplay(Boolean.parseBoolean(props.getProperty("autoplay")));
} catch (Exception e) {
LOGGER.error("cloud not load autoplay", e);
setAutoplay(false);
}
try {
setUsrLocal(props.getProperty("local"));
} catch (Exception e) {
LOGGER.error("cloud not load local", e);
setUsrLocal(System.getProperty("user.language") + "_" + System.getProperty("user.country"));
}
inputStream.close();
} catch (IOException e) {
LOGGER.error("An error occurred while loading the settings!", e);
}
// try loading the omdbAPI key
try {
InputStream in = getClass().getClassLoader().getResourceAsStream("apiKeys.json");
if (in != null) {
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
JsonObject apiKeys = Json.parse(reader).asObject();
setOmdbAPIKey(apiKeys.getString("omdbAPIKey", ""));
reader.close();
in.close();
} else {
LOGGER.warn("Cloud not load apiKeys.json. No such file");
}
} catch (Exception e) {
LOGGER.error("Cloud not load the omdbAPI key. Please contact the developer!", e);
}
}
// getters for application variables
public static String getUserHome() {
return userHome;
}
public static String getUserName() {
return userName;
}
public static String getOsName() {
return osName;
}
public static String getOsArch() {
return osArch;
}
public static String getOsVers() {
return osVers;
}
public static String getJavaVers() {
return javaVers;
}
public static String getJavaVend() {
return javaVend;
}
public static String getSysLocal() {
return sysLocal;
}
public static String getDirHomeFlixPath() {
return dirHomeFlixPath;
}
public static File getDirHomeFlix() {
return dirHomeFlix;
}
public static File getConfigFile() {
return configFile;
}
public static File getPosterCache() {
return posterCache;
}
// getters for user settings
public static String getColor() {
return color;
}
public static void setColor(String color) {
XMLController.color = color;
}
public static String getUsrLocal() {
return usrLocal;
}
public static void setUsrLocal(String usrLocal) {
XMLController.usrLocal = usrLocal;
}
public static boolean isAutoUpdate() {
return autoUpdate;
}
public static void setAutoUpdate(boolean autoUpdate) {
XMLController.autoUpdate = autoUpdate;
}
public static boolean isUseBeta() {
return useBeta;
}
public static void setUseBeta(boolean useBeta) {
XMLController.useBeta = useBeta;
}
public static boolean isAutoplay() {
return autoplay;
}
public static void setAutoplay(boolean autoplay) {
XMLController.autoplay = autoplay;
}
public static double getFontSize() {
return fontSize;
}
public static void setFontSize(double fontSize) {
XMLController.fontSize = fontSize;
}
// getters for APIs
public static String getOmdbAPIKey() {
return omdbAPIKey;
}
private static void setOmdbAPIKey(String omdbAPIKey) {
XMLController.omdbAPIKey = omdbAPIKey;
}
}

2
src/main/java/kellerkinder/HomeFlix/datatypes/DatabaseDataType.java

@ -1,7 +1,7 @@
/**
* Project-HomeFlix
*
* Copyright 2016-2018 <@Seil0>
* Copyright 2016-2019 <@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

2
src/main/java/kellerkinder/HomeFlix/datatypes/FilmTabelDataType.java

@ -1,7 +1,7 @@
/**
* Project-HomeFlix
*
* Copyright 2016-2018 <@Seil0>
* Copyright 2016-2019 <@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

3
src/main/java/kellerkinder/HomeFlix/datatypes/OMDbAPIResponseDataType.java

@ -1,7 +1,7 @@
/**
* Project-HomeFlix
*
* Copyright 2018 <@Seil0>
* Copyright 2018-2019 <@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
@ -19,6 +19,7 @@
* MA 02110-1301, USA.
*
*/
package kellerkinder.HomeFlix.datatypes;
public class OMDbAPIResponseDataType {

2
src/main/java/kellerkinder/HomeFlix/datatypes/SourceDataType.java

@ -1,7 +1,7 @@
/**
* Project-HomeFlix
*
* Copyright 2016-2018 <@Seil0>
* Copyright 2016-2019 <@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

3
src/main/java/kellerkinder/HomeFlix/player/Player.java

@ -1,7 +1,7 @@
/**
* Project-HomeFlix
*
* Copyright 2016-2018 <@Seil0>
* Copyright 2016-2019 <@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
@ -19,6 +19,7 @@
* MA 02110-1301, USA.
*
*/
package kellerkinder.HomeFlix.player;
import javafx.event.EventHandler;

5
src/main/java/kellerkinder/HomeFlix/player/PlayerController.java

@ -1,7 +1,7 @@
/**
* Project-HomeFlix
*
* Copyright 2016-2018 <@Seil0>
* Copyright 2016-2019 <@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
@ -48,6 +48,7 @@ import javafx.scene.media.MediaPlayer.Status;
import javafx.scene.media.MediaView;
import javafx.util.Duration;
import kellerkinder.HomeFlix.application.MainWindowController;
import kellerkinder.HomeFlix.controller.XMLController;
import kellerkinder.HomeFlix.datatypes.FilmTabelDataType;
public class PlayerController {
@ -124,7 +125,7 @@ public class PlayerController {
height.bind(Bindings.selectDouble(mediaView.sceneProperty(), "height"));
startTime = mainWCon.getDbController().getCurrentTime(film.getStreamUrl());
autoplay = mainWCon.isAutoplay();
autoplay = XMLController.isAutoplay();
season = !film.getSeason().isEmpty() ? Integer.parseInt(film.getSeason()) : 0;
episode = !film.getEpisode().isEmpty() ? Integer.parseInt(film.getEpisode()) : 0;

3
src/main/java/org/kellerkinder/Alerts/JFX2BtnCancelAlert.java

@ -1,7 +1,7 @@
/**
* Kellerkinder Framework Alerts
*
* Copyright 2018 <@Seil0>
* Copyright 2018-2019 <@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
@ -18,6 +18,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*/
package org.kellerkinder.Alerts;
import com.jfoenix.controls.JFXAlert;

3
src/main/java/org/kellerkinder/Alerts/JFXInfoAlert.java

@ -1,7 +1,7 @@
/**
* Kellerkinder Framework Alerts
*
* Copyright 2018 <@Seil0>
* Copyright 2018-2019 <@Seil0