From 73a74917aa9dc5a3736398c9e79d46277c5bcc60 Mon Sep 17 00:00:00 2001 From: Jannik Date: Sun, 4 Mar 2018 20:07:43 +0100 Subject: [PATCH] HomeFlix supports more than one source directory * HomeFlix supports more than one source directory, this is WIP! * general code cleanup --- .classpath | 8 +- .../HomeFlix/application/Main.java | 22 +- .../application/MainWindowController.java | 600 +++++++----------- .../HomeFlix/controller/DBController.java | 298 +++++---- src/main/resources/fxml/MainWindow.fxml | 47 +- .../locals/HomeFlix-Local_de_DE.properties | 3 +- .../locals/HomeFlix-Local_en_US.properties | 3 +- 7 files changed, 432 insertions(+), 549 deletions(-) diff --git a/.classpath b/.classpath index 75e14fc..e83910a 100644 --- a/.classpath +++ b/.classpath @@ -12,7 +12,7 @@ - + @@ -22,10 +22,6 @@ - - - - - + diff --git a/src/main/java/kellerkinder/HomeFlix/application/Main.java b/src/main/java/kellerkinder/HomeFlix/application/Main.java index df4048c..b99bb70 100644 --- a/src/main/java/kellerkinder/HomeFlix/application/Main.java +++ b/src/main/java/kellerkinder/HomeFlix/application/Main.java @@ -107,8 +107,7 @@ public class Main extends Application { // startup checks if (!configFile.exists()) { directory.mkdir(); - mainWindowController.setPath(firstStart()); - mainWindowController.setStreamingPath(directory.getAbsolutePath()); + mainWindowController.addSource(firstStart(), "local"); mainWindowController.setColor("ee3523"); mainWindowController.setSize(FONT_SIZE); mainWindowController.setAutoUpdate(false); @@ -143,14 +142,17 @@ public class Main extends Application { // Method for first Start private String firstStart(){ - switch(System.getProperty("user.language")+"_"+System.getProperty("user.country")){ - 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); //German - break; - default: bundle = ResourceBundle.getBundle("locals.HomeFlix-Local", Locale.US); //default local - break; - } + switch (System.getProperty("user.language") + "_" + System.getProperty("user.country")) { + 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); // German + break; + default: + bundle = ResourceBundle.getBundle("locals.HomeFlix-Local", Locale.US); // default local + break; + } Alert alert = new Alert(AlertType.CONFIRMATION); //new alert with file-chooser alert.setTitle("Project HomeFlix"); diff --git a/src/main/java/kellerkinder/HomeFlix/application/MainWindowController.java b/src/main/java/kellerkinder/HomeFlix/application/MainWindowController.java index 9a2bc43..4a2c61e 100644 --- a/src/main/java/kellerkinder/HomeFlix/application/MainWindowController.java +++ b/src/main/java/kellerkinder/HomeFlix/application/MainWindowController.java @@ -27,12 +27,15 @@ import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; +import java.io.FileReader; +import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.io.StringWriter; +import java.io.Writer; import java.math.BigInteger; import java.net.URI; import java.net.URISyntaxException; @@ -46,6 +49,9 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import com.cemu_UI.uiElements.JFXInfoDialog; +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; @@ -54,8 +60,6 @@ import com.jfoenix.controls.JFXTextField; import com.jfoenix.controls.JFXToggleButton; import com.jfoenix.transitions.hamburger.HamburgerBackArrowBasicTransition; -import javafx.animation.FadeTransition; -import javafx.animation.ParallelTransition; import javafx.animation.TranslateTransition; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; @@ -90,6 +94,7 @@ import javafx.scene.paint.Color; import javafx.scene.text.Font; import javafx.scene.text.TextFlow; import javafx.stage.DirectoryChooser; +import javafx.stage.FileChooser; import javafx.util.Duration; import kellerkinder.HomeFlix.controller.DBController; import kellerkinder.HomeFlix.controller.UpdateController; @@ -101,9 +106,6 @@ public class MainWindowController { @FXML private AnchorPane mainAnchorPane; - @FXML - private AnchorPane streamingSettingsAnchorPane; - @FXML private ScrollPane settingsScrollPane; @@ -120,8 +122,8 @@ public class MainWindowController { private TreeTableView treeTableViewfilm; @FXML - private TableView tableViewStreamingdata; - + private TableView sourcesTable; + @FXML private TextFlow textFlow; @@ -143,9 +145,6 @@ public class MainWindowController { @FXML private JFXButton settingsBtn; - @FXML - private JFXButton streamingSettingsBtn; - @FXML private JFXButton switchBtn; @@ -156,10 +155,10 @@ public class MainWindowController { public JFXButton updateBtn; @FXML - private JFXButton directoryBtn; + private JFXButton addDirectoryBtn; @FXML - private JFXButton streamingDirectoryBtn; + private JFXButton addStreamSourceBtn; @FXML private JFXHamburger menuHam; @@ -167,12 +166,6 @@ public class MainWindowController { @FXML private JFXToggleButton autoUpdateToggleBtn; - @FXML - public JFXTextField filmDirTextField; - - @FXML - public JFXTextField streamingPathTextField; - @FXML private JFXTextField searchTextField; @@ -191,9 +184,6 @@ public class MainWindowController { @FXML private Label homeflixSettingsLbl; - @FXML - private Label filmDirectoryLbl; - @FXML private Label mainColorLbl; @@ -208,6 +198,9 @@ public class MainWindowController { @FXML private Label branchLbl; + + @FXML + private Label sourcesLbl; @FXML private Label versionLbl; @@ -218,7 +211,7 @@ public class MainWindowController { private ImageView imv1; @FXML - TreeItem root = new TreeItem<>(new tableData(1, 1, 1, 5.0, "1", "filme", "1", imv1, false)); + public TreeItem root = new TreeItem<>(new tableData(1, 1, 1, 5.0, "1", "filme", "1", imv1, false)); @FXML TreeTableColumn columnRating = new TreeTableColumn<>("Rating"); @FXML @@ -235,15 +228,14 @@ public class MainWindowController { TreeTableColumn columnEpisode = new TreeTableColumn<>("Episode"); @FXML - private TreeItem streamingRoot =new TreeItem<>(new tableData(1 ,1 ,1 ,1.0 ,"1" ,"filme" ,"1", imv1, false)); + public TreeItem streamingRoot =new TreeItem<>(new tableData(1 ,1 ,1 ,1.0 ,"1" ,"filme" ,"1", imv1, false)); // TODO make private @FXML - private TableColumn dataNameColumn = new TableColumn<>("Datei Name"); + private TableColumn sourceColumn; @FXML - private TableColumn dataNameEndColumn = new TableColumn<>("Datei Name mit Endung"); + private TableColumn modeColumn; private boolean menuTrue = false; private boolean settingsTrue = false; - private boolean streamingSettingsTrue = false; private boolean autoUpdate = false; private boolean useBeta = false; private static final Logger LOGGER = LogManager.getLogger(MainWindowController.class.getName()); @@ -262,7 +254,6 @@ public class MainWindowController { private String errorSave; private String infoText; private String vlcNotInstalled; - private String path; private String streamingPath; private String color; private String name; @@ -275,8 +266,6 @@ public class MainWindowController { private int last; private int selected; private int next; - private File selectedFolder; - private File selectedStreamingFolder; private ResourceBundle bundle; private ObservableList filterData = FXCollections.observableArrayList(); @@ -284,7 +273,7 @@ public class MainWindowController { private ObservableList branches = FXCollections.observableArrayList("stable", "beta"); private ObservableList localFilms = FXCollections.observableArrayList(); private ObservableList streamingFilms = FXCollections.observableArrayList(); - private ObservableList streamingData = FXCollections.observableArrayList(); + private ObservableList sourcesList = FXCollections.observableArrayList(); private ImageView skip_previous_white = new ImageView(new Image("icons/ic_skip_previous_white_18dp_1x.png")); private ImageView skip_previous_black = new ImageView(new Image("icons/ic_skip_previous_black_18dp_1x.png")); private ImageView skip_next_white = new ImageView(new Image("icons/ic_skip_next_white_18dp_1x.png")); @@ -313,11 +302,10 @@ public class MainWindowController { void init() { loadSettings(); - loadStreamingSettings(); checkAutoUpdate(); initTabel(); initActions(); - initUI(); + initUI(); } //Initialize the tables (treeTableViewfilm and tableViewStreamingdata) @@ -327,8 +315,6 @@ public class MainWindowController { columnRating.setMaxWidth(80); columnTitel.setMaxWidth(260); columnStreamUrl.setMaxWidth(0); - dataNameColumn.setPrefWidth(150); - dataNameEndColumn.setPrefWidth(220); columnRating.setStyle("-fx-alignment: CENTER;"); treeTableViewfilm.setRoot(root); @@ -353,119 +339,80 @@ public class MainWindowController { treeTableViewfilm.getColumns().add(columnSeason); treeTableViewfilm.getColumns().add(columnEpisode); treeTableViewfilm.getColumns().get(2).setVisible(false); //hide columnStreamUrl (column with file URL, important for opening a file/stream) - - //Change-listener for treeTableViewfilm - treeTableViewfilm.getSelectionModel().selectedItemProperty().addListener(new ChangeListener() { - @Override - public void changed(ObservableValue observable, Object oldVal, Object newVal){ - // last = selected; //for auto-play - selected = treeTableViewfilm.getSelectionModel().getSelectedIndex(); //get selected item - last = selected - 1; - next = selected + 1; - name = columnTitel.getCellData(selected); //get name of selected item - datPath = columnStreamUrl.getCellData(selected); //get file path of selected item - - if(mode.equals("local")){ - if(localFilms.get(selected).getCached()==true){ - LOGGER.info("loading from cache: "+name); - dbController.readCache(datPath); - }else{ - ApiQuery.startQuery(name,datPath); // start api query - } - }else{ - LOGGER.info(streamingFilms.size()); - if(streamingFilms.get(selected).getCached()==true){ - LOGGER.info("loading from cache: "+name); - dbController.readCache(datPath); - }else{ - ApiQuery.startQuery(name,datPath); // start api query - } - } - } - }); //context menu for treeTableViewfilm treeTableViewfilm.setContextMenu(menu); - - //Streaming-Settings Table - dataNameColumn.setCellValueFactory(cellData -> cellData.getValue().titleProperty()); - dataNameEndColumn.setCellValueFactory(cellData -> cellData.getValue().streamUrlProperty()); - - tableViewStreamingdata.getColumns().add(dataNameColumn); - tableViewStreamingdata.getColumns().add(dataNameEndColumn); - tableViewStreamingdata.setItems(streamingData); + + // sourcesTreeTable + sourceColumn.setCellValueFactory(cellData -> cellData.getValue().titleProperty()); + modeColumn.setCellValueFactory(cellData -> cellData.getValue().streamUrlProperty()); + sourcesTable.setItems(sourcesList); } //Initializing the actions - private void initActions(){ - + private void initActions() { + HamburgerBackArrowBasicTransition burgerTask = new HamburgerBackArrowBasicTransition(menuHam); - menuHam.addEventHandler(MouseEvent.MOUSE_PRESSED, (e)->{ - if(menuTrue == false){ + menuHam.addEventHandler(MouseEvent.MOUSE_PRESSED, (e) -> { + if (menuTrue == false) { sideMenuSlideIn(); burgerTask.setRate(1.0); burgerTask.play(); menuTrue = true; - }else{ + } else { sideMenuSlideOut(); burgerTask.setRate(-1.0); burgerTask.play(); menuTrue = false; } - if(settingsTrue == true){ + if (settingsTrue == true) { settingsScrollPane.setVisible(false); - setPath(filmDirTextField.getText()); saveSettings(); settingsTrue = false; } - if(streamingSettingsTrue == true){ - streamingSettingsAnchorPane.setVisible(false); - streamingSettingsTrue = false; - } - }); - + searchTextField.textProperty().addListener(new ChangeListener() { - @Override - public void changed(ObservableValue observable,String oldValue, String newValue) { - ObservableList helpData; - filterData.removeAll(filterData); - root.getChildren().remove(0,root.getChildren().size()); - - if(mode.equals("local")){ - helpData = localFilms; - }else{ - helpData = streamingFilms; - } - - for(int i = 0; i < helpData.size(); i++){ - if(helpData.get(i).getTitle().toLowerCase().contains(searchTextField.getText().toLowerCase())){ - filterData.add(helpData.get(i)); //add data from newDaten to filteredData where title contains search input - } - } - - for(int i = 0; i < filterData.size(); i++){ - root.getChildren().add(new TreeItem(filterData.get(i))); //add filtered data to root node after search - } - if(searchTextField.getText().hashCode()== hashA){ - setColor("000000"); - applyColor(); - } - } - }); + @Override + public void changed(ObservableValue observable, String oldValue, String newValue) { + ObservableList helpData; + filterData.removeAll(filterData); + root.getChildren().remove(0, root.getChildren().size()); + + if (mode.equals("local")) { + helpData = localFilms; + } else { + helpData = streamingFilms; + } + + for (int i = 0; i < helpData.size(); i++) { + if (helpData.get(i).getTitle().toLowerCase().contains(searchTextField.getText().toLowerCase())) { + filterData.add(helpData.get(i)); // add data from newDaten to filteredData where title contains search input + } + } + + for (int i = 0; i < filterData.size(); i++) { + root.getChildren().add(new TreeItem(filterData.get(i))); // add filtered data to root node after search + } + if (searchTextField.getText().hashCode() == hashA) { + setColor("000000"); + applyColor(); + } + } + }); - languageChoisBox.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener() { - @Override - public void changed(ObservableValue 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); - setLocalUI(); - saveSettings(); - } - }); - - branchChoisBox.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener() { + languageChoisBox.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener() { + @Override + public void changed(ObservableValue 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); + setLocalUI(); + saveSettings(); + } + }); + + branchChoisBox.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener() { @Override public void changed(ObservableValue ov, Number value, Number new_value) { if (branchChoisBox.getItems().get((int) new_value).toString() == "beta") { @@ -477,28 +424,26 @@ public class MainWindowController { } }); - fontsizeSlider.valueProperty().addListener(new ChangeListener() { - @Override - public void changed(ObservableValue ov,Number old_val, Number new_val) { - setSize(fontsizeSlider.getValue()); - - if(name != null){ + fontsizeSlider.valueProperty().addListener(new ChangeListener() { + @Override + public void changed(ObservableValue ov, Number old_val, Number new_val) { + setSize(fontsizeSlider.getValue()); + if (name != null) { dbController.readCache(datPath); } - -// ta1.setFont(Font.font("System", size)); + // ta1.setFont(Font.font("System", size)); saveSettings(); - } - }); + } + }); - like.setOnAction(new EventHandler() { - @Override - public void handle(ActionEvent event) { - if(mode.equals("streaming")){ - dbController.like(name,streamingFilms.get(selected).getStreamUrl()); - }else{ - dbController.like(name,localFilms.get(selected).getStreamUrl()); - } + like.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + if (mode.equals("streaming")) { + dbController.like(name, streamingFilms.get(selected).getStreamUrl()); + } else { + dbController.like(name, localFilms.get(selected).getStreamUrl()); + } dbController.getFavStatus(name); try { dbController.refresh(name, selected); @@ -507,78 +452,108 @@ public class MainWindowController { } refreshTable(); } - }); + }); - dislike.setOnAction(new EventHandler() { - @Override - public void handle(ActionEvent event) { - if(mode.equals("streaming")){ - dbController.dislike(name,streamingFilms.get(selected).getStreamUrl()); - }else{ - dbController.dislike(name,localFilms.get(selected).getStreamUrl()); - } + dislike.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + if (mode.equals("streaming")) { + dbController.dislike(name, streamingFilms.get(selected).getStreamUrl()); + } else { + dbController.dislike(name, localFilms.get(selected).getStreamUrl()); + } dbController.getFavStatus(name); try { dbController.refresh(name, selected); } catch (SQLException e) { - LOGGER.error("There was a problem with the like/dislike function!",e); + LOGGER.error("There was a problem with the like/dislike function!", e); } refreshTable(); } - }); + }); - /** - * FIXME fix bug when sort by ASCENDING, wrong order - */ - columnRating.sortTypeProperty().addListener(new ChangeListener() { - @Override - public void changed(ObservableValue paramObservableValue, SortType paramT1, SortType paramT2) { - LOGGER.info("NAME Clicked -- sortType = " + paramT1 + ", SortType=" + paramT2); - ArrayList fav_true = new ArrayList(); - ArrayList fav_false = new ArrayList(); - ObservableList helpData; - filterData.removeAll(filterData); -// treeTableViewfilm.getSelectionModel().clearSelection(selected); - root.getChildren().remove(0,root.getChildren().size()); - - if(mode.equals("local")){ - helpData = localFilms; - }else{ - helpData = streamingFilms; - } - - - for(int i = 0;i(filterData.get(i))); //add filtered data to root node after search - } - } - }); + /** + * FIXME fix bug when sort by ASCENDING, wrong order + */ + columnRating.sortTypeProperty().addListener(new ChangeListener() { + @Override + public void changed(ObservableValue paramObservableValue, SortType paramT1, + SortType paramT2) { + LOGGER.info("NAME Clicked -- sortType = " + paramT1 + ", SortType=" + paramT2); + ArrayList fav_true = new ArrayList(); + ArrayList fav_false = new ArrayList(); + ObservableList helpData; + filterData.removeAll(filterData); +// treeTableViewfilm.getSelectionModel().clearSelection(selected); + root.getChildren().remove(0, root.getChildren().size()); + + if (mode.equals("local")) { + helpData = localFilms; + } else { + helpData = streamingFilms; + } + + for (int i = 0; i < helpData.size(); i++) { + if (helpData.get(i).getRating() == 1.0) { + fav_true.add(i); + } else { + fav_false.add(i); + } + } + if (paramT2.toString().equals("DESCENDING")) { + LOGGER.info("Absteigend"); // Debug, delete? + for (int i = 0; i < fav_true.size(); i++) { + filterData.add(helpData.get(fav_true.get(i))); + } + for (int i = 0; i < fav_false.size(); i++) { + filterData.add(helpData.get(fav_false.get(i))); + } + } else { + for (int i = 0; i < fav_false.size(); i++) { + filterData.add(helpData.get(fav_false.get(i))); + } + for (int i = 0; i < fav_true.size(); i++) { + filterData.add(helpData.get(fav_true.get(i))); + } + } + + LOGGER.info(filterData.size()); // Debug, delete? + for (int i = 0; i < filterData.size(); i++) { +// LOGGER.info(filterData.get(i).getTitle()+"; "+filterData.get(i).getRating()); // Debugging + root.getChildren().add(new TreeItem(filterData.get(i))); // add filtered data to root node after search + } + } + }); + + // Change-listener for treeTableViewfilm + treeTableViewfilm.getSelectionModel().selectedItemProperty().addListener(new ChangeListener() { + @Override + public void changed(ObservableValue observable, Object oldVal, Object newVal) { + // last = selected; //for auto-play + selected = treeTableViewfilm.getSelectionModel().getSelectedIndex(); // get selected item + last = selected - 1; + next = selected + 1; + name = columnTitel.getCellData(selected); // get name of selected item + datPath = columnStreamUrl.getCellData(selected); // get file path of selected item + + if (mode.equals("local")) { + if (localFilms.get(selected).getCached() == true) { + LOGGER.info("loading from cache: " + name); + dbController.readCache(datPath); + } else { + ApiQuery.startQuery(name, datPath); // start api query + } + } else { + LOGGER.info(streamingFilms.size()); + if (streamingFilms.get(selected).getCached() == true) { + LOGGER.info("loading from cache: " + name); + dbController.readCache(datPath); + } else { + ApiQuery.startQuery(name, datPath); // start api query + } + } + } + }); } // initialize UI elements @@ -587,7 +562,6 @@ public class MainWindowController { debugBtn.setDisable(true); // debugging button for tests debugBtn.setVisible(false); - filmDirTextField.setText(getPath()); versionLbl.setText("Version: " + version + " (Build: " + buildNumber + ")"); fontsizeSlider.setValue(getSize()); colorPicker.setValue(Color.valueOf(getColor())); @@ -643,14 +617,14 @@ public class MainWindowController { vlcInfoDialog.show(); }else{ try { - Runtime.getRuntime().exec(new String[] { "vlc", getPath()+"/"+ datPath}); + Runtime.getRuntime().exec(new String[] { "vlc", datPath}); // TODO switch to ProcessBuilder } catch (IOException e) { showErrorMsg(errorPlay,e); } } }else if(System.getProperty("os.name").contains("Windows") || System.getProperty("os.name").contains("Mac OS X")){ try { - Desktop.getDesktop().open(new File(getPath()+"\\"+ datPath)); + Desktop.getDesktop().open(new File(datPath)); } catch (IOException e) { showErrorMsg(errorPlay,e); } @@ -665,11 +639,12 @@ public class MainWindowController { @FXML private void openfolderbtnclicked(){ - try { - Desktop.getDesktop().open(new File(getPath())); //open path when button is clicked - } catch (IOException e) { - e.printStackTrace(); - } + //TODO rework +// try { +// Desktop.getDesktop().open(new File(getPath())); //open path when button is clicked +// } catch (IOException e) { +// e.printStackTrace(); +// } } @FXML @@ -693,38 +668,15 @@ public class MainWindowController { @FXML private void settingsBtnclicked(){ if(settingsTrue == false){ - if(streamingSettingsTrue == true){ - streamingSettingsAnchorPane.setVisible(false); - streamingSettingsTrue = false; - } settingsScrollPane.setVisible(true); settingsTrue = true; }else{ settingsScrollPane.setVisible(false); - setPath(filmDirTextField.getText()); saveSettings(); settingsTrue = false; } } - /** - * TODO additional info about the "streaming.json" - */ - @FXML - private void streamingSettingsBtnclicked(){ - if(streamingSettingsTrue == false){ - if(settingsTrue == true){ - settingsScrollPane.setVisible(false); - settingsTrue = false; - } - streamingSettingsAnchorPane.setVisible(true); - streamingSettingsTrue = true; - }else{ - streamingSettingsAnchorPane.setVisible(false); - streamingSettingsTrue = false; - } - } - @FXML private void switchBtnclicked(){ if(mode.equals("local")){ //switch to streaming mode @@ -738,41 +690,38 @@ public class MainWindowController { root.getChildren().remove(0,root.getChildren().size()); addDataUI(); settingsScrollPane.setVisible(false); - streamingSettingsAnchorPane.setVisible(false); sideMenuSlideOut(); //disables side-menu menuTrue = false; settingsTrue = false; - streamingSettingsTrue = false; } @FXML private void debugBtnclicked(){ //for testing } - @FXML - private void filmDirTextFieldAction(){ - setPath(filmDirTextField.getText()); - saveSettings(); + private void addDirectoryBtnAction(){ + File selectedFolder = directoryChooser.showDialog(null); + if (selectedFolder != null && selectedFolder.exists()) { + addSource(selectedFolder.getPath(), "local"); + dbController.refreshDataBase(); + } else { + LOGGER.error("The selected folder dosen't exist!"); + } } @FXML - private void directoryBtnAction(){ - selectedFolder = directoryChooser.showDialog(null); - if(selectedFolder == null){ - LOGGER.warn("No Directory selected"); - }else{ - setPath(selectedFolder.getAbsolutePath()); - saveSettings(); - filmDirTextField.setText(getPath()); - try { - Runtime.getRuntime().exec("java -jar ProjectHomeFlix.jar"); //start again - System.exit(0); //finishes itself - } catch (IOException e) { - LOGGER.error("error while restarting HomeFlix", e); - } - } + private void addStreamSourceBtnAction(){ + FileChooser fileChooser = new FileChooser(); + fileChooser.setTitle("Open Resource File"); + File selectedFile = fileChooser.showOpenDialog(main.getPrimaryStage()); + if (selectedFile != null && selectedFile.exists()) { + addSource(selectedFile.getPath(), "local"); + dbController.refreshDataBase(); + } else { + LOGGER.error("The selected file dosen't exist!"); + } } @FXML @@ -799,29 +748,6 @@ public class MainWindowController { saveSettings(); } - @FXML - private void streamingPathTextFieldAction(){ - // - } - - @FXML - private void streamingDirectoryBtnAction(){ - selectedStreamingFolder = directoryChooser.showDialog(null); - if(selectedStreamingFolder == null){ - LOGGER.warn("No Directory selected"); - }else{ - setStreamingPath(selectedStreamingFolder.getAbsolutePath()); - saveSettings(); - streamingPathTextField.setText(getStreamingPath()); - try { - Runtime.getRuntime().exec("java -jar ProjectHomeFlix.jar"); //start again - System.exit(0); //finishes itself - } catch (IOException e) { - LOGGER.error("error while restarting HomeFlix", e); - } - } - } - private void refreshTable(){ if(mode.equals("local")){ root.getChildren().set(selected, new TreeItem(localFilms.get(selected))); @@ -858,32 +784,28 @@ public class MainWindowController { } } - void loadStreamingSettings() { - if (getStreamingPath().equals("") || getStreamingPath().equals(null)) { - LOGGER.warn("Kein Pfad angegeben"); - } else { - String[] entries = new File(getStreamingPath()).list(); - for (int i = 0; i < entries.length; i++) { - if (entries[i].endsWith(".json")) { - String titel = ohneEndung(entries[i]); - String data = entries[i]; - streamingData.add(new tableData(1, 1, 1, 5.0, "1", titel, data, imv1, false)); - } - } - for (int i = 0; i < streamingData.size(); i++) { - streamingRoot.getChildren().add(new TreeItem(streamingData.get(i))); // adds data to root-node - } - } + public void addSourceToTable(String path, String mode) { + sourcesList.add(new tableData(1, 1, 1, 5.0, "1", path, mode, imv1, false)); + streamingRoot.getChildren().add(new TreeItem(sourcesList.get(sourcesList.size() - 1))); // adds data to root-node } - // removes the ending - private String ohneEndung(String str) { - if (str == null) - return null; - int pos = str.lastIndexOf("."); - if (pos == -1) - return str; - return str.substring(0, pos); + public void addSource(String path, String mode) { + JsonObject source = null; + JsonArray newsources = null; + + try { + // read old array + newsources = Json.parse(new FileReader(main.getDirectory() + "/sources.json")).asArray(); + + // add new source + Writer writer = new FileWriter(main.getDirectory() + "/sources.json"); + source = Json.object().add("path", path).add("mode", mode); + newsources.add(source); + newsources.writeTo(writer); + writer.close(); + } catch (IOException e) { + LOGGER.error(e); + } } //set color of UI-Elements @@ -897,17 +819,15 @@ public class MainWindowController { sideMenuVBox.setStyle(style); topHBox.setStyle(style); searchTextField.setFocusColor(Color.valueOf(getColor())); - filmDirTextField.setFocusColor(Color.valueOf(getColor())); if (icolor.compareTo(ccolor) == -1) { dialogBtnStyle = btnStyleWhite; settingsBtn.setStyle("-fx-text-fill: WHITE;"); - streamingSettingsBtn.setStyle("-fx-text-fill: WHITE;"); switchBtn.setStyle("-fx-text-fill: WHITE;"); aboutBtn.setStyle("-fx-text-fill: WHITE;"); debugBtn.setStyle("-fx-text-fill: WHITE;"); - directoryBtn.setStyle(btnStyleWhite); - streamingDirectoryBtn.setStyle(btnStyleWhite); + addDirectoryBtn.setStyle(btnStyleWhite); + addStreamSourceBtn.setStyle(btnStyleWhite); updateBtn.setStyle(btnStyleWhite); playbtn.setStyle(btnStyleWhite); openfolderbtn.setStyle(btnStyleWhite); @@ -920,12 +840,11 @@ public class MainWindowController { } else { dialogBtnStyle = btnStyleBlack; settingsBtn.setStyle("-fx-text-fill: BLACK;"); - streamingSettingsBtn.setStyle("-fx-text-fill: BLACK;"); switchBtn.setStyle("-fx-text-fill: BLACK;"); aboutBtn.setStyle("-fx-text-fill: BLACK;"); debugBtn.setStyle("-fx-text-fill: BLACK;"); - directoryBtn.setStyle(btnStyleBlack); - streamingDirectoryBtn.setStyle(btnStyleBlack); + addDirectoryBtn.setStyle(btnStyleBlack); + addStreamSourceBtn.setStyle(btnStyleBlack); updateBtn.setStyle(btnStyleBlack); playbtn.setStyle(btnStyleBlack); openfolderbtn.setStyle(btnStyleBlack); @@ -944,36 +863,21 @@ public class MainWindowController { } } + // slide in in 400ms private void sideMenuSlideIn() { sideMenuVBox.setVisible(true); - // fade in from 40% to 100% opacity in 400ms - FadeTransition fadeTransition = new FadeTransition(Duration.millis(400), sideMenuVBox); - fadeTransition.setFromValue(0.4); - fadeTransition.setToValue(1.0); - // slide in in 400ms TranslateTransition translateTransition = new TranslateTransition(Duration.millis(400), sideMenuVBox); translateTransition.setFromX(-150); translateTransition.setToX(0); - // in case both animations are used (add (fadeTransition, translateTransition) in the second line under this command) - ParallelTransition parallelTransition = new ParallelTransition(); - parallelTransition.getChildren().addAll(translateTransition);// (fadeTransition, translateTransition); - parallelTransition.play(); + translateTransition.play(); } + // slide out in 400ms private void sideMenuSlideOut() { - // sideMenuVBox.setVisible(false); - // fade out from 100% to 40% opacity in 400ms - FadeTransition fadeTransition = new FadeTransition(Duration.millis(400), sideMenuVBox); - fadeTransition.setFromValue(1.0); - fadeTransition.setToValue(0.4); - // slide out in 400ms TranslateTransition translateTransition = new TranslateTransition(Duration.millis(400), sideMenuVBox); translateTransition.setFromX(0); translateTransition.setToX(-150); - // in case both animations are used (add (fadeTransition, translateTransition) in the second line under this command) - ParallelTransition parallelTransition = new ParallelTransition(); - parallelTransition.getChildren().addAll(translateTransition);// (fadeTransition, translateTransition); - parallelTransition.play(); + translateTransition.play(); } void setLocalUI() { @@ -993,14 +897,11 @@ public class MainWindowController { } aboutBtn.setText(getBundle().getString("info")); settingsBtn.setText(getBundle().getString("settings")); - streamingSettingsBtn.setText(getBundle().getString("streamingSettings")); - filmDirTextField.setPromptText(getBundle().getString("filmDirTextField")); - streamingPathTextField.setPromptText(getBundle().getString("filmDirTextField")); searchTextField.setPromptText(getBundle().getString("tfSearch")); openfolderbtn.setText(getBundle().getString("openFolder")); updateBtn.setText(getBundle().getString("checkUpdates")); - directoryBtn.setText(getBundle().getString("chooseFolder")); - streamingDirectoryBtn.setText(getBundle().getString("chooseFolder")); + addDirectoryBtn.setText(getBundle().getString("addDirectory")); + addStreamSourceBtn.setText(getBundle().getString("addStreamSource")); homeflixSettingsLbl.setText(getBundle().getString("homeflixSettingsLbl")); mainColorLbl.setText(getBundle().getString("mainColorLbl")); fontsizeLbl.setText(getBundle().getString("fontsizeLbl")); @@ -1059,7 +960,6 @@ public class MainWindowController { public void saveSettings() { LOGGER.info("saving settings ..."); try { - props.setProperty("path", getPath()); // writes path into property props.setProperty("color", getColor()); props.setProperty("autoUpdate", String.valueOf(isAutoUpdate())); props.setProperty("useBeta", String.valueOf(isUseBeta())); @@ -1085,12 +985,12 @@ public class MainWindowController { InputStream inputStream = new FileInputStream(main.getConfigFile()); props.loadFromXML(inputStream); // new input-stream from .xml - try { - setPath(props.getProperty("path")); // read path from property - } catch (Exception e) { - LOGGER.error("cloud not load path", e); - setPath(""); - } +// try { +// setPath(props.getProperty("path")); // read path from property +// } catch (Exception e) { +// LOGGER.error("cloud not load path", e); +// setPath(""); +// } try { setStreamingPath(props.getProperty("streamingPath")); @@ -1198,14 +1098,6 @@ public class MainWindowController { return color; } - public void setPath(String input) { - this.path = input; - } - - public String getPath() { - return path; - } - public void setStreamingPath(String input) { this.streamingPath = input; } @@ -1270,12 +1162,12 @@ public class MainWindowController { this.streamingFilms = streamingFilms; } - public ObservableList getStreamingData() { - return streamingData; + public ObservableList getSourcesList() { + return sourcesList; } - public void setStreamingData(ObservableList streamingData) { - this.streamingData = streamingData; + public void setSourcesList(ObservableList sourcesList) { + this.sourcesList = sourcesList; } public String getRatingSortType() { diff --git a/src/main/java/kellerkinder/HomeFlix/controller/DBController.java b/src/main/java/kellerkinder/HomeFlix/controller/DBController.java index ff572bc..d6ae01f 100644 --- a/src/main/java/kellerkinder/HomeFlix/controller/DBController.java +++ b/src/main/java/kellerkinder/HomeFlix/controller/DBController.java @@ -64,27 +64,26 @@ public class DBController { 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 List filmsdbAll = new ArrayList(); - private List filmsdbDir = new ArrayList(); + private List filmsdbDir = new ArrayList(); // needed private List filmsdbStream = new ArrayList(); - private List filmsdbStreamURL = new ArrayList(); + private List filmsdbStreamURL = new ArrayList(); // needed private List filmsAll = new ArrayList(); - private List filmsDir = new ArrayList(); - private List filmsDirURL = new ArrayList(); +// private List filmsDirURL = new ArrayList(); private List filmsStream = new ArrayList(); - private List filmsStreamURL = new ArrayList(); + private List filmsStreamURL = new ArrayList(); // needed private List filmsStreamData = new ArrayList(); private Connection connection = null; private static final Logger LOGGER = LogManager.getLogger(DBController.class.getName()); public void init() { LOGGER.info("<========== starting loading sql ==========>"); - loadDatabase(); + initDatabaseConnection(); createDatabase(); - loadData(); + refreshDataBase(); LOGGER.info("<========== finished loading sql ==========>"); } - public void loadDatabase() { + public void initDatabaseConnection() { DB_PATH = main.getDirectory() + "/Homeflix.db"; try { // create a database connection @@ -97,11 +96,11 @@ public class DBController { LOGGER.info("ROM database loaded successfull"); } - public void createDatabase() { - /** - * if tables don't exist create them - * cache table: streamUrl is primary key - */ + /** + * if tables don't exist create them + * cache table: streamUrl is primary key + */ + private void createDatabase() { try { Statement stmt = connection.createStatement(); stmt.executeUpdate("create table if not exists film_local (rating, titel, streamUrl, favIcon, cached)"); @@ -114,7 +113,10 @@ public class DBController { stmt.close(); } catch (SQLException e) { LOGGER.error(e); - } + } + } + + private void loadDatabase() { // get all entries from the tables try { @@ -137,123 +139,64 @@ public class DBController { LOGGER.error("Ups! an error occured!", e); } - // getting all files from the selected directory - if (new File(mainWindowController.getPath()).exists()) { - for (String entry : new File(mainWindowController.getPath()).list()) { - filmsDir.add(cutOffEnd(entry)); - filmsDirURL.add(entry); -// System.out.println(cutOffEnd(entry)); -// System.out.println(entry); - } - } else { - LOGGER.error(mainWindowController.getPath() + "dosen't exist!"); - } - - // getting all entries from the streaming lists - for (int i = 0; i < mainWindowController.getStreamingData().size(); i++) { - String fileName = mainWindowController.getStreamingPath() + "/" - + mainWindowController.getStreamingData().get(i).getStreamUrl(); - try { - JsonObject object = Json.parse(new FileReader(fileName)).asObject(); - JsonArray items = object.get("entries").asArray(); - for (JsonValue item : items) { - filmsStream.add(item.asObject().getString("titel", "")); - filmsStreamURL.add(item.asObject().getString("streamUrl", "")); - filmsStreamData.add(fileName); - -// System.out.println(item.asObject().getString("titel", "")); -// System.out.println(item.asObject().getString("streamUrl", "")); -// System.out.println(fileName); - } - } catch (IOException e) { - e.printStackTrace(); - } - } - // add all entries to filmsAll and filmsdbAl, for later comparing - filmsAll.addAll(filmsDir); filmsAll.addAll(filmsStream); filmsdbAll.addAll(filmsdbDir); filmsdbAll.addAll(filmsdbStream); LOGGER.info("films in directory: " + filmsAll.size()); LOGGER.info("filme in db: " + filmsdbAll.size()); - - /** - * if filmsdbAll.size() == 0 the database is empty, we need to fill it with loadFilms() - * else check if there is something to remove or to add - */ - if (filmsdbAll.size() == 0) { - loadFilms(); - } else { - try { - checkAddEntry(); - checkRemoveEntry(); - } catch (IOException | SQLException e) { - e.printStackTrace(); - } - } } - private void loadFilms() { - PreparedStatement ps; - PreparedStatement psS; - LOGGER.info("Database is empty, filling tables ..."); + // load the sources from sources.json + private void loadSources() { + // remove sources from table + mainWindowController.getSourcesList().removeAll(mainWindowController.getSourcesList()); + mainWindowController.streamingRoot.getChildren().removeAll(mainWindowController.streamingRoot.getChildren()); try { - ps = connection.prepareStatement("insert into film_local values (?, ?, ?, ?, ?)"); - psS = connection.prepareStatement("insert into film_streaming values (?, ?, ?, ?, ?, ?, ?, ?, ?)"); - - if (new File(mainWindowController.getPath()).exists()) { - // go through all the files in the directory - for (int j = 0; j != filmsDir.size(); j++) - { - ps.setInt(1, 0); // rating as integer 1. column - ps.setString(2, filmsDir.get(j)); // name as String without ending 2. column - ps.setString(3, filmsDirURL.get(j)); // path as String 3. column - ps.setString(4, "favorite_border_black"); - ps.setBoolean(5, false); - ps.addBatch(); // add command to prepared statement - } - } - - if (mainWindowController.getStreamingPath().equals("") || mainWindowController.getStreamingPath().equals(null)) { - LOGGER.warn("no path selected!"); - } else { - for (int i = 0; i < mainWindowController.getStreamingData().size(); i++) { - String fileNamea = mainWindowController.getStreamingPath() + "/" - + mainWindowController.getStreamingData().get(i).getStreamUrl(); + JsonArray sources = Json.parse(new FileReader(main.getDirectory() + "/sources.json")).asArray(); + for (JsonValue source : sources) { + String path = source.asObject().getString("path", ""); + String mode = source.asObject().getString("mode", ""); + mainWindowController.addSourceToTable(path, mode); // add source to source-table + if (mode.equals("local")) { + // getting all files from the selected directory + if (new File(path).exists()) { + for (String entry : new File(path).list()) { + filmsAll.add(cutOffEnd(entry)); + } + LOGGER.info("added files from: " + path); + } else { + LOGGER.error(path + "dosen't exist!"); + } + } else { + // getting all entries from the streaming lists try { - JsonObject object = Json.parse(new FileReader(fileNamea)).asObject(); + JsonObject object = Json.parse(new FileReader(path)).asObject(); JsonArray items = object.get("entries").asArray(); for (JsonValue item : items) { - psS.setInt(1, item.asObject().getInt("year", 0)); - psS.setInt(2, item.asObject().getInt("season", 0)); - psS.setInt(3, item.asObject().getInt("episode", 0)); - psS.setInt(4, 0); - psS.setString(5, item.asObject().getString("resolution", "")); - psS.setString(6, item.asObject().getString("titel", "")); - psS.setString(7, item.asObject().getString("streamUrl", "")); - psS.setString(8, "favorite_border_black"); - psS.setBoolean(9, false); - psS.addBatch(); // add command to prepared statement + filmsStream.add(item.asObject().getString("titel", "")); + filmsStreamURL.add(item.asObject().getString("streamUrl", "")); + filmsStreamData.add(path); + // TODO check if all this is needed, maybe only use one table! +// System.out.println(item.asObject().getString("titel", "")); +// System.out.println(item.asObject().getString("streamUrl", "")); +// System.out.println(fileName); } + LOGGER.info("added films from: " + path); } catch (IOException e) { LOGGER.error(e); + e.printStackTrace(); } } } - ps.executeBatch(); // execute statement to write entries into table - psS.executeBatch(); - connection.commit(); - ps.close(); - psS.close(); - } catch (SQLException e) { - LOGGER.error(e); + } catch (Exception e) { + e.printStackTrace(); } } // loading data from database to mainWindowController - public void loadData() { + public void loadDataToMWC() { LOGGER.info("loading data to mwc ..."); try { //load local Data @@ -333,39 +276,84 @@ public class DBController { } } } + + /** + * refresh database to contain all (new added) entries + * refresh the MainWindowController content, + * to contain all (new added) entries from the database + */ + public void refreshDataBase() { + LOGGER.info("refreshing the Database ..."); + + // clean all ArraLists + filmsdbAll.removeAll(filmsdbAll); + filmsdbDir.removeAll(filmsdbDir); + filmsdbStream.removeAll(filmsdbStream); + filmsdbStreamURL.removeAll(filmsdbStreamURL); + filmsAll.removeAll(filmsAll); + filmsStream.removeAll(filmsStream); + filmsStreamURL.removeAll(filmsStreamURL); + filmsStreamData.removeAll(filmsStreamData); + + loadSources(); // reload all sources + loadDatabase(); // reload all films saved in the DB + + + try { + checkAddEntry(); + checkRemoveEntry(); + } catch (Exception e) { + LOGGER.error("Error while refreshing the database", e); + } + + // remove all films from the mwc lists + mainWindowController.getLocalFilms().removeAll(mainWindowController.getLocalFilms()); + mainWindowController.getStreamingFilms().removeAll(mainWindowController.getStreamingFilms()); + mainWindowController.root.getChildren().removeAll(mainWindowController.root.getChildren()); + + loadDataToMWC(); // load the new data to the mwc + } /** * check if there are any entries that have been removed from the film-directory - * @throws SQLException */ - private void checkRemoveEntry() throws SQLException { + private void checkRemoveEntry() { LOGGER.info("checking for entrys to remove to DB ..."); - Statement stmt = connection.createStatement(); - - for (int i = 0; i < filmsdbDir.size(); i++) { - if (!filmsDir.contains(filmsdbDir.get(i))) { - try { - stmt.executeUpdate("delete from film_local where titel = \"" + filmsdbDir.get(i) + "\""); + + try { + Statement stmt = connection.createStatement(); + + for (String entry : filmsdbDir) { + if (!filmsAll.contains(cutOffEnd(entry))) { + stmt.executeUpdate("delete from film_local where titel = \"" + entry + "\""); connection.commit(); stmt.close(); - LOGGER.info("removed \"" + filmsdbDir.get(i) + "\" from database"); - } catch (Exception e) { - e.printStackTrace(); + LOGGER.info("removed \"" + entry + "\" from database"); } } - } - - for (int j = 0; j < filmsdbStreamURL.size(); j++) { - if (!filmsStreamURL.contains(filmsdbStreamURL.get(j))) { - try { - stmt.executeUpdate("delete from film_streaming where titel = \"" + filmsdbStream.get(j) + "\""); + + // TODO needs testing, then remove 1 + for (String entry : filmsdbStreamURL) { + if (!filmsStreamURL.contains(entry)) { + stmt.executeUpdate("delete from film_streaming where titel = \"" + entry + "\""); connection.commit(); stmt.close(); - LOGGER.info("removed \"" + filmsdbStream.get(j) + "\" from database"); - } catch (Exception e) { - e.printStackTrace(); + LOGGER.info("removed \"" + entry + "\" from database"); } } + + // this is 1 +// for (int j = 0; j < filmsdbStreamURL.size(); j++) { +// if (!filmsStreamURL.contains(filmsdbStreamURL.get(j))) { +// stmt.executeUpdate("delete from film_streaming where titel = \"" + filmsdbStream.get(j) + "\""); +// connection.commit(); +// stmt.close(); +// LOGGER.info("removed \"" + filmsdbStream.get(j) + "\" from database"); +// } +// } + + } catch (Exception e) { + LOGGER.error(e); } } @@ -378,50 +366,60 @@ public class DBController { */ private void checkAddEntry() throws SQLException, FileNotFoundException, IOException { String lastName = ""; - LOGGER.info("checking for entrys to add to DB ..."); - String[] entries = new File(mainWindowController.getPath()).list(); Statement stmt = connection.createStatement(); PreparedStatement ps = connection.prepareStatement("insert into film_streaming values (?, ?, ?, ?, ?, ?, ?, ?, ?)"); - int i = 0; - - for (int a = 0; a < filmsDir.size(); a++) { - if (!filmsdbDir.contains(filmsDir.get(a))) { - stmt.executeUpdate("insert into film_local values (0, \"" + cutOffEnd(entries[a]) + "\", \"" - + entries[a] + "\",\"favorite_border_black\",0)"); - connection.commit(); - stmt.close(); - LOGGER.info("added \"" + filmsDir.get(a) + "\" to database"); + LOGGER.info("checking for entrys to add to DB ..."); + int a = 0; + + // source is a single source of the sources list + for (tableData source : mainWindowController.getSourcesList()) { + // if it's a local source check the folder for new film + if (source.getStreamUrl().equals("local")) { + for (String entry : new File(source.getTitle()).list()) { + if (!filmsdbAll.contains(cutOffEnd(entry))) { + stmt.executeUpdate("insert into film_local values (0, \"" + cutOffEnd(entry) + "\", \"" + + source.getTitle() + "/" + entry + "\",\"favorite_border_black\",0)"); + connection.commit(); + stmt.close(); + LOGGER.info("added \"" + entry + "\" to database"); + filmsAll.add(cutOffEnd(entry)); + } + } + } else { + // if it's a streaming source check the file for new films + // TODO implement add check for streaming sources } } + // TODO comment and rework for (int b = 0; b < filmsStreamURL.size(); b++) { if (filmsdbStreamURL.contains(filmsStreamURL.get(b))) { } else { if (lastName != "" && lastName != filmsStreamData.get(b)) { - i = 0; + a = 0; } lastName = filmsStreamData.get(b); JsonObject object = Json.parse(new FileReader(filmsStreamData.get(b))).asObject(); JsonArray items = object.get("entries").asArray(); - LOGGER.info(items.size() + ", " + i + "; " + b); - String streamURL = items.get(i).asObject().getString("streamUrl", ""); - String titel = items.get(i).asObject().getString("titel", ""); + LOGGER.info(items.size() + ", " + a + "; " + b); + String streamURL = items.get(a).asObject().getString("streamUrl", ""); + String titel = items.get(a).asObject().getString("titel", ""); if (streamURL.equals(filmsStreamURL.get(b))) { LOGGER.info("added \"" + titel + "\""); - ps.setInt(1, items.get(i).asObject().getInt("year", 0)); - ps.setInt(2, items.get(i).asObject().getInt("season", 0)); - ps.setInt(3, items.get(i).asObject().getInt("episode", 0)); + ps.setInt(1, items.get(a).asObject().getInt("year", 0)); + ps.setInt(2, items.get(a).asObject().getInt("season", 0)); + ps.setInt(3, items.get(a).asObject().getInt("episode", 0)); ps.setInt(4, 0); - ps.setString(5, items.get(i).asObject().getString("resolution", "")); - ps.setString(6, items.get(i).asObject().getString("titel", "")); - ps.setString(7, items.get(i).asObject().getString("streamUrl", "")); + ps.setString(5, items.get(a).asObject().getString("resolution", "")); + ps.setString(6, items.get(a).asObject().getString("titel", "")); + ps.setString(7, items.get(a).asObject().getString("streamUrl", "")); ps.setString(8, "favorite_border_black"); ps.setBoolean(9, false); ps.addBatch(); // adds the entry } - i++; + a++; } } ps.executeBatch(); diff --git a/src/main/resources/fxml/MainWindow.fxml b/src/main/resources/fxml/MainWindow.fxml index 68383d1..0d89633 100644 --- a/src/main/resources/fxml/MainWindow.fxml +++ b/src/main/resources/fxml/MainWindow.fxml @@ -11,6 +11,7 @@ + @@ -68,11 +69,6 @@ - - - - - @@ -85,7 +81,7 @@ - + @@ -94,7 +90,7 @@ - + @@ -116,20 +112,6 @@ - - - - - - - @@ -179,11 +178,5 @@ - - - - - - diff --git a/src/main/resources/locals/HomeFlix-Local_de_DE.properties b/src/main/resources/locals/HomeFlix-Local_de_DE.properties index bfac394..b016f17 100644 --- a/src/main/resources/locals/HomeFlix-Local_de_DE.properties +++ b/src/main/resources/locals/HomeFlix-Local_de_DE.properties @@ -10,7 +10,8 @@ openFolder = Ordner \u00F6ffnen #settings translations homeflixSettingsLbl = HomeFlix Einstellungen filmDirTextField = Pfad... -chooseFolder = Ordner ausw\u00E4hlen +addDirectory = Ordner hinzuf\u00FCgen +addStreamSource = Stream Quelle hinzuf\u00FCgen mainColorLbl = Hauptfarbe: fontsizeLbl = Schriftgr\u00F6\u00DFe: languageLbl = Sprache: diff --git a/src/main/resources/locals/HomeFlix-Local_en_US.properties b/src/main/resources/locals/HomeFlix-Local_en_US.properties index d80d423..803fc48 100644 --- a/src/main/resources/locals/HomeFlix-Local_en_US.properties +++ b/src/main/resources/locals/HomeFlix-Local_en_US.properties @@ -10,7 +10,8 @@ openFolder = open Folder #settings translations homeflixSettingsLbl = HomeFlix Settings filmDirTextField = Path... -chooseFolder = choose Directory +addDirectory = add directory +addStreamSource = add stream source mainColorLbl = main color: fontsizeLbl = font size: languageLbl = local: