| 
						
					 | 
				
			
			 | 
			 | 
			
				@ -18,11 +18,11 @@
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				 * MA 02110-1301, USA.
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				 */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				package kellerkinder.HomeFlix.controller;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				import java.io.File;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				import java.io.FileNotFoundException;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				import java.io.FileReader;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				import java.io.IOException;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				import java.net.URLConnection;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				import java.sql.Connection;
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				@ -37,11 +37,6 @@ import java.util.List;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				import org.apache.logging.log4j.LogManager;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				import org.apache.logging.log4j.Logger;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				import com.eclipsesource.json.Json;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				import com.eclipsesource.json.JsonArray;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				import com.eclipsesource.json.JsonObject;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				import com.eclipsesource.json.JsonValue;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				import javafx.collections.ObservableList;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				import javafx.scene.Node;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				import javafx.scene.image.Image;
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				@ -51,9 +46,9 @@ import javafx.scene.text.FontWeight;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				import javafx.scene.text.Text;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				import kellerkinder.HomeFlix.application.Main;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				import kellerkinder.HomeFlix.application.MainWindowController;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				import kellerkinder.HomeFlix.datatypes.DatabaseDataType;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				import kellerkinder.HomeFlix.datatypes.FilmTabelDataType;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				import kellerkinder.HomeFlix.datatypes.OMDbAPIResponseDataType;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				import kellerkinder.HomeFlix.datatypes.SourceDataType;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				public class DBController {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				@ -62,8 +57,8 @@ public class DBController {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					private String DB_PATH;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					private Image favorite_black = new Image("icons/ic_favorite_black_18dp_1x.png");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					private Image favorite_border_black = new Image("icons/ic_favorite_border_black_18dp_1x.png");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					private List<String> filmsdbStreamURL = new ArrayList<String>(); // contains all films stored in the database
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					private List<String> filmsStreamURL = new ArrayList<String>(); // contains all films from the sources
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					private List<DatabaseDataType> databaseStream = new ArrayList<DatabaseDataType>(); // contains all films stored in the database
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					private List<DatabaseDataType> sourceStreams = new ArrayList<DatabaseDataType>(); // contains all films from the sources
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					private Connection connection = null;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					private static final Logger LOGGER = LogManager.getLogger(DBController.class.getName());
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				@ -136,7 +131,9 @@ public class DBController {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							Statement stmt = connection.createStatement();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							ResultSet rs = stmt.executeQuery("SELECT * FROM films");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							while (rs.next()) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								filmsdbStreamURL.add(rs.getString("streamUrl"));
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								databaseStream.add(new DatabaseDataType(rs.getString("streamUrl"),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
										rs.getString("title"), rs.getString("season"), rs.getString("episode"),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
										rs.getInt("favorite"), rs.getBoolean("cached"), rs.getDouble("currentTime")));
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							stmt.close();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							rs.close();
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				@ -146,57 +143,11 @@ public class DBController {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					/**
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					 * load sources from sources.json
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					 * if mode == local, get all files and series-folder from the directory
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					 * else mode must be streaming, read all entries from the streaming file 
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					 * load all sources
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					 */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					private void loadSources() {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						// remove sources from table
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						mainWindowController.getSourcesList().removeAll(mainWindowController.getSourcesList());
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						mainWindowController.getSourceRoot().getChildren().removeAll(mainWindowController.getSourceRoot().getChildren());
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						try {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							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")) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
									for (File file : new File(path).listFiles()) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
										if (file.isFile() && isVideoFile(file.getPath())) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
											filmsStreamURL.add(file.getPath());
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
										} else if(file.isDirectory()) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
											// get all folders (series)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
											for (File season : file.listFiles()) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
												if (season.isDirectory()) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
													for (File episode : season.listFiles()) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
														if (!filmsdbStreamURL.contains(episode.getPath())) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
															filmsStreamURL.add(episode.getPath());
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
														}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
													}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
												}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
											}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
										}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
									}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
									LOGGER.info("added files from: " + path);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								} else {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
									// getting all entries from the streaming lists
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
									try {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
										JsonObject object = Json.parse(new FileReader(path)).asObject();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
										JsonArray items = object.get("entries").asArray();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
										for (JsonValue item : items) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
											filmsStreamURL.add(item.asObject().getString("streamUrl", ""));
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
										}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
										LOGGER.info("added films from: " + path);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
									} catch (IOException e) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
										LOGGER.error(e);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
									}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						} catch (Exception e) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							e.printStackTrace();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						SourcesController sourcesController = new SourcesController(main, mainWindowController);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						sourceStreams = sourcesController.loadSources();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					/**
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				@ -204,22 +155,18 @@ public class DBController {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					 * order entries by title
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					 */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					private void loadDataToFilmsList() {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						ImageView imageView;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						LOGGER.info("loading data to mwc ...");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						try {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							//load local Data
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							Statement stmt = connection.createStatement(); 
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							ResultSet rs = stmt.executeQuery("SELECT * FROM films ORDER BY title"); 
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							ResultSet rs = stmt.executeQuery("SELECT * FROM films ORDER BY title");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							while (rs.next()) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				//				System.out.println(rs.getString("title") + "Season:"  + rs.getString("season") + ":");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								if (rs.getBoolean("favorite") == true) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
									mainWindowController.getFilmsList().add(new FilmTabelDataType(rs.getString("streamUrl"),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
											rs.getString("title"), rs.getString("season"), rs.getString("episode") ,rs.getBoolean("favorite"),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
											rs.getBoolean("cached"), new ImageView(favorite_black)));
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								} else {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
									mainWindowController.getFilmsList().add(new FilmTabelDataType(rs.getString("streamUrl"),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
											rs.getString("title"), rs.getString("season"), rs.getString("episode"), rs.getBoolean("favorite"),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
											rs.getBoolean("cached"), new ImageView(favorite_border_black)));
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								imageView = rs.getBoolean("favorite") ? new ImageView(favorite_black) : new ImageView(favorite_border_black);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								mainWindowController.getFilmsList().add(new FilmTabelDataType(rs.getString("streamUrl"),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
										rs.getString("title"), rs.getString("season"), rs.getString("episode") ,rs.getBoolean("favorite"),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
										rs.getBoolean("cached"), imageView));
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							stmt.close();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							rs.close();		
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				@ -237,24 +184,20 @@ public class DBController {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					 * @param index of the film in LocalFilms list
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					 */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					public void refresh(String streamUrl, int indexList) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						LOGGER.info("refresh ...");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						LOGGER.info("refresh data for " + streamUrl);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						try {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							Statement stmt = connection.createStatement();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							ResultSet rs = stmt.executeQuery("SELECT * FROM films WHERE streamUrl = \"" + streamUrl + "\";");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							PreparedStatement ps = connection.prepareStatement("SELECT * FROM films WHERE streamUrl = ?");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							ps.setString(1, streamUrl);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							ResultSet rs = ps.executeQuery();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							while (rs.next()) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								if (rs.getBoolean("favorite") == true) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
									mainWindowController.getFilmsList().set(indexList, new FilmTabelDataType(rs.getString("streamUrl"),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
											rs.getString("title"), rs.getString("season"), rs.getString("episode"), rs.getBoolean("favorite"),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
											rs.getBoolean("cached"), new ImageView(favorite_black)));
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								} else {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
									mainWindowController.getFilmsList().set(indexList, new FilmTabelDataType(rs.getString("streamUrl"),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
											rs.getString("title"), rs.getString("season"), rs.getString("episode"), rs.getBoolean("favorite"),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
											rs.getBoolean("cached"), new ImageView(favorite_border_black)));
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								ImageView imageView = rs.getBoolean("favorite") ? new ImageView(favorite_black) : new ImageView(favorite_border_black);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								mainWindowController.getFilmsList().set(indexList, new FilmTabelDataType(rs.getString("streamUrl"),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
										rs.getString("title"), rs.getString("season"), rs.getString("episode"), rs.getBoolean("favorite"),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
										rs.getBoolean("cached"), imageView));
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							rs.close();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							stmt.close();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							ps.close();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						} catch (Exception e) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							LOGGER.error("Ups! error while refreshing mwc!", e);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						} 
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				@ -269,14 +212,13 @@ public class DBController {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						LOGGER.info("refreshing the Database ...");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						// clean all ArraLists
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						filmsdbStreamURL.clear();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						filmsStreamURL.clear();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						databaseStream.clear();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						sourceStreams.clear();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						loadSources(); // reload all sources
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						loadDatabase(); // reload all films saved in the DB
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						LOGGER.info("films in directory: " + filmsStreamURL.size());
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						LOGGER.info("filme in db: " + filmsdbStreamURL.size());
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						LOGGER.info("filme in db: " + databaseStream.size());
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						try {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							checkAddEntry();
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				@ -285,7 +227,7 @@ public class DBController {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							LOGGER.error("Error while refreshing the database", e);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						// clear the FilmsList and FilmRoot chlidren
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						// clear the FilmsList and FilmRoot children
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						mainWindowController.getFilmsList().clear();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						mainWindowController.getFilmRoot().getChildren().clear();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				@ -294,25 +236,32 @@ public class DBController {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					/**
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					 * check if there are any entries that have been removed from the film-directory
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					 * @throws SQLException 
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					 */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					private void checkRemoveEntry() {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					private void checkRemoveEntry() throws SQLException {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						PreparedStatement ps = connection.prepareStatement("DELETE FROM films WHERE streamUrl = ?");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						LOGGER.info("checking for entrys to remove to DB ...");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						try {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							Statement stmt = connection.createStatement();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						for (DatabaseDataType dbStreamEntry : databaseStream) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							// if the directory doen't contain the entry form the database, remove it
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							for (String entry : filmsdbStreamURL) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								// if the directory doen't contain the entry form the db, remove it
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								if (!filmsStreamURL.contains(entry)) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
									stmt.executeUpdate("delete from films where streamUrl = \"" + entry + "\"");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
									connection.commit();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
									LOGGER.info("removed \"" + entry + "\" from database");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							// if sourceStreams has a item where StreamUrl equals dbStreamEntry.getStreamUrl() return it, else null
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							DatabaseDataType result = sourceStreams.stream()
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
									.filter(x -> dbStreamEntry.getStreamUrl().equals(x.getStreamUrl()))
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
									.findAny()
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
									.orElse(null);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							// if the result is null, the file is missing, remove it from the database
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							if (result == null) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								ps.setString(1, dbStreamEntry.getStreamUrl());
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								ps.addBatch();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								LOGGER.info("removed \"" + dbStreamEntry.getTitle() + "\" from database");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							stmt.close();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						} catch (Exception e) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							LOGGER.error(e);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						ps.executeBatch();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						connection.commit();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						ps.close();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					/**
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				@ -325,114 +274,33 @@ public class DBController {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						PreparedStatement ps = connection.prepareStatement("insert into films values (?, ?, ?, ?, ?, ?, ?)");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						LOGGER.info("checking for entrys to add to DB ...");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						// source is a single source of the sources list
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						for (SourceDataType source : mainWindowController.getSourcesList()) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							// if it's a local source check the folder for new film
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							if (source.getMode().equals("local")) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								for (File file : new File(source.getPath()).listFiles()) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
									String mimeType = URLConnection.guessContentTypeFromName(file.getPath());
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
									// if file is file and has mime type "video"
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
									if (file.isFile() && mimeType != null && mimeType.contains("video")) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
										// get all files (films)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
										if (!filmsdbStreamURL.contains(file.getPath())) {					
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
											ps.setString(1, file.getPath());
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
											ps.setString(2, cutOffEnd(file.getName()));
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
											ps.setString(3, "");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
											ps.setString(4, "");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
											ps.setInt(5, 0);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
											ps.setBoolean(6, false);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
											ps.setDouble(7, 0);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
											ps.addBatch(); // adds the entry
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
											LOGGER.info("Added \"" + file.getName() + "\" to database");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
											filmsdbStreamURL.add(file.getPath());
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
										}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
									} else if (file.isDirectory()) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
										// get all folders (series)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
										int sn = 1;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
										for (File season : file.listFiles()) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
											if (season.isDirectory()) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
												int ep = getLastEpisode(cutOffEnd(file.getName()), Integer.toString(sn)) + 1;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
												for (File episode : season.listFiles()) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
													if (!filmsdbStreamURL.contains(episode.getPath())) {		
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
														ps.setString(1, episode.getPath().replace("'", "''"));
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
														ps.setString(2, cutOffEnd(file.getName())); // the title is the series root folder's name
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
														ps.setString(3, Integer.toString(sn));
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
														ps.setString(4, Integer.toString(ep));
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
														ps.setInt(5, 0);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
														ps.setBoolean(6, false);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
														ps.setDouble(7, 0);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
														ps.addBatch(); // adds the entry				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
														LOGGER.info("Added \"" + file.getName() + "\", Episode: " + episode.getName() + " to database");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
														filmsStreamURL.add(episode.getPath());
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
														filmsdbStreamURL.add(episode.getPath());
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
														ep++;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
													}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
												}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
												sn++;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
											}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
										}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
									}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
									
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							} else {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								// if it's a streaming source check the file for new films
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								for (String entry : filmsStreamURL) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
									if (!filmsdbStreamURL.contains(entry)) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
										JsonArray items = Json.parse(new FileReader(source.getPath())).asObject().get("entries").asArray();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
										// for each item, check if it's the needed
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
										for (JsonValue item : items) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
											String streamUrl = item.asObject().getString("streamUrl", "");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
											String title = item.asObject().getString("title", "");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
											
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
											// if it's the needed add it to the database
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
											if (streamUrl.equals(entry)) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
												ps.setString(1, streamUrl);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
												ps.setString(2, title);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
												ps.setString(3, item.asObject().getString("season", ""));
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
												ps.setString(4, item.asObject().getString("episode", ""));
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
												ps.setInt(5, 0);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
												ps.setBoolean(6, false);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
												ps.setDouble(7, 0);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
												ps.addBatch(); // adds the entry
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
												LOGGER.info("Added \"" + title + "\" to database");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
												filmsdbStreamURL.add(streamUrl);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
											}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
										}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
									}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								ps.executeBatch();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								connection.commit();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								ps.close();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						// new
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						for (DatabaseDataType sourceStreamEntry : sourceStreams) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							// if databaseStream has a item where StreamUrl equals sourceStreamEntry.getStreamUrl() return it, else null
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							DatabaseDataType result = databaseStream.stream()
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
									.filter(x -> sourceStreamEntry.getStreamUrl().equals(x.getStreamUrl()))
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
									.findAny()
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
									.orElse(null);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							// if the result is null, the entry is missing, add it to the database
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							if (result == null) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								ps.setString(1, sourceStreamEntry.getStreamUrl());
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								ps.setString(2, sourceStreamEntry.getTitle());
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								ps.setString(3, sourceStreamEntry.getSeason());
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								ps.setString(4, sourceStreamEntry.getEpisode());
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								ps.setInt(5, sourceStreamEntry.getFavorite());
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								ps.setBoolean(6, sourceStreamEntry.getCached());
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								ps.setDouble(7, sourceStreamEntry.getCurrentTime());
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								ps.addBatch(); // adds the entry
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								LOGGER.info("Added \"" + sourceStreamEntry.getTitle() + "\" to database");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								databaseStream.add(sourceStreamEntry);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					/**
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					 * gets the last episode of a season of a given series
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					 * @param seriesTitle the actual series
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					 * @param season      the actual season
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					 * @return the last episode number
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					 */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					private int getLastEpisode(String seriesTitle, String season) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						int lastEpisode = 0;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						try {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							Statement stmt = connection.createStatement();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							PreparedStatement ps = connection.prepareStatement("SELECT * FROM films WHERE title = ? AND season = ?");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							ps.setString(1, seriesTitle);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							ps.setString(2, season);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							ResultSet rs = ps.executeQuery();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							while (rs.next()) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								if (Integer.parseInt(rs.getString("episode")) > lastEpisode)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
									lastEpisode = Integer.parseInt(rs.getString("episode"));
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							stmt.close();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							rs.close();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						} catch (SQLException e) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							LOGGER.error("An error occured, while printing all entries", e);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						return lastEpisode;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						ps.executeBatch();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						connection.commit();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						ps.close();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					/**
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				@ -453,8 +321,8 @@ public class DBController {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								System.out.println(rs.getString("cached"));
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								System.out.println(rs.getString("currentTime") + "\n");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							stmt.close();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							rs.close();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							stmt.close();	
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						} catch (SQLException e) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							LOGGER.error("An error occured, while printing all entries", e);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						}
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				@ -467,10 +335,11 @@ public class DBController {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					public void dislike(String streamUrl) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						LOGGER.info("dislike " + streamUrl);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						try {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							Statement stmt = connection.createStatement();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							stmt.executeUpdate("UPDATE films SET favorite=0 WHERE streamUrl=\"" + streamUrl + "\";");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							PreparedStatement ps = connection.prepareStatement("UPDATE films SET favorite = 0 WHERE streamUrl = ?");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							ps.setString(1, streamUrl);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							ps.executeUpdate();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							connection.commit();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							stmt.close();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							ps.close();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						} catch (SQLException e) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							LOGGER.error("Ups! an error occured!", e);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						}
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				@ -483,10 +352,11 @@ public class DBController {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					public void like(String streamUrl) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						LOGGER.info("like " + streamUrl);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						try {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							Statement stmt = connection.createStatement();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							stmt.executeUpdate("UPDATE films SET favorite = 1 WHERE streamUrl = \"" + streamUrl + "\";");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							PreparedStatement ps = connection.prepareStatement("UPDATE films SET favorite = 1 WHERE streamUrl = ?");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							ps.setString(1, streamUrl);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							ps.executeUpdate();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							connection.commit();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							stmt.close();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							ps.close();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						} catch (SQLException e) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							LOGGER.error("Ups! an error occured!", e);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						}
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				@ -498,10 +368,11 @@ public class DBController {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					 */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					public void setCached(String streamUrl) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						try {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							Statement stmt = connection.createStatement();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							stmt.executeUpdate("UPDATE films SET cached = 1 WHERE streamUrl = \"" + streamUrl + "\";");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							PreparedStatement ps = connection.prepareStatement("UPDATE films SET cached = 1 WHERE streamUrl = ?");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							ps.setString(1, streamUrl);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							ps.executeUpdate();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							connection.commit();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							stmt.close();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							ps.close();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						} catch (SQLException e) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							LOGGER.error("Ups! an error occured!", e);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						}
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				@ -563,11 +434,12 @@ public class DBController {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					public boolean searchCacheByURL(String streamUrl) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						boolean retValue = false;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						try {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							Statement stmt = connection.createStatement();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							ResultSet rs = stmt.executeQuery("SELECT * FROM cache WHERE streamUrl = \"" + streamUrl + "\";");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							PreparedStatement ps = connection.prepareStatement("SELECT * FROM cache WHERE streamUrl = ?");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							ps.setString(1, streamUrl);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							ResultSet rs = ps.executeQuery();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							retValue = rs.next();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							rs.close();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							stmt.close();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							ps.close();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						} catch (Exception e) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							LOGGER.error("Ups! error while getting the current time!", e);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						}
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				@ -581,8 +453,9 @@ public class DBController {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					 */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					public void readCache(String streamUrl) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						try {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							Statement stmt = connection.createStatement();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							ResultSet rs = stmt.executeQuery("SELECT * FROM cache WHERE streamUrl=\"" + streamUrl + "\";");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							PreparedStatement ps = connection.prepareStatement("SELECT * FROM cache WHERE streamUrl = ?");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							ps.setString(1, streamUrl);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							ResultSet rs = ps.executeQuery();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							Font font = Font.font("System", FontWeight.BOLD, (int) Math.round(mainWindowController.getFontSize()));
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							ObservableList<Node> textFlow = mainWindowController.getTextFlow().getChildren();	
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							ArrayList<Text> nameText = new ArrayList<Text>();
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				@ -650,8 +523,8 @@ public class DBController {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								LOGGER.error("No Poster found, useing default.");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							stmt.close();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							rs.close();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							ps.close();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						} catch (SQLException e) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							LOGGER.error("Ups! an error occured!", e);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						}
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				@ -686,14 +559,15 @@ public class DBController {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					 * @return {@link Double} currentTime in ms
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					 */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					public double getCurrentTime(String streamUrl) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						LOGGER.info("currentTime: " + streamUrl);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						LOGGER.info("get currentTime: " + streamUrl);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						double currentTime = 0;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						try {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							Statement stmt = connection.createStatement();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							ResultSet rs = stmt.executeQuery("SELECT * FROM films WHERE streamUrl = \"" + streamUrl + "\";");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							PreparedStatement ps = connection.prepareStatement("SELECT * FROM films WHERE streamUrl = ?");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							ps.setString(1, streamUrl);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							ResultSet rs = ps.executeQuery();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							currentTime = rs.getDouble("currentTime");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							rs.close();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							stmt.close();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							ps.close();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						} catch (Exception e) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							LOGGER.error("Ups! error while getting the current time!", e);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						} 
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				@ -707,69 +581,55 @@ public class DBController {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					 * @param currentTime	currentTime in ms of the film
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					 */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					public void setCurrentTime(String streamUrl, double currentTime) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						LOGGER.info("currentTime: " + streamUrl);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						LOGGER.info("set currentTime: " + streamUrl);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						try {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							Statement stmt = connection.createStatement();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							stmt.executeUpdate("UPDATE films SET currentTime=" + currentTime + " WHERE streamUrl=\"" + streamUrl + "\";");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							PreparedStatement ps = connection.prepareStatement("UPDATE films SET currentTime = ? WHERE streamUrl = ?");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							ps.setDouble(1, currentTime);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							ps.setString(2, streamUrl);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							ps.executeUpdate();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							connection.commit();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							stmt.close();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							ps.close();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						} catch (SQLException e) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							LOGGER.error("Ups! an error occured!", e);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							LOGGER.error("Ups! error while updateing the current time!", e);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					/**
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					 * get the next episode of a 
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					 * @param title	URL of the film
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					 * @param nextEp	number of the next episode
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					 * get the next episode of a series
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					 * @param title		title of the film
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					 * @param episode	episode currently played
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					 * @return {@link FilmTabelDataType} the next episode as object
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					 */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					public FilmTabelDataType getNextEpisode(String title, int episode, int season) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						FilmTabelDataType nextFilm = null;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						ResultSet rs;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						int nextEpisode = 3000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						try {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							Statement stmt = connection.createStatement();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							// try to get a new episode of the current season
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							PreparedStatement ps = connection.prepareStatement("SELECT * FROM films WHERE title = ?  AND season = ? AND episode = ?");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							ps.setString(1, title);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							ps.setString(2, Integer.toString(season));
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							ps.setString(3, Integer.toString(episode + 1));
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							ResultSet rs = ps.executeQuery();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							rs = stmt.executeQuery("SELECT * FROM films WHERE title = \"" + title + "\" AND season = \"" + season + "\";");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							while(rs.next()) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								int rsEpisode = Integer.parseInt(rs.getString("episode"));
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								if (rsEpisode > episode && rsEpisode < nextEpisode) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
									// fitting episode found in current season, if rsEpisode < nextEpisode -> nextEpisode = rsEpisode
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
									nextEpisode = rsEpisode;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
									nextFilm = new FilmTabelDataType(rs.getString("streamUrl"), rs.getString("title"),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
											rs.getString("season"), rs.getString("episode"), rs.getBoolean("favorite"),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
											rs.getBoolean("cached"), new ImageView());
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							/*  if that fails get the next season and try to get a episode there,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							 *  we need to test only for the next season, first episode,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							 *  any other entry would not exist in the database
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							 */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							if(!rs.next()) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								ps.setString(1, title);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								ps.setString(2, Integer.toString(season + 1));
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								ps.setString(3, Integer.toString(1));
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								rs = ps.executeQuery();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								if(!rs.next()) return nextFilm; // if we haven't found anything return an empty object
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							if (nextFilm == null) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								int nextSeason = 3000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								rs = stmt.executeQuery("SELECT * FROM films WHERE title = \"" + title + "\";");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								while(rs.next()) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
									int rsSeason = Integer.parseInt(rs.getString("season"));
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
									if (rsSeason > season && rsSeason < nextSeason) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
										nextSeason = rsSeason;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
									}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								if (nextSeason != 3000) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
									rs = stmt.executeQuery("SELECT * FROM films WHERE title = \"" + title + "\" AND season = \"" + season + "\";");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
									while(rs.next()) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
										int rsEpisode = Integer.parseInt(rs.getString("episode"));
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
										if (rsEpisode > episode && rsEpisode < nextEpisode) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
											// fitting episode found in current season, if rsEpisode < nextEpisode -> nextEpisode = rsEpisode
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
											nextEpisode = rsEpisode;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
											nextFilm = new FilmTabelDataType(rs.getString("streamUrl"), rs.getString("title"),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
													rs.getString("season"), rs.getString("episode"), rs.getBoolean("favorite"),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
													rs.getBoolean("cached"), new ImageView());
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
										}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
									}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							// at this point we have found the correct episode
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							nextFilm = new FilmTabelDataType(rs.getString("streamUrl"), rs.getString("title"),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
									rs.getString("season"), rs.getString("episode"), rs.getBoolean("favorite"),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
									rs.getBoolean("cached"), new ImageView());
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							rs.close();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							stmt.close();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							ps.close();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						} catch (Exception e) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							LOGGER.error("Ups! error while getting next episode!", e);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						}
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				@ -810,14 +670,6 @@ public class DBController {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						return nextFilm;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					// removes the ending
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					private String cutOffEnd(String str) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						if (str == null) return null;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						int pos = str.lastIndexOf(".");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						if (pos == -1) return str;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						return str.substring(0, pos);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					/**
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					 * check if a file is a video
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					 * @param path the path to the file
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				
 
 |