release 0.8.0 #12
							
								
								
									
										6
									
								
								pom.xml
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								pom.xml
									
									
									
									
									
								
							| @ -27,19 +27,19 @@ | ||||
| 		<dependency> | ||||
| 			<groupId>org.openjfx</groupId> | ||||
| 			<artifactId>javafx-controls</artifactId> | ||||
| 			<version>12</version> | ||||
| 			<version>12.0.1</version> | ||||
| 		</dependency> | ||||
|  | ||||
| 		<dependency> | ||||
| 			<groupId>org.openjfx</groupId> | ||||
| 			<artifactId>javafx-fxml</artifactId> | ||||
| 			<version>12</version> | ||||
| 			<version>12.0.1</version> | ||||
| 		</dependency> | ||||
|  | ||||
| 		<dependency> | ||||
| 			<groupId>org.openjfx</groupId> | ||||
| 			<artifactId>javafx-media</artifactId> | ||||
| 			<version>12</version> | ||||
| 			<version>12.0.1</version> | ||||
| 		</dependency> | ||||
|  | ||||
| 		<dependency> | ||||
|  | ||||
| @ -91,6 +91,7 @@ import kellerkinder.HomeFlix.controller.OMDbAPIController; | ||||
| import kellerkinder.HomeFlix.controller.UpdateController; | ||||
| import kellerkinder.HomeFlix.controller.XMLController; | ||||
| import kellerkinder.HomeFlix.datatypes.FilmTabelDataType; | ||||
| import kellerkinder.HomeFlix.datatypes.PosterModeElement; | ||||
| import kellerkinder.HomeFlix.datatypes.SourceDataType; | ||||
| import kellerkinder.HomeFlix.player.Player; | ||||
|  | ||||
| @ -157,8 +158,12 @@ public class MainWindowController { | ||||
| 	@FXML private JFXButton forwardBtn; | ||||
|  | ||||
| 	// poster-mode | ||||
| 	@FXML private AnchorPane posterModeAnchorPane; | ||||
| 	@FXML private ScrollPane posterModeScrollPane; | ||||
| 	@FXML private AnchorPane posterModeAnchorPane; | ||||
| 	 | ||||
| 	private int xPos = -200; | ||||
| 	private int yPos = 17; | ||||
| 	private int xNextElement = 0; | ||||
| 	 | ||||
| 	private DBController dbController; | ||||
| 	private UpdateController updateController; | ||||
| @ -184,6 +189,7 @@ public class MainWindowController { | ||||
| 	private ObservableList<String> branches = FXCollections.observableArrayList("stable", "beta"); | ||||
| 	private ObservableList<FilmTabelDataType> filterData = FXCollections.observableArrayList(); | ||||
| 	private ObservableList<FilmTabelDataType> filmsList = FXCollections.observableArrayList(); | ||||
| 	private ObservableList<PosterModeElement> posterEmenents = FXCollections.observableArrayList(); | ||||
| 	private static ObservableList<SourceDataType> sourcesList = FXCollections.observableArrayList(); | ||||
| 	private MenuItem like = new MenuItem("like"); | ||||
| 	private MenuItem dislike = new MenuItem("dislike"); // TODO one option (like or dislike) | ||||
| @ -335,13 +341,13 @@ public class MainWindowController { | ||||
|  | ||||
| 		like.setOnAction(e -> { | ||||
| 			dbController.like(getCurrentStreamUrl()); | ||||
| 			filmsList.set(indexList, dbController.getDatabaseFilm(getCurrentStreamUrl())); | ||||
| 			filmsList.set(indexList, dbController.getStream(getCurrentStreamUrl())); | ||||
| 			refreshTableElement(); | ||||
| 		}); | ||||
|  | ||||
| 		dislike.setOnAction(e -> { | ||||
| 			dbController.dislike(getCurrentStreamUrl()); | ||||
| 			filmsList.set(indexList, dbController.getDatabaseFilm(getCurrentStreamUrl())); | ||||
| 			filmsList.set(indexList, dbController.getStream(getCurrentStreamUrl())); | ||||
| 			refreshTableElement(); | ||||
| 		}); | ||||
|  | ||||
| @ -571,10 +577,14 @@ public class MainWindowController { | ||||
| 	 */ | ||||
| 	private void refreshAllFilms() { | ||||
| 		filmsList.clear(); | ||||
| 		filmRoot.getChildren().clear(); | ||||
| 		dbController.refreshDataBase(); // refreshes the database after a source path was added | ||||
| 		filmsList = dbController.getDatabaseFilmsList(); // returns a list of all films stored in the database | ||||
| 		filmsList = dbController.getStreamsList(); // returns a list of all films stored in the database | ||||
| 		 | ||||
| 		// refresh filmRoot in filmsTreeTable | ||||
| 		filmRoot.getChildren().clear(); | ||||
| 		addFilmsToTable(filmsList); | ||||
| 		 | ||||
| 		// | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| @ -872,6 +882,7 @@ public class MainWindowController { | ||||
|  | ||||
| 	private void posterModeStartup() { | ||||
| 		checkAllPosters(); | ||||
| 		addGUIElements(); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| @ -890,10 +901,55 @@ public class MainWindowController { | ||||
| 		executor.shutdown(); | ||||
|  | ||||
| 		// TODO show loading screen | ||||
| //		executor.awaitTermination(1, TimeUnit.MINUTES); // we might need this as otherwise it would load before all tasks are finished | ||||
|  | ||||
| 		// update all elements from the database | ||||
| 		refreshAllFilms(); | ||||
| 		System.out.println("finished refresh"); | ||||
| 	} | ||||
| 	 | ||||
| 	/** | ||||
| 	 * add all cached films/series to the PosterMode GUI | ||||
| 	 */ | ||||
| 	private void addGUIElements() { | ||||
| 		// refresh the posterModeElements list | ||||
| 		posterEmenents.clear(); | ||||
| 		posterEmenents = dbController.getPosterElementsList(); // returns a list of all PosterElements stored in the database | ||||
| 		 | ||||
| 		posterModeAnchorPane.getChildren().clear();	// remove all GUIElements from the posterModeAnchorPane | ||||
| 		 | ||||
| 		// reset the position | ||||
| 	    xPos = -200; | ||||
| 	    yPos = 17; | ||||
| 	    xNextElement = 0; | ||||
| 		 | ||||
| 		// add all films/series as new GUIElements to the posterModeAnchorPane | ||||
| 		for(PosterModeElement element : posterEmenents) { | ||||
| 			generatePosition(); | ||||
| 			element.setLayoutX(xPos); | ||||
| 			element.setLayoutY(yPos); | ||||
| 			posterModeAnchorPane.getChildren().add(element); | ||||
| 		} | ||||
| 		 | ||||
| 	} | ||||
| 	 | ||||
|     /** | ||||
|      * xMaxElements based on window width -36 | ||||
|      * calculates how many games can be displayed in one row | ||||
|      */ | ||||
|     private void generatePosition() { | ||||
|     	int xMaxElements = (int) Math.floor((mainAnchorPane.getWidth() - 36) / 217); | ||||
|     	 | ||||
|     	if(xNextElement >= xMaxElements){ | ||||
| //    		oldXPosHelper = xNextElement; // only needed if window resizing is allowed | ||||
|     		xPos = 17; | ||||
|     		yPos = yPos + 345;		 | ||||
|     		xNextElement = 1; | ||||
|     	}else{ | ||||
|     		xPos = xPos + 217; | ||||
|     		xNextElement++; | ||||
|     	} | ||||
|     } | ||||
|  | ||||
| 	// getter and setter | ||||
|  | ||||
|  | ||||
| @ -21,6 +21,7 @@ | ||||
|  | ||||
| package kellerkinder.HomeFlix.controller; | ||||
|  | ||||
| import java.io.File; | ||||
| import java.io.FileNotFoundException; | ||||
| import java.io.IOException; | ||||
| import java.net.URLConnection; | ||||
| @ -44,6 +45,7 @@ import javafx.scene.image.ImageView; | ||||
| import kellerkinder.HomeFlix.datatypes.DatabaseDataType; | ||||
| import kellerkinder.HomeFlix.datatypes.FilmTabelDataType; | ||||
| import kellerkinder.HomeFlix.datatypes.OMDbAPIResponseDataType; | ||||
| import kellerkinder.HomeFlix.datatypes.PosterModeElement; | ||||
|  | ||||
| public class DBController { | ||||
| 	 | ||||
| @ -149,11 +151,11 @@ public class DBController { | ||||
| 	} | ||||
| 	 | ||||
| 	/** | ||||
| 	 * load the data from the database to a ObservableList | ||||
| 	 * load all streams from the database to a ObservableList, | ||||
| 	 * order entries by title | ||||
| 	 * @return a ObservableList that contains all films from the database | ||||
| 	 * @return a ObservableList that contains all streams from the database | ||||
| 	 */ | ||||
| 	public ObservableList<FilmTabelDataType> getDatabaseFilmsList() { | ||||
| 	public ObservableList<FilmTabelDataType> getStreamsList() { | ||||
| 		ObservableList<FilmTabelDataType> filmsList = FXCollections.observableArrayList(); | ||||
| 		LOGGER.info("loading data from database ..."); | ||||
| 		try { | ||||
| @ -177,11 +179,11 @@ public class DBController { | ||||
| 	} | ||||
| 	 | ||||
| 	/** | ||||
| 	 * get one film from the database with streamUrl = ? | ||||
| 	 * @param streamUrl of the film | ||||
| 	 * @return a FilmTabelDataType Object of the film with the given streamUrl | ||||
| 	 * get one stream from the database with streamUrl = ? | ||||
| 	 * @param streamUrl of the stream | ||||
| 	 * @return a FilmTabelDataType Object of the stream with the given streamUrl | ||||
| 	 */ | ||||
| 	public FilmTabelDataType getDatabaseFilm(String streamUrl) { | ||||
| 	public FilmTabelDataType getStream(String streamUrl) { | ||||
| 		FilmTabelDataType film = null; | ||||
| 		LOGGER.info("refresh data for " + streamUrl); | ||||
| 		try { | ||||
| @ -204,6 +206,45 @@ public class DBController { | ||||
| 		return film; | ||||
| 	} | ||||
| 	 | ||||
| 	/** | ||||
| 	 * get all entries of the database as PosterModeElement | ||||
| 	 * @return a ObservableList of PosterModeElements | ||||
| 	 */ | ||||
| 	public ObservableList<PosterModeElement> getPosterElementsList() { | ||||
| 		 | ||||
| 		ObservableList<PosterModeElement> posterElementsList = FXCollections.observableArrayList(); | ||||
| 		LOGGER.info("loading data from database ..."); | ||||
| 		try { | ||||
| 			//load local Data | ||||
| 			Statement stmt = connection.createStatement();  | ||||
| 			ResultSet rs = stmt.executeQuery("SELECT * FROM films ORDER BY title"); | ||||
| 			 | ||||
| 			while (rs.next()) { | ||||
| 				// create the stream object | ||||
| 				PosterModeElement posterElement = new PosterModeElement(); | ||||
| 				posterElement.setStreamURL(rs.getString("streamUrl")); | ||||
| 				 | ||||
| 				// get from the cache table | ||||
| 				String[] cacheData = readCache(rs.getString("streamUrl")); | ||||
| 				posterElement.getLabel().setText(cacheData[0]); | ||||
| 				 | ||||
| 				if(cacheData[20] != null) { | ||||
| 					posterElement.getImageView().setImage(new Image(new File(cacheData[20]).toURI().toString())); | ||||
| 				} else { | ||||
| 					posterElement.getImageView().setImage(new Image("/icons/Homeflix_Poster.png")); | ||||
| 				} | ||||
| 				 | ||||
| 				posterElementsList.add(posterElement); | ||||
| 			} | ||||
| 			stmt.close(); | ||||
| 			rs.close();		 | ||||
| 		} catch (SQLException e) { | ||||
| 			LOGGER.error("An error occured while getting all PosterElements!", e); | ||||
| 		} | ||||
| 		 | ||||
| 		return posterElementsList; | ||||
| 	} | ||||
| 	 | ||||
| 	/** | ||||
| 	 * refresh database to contain all (new added) entries | ||||
| 	 */ | ||||
| @ -217,7 +258,7 @@ public class DBController { | ||||
| 		loadSources(); // reload all sources | ||||
| 		loadDatabase(); // reload all films saved in the DB | ||||
| 		 | ||||
| 		LOGGER.info("filme in db: " + databaseStreams.size()); | ||||
| 		LOGGER.info("There are {} entries in the Database", databaseStreams.size()); | ||||
| 		 | ||||
| 		try { | ||||
| 			checkAddEntry(); | ||||
|  | ||||
| @ -34,6 +34,10 @@ public class DatabaseDataType { | ||||
| 	private Date cached; | ||||
| 	private double currentTime; | ||||
| 	 | ||||
| 	public DatabaseDataType() { | ||||
| 		// constructor stub | ||||
| 	} | ||||
| 	 | ||||
| 	public DatabaseDataType(String streamUrl, String title, String season, String episode, int favorite, Date cached, double currentTime) { | ||||
| 		this.streamUrl = streamUrl; | ||||
| 		this.title = title; | ||||
|  | ||||
| @ -0,0 +1,81 @@ | ||||
| /** | ||||
|  * Project-HomeFlix | ||||
|  * | ||||
|  * Copyright 2016-2019  <@Seil0> | ||||
|  *  | ||||
|  * This program is free software; you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation; either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  * GNU General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program; if not, write to the Free Software | ||||
|  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, | ||||
|  * MA 02110-1301, USA. | ||||
|  *  | ||||
|  */ | ||||
|  | ||||
| package kellerkinder.HomeFlix.datatypes; | ||||
|  | ||||
| import com.jfoenix.controls.JFXButton; | ||||
|  | ||||
| import javafx.scene.control.Label; | ||||
| import javafx.scene.image.ImageView; | ||||
| import javafx.scene.layout.VBox; | ||||
|  | ||||
| public class PosterModeElement extends VBox{ | ||||
| 	 | ||||
| 	private String streamURL; | ||||
| 	private Label label = new Label(); | ||||
| 	private JFXButton button = new JFXButton(); | ||||
| 	private ImageView imageView = new ImageView(); | ||||
| 	 | ||||
| 	public PosterModeElement() { | ||||
| 		// constructor stub | ||||
| 	} | ||||
| 	 | ||||
| 	public PosterModeElement(String streamURL, Label label, JFXButton button, ImageView imageView) { | ||||
| 		this.streamURL = streamURL; | ||||
| 		this.label = label; | ||||
| 		this.button = button; | ||||
| 		this.imageView = imageView; | ||||
| 	} | ||||
| 	 | ||||
| 	public String getStreamURL() { | ||||
| 		return streamURL; | ||||
| 	} | ||||
|  | ||||
| 	public Label getLabel() { | ||||
| 		return label; | ||||
| 	} | ||||
|  | ||||
| 	public JFXButton getButton() { | ||||
| 		return button; | ||||
| 	} | ||||
|  | ||||
| 	public ImageView getImageView() { | ||||
| 		return imageView; | ||||
| 	} | ||||
|  | ||||
| 	public void setStreamURL(String streamURL) { | ||||
| 		this.streamURL = streamURL; | ||||
| 	} | ||||
|  | ||||
| 	public void setLabel(Label label) { | ||||
| 		this.label = label; | ||||
| 	} | ||||
|  | ||||
| 	public void setButton(JFXButton button) { | ||||
| 		this.button = button; | ||||
| 	} | ||||
|  | ||||
| 	public void setImageView(ImageView imageView) { | ||||
| 		this.imageView = imageView; | ||||
| 	} | ||||
|  | ||||
| } | ||||
		Reference in New Issue
	
	Block a user