fixed missing elements when searching
* minor clean up
This commit is contained in:
		@ -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;
 | 
			
		||||
@ -246,8 +243,8 @@ public class MainWindowController {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * 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);
 | 
			
		||||
@ -295,91 +291,62 @@ public class MainWindowController {
 | 
			
		||||
			}
 | 
			
		||||
		});
 | 
			
		||||
 | 
			
		||||
		languageChoisBox.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener<Number>() {
 | 
			
		||||
			@Override
 | 
			
		||||
			public void changed(ObservableValue<? extends Number> ov, Number value, Number new_value) {
 | 
			
		||||
				String local = languageChoisBox.getItems().get((int) new_value).toString();
 | 
			
		||||
		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<Number>() {
 | 
			
		||||
			@Override
 | 
			
		||||
			public void changed(ObservableValue<? extends Number> ov, Number value, Number new_value) {
 | 
			
		||||
				if (branchChoisBox.getItems().get((int) new_value).toString() == "beta") {
 | 
			
		||||
		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<Number>() {
 | 
			
		||||
			@Override
 | 
			
		||||
			public void changed(ObservableValue<? extends Number> ov, Number old_val, Number new_val) {
 | 
			
		||||
		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<String>() {
 | 
			
		||||
			@Override
 | 
			
		||||
			public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
 | 
			
		||||
				ObservableList<FilmTabelDataType> helpData;
 | 
			
		||||
				filterData.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
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				for (int i = 0; i < filterData.size(); i++) {
 | 
			
		||||
					filmRoot.getChildren().add(new TreeItem<FilmTabelDataType>(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(new EventHandler<ActionEvent>() {
 | 
			
		||||
			@Override
 | 
			
		||||
			public void handle(ActionEvent event) {
 | 
			
		||||
		like.setOnAction(e -> {
 | 
			
		||||
			dbController.like(getCurrentStreamUrl());
 | 
			
		||||
			filmsList.set(indexList, dbController.getDatabaseFilm(getCurrentStreamUrl()));
 | 
			
		||||
			refreshTableElement();
 | 
			
		||||
			}
 | 
			
		||||
		});
 | 
			
		||||
 | 
			
		||||
		dislike.setOnAction(new EventHandler<ActionEvent>() {
 | 
			
		||||
			@Override
 | 
			
		||||
			public void handle(ActionEvent event) {
 | 
			
		||||
		dislike.setOnAction(e -> {
 | 
			
		||||
			dbController.dislike(getCurrentStreamUrl());
 | 
			
		||||
			filmsList.set(indexList, dbController.getDatabaseFilm(getCurrentStreamUrl()));
 | 
			
		||||
			refreshTableElement();
 | 
			
		||||
			}
 | 
			
		||||
		});
 | 
			
		||||
 | 
			
		||||
		/**
 | 
			
		||||
		 * FIXME fix bug when sort by ASCENDING, wrong order
 | 
			
		||||
		 */
 | 
			
		||||
		columnFavorite.sortTypeProperty().addListener(new ChangeListener<SortType>() {
 | 
			
		||||
			@Override
 | 
			
		||||
			public void changed(ObservableValue<? extends SortType> paramObservableValue, SortType paramT1, SortType paramT2) {
 | 
			
		||||
		// FIXME fix bug when sort by ASCENDING, wrong order
 | 
			
		||||
		columnFavorite.sortTypeProperty().addListener((e, paramT1, paramT2) -> {
 | 
			
		||||
			filmRoot.getChildren().clear();
 | 
			
		||||
			filterData.clear();
 | 
			
		||||
 | 
			
		||||
@ -404,13 +371,10 @@ public class MainWindowController {
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			addFilmsToTable(filterData);
 | 
			
		||||
			}
 | 
			
		||||
		});
 | 
			
		||||
 | 
			
		||||
		// Change-listener for treeTableViewfilm
 | 
			
		||||
		filmsTreeTable.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<Object>() {
 | 
			
		||||
			@Override
 | 
			
		||||
			public void changed(ObservableValue<?> observable, Object oldVal, Object newVal) {
 | 
			
		||||
		filmsTreeTable.getSelectionModel().selectedItemProperty().addListener((e, paramT1, paramT2) -> {
 | 
			
		||||
			if (filmsTreeTable.getSelectionModel().getSelectedItem() == null) {
 | 
			
		||||
				return;
 | 
			
		||||
			}
 | 
			
		||||
@ -426,17 +390,12 @@ public class MainWindowController {
 | 
			
		||||
			last = indexTable - 1;
 | 
			
		||||
			next = indexTable + 1;
 | 
			
		||||
 | 
			
		||||
				
 | 
			
		||||
				if ((currentTableFilm.getCached().isAfter(lastValidCache) )|| dbController.searchCacheByURL(getCurrentStreamUrl())) {
 | 
			
		||||
			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() {
 | 
			
		||||
				new Thread(() -> {
 | 
			
		||||
					Thread omdbAPIThread = new Thread(new OMDbAPIController(dbController, currentTableFilm, XMLController.getOmdbAPIKey()));
 | 
			
		||||
					omdbAPIThread.setName("OMDbAPI");
 | 
			
		||||
					omdbAPIThread.start();
 | 
			
		||||
@ -444,18 +403,16 @@ public class MainWindowController {
 | 
			
		||||
					synchronized (omdbAPIThread) {
 | 
			
		||||
						try {
 | 
			
		||||
							omdbAPIThread.wait();
 | 
			
		||||
								} catch (InterruptedException e) {
 | 
			
		||||
									LOGGER.error(e);
 | 
			
		||||
						} catch (InterruptedException e1) {
 | 
			
		||||
							LOGGER.error(e1);
 | 
			
		||||
						}
 | 
			
		||||
						// update the GUI for the selected film
 | 
			
		||||
						Platform.runLater(() -> {
 | 
			
		||||
							setSelectedFilmInfo(dbController.readCache(getCurrentStreamUrl()));
 | 
			
		||||
						});
 | 
			
		||||
					}
 | 
			
		||||
						}
 | 
			
		||||
				}).start();
 | 
			
		||||
			}
 | 
			
		||||
			}
 | 
			
		||||
		});
 | 
			
		||||
 | 
			
		||||
		// Poster-Mode actions
 | 
			
		||||
@ -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 {
 | 
			
		||||
@ -541,8 +497,8 @@ public class MainWindowController {
 | 
			
		||||
	// 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();
 | 
			
		||||
	}
 | 
			
		||||
@ -613,8 +569,8 @@ public class MainWindowController {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * 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();
 | 
			
		||||
@ -625,7 +581,9 @@ public class MainWindowController {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * 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<FilmTabelDataType> elementsList) {
 | 
			
		||||
 | 
			
		||||
@ -634,22 +592,40 @@ public class MainWindowController {
 | 
			
		||||
			// 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		
 | 
			
		||||
				// 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())) {
 | 
			
		||||
						// if a root node exists, add element as child
 | 
			
		||||
						TreeItem<FilmTabelDataType> episodeNode = new TreeItem<>(new FilmTabelDataType(
 | 
			
		||||
								element.getStreamUrl(), element.getTitle(), element.getSeason(), element.getEpisode(),
 | 
			
		||||
								element.getFavorite(), element.getCached(), element.getImage()));
 | 
			
		||||
							TreeItem<FilmTabelDataType> 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<FilmTabelDataType> seriesRootNode = new TreeItem<>(new FilmTabelDataType(
 | 
			
		||||
								element.getTitle() + "_rootNode", element.getTitle(), "", "", element.getFavorite(),
 | 
			
		||||
								element.getCached() , element.getImage()));
 | 
			
		||||
							TreeItem<FilmTabelDataType> 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<FilmTabelDataType> seriesRootNode = new TreeItem<>(
 | 
			
		||||
							new FilmTabelDataType(element.getTitle() + "_rootNode", element.getTitle(), "", "",
 | 
			
		||||
									element.getFavorite(), element.getCached(), element.getImage()));
 | 
			
		||||
					filmRoot.getChildren().add(seriesRootNode);
 | 
			
		||||
 | 
			
		||||
					// add new element
 | 
			
		||||
					TreeItem<FilmTabelDataType> 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<FilmTabelDataType>(element));
 | 
			
		||||
@ -666,11 +642,11 @@ public class MainWindowController {
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * 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);
 | 
			
		||||
@ -696,15 +672,13 @@ public class MainWindowController {
 | 
			
		||||
		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,7 +686,8 @@ 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")));
 | 
			
		||||
@ -722,7 +697,8 @@ public class MainWindowController {
 | 
			
		||||
			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")));
 | 
			
		||||
@ -886,8 +862,9 @@ 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
 | 
			
		||||
	 */
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user