implemented settings as nested conroller
This commit is contained in:
parent
989281ff8d
commit
9af3ad26bd
|
@ -1,3 +1,25 @@
|
|||
/**
|
||||
* 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.application;
|
||||
|
||||
import java.awt.Desktop;
|
||||
|
|
|
@ -19,55 +19,38 @@
|
|||
* MA 02110-1301, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
package kellerkinder.HomeFlix.application;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.Locale;
|
||||
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.image.Image;
|
||||
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 {
|
||||
|
||||
private Stage primaryStage;
|
||||
private Scene scene;
|
||||
private AnchorPane pane;
|
||||
private MainWindowController mainWindowController;
|
||||
private static XMLController xmlController;
|
||||
private ResourceBundle bundle;
|
||||
private static Logger LOGGER;
|
||||
public static final String version = "0.7.90";
|
||||
public static final String buildNumber = "171";
|
||||
public static final String versionName = "toothless dragon";
|
||||
|
||||
@Override
|
||||
public void start(Stage primaryStage) throws IOException {
|
||||
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;
|
||||
|
||||
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(){
|
||||
//initialize the mainWindowController and the primaryStage
|
||||
try {
|
||||
FXMLLoader loader = new FXMLLoader();
|
||||
loader.setLocation(getClass().getResource("/fxml/MainWindow.fxml"));
|
||||
|
@ -87,22 +70,8 @@ public class Main extends Application {
|
|||
|
||||
mainWindowController = loader.getController(); //Link of FXMLController and controller class
|
||||
mainWindowController.init();
|
||||
|
||||
// startup checks
|
||||
if (!XMLController.getConfigFile().exists()) {
|
||||
XMLController.getDirHomeFlix().mkdir();
|
||||
System.out.println("config not found");
|
||||
|
||||
addFirstSource();
|
||||
xmlController.saveSettings();
|
||||
}
|
||||
|
||||
if (!XMLController.getPosterCache().exists()) {
|
||||
XMLController.getPosterCache().mkdir();
|
||||
}
|
||||
|
||||
} catch (IOException e) {
|
||||
LOGGER.error(e);
|
||||
LOGGER.error("Error while loading in Main", e);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -125,70 +94,23 @@ public class Main extends Application {
|
|||
logFile.delete();
|
||||
LOGGER = LogManager.getLogger(Main.class.getName());
|
||||
|
||||
LOGGER.info("OS: " + XMLController.getOsName() + " " + XMLController.getOsVers() + " " + XMLController.getOsVers());
|
||||
LOGGER.info("Java: " + XMLController.getJavaVend() + " " + XMLController.getJavaVers());
|
||||
LOGGER.info("User: " + XMLController.getUserName() + " " + XMLController.getUserHome());
|
||||
|
||||
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
|
||||
*/
|
||||
private void addFirstSource() {
|
||||
switch (XMLController.getSysLocal()) {
|
||||
case "en_US":
|
||||
bundle = ResourceBundle.getBundle("locals.HomeFlix-Local", Locale.US); // us_english
|
||||
break;
|
||||
case "de_DE":
|
||||
bundle = ResourceBundle.getBundle("locals.HomeFlix-Local", Locale.GERMAN); // de_german
|
||||
break;
|
||||
default:
|
||||
bundle = ResourceBundle.getBundle("locals.HomeFlix-Local", Locale.US); // default local
|
||||
break;
|
||||
|
||||
if (XMLController.getConfigFile().exists()) {
|
||||
xmlController.loadSettings();
|
||||
} else {
|
||||
xmlController.saveSettings();
|
||||
}
|
||||
|
||||
if (!XMLController.getPosterCache().exists()) {
|
||||
XMLController.getPosterCache().mkdir();
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
// directory action
|
||||
EventHandler<ActionEvent> btn1Action = new EventHandler<ActionEvent>() {
|
||||
@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<ActionEvent> btn2Action = new EventHandler<ActionEvent>() {
|
||||
@Override
|
||||
public void handle(ActionEvent event) {
|
||||
FileChooser fileChooser = new FileChooser();
|
||||
fileChooser.setTitle("addStreamSource");
|
||||
File selectedFile = fileChooser.showOpenDialog(primaryStage);
|
||||
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();
|
||||
launch(args);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -41,28 +41,21 @@ import java.util.concurrent.TimeUnit;
|
|||
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.kellerkinder.Alerts.JFX2BtnCancelAlert;
|
||||
import org.kellerkinder.Alerts.JFXInfoAlert;
|
||||
|
||||
import com.eclipsesource.json.Json;
|
||||
import com.eclipsesource.json.JsonArray;
|
||||
import com.eclipsesource.json.JsonObject;
|
||||
import com.jfoenix.controls.JFXButton;
|
||||
import com.jfoenix.controls.JFXColorPicker;
|
||||
import com.jfoenix.controls.JFXHamburger;
|
||||
import com.jfoenix.controls.JFXSlider;
|
||||
import com.jfoenix.controls.JFXToggleButton;
|
||||
import com.jfoenix.transitions.hamburger.HamburgerBackArrowBasicTransition;
|
||||
|
||||
import javafx.animation.TranslateTransition;
|
||||
import javafx.collections.FXCollections;
|
||||
import javafx.collections.ObservableList;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.scene.control.ChoiceBox;
|
||||
import javafx.scene.control.Label;
|
||||
import javafx.scene.control.ScrollPane;
|
||||
import javafx.scene.control.TableColumn;
|
||||
import javafx.scene.control.TableView;
|
||||
import javafx.scene.control.TreeItem;
|
||||
import javafx.scene.effect.BoxBlur;
|
||||
import javafx.scene.control.ScrollPane.ScrollBarPolicy;
|
||||
import javafx.scene.input.MouseEvent;
|
||||
|
@ -70,8 +63,6 @@ import javafx.scene.layout.AnchorPane;
|
|||
import javafx.scene.layout.FlowPane;
|
||||
import javafx.scene.layout.HBox;
|
||||
import javafx.scene.layout.VBox;
|
||||
import javafx.scene.paint.Color;
|
||||
import javafx.scene.text.Font;
|
||||
import javafx.stage.DirectoryChooser;
|
||||
import javafx.stage.FileChooser;
|
||||
import javafx.stage.Stage;
|
||||
|
@ -82,7 +73,6 @@ import kellerkinder.HomeFlix.controller.UpdateController;
|
|||
import kellerkinder.HomeFlix.controller.XMLController;
|
||||
import kellerkinder.HomeFlix.datatypes.FilmTabelDataType;
|
||||
import kellerkinder.HomeFlix.datatypes.PosterModeElement;
|
||||
import kellerkinder.HomeFlix.datatypes.SourceDataType;
|
||||
import kellerkinder.HomeFlix.player.Player;
|
||||
|
||||
public class MainWindowController {
|
||||
|
@ -99,34 +89,7 @@ public class MainWindowController {
|
|||
@FXML private JFXButton settingsBtn;
|
||||
|
||||
// settings
|
||||
@FXML private ScrollPane settingsScrollPane;
|
||||
|
||||
@FXML private JFXButton updateBtn;
|
||||
@FXML private JFXButton addDirectoryBtn;
|
||||
@FXML private JFXButton addStreamSourceBtn;
|
||||
@FXML private JFXToggleButton autoUpdateToggleBtn;
|
||||
@FXML private JFXToggleButton autoplayToggleBtn;
|
||||
|
||||
@FXML private JFXColorPicker colorPicker;
|
||||
|
||||
@FXML private ChoiceBox<String> languageChoisBox = new ChoiceBox<>();
|
||||
@FXML private ChoiceBox<String> 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 updateLbl;
|
||||
@FXML private Label branchLbl;
|
||||
@FXML private Label sourcesLbl;
|
||||
@FXML private Label versionLbl;
|
||||
|
||||
@FXML private TableView<SourceDataType> sourcesTable;
|
||||
@FXML private TreeItem<SourceDataType> sourceRoot = new TreeItem<>(new SourceDataType("", ""));
|
||||
@FXML private TableColumn<SourceDataType, String> sourceColumn;
|
||||
@FXML private TableColumn<SourceDataType, String> modeColumn;
|
||||
@FXML private SettingsView settingsViewController;
|
||||
|
||||
// poster-mode
|
||||
@FXML private ScrollPane posterModeScrollPane;
|
||||
|
@ -144,18 +107,11 @@ public class MainWindowController {
|
|||
|
||||
private boolean menuTrue = false;
|
||||
|
||||
private final String version = "0.7.90";
|
||||
private final String buildNumber = "171";
|
||||
private final String versionName = "toothless dragon";
|
||||
private String btnStyle;
|
||||
|
||||
private FilmTabelDataType currentTableFilm = new FilmTabelDataType("", "", "", "", false, null);
|
||||
|
||||
private ObservableList<String> languages = FXCollections.observableArrayList("English (en_US)", "Deutsch (de_DE)");
|
||||
private ObservableList<String> branches = FXCollections.observableArrayList("stable", "beta");
|
||||
private ObservableList<FilmTabelDataType> filmsList = FXCollections.observableArrayList();
|
||||
private ObservableList<PosterModeElement> posterEmenents = FXCollections.observableArrayList();
|
||||
private static ObservableList<SourceDataType> sourcesList = FXCollections.observableArrayList();
|
||||
private LocalDate lastValidCache = LocalDate.now().minusDays(30); // current date - 30 days is the last valid cache date
|
||||
|
||||
public MainWindowController() {
|
||||
|
@ -171,66 +127,36 @@ public class MainWindowController {
|
|||
return instance;
|
||||
}
|
||||
|
||||
@FXML
|
||||
public void initialize() {
|
||||
instance = this;
|
||||
xmlController = new XMLController();
|
||||
dbController = DBController.getInstance();
|
||||
|
||||
if (!new File(XMLController.getDirHomeFlix() + "/sources.json").exists()) {
|
||||
XMLController.getDirHomeFlix().mkdir();
|
||||
LOGGER.warn("sources file not found");
|
||||
|
||||
addFirstSource();
|
||||
xmlController.saveSettings();
|
||||
}
|
||||
}
|
||||
|
||||
public void init() {
|
||||
LOGGER.info("Initializing Project-HomeFlix build " + buildNumber);
|
||||
|
||||
xmlController.loadSettings(); // load settings
|
||||
checkAutoUpdate();
|
||||
LOGGER.info("Initializing Project-HomeFlix build " + Main.buildNumber);
|
||||
|
||||
// initialize the GUI and the DBController
|
||||
primaryStage = (Stage) mainAnchorPane.getScene().getWindow(); // set primary stage for dialogs
|
||||
initTabel();
|
||||
initUI();
|
||||
posterModeScrollPane.setVbarPolicy(ScrollBarPolicy.ALWAYS);
|
||||
setLocalUI();
|
||||
applyColor(); // TODO only on first start
|
||||
|
||||
initActions();
|
||||
dbController.init();
|
||||
|
||||
// load data list in gui
|
||||
addSourceToTable();
|
||||
posterModeStartup();
|
||||
}
|
||||
|
||||
// Initialize general UI elements
|
||||
private void initUI() {
|
||||
//JFXScrollPane.smoothScrolling(posterModeScrollPane);
|
||||
posterModeScrollPane.setVbarPolicy(ScrollBarPolicy.ALWAYS);
|
||||
settingsScrollPane.setVbarPolicy(ScrollBarPolicy.ALWAYS);
|
||||
|
||||
versionLbl.setText("Version: " + version + " (Build: " + buildNumber + ")");
|
||||
fontsizeSlider.setValue(XMLController.getFontSize());
|
||||
colorPicker.setValue(Color.valueOf(XMLController.getColor()));
|
||||
|
||||
updateBtn.setFont(Font.font("System", 12));
|
||||
autoUpdateToggleBtn.setSelected(XMLController.isAutoUpdate());
|
||||
autoplayToggleBtn.setSelected(XMLController.isAutoplay());
|
||||
languageChoisBox.setItems(languages);
|
||||
branchChoisBox.setItems(branches);
|
||||
|
||||
if (XMLController.isUseBeta()) {
|
||||
branchChoisBox.getSelectionModel().select(1);
|
||||
} else {
|
||||
branchChoisBox.getSelectionModel().select(0);
|
||||
}
|
||||
|
||||
setLocalUI();
|
||||
applyColor();
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize the tables (treeTableViewfilm and sourcesTable) only needed for
|
||||
* Tabel-Mode
|
||||
*/
|
||||
private void initTabel() {
|
||||
// sourcesTreeTable
|
||||
sourceColumn.setCellValueFactory(cellData -> cellData.getValue().pathProperty());
|
||||
modeColumn.setCellValueFactory(cellData -> cellData.getValue().modeProperty());
|
||||
sourcesTable.setItems(sourcesList);
|
||||
checkAutoUpdate(); // TODO async
|
||||
}
|
||||
|
||||
// Initializing the actions
|
||||
|
@ -250,37 +176,12 @@ public class MainWindowController {
|
|||
burgerTask.play();
|
||||
menuTrue = true;
|
||||
}
|
||||
if (settingsScrollPane.isVisible()) {
|
||||
settingsScrollPane.setVisible(false);
|
||||
}
|
||||
});
|
||||
|
||||
languageChoisBox.getSelectionModel().selectedIndexProperty().addListener((e, oldValue, newValue) -> {
|
||||
String local = languageChoisBox.getItems().get((int) newValue).toString();
|
||||
local = local.substring(local.length() - 6, local.length() - 1); // reading only en_US from English (en_US)
|
||||
XMLController.setUsrLocal(local);
|
||||
setLocalUI();
|
||||
xmlController.saveSettings();
|
||||
});
|
||||
|
||||
branchChoisBox.getSelectionModel().selectedIndexProperty().addListener((e, oldValue, newValue) -> {
|
||||
if (branchChoisBox.getItems().get((int) newValue).toString() == "beta") {
|
||||
XMLController.setUseBeta(true);
|
||||
} else {
|
||||
XMLController.setUseBeta(false);
|
||||
}
|
||||
xmlController.saveSettings();
|
||||
});
|
||||
|
||||
fontsizeSlider.valueProperty().addListener(e -> {
|
||||
XMLController.setFontSize(fontsizeSlider.getValue());
|
||||
|
||||
// TODO add functionality for postermode
|
||||
|
||||
xmlController.saveSettings();
|
||||
});
|
||||
|
||||
// Poster-Mode actions
|
||||
if (settingsViewController.isVisible()) {
|
||||
settingsViewController.setVisible(false);
|
||||
}
|
||||
});primaryStage.setMinHeight(600.00 + 34); // 34 -> window decoration
|
||||
primaryStage.setMinWidth(1130.00);
|
||||
}
|
||||
|
||||
// Table-Mode fxml actions
|
||||
|
@ -293,7 +194,7 @@ public class MainWindowController {
|
|||
}
|
||||
|
||||
if (isSupportedFormat(currentTableFilm)) {
|
||||
new Player(getCurrentStreamUrl());
|
||||
new Player(currentTableFilm.getStreamUrl());
|
||||
} else {
|
||||
LOGGER.error("using fallback player!");
|
||||
if (System.getProperty("os.name").contains("Linux")) {
|
||||
|
@ -317,7 +218,7 @@ public class MainWindowController {
|
|||
vlcInfoAlert.showAndWait();
|
||||
} else {
|
||||
try {
|
||||
new ProcessBuilder("vlc", getCurrentStreamUrl()).start();
|
||||
new ProcessBuilder("vlc", currentTableFilm.getStreamUrl()).start();
|
||||
} catch (IOException e) {
|
||||
LOGGER.warn("An error has occurred while opening the file!", e);
|
||||
}
|
||||
|
@ -325,7 +226,7 @@ public class MainWindowController {
|
|||
|
||||
} else if (System.getProperty("os.name").contains("Windows") || System.getProperty("os.name").contains("Mac OS X")) {
|
||||
try {
|
||||
Desktop.getDesktop().open(new File(getCurrentStreamUrl()));
|
||||
Desktop.getDesktop().open(new File(currentTableFilm.getStreamUrl()));
|
||||
} catch (IOException e) {
|
||||
LOGGER.warn("An error has occurred while opening the file!", e);
|
||||
}
|
||||
|
@ -335,119 +236,78 @@ public class MainWindowController {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
@FXML
|
||||
private void openfolderbtnclicked() {
|
||||
File dest = new File(getCurrentStreamUrl()).getParentFile();
|
||||
|
||||
if (!System.getProperty("os.name").contains("Linux")) {
|
||||
try {
|
||||
Desktop.getDesktop().open(dest);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// general fxml actions
|
||||
@FXML
|
||||
private void aboutBtnAction() {
|
||||
String bodyText = "Project HomeFlix \nVersion: " + version + " (Build: " + buildNumber + ") \"" + versionName
|
||||
+ "\" \n" + XMLController.getLocalBundle().getString("infoText");
|
||||
String bodyText = "Project HomeFlix \nVersion: " + Main.version + " (Build: " + Main.buildNumber + ") \""
|
||||
+ Main.versionName + "\" \n" + XMLController.getLocalBundle().getString("infoText");
|
||||
JFXInfoAlert infoAlert = new JFXInfoAlert("Project HomeFlix", bodyText, btnStyle, primaryStage);
|
||||
infoAlert.showAndWait();
|
||||
}
|
||||
|
||||
@FXML
|
||||
private void settingsBtnclicked() {
|
||||
settingsScrollPane.setVisible(!settingsScrollPane.isVisible());
|
||||
settingsViewController.setVisible(!settingsViewController.isVisible());
|
||||
}
|
||||
|
||||
@FXML
|
||||
private void addDirectoryBtnAction() {
|
||||
DirectoryChooser directoryChooser = new DirectoryChooser();
|
||||
directoryChooser.setTitle(XMLController.getLocalBundle().getString("addDirectory"));
|
||||
File selectedFolder = directoryChooser.showDialog(primaryStage);
|
||||
if (selectedFolder != null && selectedFolder.exists()) {
|
||||
addSource(selectedFolder.getPath(), "local");
|
||||
} else {
|
||||
LOGGER.error("The selected folder dosen't exist!");
|
||||
}
|
||||
}
|
||||
|
||||
@FXML
|
||||
private void addStreamSourceBtnAction() {
|
||||
FileChooser fileChooser = new FileChooser();
|
||||
fileChooser.setTitle(XMLController.getLocalBundle().getString("addStreamSource"));
|
||||
File selectedFile = fileChooser.showOpenDialog(primaryStage);
|
||||
if (selectedFile != null && selectedFile.exists()) {
|
||||
addSource(selectedFile.getPath(), "stream");
|
||||
} else {
|
||||
LOGGER.error("The selected file dosen't exist!");
|
||||
}
|
||||
}
|
||||
|
||||
@FXML
|
||||
private void colorPickerAction() {
|
||||
XMLController.setColor(colorPicker.getValue().toString().substring(2, 10));
|
||||
xmlController.saveSettings();
|
||||
applyColor();
|
||||
}
|
||||
|
||||
@FXML
|
||||
private void updateBtnAction() {
|
||||
updateController = new UpdateController(this, buildNumber, XMLController.isUseBeta());
|
||||
Thread updateThread = new Thread(updateController);
|
||||
updateThread.setName("Updater");
|
||||
updateThread.start();
|
||||
}
|
||||
|
||||
@FXML
|
||||
private void autoUpdateToggleBtnAction() {
|
||||
XMLController.setAutoUpdate(!XMLController.isAutoUpdate());
|
||||
xmlController.saveSettings();
|
||||
}
|
||||
|
||||
@FXML
|
||||
private void autoplayToggleBtnAction() {
|
||||
XMLController.setAutoplay(!XMLController.isAutoplay());
|
||||
xmlController.saveSettings();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* refresh all films in filmsList and in filmsTable clear the FilmsList and
|
||||
* FilmRoot children, then update the database
|
||||
* 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 refreshAllFilms() {
|
||||
filmsList.clear();
|
||||
dbController.refreshDataBase(); // refreshes the database after a source path was added
|
||||
filmsList = dbController.getStreamsList(); // returns a list of all films stored in the database
|
||||
}
|
||||
private void addFirstSource() {
|
||||
JFX2BtnCancelAlert selectFirstSource = new JFX2BtnCancelAlert(
|
||||
XMLController.getLocalBundle().getString("addSourceHeader"),
|
||||
XMLController.getLocalBundle().getString("addSourceBody"),
|
||||
"-fx-button-type: RAISED; -fx-background-color: #ee3523; -fx-text-fill: BLACK;",
|
||||
XMLController.getLocalBundle().getString("addDirectory"),
|
||||
XMLController.getLocalBundle().getString("addStreamSource"),
|
||||
XMLController.getLocalBundle().getString("cancelBtnText"), primaryStage);
|
||||
|
||||
// add a all elements of sourcesList to the sources table on the settings pane
|
||||
public void addSourceToTable() {
|
||||
for (SourceDataType source : sourcesList) {
|
||||
sourceRoot.getChildren().add(new TreeItem<SourceDataType>(source)); // add data to root-node
|
||||
}
|
||||
// directory action
|
||||
selectFirstSource.setBtn1Action(e -> {
|
||||
DirectoryChooser directoryChooser = new DirectoryChooser();
|
||||
directoryChooser.setTitle(XMLController.getLocalBundle().getString("addDirectory"));
|
||||
File selectedFolder = directoryChooser.showDialog(primaryStage);
|
||||
if (selectedFolder != null && selectedFolder.exists()) {
|
||||
selectFirstSource.getAlert().close();
|
||||
writeSource(selectedFolder.getPath(), "local");
|
||||
} else {
|
||||
LOGGER.error("The selected folder dosen't exist!");
|
||||
System.exit(1);
|
||||
}
|
||||
});
|
||||
|
||||
// streaming action
|
||||
selectFirstSource.setBtn2Action(e -> {
|
||||
FileChooser fileChooser = new FileChooser();
|
||||
fileChooser.setTitle(XMLController.getLocalBundle().getString("addStreamSource"));
|
||||
File selectedFile = fileChooser.showOpenDialog(primaryStage);
|
||||
if (selectedFile != null && selectedFile.exists()) {
|
||||
selectFirstSource.getAlert().close();
|
||||
writeSource(selectedFile.getPath(), "stream");
|
||||
} else {
|
||||
LOGGER.error("The selected file dosen't exist!");
|
||||
System.exit(1);
|
||||
}
|
||||
});
|
||||
|
||||
selectFirstSource.showAndWait();
|
||||
}
|
||||
|
||||
/**
|
||||
* add a source to the newsources list
|
||||
* add a source to the sources file
|
||||
*
|
||||
* @param path to the source
|
||||
* @param mode of the source (local or streaming)
|
||||
*/
|
||||
public void addSource(String path, String mode) {
|
||||
void writeSource(String path, String mode) {
|
||||
JsonArray newsources = null;
|
||||
|
||||
|
||||
try {
|
||||
// read old array
|
||||
File oldSources = new File(XMLController.getDirHomeFlix() + "/sources.json");
|
||||
if (oldSources.exists()) {
|
||||
newsources = Json.parse(new FileReader(XMLController.getDirHomeFlix() + "/sources.json")).asArray();
|
||||
} else {
|
||||
newsources = Json.array();
|
||||
}
|
||||
newsources = oldSources.exists() ? Json.parse(new FileReader(XMLController.getDirHomeFlix() + "/sources.json")).asArray() : Json.array();
|
||||
|
||||
// add new source
|
||||
JsonObject source = Json.object().add("path", path).add("mode", mode);
|
||||
|
@ -456,37 +316,28 @@ public class MainWindowController {
|
|||
newsources.writeTo(writer);
|
||||
writer.close();
|
||||
} catch (IOException e) {
|
||||
LOGGER.error(e);
|
||||
LOGGER.error("Error while writing sources file!", e);
|
||||
}
|
||||
|
||||
// clear old sources list/table
|
||||
getSourcesList().clear();
|
||||
sourceRoot.getChildren().clear();
|
||||
|
||||
refreshAllFilms(); // refresh the FilmsList
|
||||
checkAllPosters(); // check if there is anything to cache
|
||||
}
|
||||
|
||||
/**
|
||||
* set the color of the GUI-Elements if usedColor is less than checkColor set
|
||||
* text fill white, else black
|
||||
*/
|
||||
private void applyColor() {
|
||||
void applyColor() {
|
||||
String menuBtnStyle;
|
||||
BigInteger usedColor = new BigInteger(XMLController.getColor(), 16);
|
||||
BigInteger checkColor = new BigInteger("78909cff", 16);
|
||||
|
||||
menuHam.getStyleClass().clear();
|
||||
|
||||
if (usedColor.compareTo(checkColor) == -1) {
|
||||
btnStyle = "-fx-button-type: RAISED; -fx-background-color: #" + XMLController.getColor() + "; -fx-text-fill: WHITE;";
|
||||
menuBtnStyle = "-fx-text-fill: WHITE;";
|
||||
|
||||
menuHam.getStyleClass().clear();
|
||||
menuHam.getStyleClass().add("jfx-hamburgerW");
|
||||
} else {
|
||||
btnStyle = "-fx-button-type: RAISED; -fx-background-color: #" + XMLController.getColor() + "; -fx-text-fill: BLACK;";
|
||||
menuBtnStyle = "-fx-text-fill: BLACK;";
|
||||
|
||||
menuHam.getStyleClass().clear();
|
||||
menuHam.getStyleClass().add("jfx-hamburgerB");
|
||||
}
|
||||
|
||||
|
@ -494,14 +345,11 @@ public class MainWindowController {
|
|||
sideMenuVBox.setStyle("-fx-background-color: #" + XMLController.getColor() + ";");
|
||||
topHBox.setStyle("-fx-background-color: #" + XMLController.getColor() + ";");
|
||||
|
||||
// normal buttons
|
||||
addDirectoryBtn.setStyle(btnStyle);
|
||||
addStreamSourceBtn.setStyle(btnStyle);
|
||||
updateBtn.setStyle(btnStyle);
|
||||
|
||||
// menu buttons
|
||||
settingsBtn.setStyle(menuBtnStyle);
|
||||
aboutBtn.setStyle(menuBtnStyle);
|
||||
|
||||
settingsViewController.updateColor(btnStyle);
|
||||
}
|
||||
|
||||
// slide in in 400ms
|
||||
|
@ -524,37 +372,26 @@ public class MainWindowController {
|
|||
/**
|
||||
* set the local based on the languageChoisBox selection
|
||||
*/
|
||||
private void setLocalUI() {
|
||||
void setLocalUI() {
|
||||
// TODO switch expressions
|
||||
switch (XMLController.getUsrLocal()) {
|
||||
case "en_US":
|
||||
XMLController.setLocalBundle(ResourceBundle.getBundle("locals.HomeFlix-Local", Locale.US)); // us_English
|
||||
languageChoisBox.getSelectionModel().select(0);
|
||||
break;
|
||||
case "de_DE":
|
||||
XMLController.setLocalBundle(ResourceBundle.getBundle("locals.HomeFlix-Local", Locale.GERMAN)); // German
|
||||
languageChoisBox.getSelectionModel().select(1);
|
||||
break;
|
||||
default:
|
||||
XMLController.setLocalBundle(ResourceBundle.getBundle("locals.HomeFlix-Local", Locale.US)); // default local
|
||||
languageChoisBox.getSelectionModel().select(0);
|
||||
break;
|
||||
}
|
||||
|
||||
settingsViewController.updateGUILocal();
|
||||
filmDetailViewController.updateGUILocal();
|
||||
seriesDetailViewController.updateGUILocal();
|
||||
|
||||
aboutBtn.setText(XMLController.getLocalBundle().getString("info"));
|
||||
settingsBtn.setText(XMLController.getLocalBundle().getString("settings"));
|
||||
updateBtn.setText(XMLController.getLocalBundle().getString("checkUpdates"));
|
||||
addDirectoryBtn.setText(XMLController.getLocalBundle().getString("addDirectory"));
|
||||
addStreamSourceBtn.setText(XMLController.getLocalBundle().getString("addStreamSource"));
|
||||
homeflixSettingsLbl.setText(XMLController.getLocalBundle().getString("homeflixSettingsLbl"));
|
||||
mainColorLbl.setText(XMLController.getLocalBundle().getString("mainColorLbl"));
|
||||
fontsizeLbl.setText(XMLController.getLocalBundle().getString("fontsizeLbl"));
|
||||
languageLbl.setText(XMLController.getLocalBundle().getString("languageLbl"));
|
||||
autoUpdateToggleBtn.setText(XMLController.getLocalBundle().getString("autoUpdate"));
|
||||
autoplayToggleBtn.setText(XMLController.getLocalBundle().getString("autoplay"));
|
||||
branchLbl.setText(XMLController.getLocalBundle().getString("branchLbl"));
|
||||
}
|
||||
|
||||
// if AutoUpdate, then check for updates
|
||||
|
@ -563,7 +400,7 @@ public class MainWindowController {
|
|||
if (XMLController.isAutoUpdate()) {
|
||||
try {
|
||||
LOGGER.info("AutoUpdate: looking for updates on startup ...");
|
||||
updateController = new UpdateController(this, buildNumber, XMLController.isUseBeta());
|
||||
updateController = new UpdateController(settingsViewController); // TODO this is will crash
|
||||
Thread updateThread = new Thread(updateController);
|
||||
updateThread.setName("Updater");
|
||||
updateThread.start();
|
||||
|
@ -599,7 +436,7 @@ public class MainWindowController {
|
|||
/**
|
||||
* check if all posters are cached, if not cache the missing ones
|
||||
*/
|
||||
private void checkAllPosters() {
|
||||
void checkAllPosters() {
|
||||
// get all not cached entries, none of them should have a cached poster
|
||||
ExecutorService executor = Executors.newFixedThreadPool(5);
|
||||
|
||||
|
@ -621,14 +458,14 @@ public class MainWindowController {
|
|||
}
|
||||
|
||||
// update all elements from the database
|
||||
refreshAllFilms();
|
||||
dbController.refreshDataBase(); // refreshes the database after a source path was added
|
||||
System.out.println("finished refresh");
|
||||
}
|
||||
|
||||
/**
|
||||
* add all cached films/series to the PosterMode GUI
|
||||
*/
|
||||
private void addAllPosters() {
|
||||
void addAllPosters() {
|
||||
// refresh the posterModeElements list
|
||||
posterEmenents.clear();
|
||||
posterEmenents = dbController.getPosterElementsList(); // returns a list of all PosterElements stored in the database
|
||||
|
@ -637,7 +474,6 @@ public class MainWindowController {
|
|||
for (PosterModeElement element : posterEmenents) {
|
||||
element.getButton().addEventHandler(MouseEvent.MOUSE_CLICKED, (event) -> {
|
||||
enableBlur(); // blur the FlowPane
|
||||
System.out.println("selected: " + element.getStreamURL());
|
||||
|
||||
// if the selected element is a file it's a film, else a series
|
||||
if (new File(element.getStreamURL()).isFile() || element.getStreamURL().contains("http")) {
|
||||
|
@ -656,15 +492,14 @@ public class MainWindowController {
|
|||
System.out.println("added gui elements");
|
||||
}
|
||||
|
||||
// TODO can this be done in dbController?
|
||||
// TODO can this be done in dbController? with dbController.refreshDataBase();
|
||||
/**
|
||||
* check if the cache is to old, if so update asynchron
|
||||
*/
|
||||
private void checkCache() {
|
||||
ExecutorService executor = Executors.newFixedThreadPool(5);
|
||||
|
||||
// TODO if filmlist is not used anymore, it cann be removed
|
||||
for(FilmTabelDataType entry : filmsList) {
|
||||
for(FilmTabelDataType entry : dbController.getStreamsList()) {
|
||||
if (dbController.getCacheDate(entry.getStreamUrl()).isBefore(lastValidCache)) {
|
||||
System.out.println(entry.getTitle() + " chached on: " + dbController.getCacheDate(entry.getStreamUrl()));
|
||||
Runnable OMDbAPIWorker = new OMDbAPIController(entry, XMLController.getOmdbAPIKey());
|
||||
|
@ -686,26 +521,4 @@ public class MainWindowController {
|
|||
public void disableBlur() {
|
||||
posterModeFlowPane.setEffect(null);
|
||||
}
|
||||
|
||||
// getter and setter
|
||||
|
||||
public FilmTabelDataType getCurrentTableFilm() {
|
||||
return currentTableFilm;
|
||||
}
|
||||
|
||||
public String getCurrentTitle() {
|
||||
return currentTableFilm.getTitle();
|
||||
}
|
||||
|
||||
public String getCurrentStreamUrl() {
|
||||
return currentTableFilm.getStreamUrl();
|
||||
}
|
||||
|
||||
public static ObservableList<SourceDataType> getSourcesList() {
|
||||
return sourcesList;
|
||||
}
|
||||
|
||||
public JFXButton getUpdateBtn() {
|
||||
return updateBtn;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,3 +1,25 @@
|
|||
/**
|
||||
* 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.application;
|
||||
|
||||
import java.awt.Desktop;
|
||||
|
|
|
@ -1,10 +1,47 @@
|
|||
/**
|
||||
* 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.application;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileReader;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.io.Writer;
|
||||
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
import com.eclipsesource.json.Json;
|
||||
import com.eclipsesource.json.JsonArray;
|
||||
import com.eclipsesource.json.JsonObject;
|
||||
import com.eclipsesource.json.JsonValue;
|
||||
import com.jfoenix.controls.JFXButton;
|
||||
import com.jfoenix.controls.JFXColorPicker;
|
||||
import com.jfoenix.controls.JFXSlider;
|
||||
import com.jfoenix.controls.JFXToggleButton;
|
||||
|
||||
import javafx.collections.FXCollections;
|
||||
import javafx.collections.ObservableList;
|
||||
import javafx.event.ActionEvent;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.scene.control.ChoiceBox;
|
||||
|
@ -12,7 +49,14 @@ import javafx.scene.control.Label;
|
|||
import javafx.scene.control.ScrollPane;
|
||||
import javafx.scene.control.TableColumn;
|
||||
import javafx.scene.control.TableView;
|
||||
import javafx.scene.control.ScrollPane.ScrollBarPolicy;
|
||||
import javafx.scene.layout.AnchorPane;
|
||||
import javafx.scene.paint.Color;
|
||||
import javafx.stage.DirectoryChooser;
|
||||
import javafx.stage.FileChooser;
|
||||
import kellerkinder.HomeFlix.controller.DBController;
|
||||
import kellerkinder.HomeFlix.controller.UpdateController;
|
||||
import kellerkinder.HomeFlix.controller.XMLController;
|
||||
import kellerkinder.HomeFlix.datatypes.SourceDataType;
|
||||
|
||||
public class SettingsView {
|
||||
|
@ -47,37 +91,209 @@ public class SettingsView {
|
|||
@FXML private TableColumn<SourceDataType, String> sourceColumn;
|
||||
@FXML private TableColumn<SourceDataType, String> modeColumn;
|
||||
|
||||
private XMLController xmlController;
|
||||
private static final Logger LOGGER = LogManager.getLogger(FilmDetailView.class.getName());
|
||||
private ObservableList<String> languages = FXCollections.observableArrayList("English (en_US)", "Deutsch (de_DE)");
|
||||
private ObservableList<String> branches = FXCollections.observableArrayList("stable", "beta");
|
||||
private static ObservableList<SourceDataType> sourcesList = FXCollections.observableArrayList();
|
||||
|
||||
public void initialize() {
|
||||
System.out.println("geht");
|
||||
xmlController = new XMLController();
|
||||
|
||||
// initialize the GUI elements
|
||||
settingsScrollPane.setVbarPolicy(ScrollBarPolicy.ALWAYS);
|
||||
versionLbl.setText("Version: " + Main.version + " (Build: " + Main.buildNumber + ")");
|
||||
fontsizeSlider.setValue(XMLController.getFontSize());
|
||||
colorPicker.setValue(Color.valueOf(XMLController.getColor()));
|
||||
|
||||
autoUpdateToggleBtn.setSelected(XMLController.isAutoUpdate());
|
||||
autoplayToggleBtn.setSelected(XMLController.isAutoplay());
|
||||
languageChoisBox.setItems(languages);
|
||||
branchChoisBox.setItems(branches);
|
||||
|
||||
branchChoisBox.getSelectionModel().select(XMLController.isUseBeta() ? 1 : 0);
|
||||
// TODO switch expressions
|
||||
switch (XMLController.getUsrLocal()) {
|
||||
case "en_US":
|
||||
languageChoisBox.getSelectionModel().select(0);
|
||||
break;
|
||||
case "de_DE":
|
||||
languageChoisBox.getSelectionModel().select(1);
|
||||
break;
|
||||
default:
|
||||
languageChoisBox.getSelectionModel().select(0);
|
||||
break;
|
||||
}
|
||||
|
||||
// initialize the sources table
|
||||
sourceColumn.setCellValueFactory(cellData -> cellData.getValue().pathProperty());
|
||||
modeColumn.setCellValueFactory(cellData -> cellData.getValue().modeProperty());
|
||||
sourcesTable.setItems(sourcesList);
|
||||
|
||||
initActions();
|
||||
loadInitSources();
|
||||
}
|
||||
|
||||
@FXML void addDirectoryBtnAction(ActionEvent event) {
|
||||
private void initActions() {
|
||||
languageChoisBox.getSelectionModel().selectedIndexProperty().addListener((e, oldValue, newValue) -> {
|
||||
String local = languageChoisBox.getItems().get((int) newValue).toString();
|
||||
local = local.substring(local.length() - 6, local.length() - 1); // reading only en_US from English (en_US)
|
||||
|
||||
XMLController.setUsrLocal(local);
|
||||
xmlController.saveSettings();
|
||||
MainWindowController.getInstance().setLocalUI();
|
||||
});
|
||||
|
||||
branchChoisBox.getSelectionModel().selectedIndexProperty().addListener((e, oldValue, newValue) -> {
|
||||
if (branchChoisBox.getItems().get((int) newValue).toString() == "beta") {
|
||||
XMLController.setUseBeta(true);
|
||||
} else {
|
||||
XMLController.setUseBeta(false);
|
||||
}
|
||||
xmlController.saveSettings();
|
||||
});
|
||||
|
||||
fontsizeSlider.valueProperty().addListener(e -> {
|
||||
XMLController.setFontSize(fontsizeSlider.getValue());
|
||||
xmlController.saveSettings();
|
||||
|
||||
// TODO add functionality for postermode
|
||||
});
|
||||
}
|
||||
|
||||
@FXML
|
||||
private void addDirectoryBtnAction(ActionEvent event) {
|
||||
DirectoryChooser directoryChooser = new DirectoryChooser();
|
||||
directoryChooser.setTitle(XMLController.getLocalBundle().getString("addDirectory"));
|
||||
File selectedFolder = directoryChooser.showDialog(settingsScrollPane.getScene().getWindow());
|
||||
if (selectedFolder != null && selectedFolder.exists()) {
|
||||
addSource(selectedFolder.getPath(), "local");
|
||||
} else {
|
||||
LOGGER.error("The selected folder dosen't exist!");
|
||||
}
|
||||
}
|
||||
|
||||
@FXML
|
||||
void addStreamSourceBtnAction(ActionEvent event) {
|
||||
|
||||
private void addStreamSourceBtnAction(ActionEvent event) {
|
||||
FileChooser fileChooser = new FileChooser();
|
||||
fileChooser.setTitle(XMLController.getLocalBundle().getString("addStreamSource"));
|
||||
File selectedFile = fileChooser.showOpenDialog(settingsScrollPane.getScene().getWindow());
|
||||
if (selectedFile != null && selectedFile.exists()) {
|
||||
addSource(selectedFile.getPath(), "stream");
|
||||
} else {
|
||||
LOGGER.error("The selected file dosen't exist!");
|
||||
}
|
||||
}
|
||||
|
||||
@FXML
|
||||
void autoUpdateToggleBtnAction(ActionEvent event) {
|
||||
|
||||
private void autoUpdateToggleBtnAction(ActionEvent event) {
|
||||
XMLController.setAutoUpdate(!XMLController.isAutoUpdate());
|
||||
xmlController.saveSettings();
|
||||
}
|
||||
|
||||
@FXML
|
||||
void autoplayToggleBtnAction(ActionEvent event) {
|
||||
|
||||
private void autoplayToggleBtnAction(ActionEvent event) {
|
||||
XMLController.setAutoplay(!XMLController.isAutoplay());
|
||||
xmlController.saveSettings();
|
||||
}
|
||||
|
||||
@FXML
|
||||
void colorPickerAction(ActionEvent event) {
|
||||
|
||||
private void colorPickerAction(ActionEvent event) {
|
||||
XMLController.setColor(colorPicker.getValue().toString().substring(2, 10));
|
||||
xmlController.saveSettings();
|
||||
MainWindowController.getInstance().applyColor();
|
||||
}
|
||||
|
||||
@FXML
|
||||
void updateBtnAction(ActionEvent event) {
|
||||
private void updateBtnAction(ActionEvent event) {
|
||||
Thread updateThread = new Thread(new UpdateController(this));
|
||||
updateThread.setName("Updater");
|
||||
updateThread.start();
|
||||
}
|
||||
|
||||
/** TODO can this be done async?
|
||||
* add a source to the sources file and load all new streams
|
||||
* @param path to the source
|
||||
* @param mode of the source (local or streaming)
|
||||
*/
|
||||
void addSource(String path, String mode) {
|
||||
JsonArray newsources = null;
|
||||
|
||||
try {settingsScrollPane.setVbarPolicy(ScrollBarPolicy.ALWAYS);
|
||||
// read old array
|
||||
File oldSources = new File(XMLController.getDirHomeFlix() + "/sources.json");
|
||||
newsources = oldSources.exists() ? Json.parse(new FileReader(XMLController.getDirHomeFlix() + "/sources.json")).asArray() : Json.array();
|
||||
|
||||
// add new source
|
||||
JsonObject source = Json.object().add("path", path).add("mode", mode);
|
||||
newsources.add(source);
|
||||
Writer writer = new FileWriter(XMLController.getDirHomeFlix() + "/sources.json");
|
||||
newsources.writeTo(writer);
|
||||
writer.close();
|
||||
} catch (IOException e) {
|
||||
LOGGER.error(e);
|
||||
}
|
||||
|
||||
// update the sourcesTable
|
||||
sourcesList.add(new SourceDataType(path, mode));
|
||||
|
||||
DBController.getInstance().refreshDataBase(); // refreshes the database after a source path was added
|
||||
MainWindowController.getInstance().checkAllPosters(); // check if there is anything new to cache
|
||||
MainWindowController.getInstance().addAllPosters();
|
||||
}
|
||||
|
||||
// add a all elements of sourcesList to the sources table on the settings pane
|
||||
private void loadInitSources() {
|
||||
try {
|
||||
// create a JsonArray, containing all sources, add each source to the mwc, get all films from it
|
||||
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", "");
|
||||
sourcesList.add(new SourceDataType(path, mode));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public void updateColor(String btnStyle) {
|
||||
updateBtn.setStyle(btnStyle);
|
||||
addDirectoryBtn.setStyle(btnStyle);
|
||||
addStreamSourceBtn.setStyle(btnStyle);
|
||||
|
||||
autoUpdateToggleBtn.setToggleColor(Color.valueOf(XMLController.getColor()));
|
||||
autoUpdateToggleBtn.setToggleLineColor(Color.valueOf(XMLController.getColor()));
|
||||
autoplayToggleBtn.setToggleColor(Color.valueOf(XMLController.getColor()));
|
||||
autoplayToggleBtn.setToggleLineColor(Color.valueOf(XMLController.getColor()));
|
||||
}
|
||||
|
||||
public void updateGUILocal() {
|
||||
homeflixSettingsLbl.setText(XMLController.getLocalBundle().getString("homeflixSettingsLbl"));
|
||||
mainColorLbl.setText(XMLController.getLocalBundle().getString("mainColorLbl"));
|
||||
fontsizeLbl.setText(XMLController.getLocalBundle().getString("fontsizeLbl"));
|
||||
languageLbl.setText(XMLController.getLocalBundle().getString("languageLbl"));
|
||||
branchLbl.setText(XMLController.getLocalBundle().getString("branchLbl"));
|
||||
sourcesLbl.setText(XMLController.getLocalBundle().getString("sourcesLbl"));
|
||||
|
||||
updateBtn.setText(XMLController.getLocalBundle().getString("checkUpdates"));
|
||||
addDirectoryBtn.setText(XMLController.getLocalBundle().getString("addDirectory"));
|
||||
addStreamSourceBtn.setText(XMLController.getLocalBundle().getString("addStreamSource"));
|
||||
|
||||
autoUpdateToggleBtn.setText(XMLController.getLocalBundle().getString("autoUpdate"));
|
||||
autoplayToggleBtn.setText(XMLController.getLocalBundle().getString("autoplay"));
|
||||
}
|
||||
|
||||
public void setVisible(boolean visible) {
|
||||
settingsScrollPane.setVisible(visible);
|
||||
}
|
||||
|
||||
public boolean isVisible() {
|
||||
return settingsScrollPane.isVisible();
|
||||
}
|
||||
|
||||
public JFXButton getUpdateBtn() {
|
||||
return updateBtn;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -52,8 +52,8 @@ public class DBController {
|
|||
|
||||
private static DBController instance = null;
|
||||
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");
|
||||
private Image favorite_black = new Image("icons/baseline_favorite_black_48dp.png"); // TODO this should be removed
|
||||
private Image favorite_border_black = new Image("icons/baseline_favorite_border_black_48dp.png"); // TODO this too
|
||||
private List<DatabaseDataType> databaseStreams = new ArrayList<DatabaseDataType>(); // contains all films stored in the database
|
||||
private List<DatabaseDataType> sourceStreams = new ArrayList<DatabaseDataType>(); // contains all films from the sources
|
||||
private Connection connection = null;
|
||||
|
|
|
@ -37,9 +37,7 @@ import com.eclipsesource.json.JsonArray;
|
|||
import com.eclipsesource.json.JsonObject;
|
||||
import com.eclipsesource.json.JsonValue;
|
||||
|
||||
import kellerkinder.HomeFlix.application.MainWindowController;
|
||||
import kellerkinder.HomeFlix.datatypes.DatabaseDataType;
|
||||
import kellerkinder.HomeFlix.datatypes.SourceDataType;
|
||||
|
||||
public class SourcesController {
|
||||
|
||||
|
@ -61,7 +59,6 @@ public class SourcesController {
|
|||
for (JsonValue source : sources) {
|
||||
String path = source.asObject().getString("path", "");
|
||||
String mode = source.asObject().getString("mode", "");
|
||||
MainWindowController.getSourcesList().add(new SourceDataType(path, mode)); // TODO
|
||||
|
||||
if (mode.equals("local"))
|
||||
addLocalSource(path);
|
||||
|
|
|
@ -41,12 +41,12 @@ import com.eclipsesource.json.JsonObject;
|
|||
import com.eclipsesource.json.JsonValue;
|
||||
|
||||
import javafx.application.Platform;
|
||||
import kellerkinder.HomeFlix.application.MainWindowController;
|
||||
import kellerkinder.HomeFlix.application.Main;
|
||||
import kellerkinder.HomeFlix.application.SettingsView;
|
||||
|
||||
public class UpdateController implements Runnable {
|
||||
|
||||
private MainWindowController mainWindowController;
|
||||
private int buildNumber;
|
||||
private SettingsView settingsViewController;
|
||||
private int updateBuildNumber; // tag_name from gitea
|
||||
private String apiOutput;
|
||||
@SuppressWarnings("unused")
|
||||
|
@ -57,7 +57,6 @@ public class UpdateController implements Runnable {
|
|||
private String giteaApiRelease = "https://git.mosad.xyz/api/v1/repos/Seil0/Project-HomeFlix/releases";
|
||||
private URL giteaApiUrl;
|
||||
|
||||
private boolean useBeta;
|
||||
private static final Logger LOGGER = LogManager.getLogger(UpdateController.class.getName());
|
||||
|
||||
/**
|
||||
|
@ -66,17 +65,15 @@ public class UpdateController implements Runnable {
|
|||
* @param buildNumber the buildNumber of the used HomeFlix version
|
||||
* @param useBeta if the updater should query the beta channel
|
||||
*/
|
||||
public UpdateController(MainWindowController mwc, String buildNumber, boolean useBeta) {
|
||||
mainWindowController = mwc;
|
||||
this.buildNumber = Integer.parseInt(buildNumber);
|
||||
this.useBeta = useBeta;
|
||||
public UpdateController(SettingsView svc) {
|
||||
settingsViewController = svc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
LOGGER.info("beta:" + useBeta + "; checking for updates ...");
|
||||
LOGGER.info("beta:" + XMLController.isUseBeta() + "; checking for updates ...");
|
||||
Platform.runLater(() -> {
|
||||
mainWindowController.getUpdateBtn().setText(XMLController.getLocalBundle().getString("updateBtnChecking"));
|
||||
settingsViewController.getUpdateBtn().setText(XMLController.getLocalBundle().getString("updateBtnChecking"));
|
||||
});
|
||||
|
||||
try {
|
||||
|
@ -96,7 +93,7 @@ public class UpdateController implements Runnable {
|
|||
JsonObject objectAsset = object.asObject().get("assets").asArray().get(0).asObject();
|
||||
|
||||
for(JsonValue objectIt : objectArray) {
|
||||
if(objectIt.asObject().getBoolean("prerelease", false) == useBeta) {
|
||||
if(objectIt.asObject().getBoolean("prerelease", false) == XMLController.isUseBeta()) {
|
||||
// we found the needed release either beta or not
|
||||
object = objectIt;
|
||||
objectAsset = objectIt.asObject().get("assets").asArray().get(0).asObject();
|
||||
|
@ -108,20 +105,20 @@ public class UpdateController implements Runnable {
|
|||
updateName = object.asObject().getString("name", "");
|
||||
updateChanges = object.asObject().getString("body", "");
|
||||
|
||||
LOGGER.info("Build: " + buildNumber + ", Update: " + updateBuildNumber);
|
||||
LOGGER.info("Build: " + Main.buildNumber + ", Update: " + updateBuildNumber);
|
||||
|
||||
/**
|
||||
* Compare the program BuildNumber with the current BuildNumber
|
||||
* if buildNumber < updateBuildNumber then perform a update
|
||||
*/
|
||||
if (buildNumber >= updateBuildNumber) {
|
||||
if (Integer.parseInt(Main.buildNumber) >= updateBuildNumber) {
|
||||
Platform.runLater(() -> {
|
||||
mainWindowController.getUpdateBtn().setText(XMLController.getLocalBundle().getString("updateBtnNoUpdateAvailable"));
|
||||
settingsViewController.getUpdateBtn().setText(XMLController.getLocalBundle().getString("updateBtnNoUpdateAvailable"));
|
||||
});
|
||||
LOGGER.info("no update available");
|
||||
} else {
|
||||
Platform.runLater(() -> {
|
||||
mainWindowController.getUpdateBtn().setText(XMLController.getLocalBundle().getString("updateBtnUpdateAvailable"));
|
||||
settingsViewController.getUpdateBtn().setText(XMLController.getLocalBundle().getString("updateBtnUpdateAvailable"));
|
||||
});
|
||||
LOGGER.info("update available");
|
||||
browserDownloadUrl = objectAsset.getString("browser_download_url", "");
|
||||
|
|
|
@ -90,7 +90,7 @@ public class JFX2BtnCancelAlert {
|
|||
JFXButton cancelBtn = new JFXButton();
|
||||
cancelBtn.setText(cancelText);
|
||||
cancelBtn.addEventHandler(ActionEvent.ACTION, (e)-> alert.close());
|
||||
cancelBtn.addEventHandler(ActionEvent.ACTION, (e)-> System.exit(0));
|
||||
cancelBtn.addEventHandler(ActionEvent.ACTION, (e)-> System.exit(0)); // TODO only on first start
|
||||
cancelBtn.setButtonType(com.jfoenix.controls.JFXButton.ButtonType.RAISED);
|
||||
cancelBtn.setPrefHeight(32);
|
||||
cancelBtn.setStyle(btnStyle);
|
||||
|
@ -99,6 +99,13 @@ public class JFX2BtnCancelAlert {
|
|||
content.setActions(btnOne, btnTwo, cancelBtn);
|
||||
content.setHeading(new Text(headingText));
|
||||
content.setBody(new Text(bodyText));
|
||||
|
||||
// TODO only on first start
|
||||
Stage stage = (Stage) alert.getDialogPane().getScene().getWindow();
|
||||
stage.setMinWidth(416);
|
||||
stage.setMinHeight(162);
|
||||
stage.setOnCloseRequest(event -> System.exit(0));
|
||||
|
||||
alert.setContent(content);
|
||||
alert.showAndWait();
|
||||
}
|
||||
|
|
|
@ -1,17 +1,9 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<?import com.jfoenix.controls.JFXButton?>
|
||||
<?import com.jfoenix.controls.JFXColorPicker?>
|
||||
<?import com.jfoenix.controls.JFXHamburger?>
|
||||
<?import com.jfoenix.controls.JFXSlider?>
|
||||
<?import com.jfoenix.controls.JFXToggleButton?>
|
||||
<?import javafx.geometry.Insets?>
|
||||
<?import javafx.scene.control.ChoiceBox?>
|
||||
<?import javafx.scene.control.Label?>
|
||||
<?import javafx.scene.control.ScrollPane?>
|
||||
<?import javafx.scene.control.Separator?>
|
||||
<?import javafx.scene.control.TableColumn?>
|
||||
<?import javafx.scene.control.TableView?>
|
||||
<?import javafx.scene.layout.AnchorPane?>
|
||||
<?import javafx.scene.layout.FlowPane?>
|
||||
<?import javafx.scene.layout.HBox?>
|
||||
|
@ -31,119 +23,7 @@
|
|||
</ScrollPane>
|
||||
<fx:include fx:id="filmDetailView" source="FilmDetailView.fxml" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="32.0" />
|
||||
<fx:include fx:id="seriesDetailView" source="SeriesDetailView.fxml" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="32.0" />
|
||||
<ScrollPane fx:id="settingsScrollPane" fitToHeight="true" fitToWidth="true" prefHeight="568.0" prefWidth="800.0" style="-fx-background: white;" visible="false" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="150.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="32.0">
|
||||
<content>
|
||||
<AnchorPane fx:id="settingsAnchorPane" style="-fx-background-color: white;">
|
||||
<children>
|
||||
<VBox spacing="30.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
||||
<padding>
|
||||
<Insets bottom="14.0" top="14.0" />
|
||||
</padding>
|
||||
<children>
|
||||
<VBox spacing="25.0">
|
||||
<padding>
|
||||
<Insets left="24.0" />
|
||||
</padding>
|
||||
<children>
|
||||
<VBox>
|
||||
<children>
|
||||
<Label fx:id="homeflixSettingsLbl" text="HomeFlix Settings">
|
||||
<font>
|
||||
<Font name="System Bold" size="14.0" />
|
||||
</font>
|
||||
</Label>
|
||||
<Separator prefWidth="200.0">
|
||||
<padding>
|
||||
<Insets right="5.0" />
|
||||
</padding>
|
||||
</Separator>
|
||||
</children>
|
||||
<padding>
|
||||
<Insets left="-14.0" />
|
||||
</padding>
|
||||
</VBox>
|
||||
<HBox minHeight="25.0" spacing="10.0">
|
||||
<children>
|
||||
<Label fx:id="mainColorLbl" prefHeight="25.0" text="Main-Color" />
|
||||
<JFXColorPicker fx:id="colorPicker" onAction="#colorPickerAction" />
|
||||
</children>
|
||||
</HBox>
|
||||
<HBox spacing="10.0">
|
||||
<children>
|
||||
<Label fx:id="fontsizeLbl" text="Fontsize" />
|
||||
<JFXSlider fx:id="fontsizeSlider" max="48.0" min="2.0" prefWidth="250.0" />
|
||||
</children>
|
||||
</HBox>
|
||||
<HBox spacing="10.0">
|
||||
<children>
|
||||
<Label fx:id="languageLbl" prefHeight="25.0" text="Language" />
|
||||
<ChoiceBox fx:id="languageChoisBox" prefWidth="150.0" />
|
||||
</children>
|
||||
</HBox>
|
||||
<VBox spacing="10.0">
|
||||
<children>
|
||||
<Label fx:id="updateLbl" text="Updates" />
|
||||
<HBox spacing="10.0">
|
||||
<children>
|
||||
<JFXButton fx:id="updateBtn" onAction="#updateBtnAction" text="check now" />
|
||||
<Label fx:id="branchLbl" prefHeight="25.0" text="Branch">
|
||||
<padding>
|
||||
<Insets right="-5.0" />
|
||||
</padding>
|
||||
</Label>
|
||||
<ChoiceBox fx:id="branchChoisBox" prefWidth="150.0" />
|
||||
</children>
|
||||
</HBox>
|
||||
<JFXToggleButton fx:id="autoUpdateToggleBtn" onAction="#autoUpdateToggleBtnAction" text="check for updates on startup">
|
||||
<padding>
|
||||
<Insets bottom="-5.0" top="-5.0" />
|
||||
</padding></JFXToggleButton>
|
||||
<Label fx:id="versionLbl" text="Version" />
|
||||
</children>
|
||||
</VBox>
|
||||
<VBox spacing="10.0">
|
||||
<children>
|
||||
<Label fx:id="PlayerLbl" text="Player" />
|
||||
<JFXToggleButton fx:id="autoplayToggleBtn" onAction="#autoplayToggleBtnAction" text="autoplay">
|
||||
<VBox.margin>
|
||||
<Insets />
|
||||
</VBox.margin>
|
||||
<padding>
|
||||
<Insets bottom="-5.0" top="-5.0" />
|
||||
</padding>
|
||||
</JFXToggleButton>
|
||||
</children>
|
||||
</VBox>
|
||||
<VBox spacing="10.0">
|
||||
<children>
|
||||
<Label fx:id="sourcesLbl" text="Sources" />
|
||||
<HBox spacing="10.0">
|
||||
<children>
|
||||
<JFXButton fx:id="addStreamSourceBtn" onAction="#addStreamSourceBtnAction" prefHeight="32.0" text="add stream source" />
|
||||
<JFXButton fx:id="addDirectoryBtn" onAction="#addDirectoryBtnAction" prefHeight="32.0" text="add directory" />
|
||||
</children>
|
||||
</HBox>
|
||||
<TableView fx:id="sourcesTable" maxWidth="-Infinity" minHeight="150.0" minWidth="-Infinity" prefWidth="443.0">
|
||||
<columns>
|
||||
<TableColumn fx:id="sourceColumn" prefWidth="290.0" resizable="false" text="Sources" />
|
||||
<TableColumn fx:id="modeColumn" minWidth="130.0" prefWidth="138.0" resizable="false" text="Mode" />
|
||||
</columns>
|
||||
</TableView>
|
||||
</children>
|
||||
</VBox>
|
||||
</children>
|
||||
</VBox>
|
||||
<VBox spacing="25.0">
|
||||
<padding>
|
||||
<Insets left="24.0" />
|
||||
</padding>
|
||||
</VBox>
|
||||
</children>
|
||||
</VBox>
|
||||
</children>
|
||||
</AnchorPane>
|
||||
</content>
|
||||
</ScrollPane>
|
||||
<fx:include fx:id="settingsView" source="SettingsView.fxml" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="150.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="32.0" />
|
||||
<HBox fx:id="topHBox" layoutY="12.0" prefHeight="32.0" prefWidth="900.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
||||
<children>
|
||||
<JFXHamburger fx:id="menuHam">
|
||||
|
|
|
@ -16,9 +16,9 @@
|
|||
<?import javafx.scene.layout.VBox?>
|
||||
<?import javafx.scene.text.Font?>
|
||||
|
||||
<ScrollPane fx:id="settingsScrollPane" fitToHeight="true" fitToWidth="true" prefHeight="568.0" prefWidth="980.0" visible="false" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="kellerkinder.HomeFlix.application.SettingsView">
|
||||
<ScrollPane fx:id="settingsScrollPane" fitToHeight="true" fitToWidth="true" prefHeight="568.0" prefWidth="980.0" style="-fx-background-color: #ffffff;" visible="false" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="kellerkinder.HomeFlix.application.SettingsView">
|
||||
<content>
|
||||
<AnchorPane fx:id="settingsAnchorPane" style="-fx-background-color: white;">
|
||||
<AnchorPane fx:id="settingsAnchorPane" style="-fx-background-color: #ffffff;">
|
||||
<children>
|
||||
<VBox AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
||||
<children>
|
||||
|
|
|
@ -22,6 +22,7 @@ updateBtnNoUpdateAvailable = Kein Update verf\u00FCgbar
|
|||
autoUpdate = beim Start nach Updates suchen:
|
||||
autoplay = autoplay
|
||||
branchLbl = Updatezweig
|
||||
sourcesLbl = Quellen
|
||||
|
||||
#column translations
|
||||
columnStreamUrl = Datei Name
|
||||
|
|
|
@ -22,6 +22,7 @@ updateBtnNoUpdateAvailable = no update available
|
|||
autoUpdate = check at startup for updates:
|
||||
autoplay = autoplay
|
||||
branchLbl = Branch
|
||||
sourcesLbl = Quellen
|
||||
|
||||
#column translations
|
||||
columnStreamUrl = File Name
|
||||
|
|
Loading…
Reference in New Issue