diff --git a/src/main/java/kellerkinder/HomeFlix/application/MainWindowController.java b/src/main/java/kellerkinder/HomeFlix/application/MainWindowController.java index b93b516..0883075 100644 --- a/src/main/java/kellerkinder/HomeFlix/application/MainWindowController.java +++ b/src/main/java/kellerkinder/HomeFlix/application/MainWindowController.java @@ -37,6 +37,7 @@ import java.util.Locale; import java.util.ResourceBundle; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.stream.Collectors; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -55,12 +56,8 @@ import com.jfoenix.transitions.hamburger.HamburgerBackArrowBasicTransition; import javafx.animation.TranslateTransition; import javafx.application.Platform; -import javafx.beans.value.ChangeListener; -import javafx.beans.value.ObservableValue; import javafx.collections.FXCollections; import javafx.collections.ObservableList; -import javafx.event.ActionEvent; -import javafx.event.EventHandler; import javafx.fxml.FXML; import javafx.scene.Node; import javafx.scene.control.ChoiceBox; @@ -168,21 +165,21 @@ public class MainWindowController { private XMLController xmlController; private Stage primaryStage; private static final Logger LOGGER = LogManager.getLogger(MainWindowController.class.getName()); - + private boolean menuTrue = false; private final String version = "0.7.0"; private final String buildNumber = "169"; private final String versionName = "toothless dragon"; private String btnStyle; - + private final int hashA = -647380320; private int last; private int indexTable; private int indexList; private int next; private FilmTabelDataType currentTableFilm = new FilmTabelDataType("", "", "", "", false, null, null); - + private ObservableList languages = FXCollections.observableArrayList("English (en_US)", "Deutsch (de_DE)"); private ObservableList branches = FXCollections.observableArrayList("stable", "beta"); private ObservableList filterData = FXCollections.observableArrayList(); @@ -196,19 +193,19 @@ public class MainWindowController { public MainWindowController() { // the constructor } - + @FXML public void initialize() { xmlController = new XMLController(); dbController = DBController.getInstance(); } - - public void init() { + + public void init() { LOGGER.info("Initializing Project-HomeFlix build " + buildNumber); - + xmlController.loadSettings(); // load settings checkAutoUpdate(); - + // initialize the GUI and the DBController primaryStage = (Stage) mainAnchorPane.getScene().getWindow(); // set primary stage for dialogs initTabel(); @@ -216,13 +213,13 @@ public class MainWindowController { initActions(); dbController.init(); refreshAllFilms(); - + // load sources list in gui addSourceToTable(); - + // posterModeStartup(); // TODO testing DO NOT USE THIS!! } - + // Initialize general UI elements private void initUI() { versionLbl.setText("Version: " + version + " (Build: " + buildNumber + ")"); @@ -234,20 +231,20 @@ public class MainWindowController { 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 + * Initialize the tables (treeTableViewfilm and sourcesTable) only needed for + * Tabel-Mode */ private void initTabel() { @@ -283,7 +280,6 @@ public class MainWindowController { burgerTask.setRate(-1.0); burgerTask.play(); menuTrue = false; - } else { sideMenuSlideIn(); burgerTask.setRate(1.0); @@ -294,173 +290,134 @@ public class MainWindowController { settingsScrollPane.setVisible(false); } }); - - 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) - XMLController.setUsrLocal(local); - setLocalUI(); - xmlController.saveSettings(); - } + + 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(new ChangeListener() { - @Override - public void changed(ObservableValue ov, Number value, Number new_value) { - if (branchChoisBox.getItems().get((int) new_value).toString() == "beta") { - XMLController.setUseBeta(true); - } else { - XMLController.setUseBeta(false); - } - 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(new ChangeListener() { - @Override - public void changed(ObservableValue ov, Number old_val, Number new_val) { - XMLController.setFontSize(fontsizeSlider.getValue()); - if (!getCurrentTitle().isEmpty()) { - setSelectedFilmInfo(dbController.readCache(getCurrentStreamUrl())); - } - xmlController.saveSettings(); + + fontsizeSlider.valueProperty().addListener(e -> { + XMLController.setFontSize(fontsizeSlider.getValue()); + if (!getCurrentTitle().isEmpty()) { + setSelectedFilmInfo(dbController.readCache(getCurrentStreamUrl())); } + xmlController.saveSettings(); }); - + // Table-Mode actions - searchTextField.textProperty().addListener(new ChangeListener() { - @Override - public void changed(ObservableValue observable, String oldValue, String newValue) { - ObservableList helpData; - filterData.clear(); - filmRoot.getChildren().clear(); + searchTextField.textProperty().addListener((e, oldValue, newValue) -> { + filmRoot.getChildren().clear(); + filterData.clear(); + filterData = filmsList.stream() + .filter(x -> x.getTitle().toLowerCase().contains(searchTextField.getText().toLowerCase())) + .collect(Collectors.toCollection(FXCollections::observableArrayList)); - helpData = filmsList; + addFilmsToTable(filterData); - 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 - } - } + if (searchTextField.getText().hashCode() == hashA) { + XMLController.setColor("000000"); + colorPicker.setValue(new Color(0, 0, 0, 1)); + applyColor(); + } + }); - for (int i = 0; i < filterData.size(); i++) { - filmRoot.getChildren().add(new TreeItem(filterData.get(i))); // add filtered data to root node after search - } - if (searchTextField.getText().hashCode() == hashA) { - XMLController.setColor("000000"); - colorPicker.setValue(new Color(0, 0, 0, 1)); - applyColor(); - } - } + like.setOnAction(e -> { + dbController.like(getCurrentStreamUrl()); + filmsList.set(indexList, dbController.getDatabaseFilm(getCurrentStreamUrl())); + refreshTableElement(); }); - - like.setOnAction(new EventHandler() { - @Override - public void handle(ActionEvent event) { - dbController.like(getCurrentStreamUrl()); - filmsList.set(indexList, dbController.getDatabaseFilm(getCurrentStreamUrl())); - refreshTableElement(); - } + + dislike.setOnAction(e -> { + dbController.dislike(getCurrentStreamUrl()); + filmsList.set(indexList, dbController.getDatabaseFilm(getCurrentStreamUrl())); + refreshTableElement(); }); - - dislike.setOnAction(new EventHandler() { - @Override - public void handle(ActionEvent event) { - dbController.dislike(getCurrentStreamUrl()); - filmsList.set(indexList, dbController.getDatabaseFilm(getCurrentStreamUrl())); - refreshTableElement(); - } - }); - - /** - * FIXME fix bug when sort by ASCENDING, wrong order - */ - columnFavorite.sortTypeProperty().addListener(new ChangeListener() { - @Override - public void changed(ObservableValue paramObservableValue, SortType paramT1, SortType paramT2) { - filmRoot.getChildren().clear(); - filterData.clear(); - - if (paramT2.equals(SortType.DESCENDING)) { - // add favorites at the top - for (FilmTabelDataType film : filmsList) { - if (film.getFavorite()) { - filterData.add(0, film); - } else { - filterData.add(film); - } - } - } else { - // add favorites at the bottom - for (FilmTabelDataType film : filmsList) { - if (!film.getFavorite()) { - filterData.add(0, film); - } else { - filterData.add(film); - } - } - } - - addFilmsToTable(filterData); - } - }); - - // Change-listener for treeTableViewfilm - filmsTreeTable.getSelectionModel().selectedItemProperty().addListener(new ChangeListener() { - @Override - public void changed(ObservableValue observable, Object oldVal, Object newVal) { - if (filmsTreeTable.getSelectionModel().getSelectedItem() == null) { - return; - } - - currentTableFilm = filmsTreeTable.getSelectionModel().getSelectedItem().getValue(); // set the current film object - indexTable = filmsTreeTable.getSelectionModel().getSelectedIndex(); // get selected items table index + + // FIXME fix bug when sort by ASCENDING, wrong order + columnFavorite.sortTypeProperty().addListener((e, paramT1, paramT2) -> { + filmRoot.getChildren().clear(); + filterData.clear(); + + if (paramT2.equals(SortType.DESCENDING)) { + // add favorites at the top for (FilmTabelDataType film : filmsList) { - if (film.equals(currentTableFilm)) { - indexList = filmsList.indexOf(film); // get selected items list index + if (film.getFavorite()) { + filterData.add(0, film); + } else { + filterData.add(film); } } - - last = indexTable - 1; - next = indexTable + 1; - - - if ((currentTableFilm.getCached().isAfter(lastValidCache) )|| dbController.searchCacheByURL(getCurrentStreamUrl())) { - LOGGER.info("loading from cache: " + getCurrentTitle()); - setSelectedFilmInfo(dbController.readCache(getCurrentStreamUrl())); -// System.out.println("cache date is: " + currentTableFilm.getCached().toString()); - } else { -// System.out.println("either not cached or to old!"); -// System.out.println("cache date is: " + currentTableFilm.getCached().toString()); - // this is not perfect! - new Thread(new Runnable() { - public void run() { - Thread omdbAPIThread = new Thread(new OMDbAPIController(dbController, currentTableFilm, XMLController.getOmdbAPIKey())); - omdbAPIThread.setName("OMDbAPI"); - omdbAPIThread.start(); - - synchronized (omdbAPIThread) { - try { - omdbAPIThread.wait(); - } catch (InterruptedException e) { - LOGGER.error(e); - } - // update the GUI for the selected film - Platform.runLater(() -> { - setSelectedFilmInfo(dbController.readCache(getCurrentStreamUrl())); - }); - } - } - }).start(); + } else { + // add favorites at the bottom + for (FilmTabelDataType film : filmsList) { + if (!film.getFavorite()) { + filterData.add(0, film); + } else { + filterData.add(film); + } } } + + addFilmsToTable(filterData); }); - + + // Change-listener for treeTableViewfilm + filmsTreeTable.getSelectionModel().selectedItemProperty().addListener((e, paramT1, paramT2) -> { + if (filmsTreeTable.getSelectionModel().getSelectedItem() == null) { + return; + } + + currentTableFilm = filmsTreeTable.getSelectionModel().getSelectedItem().getValue(); // set the current film object + indexTable = filmsTreeTable.getSelectionModel().getSelectedIndex(); // get selected items table index + for (FilmTabelDataType film : filmsList) { + if (film.equals(currentTableFilm)) { + indexList = filmsList.indexOf(film); // get selected items list index + } + } + + last = indexTable - 1; + next = indexTable + 1; + + if ((currentTableFilm.getCached().isAfter(lastValidCache)) && dbController.searchCacheByURL(getCurrentStreamUrl())) { + LOGGER.info("loading from cache: " + getCurrentTitle()); + setSelectedFilmInfo(dbController.readCache(getCurrentStreamUrl())); + } else { + // this is not perfect! + new Thread(() -> { + Thread omdbAPIThread = new Thread(new OMDbAPIController(dbController, currentTableFilm, XMLController.getOmdbAPIKey())); + omdbAPIThread.setName("OMDbAPI"); + omdbAPIThread.start(); + + synchronized (omdbAPIThread) { + try { + omdbAPIThread.wait(); + } catch (InterruptedException e1) { + LOGGER.error(e1); + } + // update the GUI for the selected film + Platform.runLater(() -> { + setSelectedFilmInfo(dbController.readCache(getCurrentStreamUrl())); + }); + } + }).start(); + } + }); + // Poster-Mode actions } - + // Table-Mode fxml actions @FXML private void playbtnclicked() { @@ -469,7 +426,7 @@ public class MainWindowController { LOGGER.info("rootNode found, getting last watched episode"); currentTableFilm = dbController.getLastWatchedEpisode(currentTableFilm.getTitle()); } - + if (isSupportedFormat(currentTableFilm)) { new Player(getCurrentTableFilm()); } else { @@ -491,8 +448,7 @@ public class MainWindowController { } if (output.contains("which: no vlc") || output == "") { JFXInfoAlert vlcInfoAlert = new JFXInfoAlert("Info", - XMLController.getLocalBundle().getString("vlcNotInstalled"), - btnStyle, primaryStage); + XMLController.getLocalBundle().getString("vlcNotInstalled"), btnStyle, primaryStage); vlcInfoAlert.showAndWait(); } else { try { @@ -514,11 +470,11 @@ 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); @@ -527,26 +483,26 @@ public class MainWindowController { } } } - + @FXML - private void returnBtnclicked(){ + private void returnBtnclicked() { filmsTreeTable.getSelectionModel().select(last); } - + @FXML - private void forwardBtnclicked(){ + private void forwardBtnclicked() { filmsTreeTable.getSelectionModel().select(next); } - + // 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: " + version + " (Build: " + buildNumber + ") \"" + versionName + + "\" \n" + XMLController.getLocalBundle().getString("infoText"); JFXInfoAlert infoAlert = new JFXInfoAlert("Project HomeFlix", bodyText, btnStyle, primaryStage); infoAlert.showAndWait(); } - + @FXML private void settingsBtnclicked() { if (settingsScrollPane.isVisible()) { @@ -555,9 +511,9 @@ public class MainWindowController { settingsScrollPane.setVisible(true); } } - + @FXML - private void addDirectoryBtnAction(){ + private void addDirectoryBtnAction() { DirectoryChooser directoryChooser = new DirectoryChooser(); directoryChooser.setTitle(XMLController.getLocalBundle().getString("addDirectory")); File selectedFolder = directoryChooser.showDialog(primaryStage); @@ -567,9 +523,9 @@ public class MainWindowController { LOGGER.error("The selected folder dosen't exist!"); } } - + @FXML - private void addStreamSourceBtnAction(){ + private void addStreamSourceBtnAction() { FileChooser fileChooser = new FileChooser(); fileChooser.setTitle(XMLController.getLocalBundle().getString("addStreamSource")); File selectedFile = fileChooser.showOpenDialog(primaryStage); @@ -579,42 +535,42 @@ public class MainWindowController { 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(); + updateThread.start(); } - + @FXML private void autoUpdateToggleBtnAction() { XMLController.setAutoUpdate(!XMLController.isAutoUpdate()); xmlController.saveSettings(); } - + @FXML - private void autoplayToggleBtnAction(){ + private void autoplayToggleBtnAction() { XMLController.setAutoplay(!XMLController.isAutoplay()); xmlController.saveSettings(); } - + // refresh the selected child of the root node private void refreshTableElement() { filmRoot.getChildren().get(indexTable).setValue(filmsList.get(indexList)); } - + /** - * refresh all films in filmsList and in filmsTable - * clear the FilmsList and FilmRoot children, then update the database + * refresh all films in filmsList and in filmsTable clear the FilmsList and + * FilmRoot children, then update the database */ private void refreshAllFilms() { filmsList.clear(); @@ -623,54 +579,74 @@ public class MainWindowController { filmsList = dbController.getDatabaseFilmsList(); // returns a list of all films stored in the database addFilmsToTable(filmsList); } - + /** - * add data from films-list to films-table + * TODO rework! add data from a ObservableList to the films-table + * + * @param elementsList a list of elements you want to add */ public void addFilmsToTable(ObservableList elementsList) { for (FilmTabelDataType element : elementsList) { - + // only if the entry contains a season and a episode it's a valid series if (!element.getSeason().isEmpty() && !element.getEpisode().isEmpty()) { - // check if there is a series node to add the item - for (int i = 0; i < filmRoot.getChildren().size(); i++) { - if (filmRoot.getChildren().get(i).getValue().getTitle().equals(element.getTitle())) { - // if a root node exists, add element as child - TreeItem episodeNode = new TreeItem<>(new FilmTabelDataType( - element.getStreamUrl(), element.getTitle(), element.getSeason(), element.getEpisode(), - element.getFavorite(), element.getCached(), element.getImage())); - filmRoot.getChildren().get(i).getChildren().add(episodeNode); - } else if (filmRoot.getChildren().get(i).nextSibling() == null) { - // if no root node exists, create one and add element as child - TreeItem seriesRootNode = new TreeItem<>(new FilmTabelDataType( - element.getTitle() + "_rootNode", element.getTitle(), "", "", element.getFavorite(), - element.getCached() , element.getImage())); - filmRoot.getChildren().add(seriesRootNode); + // if there is any node check if it's the root node to the episode + // else there is no node at all so we must create a new + if (filmRoot.getChildren().size() > 0) { + for (int i = 0; i < filmRoot.getChildren().size(); i++) { + // if a root node exists, add element + // else create a new root node and add the element (if rootNode is the last + // node) (works since we edit the element!) + if (filmRoot.getChildren().get(i).getValue().getTitle().equals(element.getTitle())) { + TreeItem episodeNode = new TreeItem<>( + new FilmTabelDataType(element.getStreamUrl(), element.getTitle(), + element.getSeason(), element.getEpisode(), element.getFavorite(), + element.getCached(), element.getImage())); + filmRoot.getChildren().get(i).getChildren().add(episodeNode); + } else if (filmRoot.getChildren().get(i).nextSibling() == null) { + TreeItem seriesRootNode = new TreeItem<>( + new FilmTabelDataType(element.getTitle() + "_rootNode", element.getTitle(), "", "", + element.getFavorite(), element.getCached(), element.getImage())); + filmRoot.getChildren().add(seriesRootNode); + } } + } else { + // add new root node + TreeItem seriesRootNode = new TreeItem<>( + new FilmTabelDataType(element.getTitle() + "_rootNode", element.getTitle(), "", "", + element.getFavorite(), element.getCached(), element.getImage())); + filmRoot.getChildren().add(seriesRootNode); + + // add new element + TreeItem episodeNode = new TreeItem<>(new FilmTabelDataType( + element.getStreamUrl(), element.getTitle(), element.getSeason(), element.getEpisode(), + element.getFavorite(), element.getCached(), element.getImage())); + filmRoot.getChildren().get(0).getChildren().add(episodeNode); } + } else { // if season and episode are empty, we can assume the object is a film filmRoot.getChildren().add(new TreeItem(element)); } } } - + // 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(source)); // add data to root-node + for (SourceDataType source : sourcesList) { + sourceRoot.getChildren().add(new TreeItem(source)); // add data to root-node } } - + /** * add a source to the newsources list + * * @param path to the source * @param mode of the source (local or streaming) */ public void addSource(String path, String mode) { - JsonObject source = null; JsonArray newsources = null; try { @@ -683,7 +659,7 @@ public class MainWindowController { } // add new source - source = Json.object().add("path", path).add("mode", mode); + JsonObject source = Json.object().add("path", path).add("mode", mode); newsources.add(source); Writer writer = new FileWriter(XMLController.getDirHomeFlix() + "/sources.json"); newsources.writeTo(writer); @@ -691,20 +667,18 @@ public class MainWindowController { } catch (IOException e) { LOGGER.error(e); } - + // clear old sources list/table getSourcesList().clear(); sourceRoot.getChildren().clear(); - - // clear the FilmsList and FilmRoot children, then update the database - refreshAllFilms(); - + + 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 + * set the color of the GUI-Elements if usedColor is less than checkColor set + * text fill white, else black */ private void applyColor() { String menuBtnStyle; @@ -712,32 +686,34 @@ public class MainWindowController { BigInteger checkColor = new BigInteger("78909cff", 16); if (usedColor.compareTo(checkColor) == -1) { - btnStyle = "-fx-button-type: RAISED; -fx-background-color: #" + XMLController.getColor() + "; -fx-text-fill: WHITE;"; + btnStyle = "-fx-button-type: RAISED; -fx-background-color: #" + XMLController.getColor() + + "; -fx-text-fill: WHITE;"; menuBtnStyle = "-fx-text-fill: WHITE;"; - + playbtn.setGraphic(new ImageView(new Image("icons/ic_play_arrow_white_18dp_1x.png"))); returnBtn.setGraphic(new ImageView(new Image("icons/ic_skip_previous_white_18dp_1x.png"))); forwardBtn.setGraphic(new ImageView(new Image("icons/ic_skip_next_white_18dp_1x.png"))); - + menuHam.getStyleClass().clear(); menuHam.getStyleClass().add("jfx-hamburgerW"); } else { - btnStyle = "-fx-button-type: RAISED; -fx-background-color: #" + XMLController.getColor() + "; -fx-text-fill: BLACK;"; + btnStyle = "-fx-button-type: RAISED; -fx-background-color: #" + XMLController.getColor() + + "; -fx-text-fill: BLACK;"; menuBtnStyle = "-fx-text-fill: BLACK;"; - + playbtn.setGraphic(new ImageView(new Image("icons/ic_play_arrow_black_18dp_1x.png"))); returnBtn.setGraphic(new ImageView(new Image("icons/ic_skip_previous_black_18dp_1x.png"))); forwardBtn.setGraphic(new ImageView(new Image("icons/ic_skip_next_black_18dp_1x.png"))); - + menuHam.getStyleClass().clear(); menuHam.getStyleClass().add("jfx-hamburgerB"); } - + // boxes and TextFields sideMenuVBox.setStyle("-fx-background-color: #" + XMLController.getColor() + ";"); topHBox.setStyle("-fx-background-color: #" + XMLController.getColor() + ";"); searchTextField.setFocusColor(Color.valueOf(XMLController.getColor())); - + // normal buttons addDirectoryBtn.setStyle(btnStyle); addStreamSourceBtn.setStyle(btnStyle); @@ -746,12 +722,12 @@ public class MainWindowController { openfolderbtn.setStyle(btnStyle); returnBtn.setStyle(btnStyle); forwardBtn.setStyle(btnStyle); - + // menu buttons settingsBtn.setStyle(menuBtnStyle); aboutBtn.setStyle(menuBtnStyle); } - + // slide in in 400ms private void sideMenuSlideIn() { sideMenuVBox.setVisible(true); @@ -760,7 +736,7 @@ public class MainWindowController { translateTransition.setToX(0); translateTransition.play(); } - + // slide out in 400ms private void sideMenuSlideOut() { TranslateTransition translateTransition = new TranslateTransition(Duration.millis(400), sideMenuVBox); @@ -768,7 +744,7 @@ public class MainWindowController { translateTransition.setToX(-150); translateTransition.play(); } - + /** * set the local based on the languageChoisBox selection */ @@ -807,11 +783,11 @@ public class MainWindowController { columnSeason.setText(XMLController.getLocalBundle().getString("columnSeason")); columnEpisode.setText(XMLController.getLocalBundle().getString("columnEpisode")); } - + private void setSelectedFilmInfo(String[] cacheData) { Font font = Font.font("System", FontWeight.BOLD, (int) Math.round(XMLController.getFontSize())); ObservableList textFlow = getTextFlow().getChildren(); - + // TODO this should move! *** Text[] nameText = new Text[20]; nameText[0] = new Text(XMLController.getLocalBundle().getString("title") + ": "); @@ -836,23 +812,23 @@ public class MainWindowController { nameText[19] = new Text(XMLController.getLocalBundle().getString("website") + ": "); // *** - // set the correct font for the nameText + // set the correct font for the nameText for (Text text : nameText) { text.setFont(font); } - + // clear the textFlow and add the new text textFlow.clear(); - + // TODO rework - for(int i = 0; i < 20; i++) { + for (int i = 0; i < 20; i++) { if (cacheData[i] != null && (i == 5 || i == 6) && cacheData[5].length() == 0) { // do nothing - } else if(cacheData[i] != null){ + } else if (cacheData[i] != null) { textFlow.addAll(nameText[i], new Text(cacheData[i] + "\n")); } } - + getTextFlow().setStyle("-fx-font-size : " + ((int) Math.round(XMLController.getFontSize()) + 1) + "px;"); // add the image @@ -867,7 +843,7 @@ public class MainWindowController { posterImageView.setImage(new Image(cacheData[20])); } } - + // if AutoUpdate, then check for updates private void checkAutoUpdate() { @@ -884,49 +860,50 @@ public class MainWindowController { } } } - + /** - * check if a film is supported by the HomeFlixPlayer or not - * this is the case if the mime type is mp4 + * check if a film is supported by the HomeFlixPlayer or not this is the case if + * the mime type is mp4 + * * @param entry the film you want to check * @return true if so, false if not */ private boolean isSupportedFormat(FilmTabelDataType film) { - String mimeType = URLConnection.guessContentTypeFromName(film.getStreamUrl()); - return mimeType != null && (mimeType.contains("mp4") || mimeType.contains("vp6")); + String mimeType = URLConnection.guessContentTypeFromName(film.getStreamUrl()); + return mimeType != null && (mimeType.contains("mp4") || mimeType.contains("vp6")); } - + /** * Poser Mode WIP */ - + private void posterModeStartup() { checkAllPosters(); } - + /** * check if all posters are cached, if not cache the missing ones */ private void checkAllPosters() { // get all not cached entries, none of them should have a cached poster ExecutorService executor = Executors.newFixedThreadPool(5); - + for (FilmTabelDataType entry : dbController.getAllNotCachedEntries()) { System.out.println(entry.getStreamUrl() + " is NOT cached!"); - + Runnable OMDbAPIWorker = new OMDbAPIController(dbController, entry, XMLController.getOmdbAPIKey()); executor.execute(OMDbAPIWorker); } executor.shutdown(); - + // TODO show loading screen - + // update all elements from the database refreshAllFilms(); } // getter and setter - + public FilmTabelDataType getCurrentTableFilm() { return currentTableFilm; } @@ -942,7 +919,7 @@ public class MainWindowController { public int getIndexTable() { return indexTable; } - + public int getIndexList() { return indexList; }