cemu_UIs updater and code cleanup
* clean up the folder structure for better maintenance * lots of code cleanup
This commit is contained in:
		| @ -1,7 +1,7 @@ | ||||
| /** | ||||
|  * Project HomeFlix | ||||
|  *  | ||||
|  * Copyright 2016-2017  <admin@kellerkinder> | ||||
|  * Project-HomeFlix | ||||
|  * | ||||
|  * Copyright 2016-2018  <@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 | ||||
| @ -20,7 +20,7 @@ | ||||
|  *  | ||||
|  */ | ||||
| 
 | ||||
| package org.kellerkinder.Project_HomeFlix; | ||||
| package kellerkinder.HomeFlix.application; | ||||
| 
 | ||||
| import java.io.File; | ||||
| import java.io.IOException; | ||||
| @ -44,109 +44,104 @@ import javafx.stage.Stage; | ||||
| 
 | ||||
| public class Main extends Application { | ||||
| 	 | ||||
| 	Stage primaryStage; | ||||
| 	private Stage primaryStage; | ||||
| 	private Scene scene; | ||||
| 	private AnchorPane pane; | ||||
| 	private MainWindowController mainWindowController; | ||||
| 	private static String userHome = System.getProperty("user.home"); | ||||
| 	private static String userName = System.getProperty("user.name"); | ||||
| 	private static String osName = System.getProperty("os.name"); | ||||
| 	private static String osArch = System.getProperty("os.arch"); | ||||
| 	private static String osVers = System.getProperty("os.version"); | ||||
| 	private static String javaVers = System.getProperty("java.version"); | ||||
| 	private static String javaVend= System.getProperty("java.vendor"); | ||||
| 	private String dirWin = System.getProperty("user.home") + "/Documents/HomeFlix";	//Windows: C:/Users/"User"/Documents/HomeFlix | ||||
| 	private String dirLinux = System.getProperty("user.home") + "/HomeFlix";	//Linux: /home/"User"/HomeFlix | ||||
| 	private File directory; | ||||
| 	private File configFile; | ||||
| 	private File posterCache; | ||||
| 	 | ||||
| 	private String path; | ||||
| 	String currentWorkingDirectory; | ||||
| 	private String COLOR = "ee3523"; | ||||
| 	private String FONT_FAMILY = "System"; | ||||
| 	private String mode = "local";	//local or streaming TODO | ||||
| 	private String local = System.getProperty("user.language")+"_"+System.getProperty("user.country"); | ||||
| 	private boolean AUTO_UPDATE = false; | ||||
| 	private double FONT_SIZE = 17; | ||||
| 	private ResourceBundle bundle; | ||||
| 	private MainWindowController mainWindowController; | ||||
| 	private File directory; | ||||
| 	private File settingsFile; | ||||
| 	private File posterCache; | ||||
| 	private String dirWin = System.getProperty("user.home") + "/Documents/HomeFlix";	//Windows: C:/Users/"User"/Documents/HomeFlix | ||||
| 	private String dirLinux = System.getProperty("user.home") + "/HomeFlix";	//Linux: /home/"User"/HomeFlix | ||||
| 	private static Logger LOGGER; | ||||
| 	 | ||||
| 	@Override | ||||
| 	public void start(Stage primaryStage) throws IOException { | ||||
| 		currentWorkingDirectory = new java.io.File( "." ).getCanonicalPath(); | ||||
| 		LOGGER.info("OS: " + osName + " " + osVers + " " + osArch); | ||||
| 		LOGGER.info("Java: " + javaVend + " " + javaVers); | ||||
| 		LOGGER.info("User: " + userName + " " + userHome); | ||||
| 		 | ||||
| 		this.primaryStage = primaryStage;	 | ||||
| 		mainWindow(); | ||||
| 	} | ||||
| 	 | ||||
| 	private void mainWindow(){ | ||||
| 
 | ||||
| 		try { | ||||
| 			FXMLLoader loader = new FXMLLoader(); | ||||
| 			loader.setLocation(ClassLoader.getSystemResource("fxml/MainWindow.fxml")); | ||||
| 			AnchorPane pane = (AnchorPane) loader.load(); | ||||
| 			pane = (AnchorPane) loader.load(); | ||||
| 			primaryStage.setMinHeight(600.00); | ||||
| 			primaryStage.setMinWidth(950.00); | ||||
| 			primaryStage.setResizable(false); | ||||
| 			primaryStage.setTitle("Project HomeFlix"); | ||||
| 			primaryStage.getIcons().add(new Image(Main.class.getResourceAsStream("/icons/Homeflix_Icon_64x64.png"))); //adds application icon | ||||
| 	 | ||||
| 			primaryStage.getIcons().add(new Image(Main.class.getResourceAsStream("/icons/Homeflix_Icon_64x64.png"))); //adds application icon	 | ||||
| 			mainWindowController = loader.getController();	//Link of FXMLController and controller class | ||||
| 			mainWindowController.setAutoUpdate(AUTO_UPDATE);	//set auto-update | ||||
| 			mainWindowController.setCurrentWorkingDirectory(currentWorkingDirectory); | ||||
| 			mainWindowController.setMain(this);	//call setMain | ||||
| 
 | ||||
| 			 | ||||
| 			/**Linux else Windows, check if directory & config exist | ||||
| 			 * Windows: config file: 	C:/Users/"User"/Documents/HomeFlix/config.xml | ||||
| 			 * 			directory:		C:/Users/"User"/Documents/HomeFlix | ||||
| 			 * Linux: 	config file: 	/home/"User"/HomeFlix/config.xml | ||||
| 			 * 			directory: 		/home/"User"/HomeFlix | ||||
| 			 */ | ||||
| 			if(System.getProperty("os.name").equals("Linux")) { | ||||
| 			// get OS and the specific paths | ||||
| 			if (osName.equals("Linux")) { | ||||
| 				directory = new File(dirLinux); | ||||
| 				settingsFile = new File(dirLinux + "/config.xml"); | ||||
| 				configFile = new File(dirLinux + "/config.xml"); | ||||
| 				posterCache = new File(dirLinux + "/posterCache"); | ||||
| 			} else { | ||||
| 				directory = new File(dirWin); | ||||
| 				settingsFile = new File(dirWin + "/config.xml"); | ||||
| 				configFile = new File(dirWin + "/config.xml"); | ||||
| 				posterCache = new File(dirWin + "/posterCache"); | ||||
| 			} | ||||
| 			 | ||||
| 			posterCache = new File(directory+"/posterCache"); | ||||
| 			 | ||||
| 			if(!settingsFile.exists()){ | ||||
| 			// startup checks | ||||
| 			if (!configFile.exists()) { | ||||
| 				directory.mkdir(); | ||||
| 				mainWindowController.setPath(firstStart()); | ||||
| 				mainWindowController.setStreamingPath(directory.getAbsolutePath()); | ||||
| 				mainWindowController.setColor(COLOR); | ||||
| 				mainWindowController.setColor("ee3523"); | ||||
| 				mainWindowController.setSize(FONT_SIZE); | ||||
| 				mainWindowController.setAutoUpdate(AUTO_UPDATE); | ||||
| 				mainWindowController.setAutoUpdate(false); | ||||
| 				mainWindowController.setLocal(local); | ||||
| 				mainWindowController.setMode(mode); | ||||
| 				mainWindowController.saveSettings(); | ||||
| 				try { | ||||
| 					Runtime.getRuntime().exec("java -jar ProjectHomeFlix.jar");	//start again (preventing Bugs) | ||||
| 					System.exit(0);	//finishes it self | ||||
| 					Runtime.getRuntime().exec("java -jar ProjectHomeFlix.jar"); // start again (preventing Bugs) TODO is this really needed | ||||
| 					System.exit(0); // finishes it self | ||||
| 				} catch (Exception e) { | ||||
| 					LOGGER.error("error while restarting HomeFlix", e); | ||||
| 				} | ||||
| 			} | ||||
| 			 | ||||
| 			if(!posterCache.exists()) { | ||||
| 
 | ||||
| 			if (!posterCache.exists()) { | ||||
| 				posterCache.mkdir(); | ||||
| 			} | ||||
| 			 | ||||
| 			mainWindowController.loadSettings(); | ||||
| 			mainWindowController.loadStreamingSettings(); | ||||
| 			mainWindowController.initUI(); | ||||
| 			mainWindowController.initActions(); | ||||
| 			mainWindowController.initTabel(); | ||||
| 			mainWindowController.setLocalUI(); | ||||
| 			mainWindowController.applyColor();	//set theme color | ||||
| 			 | ||||
| 			mainWindowController.dbController.main(); //initialize database controller | ||||
| 			mainWindowController.dbController.createDatabase(); //creating the database | ||||
| 			mainWindowController.dbController.loadData(); 	//loading data from database to mainWindowController  | ||||
| 			mainWindowController.addDataUI(); | ||||
| 			 | ||||
| 			Scene scene = new Scene(pane);	//create new scene, append pane to scene | ||||
| 			// generate window | ||||
| 			scene = new Scene(pane); // create new scene, append pane to scene | ||||
| 			scene.getStylesheets().add(getClass().getResource("/css/MainWindow.css").toExternalForm()); | ||||
| 			primaryStage.setScene(scene);	//append scene to stage | ||||
| 			primaryStage.show();	//show stage | ||||
| 			primaryStage.setScene(scene); // append scene to stage | ||||
| 			primaryStage.show(); // show stage | ||||
| 			 | ||||
| 			// init here as it loads the games to the mwc and the gui, therefore the window must exist | ||||
| 			mainWindowController.init(); | ||||
| 			mainWindowController.dbController.init(); | ||||
| 		} catch (IOException e) { | ||||
| 			LOGGER.error("", e); | ||||
| 			LOGGER.error(e); | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	//Method for first Start | ||||
| 	// Method for first Start | ||||
| 	private String firstStart(){ | ||||
| 		MainWindowController.firststart = true; | ||||
| 		switch(System.getProperty("user.language")+"_"+System.getProperty("user.country")){ | ||||
| @ -190,6 +185,14 @@ public class Main extends Application { | ||||
| 		launch(args); | ||||
| 	} | ||||
| 
 | ||||
| 	public Stage getPrimaryStage() { | ||||
| 		return primaryStage; | ||||
| 	} | ||||
| 
 | ||||
| 	public void setPrimaryStage(Stage primaryStage) { | ||||
| 		this.primaryStage = primaryStage; | ||||
| 	} | ||||
| 
 | ||||
| 	public String getFONT_FAMILY() { | ||||
| 		return FONT_FAMILY; | ||||
| 	} | ||||
| @ -1,7 +1,7 @@ | ||||
| /** | ||||
|  * Project HomeFlix | ||||
|  * Project-HomeFlix | ||||
|  *  | ||||
|  * Copyright 2016-2017  <admin@kellerkinder> | ||||
|  * Copyright 2018  <@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 | ||||
| @ -19,7 +19,8 @@ | ||||
|  * MA 02110-1301, USA. | ||||
|  *  | ||||
|  */ | ||||
| package org.kellerkinder.Project_HomeFlix; | ||||
| 
 | ||||
| package kellerkinder.HomeFlix.application; | ||||
| 
 | ||||
| import java.awt.Desktop; | ||||
| import java.io.BufferedReader; | ||||
| @ -89,6 +90,10 @@ import javafx.scene.text.Font; | ||||
| import javafx.scene.text.TextFlow; | ||||
| import javafx.stage.DirectoryChooser; | ||||
| import javafx.util.Duration; | ||||
| import kellerkinder.HomeFlix.controller.DBController; | ||||
| import kellerkinder.HomeFlix.controller.UpdateController; | ||||
| import kellerkinder.HomeFlix.controller.apiQuery; | ||||
| import kellerkinder.HomeFlix.datatypes.tableData; | ||||
| 
 | ||||
| public class MainWindowController {	 | ||||
| 	@FXML | ||||
| @ -106,7 +111,7 @@ public class MainWindowController { | ||||
| 	@FXML | ||||
| 	private TableView<tableData> tableViewStreamingdata; | ||||
| 	@FXML | ||||
| 	TextFlow textFlow; | ||||
| 	private TextFlow textFlow; | ||||
| 	@FXML | ||||
| 	ScrollPane scrollPane; | ||||
| 	@FXML | ||||
| @ -136,7 +141,7 @@ public class MainWindowController { | ||||
|     @FXML | ||||
|     private JFXHamburger menuHam; | ||||
|     @FXML | ||||
|     private JFXToggleButton autoupdateBtn; | ||||
|     private JFXToggleButton autoUpdateToggleBtn; | ||||
|     @FXML | ||||
|     public JFXTextField tfPath; | ||||
|     @FXML | ||||
| @ -161,8 +166,8 @@ public class MainWindowController { | ||||
|     private Label mainColorLabel; | ||||
|     @FXML | ||||
|     private Label localLabel; | ||||
|     @FXML  | ||||
|     ImageView image1; | ||||
|     @FXML | ||||
| 	private ImageView image1; | ||||
|      | ||||
|     private ImageView imv1; | ||||
|      | ||||
| @ -194,20 +199,22 @@ public class MainWindowController { | ||||
| 	private boolean settingsTrue = false; | ||||
| 	private boolean streamingSettingsTrue = false; | ||||
| 	private boolean autoUpdate = false; | ||||
| 	private boolean useBeta = false; | ||||
| 	static boolean firststart = false; | ||||
|     private static final Logger LOGGER = LogManager.getLogger(MainWindowController.class.getName()); | ||||
| 	private int hashA = -647380320; | ||||
| 	private String version = "0.5.2"; | ||||
| 	private String buildNumber = "129"; | ||||
| 	private String buildNumber = "131"; | ||||
| 	private String versionName = "solidify cow"; | ||||
| 	private File dirWin = new File(System.getProperty("user.home") + "/Documents/HomeFlix"); | ||||
| 	private File dirLinux = new File(System.getProperty("user.home") + "/HomeFlix"); | ||||
| 	private File fileWin = new File(dirWin + "/config.xml"); | ||||
| 	private File fileLinux = new File(dirLinux + "/config.xml");	 | ||||
| 	 | ||||
| 	String errorUpdateD; | ||||
| 	String errorUpdateV; | ||||
| 	String noFilmFound; | ||||
| 	public String errorUpdateD; | ||||
| 	public String errorUpdateV; | ||||
| 	public String noFilmFound; | ||||
| 	 | ||||
| 	private String errorPlay; | ||||
| 	private String errorOpenStream; | ||||
| 	private String errorMode; | ||||
| @ -215,7 +222,6 @@ public class MainWindowController { | ||||
| 	private String errorSave; | ||||
| 	private String infoText; | ||||
| 	private String vlcNotInstalled; | ||||
| 	private String currentWorkingDirectory; | ||||
| 	private String path; | ||||
| 	private String streamingPath; | ||||
| 	private String color; | ||||
| @ -224,29 +230,14 @@ public class MainWindowController { | ||||
| 	private String mode; | ||||
| 	private String ratingSortType; | ||||
| 	private String local; | ||||
| 	String title; | ||||
| 	String year; | ||||
| 	String rating; | ||||
| 	String publishedOn; | ||||
| 	String duration; | ||||
| 	String genre; | ||||
| 	String director; | ||||
| 	String writer; | ||||
| 	String actors; | ||||
| 	String plot; | ||||
| 	String language; | ||||
| 	String country; | ||||
| 	String awards; | ||||
| 	String metascore; | ||||
| 	String imdbRating; | ||||
| 	String type;	 | ||||
| 	double size; | ||||
| 	 | ||||
| 	public double size; | ||||
| 	private int last; | ||||
| 	private int selected; | ||||
| 	private int next; | ||||
| 	private File selectedFolder; | ||||
| 	private File selectedStreamingFolder; | ||||
| 	ResourceBundle bundle; | ||||
| 	private ResourceBundle bundle; | ||||
| 
 | ||||
| 	private ObservableList<tableData> filterData = FXCollections.observableArrayList(); | ||||
| 	private ObservableList<String> locals = FXCollections.observableArrayList("English (en_US)", "Deutsch (de_DE)"); | ||||
| @ -266,7 +257,8 @@ public class MainWindowController { | ||||
| 	Properties props = new Properties(); | ||||
| 	 | ||||
| 	private Main main; | ||||
| 	private updater Updater; | ||||
| 	private UpdateController updateController; | ||||
| //	private updater Updater; | ||||
| 	private apiQuery ApiQuery; | ||||
| 	DBController dbController; | ||||
| 	 | ||||
| @ -354,7 +346,7 @@ public class MainWindowController { | ||||
|     	alert.setTitle("Info"); | ||||
|     	alert.setHeaderText("Project HomeFlix"); | ||||
|     	alert.setContentText(infoText); | ||||
|     	alert.initOwner(main.primaryStage); | ||||
|     	alert.initOwner(main.getPrimaryStage()); | ||||
|     	alert.showAndWait(); | ||||
| 	} | ||||
| 	 | ||||
| @ -451,18 +443,19 @@ public class MainWindowController { | ||||
| 	 | ||||
| 	@FXML | ||||
| 	private void updateBtnAction(){ | ||||
| 		Thread updateThread = new Thread(Updater); | ||||
| 		updateController = new UpdateController(this, buildNumber, useBeta); | ||||
| 		Thread updateThread = new Thread(updateController); | ||||
| 		updateThread.setName("Updater"); | ||||
| 		updateThread.start();	 | ||||
| 	} | ||||
| 	 | ||||
| 	@FXML | ||||
| 	private void autoupdateBtnAction(){ | ||||
| 		if(autoUpdate){ | ||||
|     		setAutoUpdate(false); | ||||
|     	}else{ | ||||
|     		setAutoUpdate(true); | ||||
|     	} | ||||
| 	private void autoUpdateToggleBtnAction(){ | ||||
| 		if (autoUpdate) { | ||||
| 			setAutoUpdate(false); | ||||
| 		} else { | ||||
| 			setAutoUpdate(true); | ||||
| 		} | ||||
| 		saveSettings(); | ||||
| 	} | ||||
| 	 | ||||
| @ -495,13 +488,21 @@ public class MainWindowController { | ||||
| 	 */ | ||||
| 	void setMain(Main main) { | ||||
| 		this.main = main; | ||||
| 		Updater = new updater(this, buildNumber); | ||||
| 		dbController = new DBController(this, this.main);	 | ||||
| 		dbController = new DBController(this.main, this);	 | ||||
| 		ApiQuery = new apiQuery(this, dbController, this.main); | ||||
| 	} | ||||
| 	 | ||||
| 	void init() { | ||||
| 		loadSettings(); | ||||
| 		loadStreamingSettings(); | ||||
| 		checkAutoUpdate(); | ||||
| 		initTabel(); | ||||
| 		initActions(); | ||||
| 		initUI();	 | ||||
| 	} | ||||
| 	 | ||||
| 	//Initialize the tables (treeTableViewfilm and tableViewStreamingdata) | ||||
| 	void initTabel(){ | ||||
| 	void initTabel() { | ||||
| 
 | ||||
| 		//film Table  | ||||
| 	    columnRating.setMaxWidth(80); | ||||
| @ -753,32 +754,22 @@ public class MainWindowController { | ||||
|       }); | ||||
| 	} | ||||
| 	 | ||||
| 	//initialize UI elements | ||||
| 	void initUI(){ | ||||
| 		LOGGER.info("Mode: "+mode);	//TODO debugging | ||||
| 		debugBtn.setDisable(true); 	//debugging button for tests | ||||
| 	// initialize UI elements | ||||
| 	void initUI() { | ||||
| 		LOGGER.info("Mode: " + mode); // TODO debugging | ||||
| 		debugBtn.setDisable(true); // debugging button for tests | ||||
| 		debugBtn.setVisible(false); | ||||
| 		 | ||||
|         tfPath.setText(getPath()); | ||||
|         sliderFontSize.setValue(getSize()); | ||||
| 
 | ||||
| 		tfPath.setText(getPath()); | ||||
| 		sliderFontSize.setValue(getSize()); | ||||
| 		mainColor.setValue(Color.valueOf(getColor())); | ||||
| 
 | ||||
| 		updateBtn.setFont(Font.font("System", 12)); | ||||
| 		autoUpdateToggleBtn.setSelected(isAutoUpdate()); | ||||
| 		cbLocal.setItems(locals); | ||||
| 		 | ||||
|         updateBtn.setFont(Font.font("System", 12)); | ||||
|         cbLocal.setItems(locals); | ||||
|          | ||||
|         if(autoUpdate){ | ||||
|     		autoupdateBtn.setSelected(true); | ||||
|     		try { | ||||
|     			Thread updateThread = new Thread(Updater); | ||||
|     			updateThread.setName("Updater"); | ||||
|     			updateThread.start(); | ||||
|     			updateThread.join(); | ||||
| 			} catch (InterruptedException e) { | ||||
| 				e.printStackTrace(); | ||||
| 			} | ||||
|     	}else{ | ||||
|     		autoupdateBtn.setSelected(false); | ||||
|     	} | ||||
| 		setLocalUI(); | ||||
| 		applyColor(); | ||||
| 	} | ||||
| 	 | ||||
| 	private void refreshTable(){ | ||||
| @ -789,7 +780,7 @@ public class MainWindowController { | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	void addDataUI(){ | ||||
| 	public void addDataUI(){ | ||||
| 		if(mode.equals("local")){ | ||||
| 			for(int i = 0; i < localFilms.size(); i++){ | ||||
| 				root.getChildren().add(new TreeItem<tableData>(localFilms.get(i)));	//add data to root-node | ||||
| @ -936,75 +927,58 @@ public class MainWindowController { | ||||
| 	void setLocalUI() { | ||||
| 		switch (getLocal()) { | ||||
| 		case "en_US": | ||||
| 			bundle = ResourceBundle.getBundle("locals.HomeFlix-Local", Locale.US); // us_English | ||||
| 			setBundle(ResourceBundle.getBundle("locals.HomeFlix-Local", Locale.US)); // us_English | ||||
| 			cbLocal.getSelectionModel().select(0); | ||||
| 			break; | ||||
| 		case "de_DE": | ||||
| 			bundle = ResourceBundle.getBundle("locals.HomeFlix-Local", Locale.GERMAN); // German | ||||
| 			setBundle(ResourceBundle.getBundle("locals.HomeFlix-Local", Locale.GERMAN)); // German | ||||
| 			cbLocal.getSelectionModel().select(1); | ||||
| 			break; | ||||
| 		default: | ||||
| 			bundle = ResourceBundle.getBundle("locals.HomeFlix-Local", Locale.US); // default local | ||||
| 			setBundle(ResourceBundle.getBundle("locals.HomeFlix-Local", Locale.US)); // default local | ||||
| 			cbLocal.getSelectionModel().select(0); | ||||
| 			break; | ||||
| 		} | ||||
| 		infoBtn.setText(bundle.getString("info")); | ||||
| 		settingsBtn.setText(bundle.getString("settings")); | ||||
| 		streamingSettingsBtn.setText(bundle.getString("streamingSettings")); | ||||
| 		tfPath.setPromptText(bundle.getString("tfPath")); | ||||
| 		tfStreamingPath.setPromptText(bundle.getString("tfPath")); | ||||
| 		tfsearch.setPromptText(bundle.getString("tfSearch")); | ||||
| 		openfolderbtn.setText(bundle.getString("openFolder")); | ||||
| 		updateBtn.setText(bundle.getString("checkUpdates")); | ||||
| 		directoryBtn.setText(bundle.getString("chooseFolder")); | ||||
| 		streamingDirectoryBtn.setText(bundle.getString("chooseFolder")); | ||||
| 		settingsHead1Label.setText(bundle.getString("settingsHead1Label")); | ||||
| 		mainColorLabel.setText(bundle.getString("mainColorLabel")); | ||||
| 		fontsizeLabel.setText(bundle.getString("fontsizeLabel")); | ||||
| 		localLabel.setText(bundle.getString("localLabel")); | ||||
| 		autoUpdateLabel.setText(bundle.getString("autoUpdateLabel")); | ||||
| 		versionLabel.setText(bundle.getString("version") + " " + version + " (Build: " + buildNumber + ")"); | ||||
| 		columnTitel.setText(bundle.getString("columnName")); | ||||
| 		columnRating.setText(bundle.getString("columnRating")); | ||||
| 		columnStreamUrl.setText(bundle.getString("columnStreamUrl")); | ||||
| 		columnResolution.setText(bundle.getString("columnResolution")); | ||||
| 		columnSeason.setText(bundle.getString("columnSeason")); | ||||
| 		columnYear.setText(bundle.getString("columnYear")); | ||||
| 		errorUpdateD = bundle.getString("errorUpdateD"); | ||||
| 		errorUpdateV = bundle.getString("errorUpdateV"); | ||||
| 		errorPlay = bundle.getString("errorPlay"); | ||||
| 		errorOpenStream = bundle.getString("errorOpenStream"); | ||||
| 		errorMode = bundle.getString("errorMode"); | ||||
| 		errorLoad = bundle.getString("errorLoad"); | ||||
| 		errorSave = bundle.getString("errorSave"); | ||||
| 		noFilmFound = bundle.getString("noFilmFound"); | ||||
| 		infoText = bundle.getString("version") + " " + version + " (Build: " + buildNumber + ") " + versionName + bundle.getString("infoText"); | ||||
| 		vlcNotInstalled = bundle.getString("vlcNotInstalled"); | ||||
| 
 | ||||
| 		title = bundle.getString("title"); | ||||
| 		year = bundle.getString("year"); | ||||
| 		rating = bundle.getString("rating"); | ||||
| 		publishedOn = bundle.getString("publishedOn"); | ||||
| 		duration = bundle.getString("duration"); | ||||
| 		genre = bundle.getString("genre"); | ||||
| 		director = bundle.getString("director"); | ||||
| 		writer = bundle.getString("writer"); | ||||
| 		actors = bundle.getString("actors"); | ||||
| 		plot = bundle.getString("plot"); | ||||
| 		language = bundle.getString("language"); | ||||
| 		country = bundle.getString("country"); | ||||
| 		awards = bundle.getString("awards"); | ||||
| 		metascore = bundle.getString("metascore"); | ||||
| 		imdbRating = bundle.getString("imdbRating"); | ||||
| 		type = bundle.getString("type"); | ||||
| 		infoBtn.setText(getBundle().getString("info")); | ||||
| 		settingsBtn.setText(getBundle().getString("settings")); | ||||
| 		streamingSettingsBtn.setText(getBundle().getString("streamingSettings")); | ||||
| 		tfPath.setPromptText(getBundle().getString("tfPath")); | ||||
| 		tfStreamingPath.setPromptText(getBundle().getString("tfPath")); | ||||
| 		tfsearch.setPromptText(getBundle().getString("tfSearch")); | ||||
| 		openfolderbtn.setText(getBundle().getString("openFolder")); | ||||
| 		updateBtn.setText(getBundle().getString("checkUpdates")); | ||||
| 		directoryBtn.setText(getBundle().getString("chooseFolder")); | ||||
| 		streamingDirectoryBtn.setText(getBundle().getString("chooseFolder")); | ||||
| 		settingsHead1Label.setText(getBundle().getString("settingsHead1Label")); | ||||
| 		mainColorLabel.setText(getBundle().getString("mainColorLabel")); | ||||
| 		fontsizeLabel.setText(getBundle().getString("fontsizeLabel")); | ||||
| 		localLabel.setText(getBundle().getString("localLabel")); | ||||
| 		autoUpdateLabel.setText(getBundle().getString("autoUpdateLabel")); | ||||
| 		versionLabel.setText(getBundle().getString("version") + " " + version + " (Build: " + buildNumber + ")"); | ||||
| 		columnTitel.setText(getBundle().getString("columnName")); | ||||
| 		columnRating.setText(getBundle().getString("columnRating")); | ||||
| 		columnStreamUrl.setText(getBundle().getString("columnStreamUrl")); | ||||
| 		columnResolution.setText(getBundle().getString("columnResolution")); | ||||
| 		columnSeason.setText(getBundle().getString("columnSeason")); | ||||
| 		columnYear.setText(getBundle().getString("columnYear")); | ||||
| 		errorUpdateD = getBundle().getString("errorUpdateD"); | ||||
| 		errorUpdateV = getBundle().getString("errorUpdateV"); | ||||
| 		errorPlay = getBundle().getString("errorPlay"); | ||||
| 		errorOpenStream = getBundle().getString("errorOpenStream"); | ||||
| 		errorMode = getBundle().getString("errorMode"); | ||||
| 		errorLoad = getBundle().getString("errorLoad"); | ||||
| 		errorSave = getBundle().getString("errorSave"); | ||||
| 		noFilmFound = getBundle().getString("noFilmFound"); | ||||
| 		infoText = getBundle().getString("version") + " " + version + " (Build: " + buildNumber + ") " + versionName + getBundle().getString("infoText"); | ||||
| 		vlcNotInstalled = getBundle().getString("vlcNotInstalled"); | ||||
| 	} | ||||
| 	 | ||||
| 	void showErrorMsg(String msg, IOException exception) { | ||||
| 	public void showErrorMsg(String msg, IOException exception) { | ||||
| 		Alert alert = new Alert(AlertType.ERROR); | ||||
| 		alert.setTitle("Error"); | ||||
| 		alert.setHeaderText(""); | ||||
| 		alert.setContentText(msg); | ||||
| 		alert.initOwner(main.primaryStage); | ||||
| 		alert.initOwner(main.getPrimaryStage()); | ||||
| 
 | ||||
| 		// Create expandable Exception. | ||||
| 		StringWriter sw = new StringWriter(); | ||||
| @ -1147,6 +1121,23 @@ public class MainWindowController { | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	// if AutoUpdate, then check for updates | ||||
| 	private void checkAutoUpdate() { | ||||
| 
 | ||||
| 		if (isAutoUpdate()) { | ||||
| 			try { | ||||
| 				LOGGER.info("AutoUpdate: looking for updates on startup ..."); | ||||
| 				updateController = new UpdateController(this, buildNumber, useBeta); | ||||
| 				Thread updateThread = new Thread(updateController); | ||||
| 				updateThread.setName("Updater"); | ||||
| 				updateThread.start(); | ||||
| 				updateThread.join(); | ||||
| 			} catch (InterruptedException e) { | ||||
| 				e.printStackTrace(); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	// cuts 0x of the Color-pickers return value | ||||
| 	private void editColor(String input) { | ||||
| 		StringBuilder sb = new StringBuilder(input); | ||||
| @ -1212,14 +1203,6 @@ public class MainWindowController { | ||||
| 		return mode; | ||||
| 	} | ||||
| 
 | ||||
| 	public String getCurrentWorkingDirectory() { | ||||
| 		return currentWorkingDirectory; | ||||
| 	} | ||||
| 
 | ||||
| 	public void setCurrentWorkingDirectory(String currentWorkingDirectory) { | ||||
| 		this.currentWorkingDirectory = currentWorkingDirectory; | ||||
| 	} | ||||
| 
 | ||||
| 	public ObservableList<tableData> getLocalFilms() { | ||||
| 		return localFilms; | ||||
| 	} | ||||
| @ -1251,4 +1234,36 @@ public class MainWindowController { | ||||
| 	public void setRatingSortType(String ratingSortType) { | ||||
| 		this.ratingSortType = ratingSortType; | ||||
| 	} | ||||
| 
 | ||||
| 	public ResourceBundle getBundle() { | ||||
| 		return bundle; | ||||
| 	} | ||||
| 
 | ||||
| 	public void setBundle(ResourceBundle bundle) { | ||||
| 		this.bundle = bundle; | ||||
| 	} | ||||
| 
 | ||||
| 	public TextFlow getTextFlow() { | ||||
| 		return textFlow; | ||||
| 	} | ||||
| 
 | ||||
| 	public void setTextFlow(TextFlow textFlow) { | ||||
| 		this.textFlow = textFlow; | ||||
| 	} | ||||
| 
 | ||||
| 	public ImageView getImage1() { | ||||
| 		return image1; | ||||
| 	} | ||||
| 
 | ||||
| 	public void setImage1(ImageView image1) { | ||||
| 		this.image1 = image1; | ||||
| 	} | ||||
| 
 | ||||
| 	public JFXButton getUpdateBtn() { | ||||
| 		return updateBtn; | ||||
| 	} | ||||
| 
 | ||||
| 	public void setUpdateBtn(JFXButton updateBtn) { | ||||
| 		this.updateBtn = updateBtn; | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										655
									
								
								src/main/java/kellerkinder/HomeFlix/controller/DBController.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										655
									
								
								src/main/java/kellerkinder/HomeFlix/controller/DBController.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,655 @@ | ||||
| /** | ||||
|  * Project-HomeFlix | ||||
|  *  | ||||
|  * Copyright 2016-2018  <@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.controller; | ||||
|  | ||||
| import java.io.File; | ||||
| import java.io.FileNotFoundException; | ||||
| import java.io.FileReader; | ||||
| import java.io.IOException; | ||||
| import java.sql.Connection; | ||||
| import java.sql.DriverManager; | ||||
| import java.sql.PreparedStatement; | ||||
| import java.sql.ResultSet; | ||||
| import java.sql.SQLException; | ||||
| import java.sql.Statement; | ||||
| import java.util.ArrayList; | ||||
| 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.scene.image.Image; | ||||
| import javafx.scene.image.ImageView; | ||||
| import javafx.scene.text.Font; | ||||
| import javafx.scene.text.FontWeight; | ||||
| import javafx.scene.text.Text; | ||||
| import kellerkinder.HomeFlix.application.Main; | ||||
| import kellerkinder.HomeFlix.application.MainWindowController; | ||||
| import kellerkinder.HomeFlix.datatypes.tableData; | ||||
|  | ||||
| public class DBController { | ||||
|  | ||||
| 	public DBController(Main main, MainWindowController mainWindowController) { | ||||
| 		this.main = main; | ||||
| 		this.mainWindowController = mainWindowController; | ||||
| 	} | ||||
|  | ||||
| 	private MainWindowController mainWindowController; | ||||
| 	private Main main; | ||||
| 	private String DB_PATH = System.getProperty("user.home") + "\\Documents\\HomeFlix" + "\\" + "Homeflix.db"; //path to database file | ||||
| 	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> filmsdbAll = new ArrayList<String>(); | ||||
| 	private List<String> filmsdbLocal = new ArrayList<String>(); | ||||
| 	private List<String> filmsdbStream = new ArrayList<String>(); | ||||
| 	private List<String> filmsdbStreamURL = new ArrayList<String>(); | ||||
| 	private List<String> filmsAll = new ArrayList<String>(); | ||||
| 	private List<String> filmsDir = new ArrayList<String>(); | ||||
| 	private List<String> filmsStream = new ArrayList<String>(); | ||||
| 	private List<String> filmsStreamURL = new ArrayList<String>();	 | ||||
| 	private List<String> filmsStreamData = new ArrayList<String>(); | ||||
| 	private Connection connection = null; | ||||
| 	private static final Logger LOGGER = LogManager.getLogger(DBController.class.getName()); | ||||
| 	 | ||||
| 	public void init() { | ||||
| 		LOGGER.info("<========== starting loading sql ==========>"); | ||||
| 		loadDatabase(); | ||||
| 		createDatabase(); | ||||
| 		loadData(); | ||||
| 		LOGGER.info("<========== finished loading sql ==========>"); | ||||
| 	} | ||||
|  | ||||
| 	public void loadDatabase() { | ||||
| 		if (System.getProperty("os.name").equals("Linux")) { | ||||
| 			DB_PATH = System.getProperty("user.home") + "/HomeFlix/Homeflix.db"; | ||||
| 		}else{ | ||||
| 			DB_PATH = System.getProperty("user.home") + "\\Documents\\HomeFlix" + "\\" + "Homeflix.db"; | ||||
| 		} | ||||
| 		try { | ||||
| 			// create a database connection | ||||
| 			connection = DriverManager.getConnection("jdbc:sqlite:" + DB_PATH); | ||||
| 			connection.setAutoCommit(false);	//AutoCommit to false -> manual commit is active | ||||
| 		} catch (SQLException e) { | ||||
| 			// if the error message is "out of memory", it probably means no database file is found | ||||
| 			LOGGER.error("error while loading the ROM database", e); | ||||
| 		} | ||||
| 		LOGGER.info("ROM database loaded successfull"); | ||||
| 	} | ||||
| 	 | ||||
| 	public void createDatabase() {	 | ||||
| 		PreparedStatement ps; | ||||
| 		PreparedStatement psS;	 | ||||
| 	 | ||||
| 		try { | ||||
| 			Statement stmt = connection.createStatement(); | ||||
| 			stmt.executeUpdate("create table if not exists film_local (rating, titel, streamUrl, favIcon, cached)"); | ||||
| 			stmt.executeUpdate("create table if not exists film_streaming (year, season, episode, rating, resolution, titel, streamUrl, favIcon, cached)"); | ||||
| 			stmt.close(); | ||||
| 		} catch (SQLException e) { | ||||
| 			LOGGER.error(e); | ||||
| 		}  | ||||
| 			 | ||||
| 		try { | ||||
| 			Statement stmt = connection.createStatement(); | ||||
| 			ResultSet rs = stmt.executeQuery("SELECT * FROM film_local"); | ||||
| 			while (rs.next()) { | ||||
| 				filmsdbLocal.add(rs.getString(2)); | ||||
| 			} | ||||
| 			stmt.close(); | ||||
| 			rs.close(); | ||||
|  | ||||
| 			rs = stmt.executeQuery("SELECT * FROM film_streaming;"); | ||||
| 			while (rs.next()) { | ||||
| 				filmsdbStream.add(rs.getString(6)); | ||||
| 				filmsdbStreamURL.add(rs.getString(7)); | ||||
| 			} | ||||
| 			stmt.close(); | ||||
| 			rs.close(); | ||||
| 		} catch (SQLException e) { | ||||
| 			LOGGER.error("Ups! an error occured!", e); | ||||
| 		} | ||||
| 			 | ||||
| 		// getting all files from the selected directory TODO rework | ||||
| 		String[] entries = new File(mainWindowController.getPath()).list(); | ||||
| 		if (mainWindowController.getPath().equals("") || mainWindowController.getPath() == null) { | ||||
| 			LOGGER.warn("no path selected!"); | ||||
| 		} else if (new File(mainWindowController.getPath()).exists()) { | ||||
| 			LOGGER.info(entries.length); | ||||
| 			for (int i = 0; i != entries.length; i++) { | ||||
| 				filmsDir.add(cutOffEnd(entries[i])); | ||||
| 			} | ||||
| 		} else { | ||||
| 			LOGGER.error(mainWindowController.getPath() + "dosen't exist!"); | ||||
| 		} | ||||
|  | ||||
| 		// getting all entries from the streaming lists | ||||
| 		for (int v = 0; v < mainWindowController.getStreamingData().size(); v++) { | ||||
| 			String fileName = mainWindowController.getStreamingPath() + "/" | ||||
| 					+ mainWindowController.getStreamingData().get(v).getStreamUrl(); | ||||
| 			try { | ||||
| 				JsonObject object = Json.parse(new FileReader(fileName)).asObject(); | ||||
| 				JsonArray items = object.get("entries").asArray(); | ||||
| 				for (JsonValue item : items) { | ||||
| 					filmsStream.add(item.asObject().getString("titel", "")); | ||||
| 					filmsStreamURL.add(item.asObject().getString("streamUrl", "")); | ||||
| 					filmsStreamData.add(fileName); | ||||
| 				} | ||||
| 			} catch (IOException e) { | ||||
| 				e.printStackTrace(); | ||||
| 			} | ||||
| 		} | ||||
| 			 | ||||
| 		// add all entries to filmsAll and filmsdbAl, for later comparing | ||||
| 		filmsAll.addAll(filmsDir); | ||||
| 		filmsAll.addAll(filmsStream); | ||||
| 		filmsdbAll.addAll(filmsdbLocal); | ||||
| 		filmsdbAll.addAll(filmsdbStream); | ||||
| 		LOGGER.info("films in directory: " + filmsAll.size()); | ||||
| 		LOGGER.info("filme in db: " + filmsdbAll.size()); | ||||
|  | ||||
| 		/** | ||||
| 		 * if filmsdbAll.size() == 0 database is empty, we need to fill it else check if | ||||
| 		 * there is something to remove or to add TODO separate local and streaming for | ||||
| 		 * better error handling | ||||
| 		 */ | ||||
| 		if (filmsdbAll.size() == 0) { | ||||
| 			LOGGER.info("Database is empty, creating tables ..."); | ||||
|  | ||||
| 			try { | ||||
| 				ps = connection.prepareStatement("insert into film_local values (?, ?, ?, ?, ?)"); | ||||
| 				psS = connection.prepareStatement("insert into film_streaming values (?, ?, ?, ?, ?, ?, ?, ?, ?)"); | ||||
|  | ||||
| 				if (mainWindowController.getPath().equals("") || mainWindowController.getPath() == null) { | ||||
| 					LOGGER.warn("no path selected!"); | ||||
| 				} else if (new File(mainWindowController.getPath()).exists()) { | ||||
| 					for (int j = 0; j != entries.length; j++) // goes through all the files in the directory | ||||
| 					{ | ||||
| 						ps.setInt(1, 0); // rating as integer 1. column | ||||
| 						ps.setString(2, cutOffEnd(entries[j])); // name as String without ending 2. column | ||||
| 						ps.setString(3, entries[j]); // path as String 3. column | ||||
| 						ps.setString(4, "favorite_border_black"); | ||||
| 						ps.setBoolean(5, false); | ||||
| 						ps.addBatch(); // add command to prepared statement | ||||
| 					} | ||||
| 				} | ||||
|  | ||||
| 				if (mainWindowController.getStreamingPath().equals("") || mainWindowController.getStreamingPath().equals(null)) { | ||||
| 					LOGGER.warn("no path selected!"); | ||||
| 				} else { | ||||
| 					for (int i = 0; i < mainWindowController.getStreamingData().size(); i++) { | ||||
| 						String fileNamea = mainWindowController.getStreamingPath() + "/" | ||||
| 								+ mainWindowController.getStreamingData().get(i).getStreamUrl(); | ||||
| 						try { | ||||
| 							JsonObject object = Json.parse(new FileReader(fileNamea)).asObject(); | ||||
| 							JsonArray items = object.get("entries").asArray(); | ||||
| 							for (JsonValue item : items) { | ||||
| 								psS.setInt(1, item.asObject().getInt("year", 0)); | ||||
| 								psS.setInt(2, item.asObject().getInt("season", 0)); | ||||
| 								psS.setInt(3, item.asObject().getInt("episode", 0)); | ||||
| 								psS.setInt(4, 0); | ||||
| 								psS.setString(5, item.asObject().getString("resolution", "")); | ||||
| 								psS.setString(6, item.asObject().getString("titel", "")); | ||||
| 								psS.setString(7, item.asObject().getString("streamUrl", "")); | ||||
| 								psS.setString(8, "favorite_border_black"); | ||||
| 								psS.setBoolean(9, false); | ||||
| 								psS.addBatch(); // add command to prepared statement | ||||
| 							} | ||||
| 						} catch (IOException e) { | ||||
| 							LOGGER.error(e); | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 				ps.executeBatch(); // execute statement to write entries into table | ||||
| 				psS.executeBatch(); | ||||
| 				connection.commit(); | ||||
| 				ps.close(); | ||||
| 				psS.close(); | ||||
| 			} catch (SQLException e) { | ||||
| 				LOGGER.error(e); | ||||
| 			} | ||||
| 		} else { | ||||
| 			// check if film added or removed | ||||
| 			try { | ||||
| 				checkAddEntry(); | ||||
| 				checkRemoveEntry(); | ||||
| 			} catch (IOException | SQLException e) { | ||||
| 				e.printStackTrace(); | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		// if cache table dosen't exist create it | ||||
| 		try { | ||||
| 			Statement stmt = connection.createStatement(); | ||||
| 			// streamUrl is primary key | ||||
| 			stmt.executeUpdate("create table if not exists cache (" | ||||
| 					+ "streamUrl, Title, Year, Rated, Released, Runtime, Genre, Director, Writer," | ||||
| 					+ " Actors, Plot, Language, Country, Awards, Metascore, imdbRating, imdbVotes," | ||||
| 					+" imdbID, Type, Poster, Response)" | ||||
| 			); | ||||
| 			stmt.close(); | ||||
| 		} catch (SQLException e) { | ||||
| 			LOGGER.error(e); | ||||
| 		} | ||||
|  | ||||
| 	} | ||||
| 	 | ||||
| 	// loading data from database to mainWindowController  | ||||
| 	public void loadData(){ | ||||
| 		LOGGER.info("loading data to mwc ..."); | ||||
| 		try {  | ||||
| 			//load local Data | ||||
| 			Statement stmt = connection.createStatement();  | ||||
| 			ResultSet rs = stmt.executeQuery("SELECT * FROM film_local ORDER BY titel");  | ||||
| 			while (rs.next()) { | ||||
| 				if(rs.getString(4).equals("favorite_black")){ | ||||
| 					mainWindowController.getLocalFilms().add( new tableData(1, 1, 1, rs.getDouble(1), "1", rs.getString(2), rs.getString(3), new ImageView(favorite_black),rs.getBoolean(5))); | ||||
| 				}else{ | ||||
| 					mainWindowController.getLocalFilms().add( new tableData(1, 1, 1, rs.getDouble(1), "1", rs.getString(2), rs.getString(3), new ImageView(favorite_border_black),rs.getBoolean(5))); | ||||
| 				} | ||||
| 			} | ||||
| 			stmt.close(); | ||||
| 			rs.close(); | ||||
| 			 | ||||
| 			//load streaming Data FIXME check if there are streaming data before loading -> maybe there is an issue now | ||||
| 			rs = stmt.executeQuery("SELECT * FROM film_streaming ORDER BY titel;");  | ||||
| 			while (rs.next()) { | ||||
| 				if(rs.getString(8).equals("favorite_black")){ | ||||
| 					mainWindowController.getStreamingFilms().add(new tableData(rs.getInt(1), rs.getInt(2), rs.getInt(3), rs.getDouble(4), rs.getString(5), rs.getString(6), rs.getString(7),  new ImageView(favorite_black),rs.getBoolean(9))); | ||||
| 				}else{ | ||||
| 					mainWindowController.getStreamingFilms().add(new tableData(rs.getInt(1), rs.getInt(2), rs.getInt(3), rs.getDouble(4), rs.getString(5), rs.getString(6), rs.getString(7), new ImageView(favorite_border_black),rs.getBoolean(9))); | ||||
| 				} | ||||
| 			} | ||||
| 			stmt.close(); | ||||
| 			rs.close(); 		 | ||||
| 		} catch (SQLException e) { | ||||
| 			LOGGER.error("Ups! an error occured!", e); | ||||
| 		} | ||||
| 		 | ||||
| 		LOGGER.info("loading data to the GUI ..."); | ||||
| 		mainWindowController.addDataUI(); | ||||
| 	} | ||||
| 	 | ||||
| 	//Refreshes the data in mainWindowController.newDaten and mainWindowController.streamData | ||||
| 	//FIXME it seems that there is an issue at the moment with streaming refreshing wrong entry if there is more than one with the same name | ||||
| 	public void refresh(String name, int i) throws SQLException { | ||||
| 		LOGGER.info("refresh ..."); | ||||
| 		Statement stmt;		 | ||||
| 		 | ||||
| 		try { | ||||
| 			stmt = connection.createStatement(); | ||||
| 			ResultSet rs = stmt.executeQuery("SELECT * FROM film_local WHERE titel = \""+name+"\";" ); | ||||
| 			if(rs.getString(4).equals("favorite_black")){ | ||||
| 				mainWindowController.getLocalFilms().set(i, new tableData(1, 1, 1, rs.getDouble(1), "1", rs.getString(2), rs.getString(3),  new ImageView(favorite_black),rs.getBoolean(5))); | ||||
| 			}else{ | ||||
| 				mainWindowController.getLocalFilms().set(i, new tableData(1, 1, 1, rs.getDouble(1), "1", rs.getString(2), rs.getString(3), new ImageView(favorite_border_black),rs.getBoolean(5))); | ||||
| 			} | ||||
| 			stmt.close(); | ||||
| 			rs.close(); | ||||
| 		} catch (SQLException e) { | ||||
| 			LOGGER.error(e); | ||||
| 			try { | ||||
| 				stmt = connection.createStatement(); | ||||
| 				ResultSet rs = stmt.executeQuery("SELECT * FROM film_streaming WHERE titel = \""+name+"\";" ); | ||||
| 				if(rs.getString(8).equals("favorite_black")){ | ||||
| 					mainWindowController.getStreamingFilms().set(i,new tableData(rs.getInt(1), rs.getInt(2), rs.getInt(3), rs.getDouble(4), rs.getString(5), rs.getString(6), rs.getString(7),  new ImageView(favorite_black),rs.getBoolean(9))); | ||||
| 				}else{ | ||||
| 					mainWindowController.getStreamingFilms().set(i,new tableData(rs.getInt(1), rs.getInt(2), rs.getInt(3), rs.getDouble(4), rs.getString(5), rs.getString(6), rs.getString(7), new ImageView(favorite_border_black),rs.getBoolean(9))); | ||||
| 				} | ||||
| 				stmt.close(); | ||||
| 				rs.close(); | ||||
| 			} catch (SQLException e1) { | ||||
| 				LOGGER.error("Ups! an error occured!", e1); | ||||
| 			}  | ||||
| 		}  | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * check if there are any entries that have been removed from the film-directory | ||||
| 	 *  | ||||
| 	 * @throws SQLException | ||||
| 	 */ | ||||
| 	private void checkRemoveEntry() throws SQLException { | ||||
| 		LOGGER.info("checking for entrys to remove to DB ..."); | ||||
| 		Statement stmt = connection.createStatement(); | ||||
|  | ||||
| 		for (int a = 0; a < filmsdbLocal.size(); a++) { | ||||
| 			if (!filmsDir.contains(filmsdbLocal.get(a))) { | ||||
| 				try { | ||||
| 					stmt.executeUpdate("delete from film_local where titel = \"" + filmsdbLocal.get(a) + "\""); | ||||
| 					connection.commit(); | ||||
| 					stmt.close(); | ||||
| 					LOGGER.info("removed \"" + filmsdbLocal.get(a) + "\" from database"); | ||||
| 				} catch (Exception e) { | ||||
| 					e.printStackTrace(); | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		for (int b = 0; b < filmsdbStreamURL.size(); b++) { | ||||
| 			if (!filmsStreamURL.contains(filmsdbStreamURL.get(b))) { | ||||
| 				try { | ||||
| 					stmt.executeUpdate("delete from film_streaming where titel = \"" + filmsdbStream.get(b) + "\""); | ||||
| 					connection.commit(); | ||||
| 					stmt.close(); | ||||
| 					LOGGER.info("removed \"" + filmsdbStream.get(b) + "\" from database"); | ||||
| 				} catch (Exception e) { | ||||
| 					e.printStackTrace(); | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	/** | ||||
| 	 * check if there are new films in the film-directory | ||||
| 	 *  | ||||
| 	 * @throws SQLException | ||||
| 	 * @throws FileNotFoundException | ||||
| 	 * @throws IOException | ||||
| 	 *             if lastName != filmsStreamData.get(b) then set i = 0, file | ||||
| 	 *             changed | ||||
| 	 */ | ||||
| 	private void checkAddEntry() throws SQLException, FileNotFoundException, IOException { | ||||
| 		String lastName = ""; | ||||
| 		LOGGER.info("checking for entrys to add to DB ..."); | ||||
| 		String[] entries = new File(mainWindowController.getPath()).list(); | ||||
| 		Statement stmt = connection.createStatement(); | ||||
| 		PreparedStatement ps = connection | ||||
| 				.prepareStatement("insert into film_streaming values (?, ?, ?, ?, ?, ?, ?, ?, ?)"); | ||||
| 		int i = 0; | ||||
|  | ||||
| 		for (int a = 0; a < filmsDir.size(); a++) { | ||||
| 			if (!filmsdbLocal.contains(filmsDir.get(a))) { | ||||
| 				stmt.executeUpdate("insert into film_local values (0, \"" + cutOffEnd(entries[a]) + "\", \"" | ||||
| 						+ entries[a] + "\",\"favorite_border_black\",0)"); | ||||
| 				connection.commit(); | ||||
| 				stmt.close(); | ||||
| 				LOGGER.info("added \"" + filmsDir.get(a) + "\" to database"); | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		for (int b = 0; b < filmsStreamURL.size(); b++) { | ||||
| 			if (filmsdbStreamURL.contains(filmsStreamURL.get(b))) { | ||||
| 			} else { | ||||
| 				if (lastName != "" && lastName != filmsStreamData.get(b)) { | ||||
| 					i = 0; | ||||
| 				} | ||||
| 				lastName = filmsStreamData.get(b); | ||||
| 				JsonObject object = Json.parse(new FileReader(filmsStreamData.get(b))).asObject(); | ||||
| 				JsonArray items = object.get("entries").asArray(); | ||||
| 				System.out.println(items.size() + ", " + i + "; " + b); | ||||
| 				String streamURL = items.get(i).asObject().getString("streamUrl", ""); | ||||
| 				String titel = items.get(i).asObject().getString("titel", ""); | ||||
|  | ||||
| 				if (streamURL.equals(filmsStreamURL.get(b))) { | ||||
| 					System.out.println("added \"" + titel + "\""); | ||||
|  | ||||
| 					ps.setInt(1, items.get(i).asObject().getInt("year", 0)); | ||||
| 					ps.setInt(2, items.get(i).asObject().getInt("season", 0)); | ||||
| 					ps.setInt(3, items.get(i).asObject().getInt("episode", 0)); | ||||
| 					ps.setInt(4, 0); | ||||
| 					ps.setString(5, items.get(i).asObject().getString("resolution", "")); | ||||
| 					ps.setString(6, items.get(i).asObject().getString("titel", "")); | ||||
| 					ps.setString(7, items.get(i).asObject().getString("streamUrl", "")); | ||||
| 					ps.setString(8, "favorite_border_black"); | ||||
| 					ps.setBoolean(9, false); | ||||
| 					ps.addBatch(); // adds the entry | ||||
| 				} | ||||
| 				i++; | ||||
| 			} | ||||
| 		} | ||||
| 		ps.executeBatch(); | ||||
| 		connection.commit(); | ||||
| 		ps.close(); | ||||
| 	} | ||||
| 	 | ||||
| 	// TODO only for debugging | ||||
| 	void ausgeben() { | ||||
| 		LOGGER.info("Outputting all entries ... \n"); | ||||
| 		try { | ||||
| 			Statement stmt = connection.createStatement(); | ||||
| 			ResultSet rs = stmt.executeQuery("SELECT * FROM film_local"); | ||||
| 			while (rs.next()) { | ||||
| 				System.out.println(rs.getString(1)); | ||||
| 				System.out.println(rs.getString(2)); | ||||
| 				System.out.println(rs.getString(3)); | ||||
| 				System.out.println(rs.getString(4)); | ||||
| 				System.out.println(rs.getString(5) + "\n"); | ||||
| 			} | ||||
| 			stmt.close(); | ||||
| 			rs.close(); | ||||
|  | ||||
| 			LOGGER.info("Streaming Entries: \n"); | ||||
|  | ||||
| 			rs = stmt.executeQuery("SELECT * FROM film_streaming;"); | ||||
| 			while (rs.next()) { | ||||
| 				System.out.println(rs.getString(1)); | ||||
| 				System.out.println(rs.getString(2)); | ||||
| 				System.out.println(rs.getString(3)); | ||||
| 				System.out.println(rs.getString(4)); | ||||
| 				System.out.println(rs.getString(5)); | ||||
| 				System.out.println(rs.getString(6)); | ||||
| 				System.out.println(rs.getString(7)); | ||||
| 				System.out.println(rs.getString(8)); | ||||
| 				System.out.println(rs.getString(9) + "\n"); | ||||
| 			} | ||||
| 			stmt.close(); | ||||
| 			rs.close(); | ||||
|  | ||||
| 		} catch (SQLException e) { | ||||
| 			LOGGER.error("Ups! an error occured!", e); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	// get favorite status TODO this should get the correct mode! | ||||
| 	public void getFavStatus(String name) { | ||||
| 		try { | ||||
| 			Statement stmt = connection.createStatement(); | ||||
| 			ResultSet rs = stmt.executeQuery("SELECT titel, rating, favIcon FROM film_local WHERE titel = \"" + name + "\";"); // SQL Befehl | ||||
| 			LOGGER.info("local:" + rs.getString("rating") + ", " + rs.getString("titel") + ", " + rs.getString("favIcon")); | ||||
| 			stmt.close(); | ||||
| 			rs.close(); | ||||
| 		} catch (SQLException e) { | ||||
| 			try { | ||||
| 				Statement stmtS = connection.createStatement(); | ||||
| 				ResultSet rsS = stmtS.executeQuery("SELECT titel, rating, favIcon FROM film_streaming WHERE titel = \"" + name + "\";"); | ||||
| 				LOGGER.info("streaming:" + rsS.getString("rating") + ", " + rsS.getString("titel") + ", " + rsS.getString("favIcon")); | ||||
| 				stmtS.close(); | ||||
| 				rsS.close(); | ||||
| 			} catch (SQLException e1) { | ||||
| 				LOGGER.error("Ups! an error occured!", e1); | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 	} | ||||
| 	 | ||||
| 	// set rating=0 and favorite_border_black TODO this should get the correct mode! | ||||
| 	public void dislike(String name, String streamUrl) { | ||||
| 		LOGGER.info("defavorisieren ..."); | ||||
| 		try { | ||||
| 			Statement stmt = connection.createStatement(); | ||||
| 			stmt.executeUpdate("UPDATE film_local SET rating=0,favIcon='favorite_border_black' WHERE titel=\"" + name + "\";"); | ||||
| 			connection.commit(); | ||||
| 			stmt.close(); | ||||
| 		} catch (SQLException e) { | ||||
| 			LOGGER.error("Ups! an error occured!", e); | ||||
| 		} | ||||
| 		try { | ||||
| 			Statement stmt = connection.createStatement(); | ||||
| 			stmt.executeUpdate("UPDATE film_streaming SET rating=0,favIcon='favorite_border_black' WHERE streamUrl=\"" + streamUrl + "\";"); | ||||
| 			connection.commit(); | ||||
| 			stmt.close(); | ||||
| 		} catch (SQLException e) { | ||||
| 			LOGGER.error("Ups! an error occured!", e); | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	// set rating=1 and favorite_black TODO this should get the correct mode! | ||||
| 	public void like(String name, String streamUrl) { | ||||
| 		System.out.println("favorisieren ..."); | ||||
| 		try { | ||||
| 			Statement stmt = connection.createStatement(); | ||||
| 			stmt.executeUpdate("UPDATE film_local SET rating=1,favIcon='favorite_black' WHERE titel=\"" + name + "\";"); | ||||
| 			connection.commit(); | ||||
| 			stmt.close(); | ||||
| 		} catch (SQLException e) { | ||||
| 			LOGGER.error("Ups! an error occured!", e); | ||||
| 		} | ||||
| 		try { | ||||
| 			Statement stmt = connection.createStatement(); | ||||
| 			stmt.executeUpdate("UPDATE film_streaming SET rating=1,favIcon='favorite_black' WHERE streamUrl=\"" + streamUrl + "\";"); | ||||
| 			connection.commit(); | ||||
| 			stmt.close(); | ||||
| 		} catch (SQLException e) { | ||||
| 			LOGGER.error("Ups! an error occured!", e); | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	void setCached(String streamUrl) throws SQLException { | ||||
| 		try { | ||||
| 			Statement stmt = connection.createStatement(); | ||||
| 			stmt.executeUpdate("UPDATE film_local SET cached=1 WHERE streamUrl=\"" + streamUrl + "\";"); | ||||
| 			connection.commit(); | ||||
| 			stmt.close(); | ||||
| 		} catch (SQLException e) { | ||||
| 			LOGGER.error("Ups! an error occured!", e); | ||||
| 		} | ||||
| 		try { | ||||
| 			Statement stmt = connection.createStatement(); | ||||
| 			stmt.executeUpdate("UPDATE film_streaming SET cached=1 WHERE streamUrl=\"" + streamUrl + "\";"); | ||||
| 			connection.commit(); | ||||
| 			stmt.close(); | ||||
| 		} catch (SQLException e) { | ||||
| 			LOGGER.error("Ups! an error occured!", e); | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	void addCache(	String streamUrl, String Title, String Year, String Rated, String Released, String Runtime, String Genre, String Director, | ||||
| 					String Writer, String Actors, String Plot, String Language, String Country, String Awards, String Metascore, String imdbRating, | ||||
| 					String Type, String imdbVotes, String imdbID, String Poster, String Response) throws SQLException{ | ||||
| 		PreparedStatement ps = connection.prepareStatement("insert into cache values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"); | ||||
| 		 | ||||
| 		LOGGER.info("adding to cache: " + Title); | ||||
| 		ps.setString(1,streamUrl); | ||||
| 		ps.setString(2,Title); | ||||
| 		ps.setString(3,Year); | ||||
| 		ps.setString(4,Rated); | ||||
| 		ps.setString(5,Released); | ||||
| 		ps.setString(6,Runtime); | ||||
| 		ps.setString(7,Genre); | ||||
| 		ps.setString(8,Director); | ||||
| 		ps.setString(9,Writer); | ||||
| 		ps.setString(10,Actors); | ||||
| 		ps.setString(11,Plot); | ||||
| 		ps.setString(12,Language); | ||||
| 		ps.setString(13,Country); | ||||
| 		ps.setString(14,Awards); | ||||
| 		ps.setString(15,Metascore); | ||||
| 		ps.setString(16,imdbRating); | ||||
| 		ps.setString(17,imdbVotes); | ||||
| 		ps.setString(18,imdbID); | ||||
| 		ps.setString(19,Type); | ||||
| 		ps.setString(20,Poster); | ||||
| 		ps.setString(21,Response); | ||||
| 		ps.addBatch(); | ||||
| 		ps.executeBatch();			 | ||||
| 		connection.commit(); | ||||
| 		ps.close(); | ||||
| 		LOGGER.info("done!"); | ||||
| 	} | ||||
| 	 | ||||
| 	public void readCache(String streamUrl) { | ||||
| 		try { | ||||
| 			Statement stmt = connection.createStatement(); | ||||
| 			ResultSet rs = stmt.executeQuery("SELECT * FROM cache WHERE streamUrl=\"" + streamUrl + "\";"); | ||||
| 			ArrayList<Text> nameText = new ArrayList<Text>(); | ||||
| 			ArrayList<Text> responseText = new ArrayList<Text>(); | ||||
| 			String fontFamily = main.getFONT_FAMILY(); | ||||
| 			Image im; | ||||
| 			int fontSize = (int) Math.round(mainWindowController.size); | ||||
| 			int j = 2; | ||||
|  | ||||
| 			nameText.add(0, new Text(mainWindowController.getBundle().getString("title") + ": ")); | ||||
| 			nameText.add(1, new Text(mainWindowController.getBundle().getString("year") + ": ")); | ||||
| 			nameText.add(2, new Text(mainWindowController.getBundle().getString("rating") + ": ")); | ||||
| 			nameText.add(3, new Text(mainWindowController.getBundle().getString("publishedOn") + ": ")); | ||||
| 			nameText.add(4, new Text(mainWindowController.getBundle().getString("duration") + ": ")); | ||||
| 			nameText.add(5, new Text(mainWindowController.getBundle().getString("genre") + ": ")); | ||||
| 			nameText.add(6, new Text(mainWindowController.getBundle().getString("director") + ": ")); | ||||
| 			nameText.add(7, new Text(mainWindowController.getBundle().getString("writer") + ": ")); | ||||
| 			nameText.add(8, new Text(mainWindowController.getBundle().getString("actors") + ": ")); | ||||
| 			nameText.add(9, new Text(mainWindowController.getBundle().getString("plot") + ": ")); | ||||
| 			nameText.add(10, new Text(mainWindowController.getBundle().getString("language") + ": ")); | ||||
| 			nameText.add(11, new Text(mainWindowController.getBundle().getString("country") + ": ")); | ||||
| 			nameText.add(12, new Text(mainWindowController.getBundle().getString("awards") + ": ")); | ||||
| 			nameText.add(13, new Text(mainWindowController.getBundle().getString("metascore") + ": ")); | ||||
| 			nameText.add(14, new Text(mainWindowController.getBundle().getString("imdbRating") + ": ")); | ||||
| 			nameText.add(15, new Text(mainWindowController.getBundle().getString("type") + ": ")); | ||||
|  | ||||
| 			for (int i = 0; i < 15; i++) { | ||||
| 				responseText.add(new Text(rs.getString(j) + "\n")); | ||||
| 				j++; | ||||
| 			} | ||||
| 			responseText.add(new Text(rs.getString(19) + "\n")); | ||||
| 			im = new Image(new File(rs.getString(20)).toURI().toString()); | ||||
|  | ||||
| 			stmt.close(); | ||||
| 			rs.close(); | ||||
|  | ||||
| 			for (int i = 0; i < nameText.size(); i++) { | ||||
| 				nameText.get(i).setFont(Font.font(fontFamily, FontWeight.BOLD, fontSize)); | ||||
| 				responseText.get(i).setFont(Font.font(fontFamily, fontSize)); | ||||
| 			} | ||||
|  | ||||
| 			mainWindowController.getTextFlow().getChildren().remove(0, | ||||
| 					mainWindowController.getTextFlow().getChildren().size()); | ||||
|  | ||||
| 			for (int i = 0; i < nameText.size(); i++) { | ||||
| 				mainWindowController.getTextFlow().getChildren().addAll(nameText.get(i), responseText.get(i)); | ||||
| 			} | ||||
|  | ||||
| 			try { | ||||
| 				mainWindowController.getImage1().setImage(im); | ||||
| 			} catch (Exception e) { | ||||
| 				mainWindowController.getImage1().setImage(new Image("resources/icons/close_black_2048x2048.png")); | ||||
| 				LOGGER.error(e); | ||||
| 			} | ||||
| 			mainWindowController.getImage1().setImage(im); | ||||
|  | ||||
| 		} catch (SQLException e) { | ||||
| 			LOGGER.error("Ups! an error occured!", e); | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	// 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); | ||||
| 	} | ||||
| 	 | ||||
| } | ||||
| @ -0,0 +1,163 @@ | ||||
| /** | ||||
|  * Project-HomeFlix | ||||
|  *  | ||||
|  * Copyright 2018  <@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.controller; | ||||
|  | ||||
| import java.io.BufferedReader; | ||||
| import java.io.File; | ||||
| import java.io.IOException; | ||||
| import java.io.InputStreamReader; | ||||
| import java.net.HttpURLConnection; | ||||
| import java.net.URL; | ||||
|  | ||||
| import javax.swing.ProgressMonitor; | ||||
| import javax.swing.ProgressMonitorInputStream; | ||||
|  | ||||
| import org.apache.commons.io.FileUtils; | ||||
| 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.application.Platform; | ||||
| import kellerkinder.HomeFlix.application.MainWindowController; | ||||
|  | ||||
| public class UpdateController implements Runnable { | ||||
|  | ||||
| 	private MainWindowController mainWindowController; | ||||
| 	private String buildNumber; | ||||
| 	private String apiOutput; | ||||
| 	private String updateBuildNumber; // tag_name from Github | ||||
| //	private String updateName; | ||||
| //	private String updateChanges; | ||||
| 	private String browserDownloadUrl; // update download link | ||||
| 	private String githubApiRelease = "https://api.github.com/repos/Seil0/Project-HomeFlix/releases/latest"; | ||||
| 	private String githubApiBeta = "https://api.github.com/repos/Seil0/Project-HomeFlix/releases"; | ||||
| 	 | ||||
| 	private URL githubApiUrl; | ||||
| 	private boolean useBeta; | ||||
| 	private static final Logger LOGGER = LogManager.getLogger(UpdateController.class.getName()); | ||||
|  | ||||
| 	/** | ||||
| 	 * updater for Project HomeFlix based on cemu_UIs, checks for Updates and download it | ||||
| 	 */ | ||||
| 	public UpdateController(MainWindowController mwc, String buildNumber, boolean useBeta) { | ||||
| 		mainWindowController = mwc; | ||||
| 		this.buildNumber = buildNumber; | ||||
| 		this.useBeta = useBeta; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public void run() { | ||||
| 		LOGGER.info("beta:" + useBeta + "; checking for updates ..."); | ||||
| 		Platform.runLater(() -> { | ||||
| 			mainWindowController.getUpdateBtn().setText(mainWindowController.getBundle().getString("updateBtnChecking")); | ||||
| 		}); | ||||
| 		 | ||||
| 		try { | ||||
|  | ||||
| 			if (useBeta) { | ||||
| 				githubApiUrl = new URL(githubApiBeta); | ||||
| 			} else { | ||||
| 				githubApiUrl = new URL(githubApiRelease); | ||||
| 			} | ||||
|  | ||||
| 			// URL githubApiUrl = new URL(githubApiRelease); | ||||
| 			BufferedReader ina = new BufferedReader(new InputStreamReader(githubApiUrl.openStream())); | ||||
| 			apiOutput = ina.readLine(); | ||||
| 			ina.close(); | ||||
| 		} catch (IOException e) { | ||||
| 			Platform.runLater(() -> { | ||||
| 				LOGGER.error("could not check update version", e); | ||||
| 			}); | ||||
| 		} | ||||
| 		 | ||||
| 		if (useBeta) { | ||||
| 			JsonArray objectArray = Json.parse("{\"items\": " + apiOutput + "}").asObject().get("items").asArray(); | ||||
| 			JsonValue object = objectArray.get(0); | ||||
| 			JsonArray objectAssets = object.asObject().get("assets").asArray(); | ||||
|  | ||||
| 			updateBuildNumber = object.asObject().getString("tag_name", ""); | ||||
| //			updateName = object.asObject().getString("name", ""); | ||||
| //			updateChanges = object.asObject().getString("body", ""); | ||||
|  | ||||
| 			for (JsonValue asset : objectAssets) { | ||||
| 				browserDownloadUrl = asset.asObject().getString("browser_download_url", ""); | ||||
| 			} | ||||
|  | ||||
| 		} else { | ||||
| 			JsonObject object = Json.parse(apiOutput).asObject(); | ||||
| 			JsonArray objectAssets = Json.parse(apiOutput).asObject().get("assets").asArray(); | ||||
|  | ||||
| 			updateBuildNumber = object.getString("tag_name", ""); | ||||
| //			updateName = object.getString("name", ""); | ||||
| //			updateChanges = object.getString("body", ""); | ||||
| 			for (JsonValue asset : objectAssets) { | ||||
| 				browserDownloadUrl = asset.asObject().getString("browser_download_url", ""); | ||||
|  | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 		LOGGER.info("Build: " + buildNumber + ", Update: " + updateBuildNumber); | ||||
|  | ||||
| 		// Compares the program BuildNumber with the current BuildNumber if program | ||||
| 		// BuildNumber < current BuildNumber then perform a update | ||||
| 		int iversion = Integer.parseInt(buildNumber); | ||||
| 		int iaktVersion = Integer.parseInt(updateBuildNumber.replace(".", "")); | ||||
|  | ||||
| 		if (iversion >= iaktVersion) { | ||||
| 			Platform.runLater(() -> { | ||||
| 				mainWindowController.getUpdateBtn().setText(mainWindowController.getBundle().getString("updateBtnNoUpdateAvailable")); | ||||
| 			}); | ||||
| 			LOGGER.info("no update available"); | ||||
| 		} else { | ||||
| 			Platform.runLater(() -> { | ||||
| 				mainWindowController.getUpdateBtn().setText(mainWindowController.getBundle().getString("updateBtnUpdateAvailable")); | ||||
| 			}); | ||||
| 			LOGGER.info("update available"); | ||||
| 			LOGGER.info("download link: " + browserDownloadUrl); | ||||
| 			try { | ||||
| 				// open new Http connection, ProgressMonitorInputStream for downloading the data | ||||
| 				HttpURLConnection connection = (HttpURLConnection) new URL(browserDownloadUrl).openConnection(); | ||||
| 				ProgressMonitorInputStream pmis = new ProgressMonitorInputStream(null, "Downloading...", connection.getInputStream()); | ||||
| 				ProgressMonitor pm = pmis.getProgressMonitor(); | ||||
| 				pm.setMillisToDecideToPopup(0); | ||||
| 				pm.setMillisToPopup(0); | ||||
| 				pm.setMinimum(0);// set beginning of the progress bar to 0 | ||||
| 				pm.setMaximum(connection.getContentLength());// set the end to the file length | ||||
| 				FileUtils.copyInputStreamToFile(pmis, new File("ProjectHomeFlix_update.jar")); // download update | ||||
| 				org.apache.commons.io.FileUtils.copyFile(new File("ProjectHomeFlix_update.jar"), new File("ProjectHomeFlix.jar")); | ||||
| 				org.apache.commons.io.FileUtils.deleteQuietly(new File("ProjectHomeFlix_update.jar")); // delete update | ||||
| 				Runtime.getRuntime().exec("java -jar ProjectHomeFlix.jar"); // start again TODO consider ProcessBuilder to execute | ||||
| 				System.exit(0); // finishes itself | ||||
| 			} catch (IOException e) { | ||||
| 				Platform.runLater(() -> { | ||||
| 					LOGGER.info("could not download update files", e); | ||||
| 				}); | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 	} | ||||
|  | ||||
| } | ||||
| @ -1,8 +1,26 @@ | ||||
| /** | ||||
|  * apiQuery for Project HomeFlix | ||||
|  * sends a query to the omdb api | ||||
|  * Project-HomeFlix | ||||
|  *  | ||||
|  * Copyright 2016-2018  <@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 org.kellerkinder.Project_HomeFlix; | ||||
| 
 | ||||
| package kellerkinder.HomeFlix.controller; | ||||
| 
 | ||||
| import java.awt.Graphics2D; | ||||
| import java.awt.image.BufferedImage; | ||||
| @ -23,6 +41,8 @@ import javafx.scene.image.Image; | ||||
| import javafx.scene.text.Font; | ||||
| import javafx.scene.text.FontWeight; | ||||
| import javafx.scene.text.Text; | ||||
| import kellerkinder.HomeFlix.application.Main; | ||||
| import kellerkinder.HomeFlix.application.MainWindowController; | ||||
| 
 | ||||
| public class apiQuery{ | ||||
| 	 | ||||
| @ -43,7 +63,10 @@ public class apiQuery{ | ||||
| 	ArrayList<Text> responseText = new ArrayList<Text>(); | ||||
| 	ArrayList<Text> nameText = new ArrayList<Text>(); | ||||
| 	 | ||||
| 	void startQuery(String titel, String streamUrl){ | ||||
| 	/** | ||||
| 	 * apiQuery for Project HomeFlix, sends a query to the omdb api | ||||
| 	 */ | ||||
| 	public void startQuery(String titel, String streamUrl){ | ||||
| 		URL queryURL = null; | ||||
| 		Scanner sc = null; | ||||
| 		String moviename = null; | ||||
| @ -106,12 +129,12 @@ public class apiQuery{ | ||||
| 				responseString[17] = object.getString("imdbID", ""); | ||||
| 				responseString[18] = object.getString("Poster", ""); | ||||
| 				responseString[19] = object.getString("Response", ""); | ||||
| 				 | ||||
| 
 | ||||
| 				//adding poster to cache | ||||
| 				BufferedImage originalImage = ImageIO.read(new URL(responseString[18]));//change path to where file is located | ||||
| 			    int type = originalImage.getType() == 0 ? BufferedImage.TYPE_INT_ARGB : originalImage.getType(); | ||||
| 			    BufferedImage resizeImagePNG = resizeImage(originalImage, type, 198, 297); | ||||
| 			    if(System.getProperty("os.name").equals("Linux")) { | ||||
| 				if (System.getProperty("os.name").equals("Linux")) { | ||||
| 			    	posterPath = posterCache+"/"+titel+".png"; | ||||
| 			    	ImageIO.write(resizeImagePNG, "png", new File(posterCache+"/"+titel+".png")); //change path where you want it saved | ||||
| 			    } else { | ||||
| @ -127,58 +150,59 @@ public class apiQuery{ | ||||
| 										responseString[19]); | ||||
| 				dbController.setCached(streamUrl); | ||||
| 				 | ||||
| 				for(int i=0; i<20; i++){ | ||||
| 					Text text = new Text(responseString[i]+"\n"); | ||||
| 				for (int i = 0; i < 20; i++) { | ||||
| 					Text text = new Text(responseString[i] + "\n"); | ||||
| 					responseText.add(text); | ||||
| 					responseText.get(i).setFont(Font.font(fontFamily, fontSize)); | ||||
| 				} | ||||
| 				 | ||||
| 				//if response == false then show mainWindowController.noFilmFound else create new Texts and add them to flowText | ||||
| 				if(retdata.contains("\"Response\":\"False\"")){	//TODO + FIXME | ||||
| 					mainWindowController.textFlow.getChildren().add(new Text(mainWindowController.noFilmFound)); | ||||
| 					im = new Image("resources/icons/close_black_2048x2048.png"); | ||||
| 					mainWindowController.image1.setImage(im); | ||||
| 				}else{ | ||||
| 					nameText.add(0, new Text(mainWindowController.title+": ")); | ||||
| 					nameText.add(1, new Text(mainWindowController.year+": ")); | ||||
| 					nameText.add(2, new Text(mainWindowController.rating+": ")); | ||||
| 					nameText.add(3, new Text(mainWindowController.publishedOn+": ")); | ||||
| 					nameText.add(4, new Text(mainWindowController.duration+": ")); | ||||
| 					nameText.add(5, new Text(mainWindowController.genre+": ")); | ||||
| 					nameText.add(6, new Text(mainWindowController.director+": ")); | ||||
| 					nameText.add(7, new Text(mainWindowController.writer+": ")); | ||||
| 					nameText.add(8, new Text(mainWindowController.actors+": ")); | ||||
| 					nameText.add(9, new Text(mainWindowController.plot+": ")); | ||||
| 					nameText.add(10, new Text(mainWindowController.language+": ")); | ||||
| 					nameText.add(11, new Text(mainWindowController.country+": ")); | ||||
| 					nameText.add(12, new Text(mainWindowController.awards+": ")); | ||||
| 					nameText.add(13, new Text(mainWindowController.metascore+": ")); | ||||
| 					nameText.add(14, new Text(mainWindowController.imdbRating+": ")); | ||||
| 					nameText.add(15, new Text(mainWindowController.type+": ")); | ||||
| 
 | ||||
| 					for(int i=0; i<nameText.size(); i++){ | ||||
| 						nameText.get(i).setFont(Font.font (fontFamily, FontWeight.BOLD, fontSize));	 | ||||
| 				// if response == false then show mainWindowController.noFilmFound else create new Texts and add them to flowText | ||||
| 				if (retdata.contains("\"Response\":\"False\"")) { // TODO + FIXME | ||||
| 					mainWindowController.getTextFlow().getChildren().add(new Text(mainWindowController.noFilmFound)); | ||||
| 					im = new Image("resources/icons/close_black_2048x2048.png"); | ||||
| 					mainWindowController.getImage1().setImage(im); | ||||
| 				} else { | ||||
| 					nameText.add(0, new Text(mainWindowController.getBundle().getString("title") + ": ")); | ||||
| 					nameText.add(1, new Text(mainWindowController.getBundle().getString("year") + ": ")); | ||||
| 					nameText.add(2, new Text(mainWindowController.getBundle().getString("rating") + ": ")); | ||||
| 					nameText.add(3, new Text(mainWindowController.getBundle().getString("publishedOn") + ": ")); | ||||
| 					nameText.add(4, new Text(mainWindowController.getBundle().getString("duration") + ": ")); | ||||
| 					nameText.add(5, new Text(mainWindowController.getBundle().getString("genre") + ": ")); | ||||
| 					nameText.add(6, new Text(mainWindowController.getBundle().getString("director") + ": ")); | ||||
| 					nameText.add(7, new Text(mainWindowController.getBundle().getString("writer") + ": ")); | ||||
| 					nameText.add(8, new Text(mainWindowController.getBundle().getString("actors") + ": ")); | ||||
| 					nameText.add(9, new Text(mainWindowController.getBundle().getString("plot") + ": ")); | ||||
| 					nameText.add(10, new Text(mainWindowController.getBundle().getString("language") + ": ")); | ||||
| 					nameText.add(11, new Text(mainWindowController.getBundle().getString("country") + ": ")); | ||||
| 					nameText.add(12, new Text(mainWindowController.getBundle().getString("awards") + ": ")); | ||||
| 					nameText.add(13, new Text(mainWindowController.getBundle().getString("metascore") + ": ")); | ||||
| 					nameText.add(14, new Text(mainWindowController.getBundle().getString("imdbRating") + ": ")); | ||||
| 					nameText.add(15, new Text(mainWindowController.getBundle().getString("type") + ": ")); | ||||
| 
 | ||||
| 					for (int i = 0; i < nameText.size(); i++) { | ||||
| 						nameText.get(i).setFont(Font.font(fontFamily, FontWeight.BOLD, fontSize)); | ||||
| 					} | ||||
| 					 | ||||
| 					mainWindowController.textFlow.getChildren().remove(0, mainWindowController.textFlow.getChildren().size()); | ||||
| 					 | ||||
| 					for(int i=0;i<nameText.size(); i++){ | ||||
| 						mainWindowController.textFlow.getChildren().addAll(nameText.get(i),responseText.get(i)); | ||||
| 
 | ||||
| 					mainWindowController.getTextFlow().getChildren().remove(0, | ||||
| 							mainWindowController.getTextFlow().getChildren().size()); | ||||
| 
 | ||||
| 					for (int i = 0; i < nameText.size(); i++) { | ||||
| 						mainWindowController.getTextFlow().getChildren().addAll(nameText.get(i), responseText.get(i)); | ||||
| 					} | ||||
| 					 | ||||
| 					//if there is no poster | ||||
| 					if(responseString[18].equals("N/A")){ | ||||
| 
 | ||||
| 					// if there is no poster | ||||
| 					if (responseString[18].equals("N/A")) { | ||||
| 						im = new Image("resources/icons/close_black_2048x2048.png"); | ||||
| 					}else{ | ||||
| 					} else { | ||||
| 						im = new Image(responseString[18]); | ||||
| 					} | ||||
| 					mainWindowController.image1.setImage(im); | ||||
| 					mainWindowController.getImage1().setImage(im); | ||||
| 				} | ||||
| 			} | ||||
| 
 | ||||
| 		} catch (Exception e) { | ||||
| 			mainWindowController.textFlow.getChildren().remove(0, mainWindowController.textFlow.getChildren().size()); | ||||
| 			mainWindowController.textFlow.getChildren().add(new Text(e.toString())); | ||||
| 			mainWindowController.getTextFlow().getChildren().remove(0, mainWindowController.getTextFlow().getChildren().size()); | ||||
| 			mainWindowController.getTextFlow().getChildren().add(new Text(e.toString())); | ||||
| 			System.out.println(e); | ||||
| 		} finally { | ||||
| 			//closes datainputStream, InputStream,Scanner if not already done | ||||
| @ -1,4 +1,25 @@ | ||||
| package org.kellerkinder.Project_HomeFlix; | ||||
| /** | ||||
|  * Project-HomeFlix | ||||
|  *  | ||||
|  * Copyright 2016-2018  <@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 javafx.beans.property.BooleanProperty; | ||||
| import javafx.beans.property.DoubleProperty; | ||||
| @ -1,634 +0,0 @@ | ||||
| /** | ||||
|  * @author Jannik | ||||
|  * DBController for Project HomeFlix | ||||
|  * connection is in manual commit! | ||||
|  */ | ||||
|  | ||||
| package org.kellerkinder.Project_HomeFlix; | ||||
|  | ||||
| import java.io.File; | ||||
| import java.io.FileNotFoundException; | ||||
| import java.io.FileReader; | ||||
| import java.io.IOException; | ||||
| import java.sql.Connection; | ||||
| import java.sql.DriverManager; | ||||
| import java.sql.PreparedStatement; | ||||
| import java.sql.ResultSet; | ||||
| import java.sql.SQLException; | ||||
| import java.sql.Statement; | ||||
| import java.util.ArrayList; | ||||
| import java.util.List; | ||||
|  | ||||
| import com.eclipsesource.json.Json; | ||||
| import com.eclipsesource.json.JsonArray; | ||||
| import com.eclipsesource.json.JsonObject; | ||||
| import com.eclipsesource.json.JsonValue; | ||||
| import javafx.scene.image.Image; | ||||
| import javafx.scene.image.ImageView; | ||||
| import javafx.scene.text.Font; | ||||
| import javafx.scene.text.FontWeight; | ||||
| import javafx.scene.text.Text; | ||||
|  | ||||
| public class DBController { | ||||
|  | ||||
| 	public DBController(MainWindowController m, Main main) { | ||||
| 		mainWindowController = m; | ||||
| 		this.main = main; | ||||
| 	} | ||||
|  | ||||
| 	private MainWindowController mainWindowController; | ||||
| 	private Main main; | ||||
| 	private String DB_PATH = System.getProperty("user.home") + "\\Documents\\HomeFlix" + "\\" + "Homeflix.db"; //path to database file | ||||
| 	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> filmsdbAll = new ArrayList<String>(); | ||||
| 	private List<String> filmsdbLocal = new ArrayList<String>(); | ||||
| 	private List<String> filmsdbStream = new ArrayList<String>(); | ||||
| 	private List<String> filmsdbStreamURL = new ArrayList<String>(); | ||||
| 	private List<String> filmsAll = new ArrayList<String>(); | ||||
| 	private List<String> filmsDir = new ArrayList<String>(); | ||||
| 	private List<String> filmsStream = new ArrayList<String>(); | ||||
| 	private List<String> filmsStreamURL = new ArrayList<String>();	 | ||||
| 	private List<String> filmsStreamData = new ArrayList<String>(); | ||||
| 	Connection connection = null; | ||||
|  | ||||
| 	public void main() { | ||||
| 		if (System.getProperty("os.name").equals("Linux")) { | ||||
| 			DB_PATH = System.getProperty("user.home") + "/HomeFlix/Homeflix.db"; | ||||
| 		}else{ | ||||
| 			DB_PATH = System.getProperty("user.home") + "\\Documents\\HomeFlix" + "\\" + "Homeflix.db"; | ||||
| 		} | ||||
| 		try { | ||||
| 			// create a database connection | ||||
| 			connection = DriverManager.getConnection("jdbc:sqlite:" + DB_PATH); | ||||
| 			connection.setAutoCommit(false);	//AutoCommit to false -> manual commit is active | ||||
| 		} catch (SQLException e) { | ||||
| 			// if the error message is "out of memory", it probably means no database file is found | ||||
| 			System.err.println(e.getMessage()); | ||||
| 		} | ||||
| 		 | ||||
| 		//close connection -> at the moment this kills the program | ||||
| //		finally { | ||||
| //			try { | ||||
| //				if (connection != null) | ||||
| //					connection.close(); | ||||
| //			} catch (SQLException e) { | ||||
| //				// connection close failed. | ||||
| //				System.err.println(e); | ||||
| //			} | ||||
| //		} | ||||
| 	} | ||||
| 	 | ||||
| 	void createDatabase() {  | ||||
| 		System.out.println("<==========starting loading sql==========>"); | ||||
| 		 | ||||
| 		PreparedStatement ps; | ||||
| 		PreparedStatement psS;	 | ||||
| 	 | ||||
| 		try { | ||||
| 			Statement stmt = connection.createStatement(); | ||||
| 			stmt.executeUpdate("create table if not exists film_local (rating, titel, streamUrl, favIcon, cached)"); | ||||
| 			stmt.executeUpdate("create table if not exists film_streaming (year, season, episode, rating, resolution, titel, streamUrl, favIcon, cached)"); | ||||
| 			stmt.close(); | ||||
| 		} catch (SQLException e1) { | ||||
| 			e1.printStackTrace(); | ||||
| 		}  | ||||
| 			 | ||||
| 			try {  | ||||
| 				Statement stmt = connection.createStatement();  | ||||
| 				ResultSet rs = stmt.executeQuery("SELECT * FROM film_local");  | ||||
| 				while (rs.next()) {  | ||||
| 					filmsdbLocal.add(rs.getString(2)); | ||||
| 				} | ||||
| 				stmt.close(); | ||||
| 				rs.close(); | ||||
|  | ||||
| 				rs = stmt.executeQuery("SELECT * FROM film_streaming;");  | ||||
| 				while (rs.next()) {  | ||||
| 					filmsdbStream.add(rs.getString(6)); | ||||
| 					filmsdbStreamURL.add(rs.getString(7)); | ||||
| 				} | ||||
| 				stmt.close(); | ||||
| 				rs.close(); | ||||
| 			}catch (SQLException ea){ | ||||
| 				System.err.println("Ups! an error occured!");  | ||||
| 				ea.printStackTrace(); | ||||
| 			} | ||||
| 			 | ||||
| 			//getting all files from the selected directory TODO rework | ||||
| 			String[] entries = new File(mainWindowController.getPath()).list(); | ||||
| 			if(mainWindowController.getPath().equals("") || mainWindowController.getPath() == null){  | ||||
| 				System.out.println("Kein Pfad angegeben");	//if path == null or "" | ||||
| 			}else if(new File(mainWindowController.getPath()).exists()) { | ||||
| 				System.out.println(entries.length); | ||||
| 				for(int i=0;i!=entries.length;i++){ | ||||
| 					filmsDir.add(cutOffEnd(entries[i])); | ||||
| 				} | ||||
| 			} else { | ||||
| 				System.out.println(mainWindowController.getPath() + "dosen't exist!"); | ||||
| 			} | ||||
| 			 | ||||
| 			//getting all entries from the streaming lists | ||||
| 			for(int v=0; v< mainWindowController.getStreamingData().size(); v++){ | ||||
| 				String fileName = mainWindowController.getStreamingPath()+"/"+mainWindowController.getStreamingData().get(v).getStreamUrl(); | ||||
| 				try { | ||||
| 					JsonObject object = Json.parse(new FileReader(fileName)).asObject(); | ||||
| 					JsonArray items = object.get("entries").asArray(); | ||||
| 					for (JsonValue item : items) { | ||||
| 						filmsStream.add(item.asObject().getString("titel","")); | ||||
| 						filmsStreamURL.add(item.asObject().getString("streamUrl","")); | ||||
| 						filmsStreamData.add(fileName); | ||||
| 					} | ||||
| 				} catch (IOException e) { | ||||
| 					e.printStackTrace(); | ||||
| 				} | ||||
| 			}	 | ||||
| 			 | ||||
| 			//add all entries to filmsAll and filmsdbAl, for later comparing | ||||
| 			filmsAll.addAll(filmsDir); | ||||
| 			filmsAll.addAll(filmsStream); | ||||
| 			filmsdbAll.addAll(filmsdbLocal); | ||||
| 			filmsdbAll.addAll(filmsdbStream); | ||||
| 			System.out.println("films in directory: "+filmsAll.size()); | ||||
| 			System.out.println("filme in db: "+filmsdbAll.size()); | ||||
|  | ||||
| 				/** | ||||
| 				 * if filmsdbAll.size() == 0 database is empty, we need to fill it | ||||
| 				 * else check if there is something to remove or to add | ||||
| 				 * TODO separate local and streaming for better error handling | ||||
| 				 */ | ||||
| 				if(filmsdbAll.size() == 0){ | ||||
| 					System.out.println("creating entries ..."); | ||||
| 					 | ||||
| 					try{ | ||||
| 						ps = connection.prepareStatement("insert into film_local values (?, ?, ?, ?, ?)"); | ||||
| 						psS = connection.prepareStatement("insert into film_streaming values (?, ?, ?, ?, ?, ?, ?, ?, ?)"); | ||||
| 						 | ||||
| 						if(mainWindowController.getPath().equals("") || mainWindowController.getPath() == null){ | ||||
| 							System.out.println("Kein Pfad angegeben");	//if path == null or "" | ||||
| 						}else if(new File(mainWindowController.getPath()).exists()){ | ||||
| 							for(int j=0;j!=entries.length;j++) //goes through all the files in the directory | ||||
| 							{ | ||||
| 								ps.setInt(1, 0); //rating as integer 1. column | ||||
| 								ps.setString(2, cutOffEnd(entries[j])); //name as String without ending 2. column | ||||
| 								ps.setString(3,entries[j]); //path as String 3. column | ||||
| 								ps.setString(4, "favorite_border_black"); | ||||
| 								ps.setBoolean(5, false); | ||||
| 								ps.addBatch(); 	// add command to prepared statement | ||||
| 							} | ||||
| 						} | ||||
| 					 | ||||
| 						if(mainWindowController.getStreamingPath().equals("")||mainWindowController.getStreamingPath().equals(null)){ | ||||
| 							System.out.println("Kein Pfad angegeben");	//if path == null or "" | ||||
| 						}else{						 | ||||
| 							for(int i=0; i< mainWindowController.getStreamingData().size(); i++){ | ||||
| 							String fileNamea = mainWindowController.getStreamingPath()+"/"+mainWindowController.getStreamingData().get(i).getStreamUrl(); | ||||
| 							try { | ||||
| 								JsonObject object = Json.parse(new FileReader(fileNamea)).asObject(); | ||||
| 								JsonArray items = object.get("entries").asArray(); | ||||
| 								for (JsonValue item : items) { | ||||
| 									psS.setInt(1, item.asObject().getInt("year", 0)); | ||||
| 									psS.setInt(2, item.asObject().getInt("season", 0)); | ||||
| 									psS.setInt(3, item.asObject().getInt("episode", 0)); | ||||
| 									psS.setInt(4, 0); | ||||
| 									psS.setString(5, item.asObject().getString("resolution", "")); | ||||
| 									psS.setString(6, item.asObject().getString("titel","")); | ||||
| 									psS.setString(7, item.asObject().getString("streamUrl", "")); | ||||
| 									psS.setString(8, "favorite_border_black"); | ||||
| 									psS.setBoolean(9, false); | ||||
| 									psS.addBatch(); // add command to prepared statement | ||||
| 								} | ||||
| 							} catch (IOException e) { | ||||
| 								e.printStackTrace(); | ||||
| 							} | ||||
| 						} | ||||
| 						} | ||||
| 						ps.executeBatch(); 			 //execute statement to write entries into table | ||||
| 						psS.executeBatch();			 | ||||
| 						connection.commit(); | ||||
| 						ps.close(); | ||||
| 						psS.close(); | ||||
| 					}catch (SQLException ea) {  | ||||
| 						System.err.println("Ups! an error occured!");  | ||||
| 						ea.printStackTrace();  | ||||
| 					} | ||||
| 				}else { | ||||
| 					try { | ||||
| 						try { | ||||
| 							checkAddEntry();		//check if added a new file | ||||
| 						} catch (IOException e) { | ||||
| 							e.printStackTrace(); | ||||
| 						} | ||||
| 						checkRemoveEntry();			//check if removed a file | ||||
| 					} catch (SQLException e) { | ||||
| 						e.printStackTrace(); | ||||
| 					} | ||||
| 				} | ||||
| 				 | ||||
| 				//start of cache-table | ||||
| 				try { | ||||
| 					Statement stmt = connection.createStatement(); | ||||
| 					stmt.executeUpdate(	"create table if not exists cache (streamUrl, Title, Year, Rated, Released, Runtime, Genre, Director, Writer,"	//streamUrl is primary key | ||||
| 										+" Actors, Plot, Language, Country, Awards, Metascore, imdbRating, imdbVotes, imdbID, Type, Poster, Response)"); | ||||
| 					stmt.close(); | ||||
| 				} catch (SQLException e1) { | ||||
| 					e1.printStackTrace(); | ||||
| 				} | ||||
| 				 | ||||
| 	} | ||||
| 	 | ||||
| 	//loading data from database to mainWindowController  | ||||
| 	void loadData(){ | ||||
| 		System.out.println("loading data to mwc ...");  | ||||
| 		try {  | ||||
| 			//load local Data | ||||
| 			Statement stmt = connection.createStatement();  | ||||
| 			ResultSet rs = stmt.executeQuery("SELECT * FROM film_local ORDER BY titel");  | ||||
| 			while (rs.next()) { | ||||
| 				if(rs.getString(4).equals("favorite_black")){ | ||||
| 					mainWindowController.getLocalFilms().add( new tableData(1, 1, 1, rs.getDouble(1), "1", rs.getString(2), rs.getString(3), new ImageView(favorite_black),rs.getBoolean(5))); | ||||
| 				}else{ | ||||
| 					mainWindowController.getLocalFilms().add( new tableData(1, 1, 1, rs.getDouble(1), "1", rs.getString(2), rs.getString(3), new ImageView(favorite_border_black),rs.getBoolean(5))); | ||||
| 				} | ||||
| 			} | ||||
| 			stmt.close(); | ||||
| 			rs.close(); | ||||
| 			 | ||||
| 			//load streaming Data FIXME check if there are streaming data before loading -> maybe there is an issue now | ||||
| 			rs = stmt.executeQuery("SELECT * FROM film_streaming ORDER BY titel;");  | ||||
| 			while (rs.next()) { | ||||
| 				if(rs.getString(8).equals("favorite_black")){ | ||||
| 					mainWindowController.getStreamingFilms().add(new tableData(rs.getInt(1), rs.getInt(2), rs.getInt(3), rs.getDouble(4), rs.getString(5), rs.getString(6), rs.getString(7),  new ImageView(favorite_black),rs.getBoolean(9))); | ||||
| 				}else{ | ||||
| 					mainWindowController.getStreamingFilms().add(new tableData(rs.getInt(1), rs.getInt(2), rs.getInt(3), rs.getDouble(4), rs.getString(5), rs.getString(6), rs.getString(7), new ImageView(favorite_border_black),rs.getBoolean(9))); | ||||
| 				} | ||||
| 			} | ||||
| 			stmt.close(); | ||||
| 			rs.close(); 		 | ||||
| 		} catch (SQLException e) {  | ||||
| 			System.err.println("Ups! an error occured!");  | ||||
| 			e.printStackTrace();  | ||||
| 		} | ||||
| 		System.out.println("<==========finished loading sql==========>");  | ||||
| 	} | ||||
| 	 | ||||
| 	//Refreshes the data in mainWindowController.newDaten and mainWindowController.streamData | ||||
| 	//FIXME it seems that there is an issue at the moment with streaming refreshing wrong entry if there is more than one with the same name | ||||
| 	void refresh(String name,int i) throws SQLException{ | ||||
| 		System.out.println("refresh ..."); | ||||
| 		Statement stmt;		 | ||||
| 		 | ||||
| 		try { | ||||
| 			stmt = connection.createStatement(); | ||||
| 			ResultSet rs = stmt.executeQuery("SELECT * FROM film_local WHERE titel = \""+name+"\";" ); | ||||
| 			if(rs.getString(4).equals("favorite_black")){ | ||||
| 				mainWindowController.getLocalFilms().set(i, new tableData(1, 1, 1, rs.getDouble(1), "1", rs.getString(2), rs.getString(3),  new ImageView(favorite_black),rs.getBoolean(5))); | ||||
| 			}else{ | ||||
| 				mainWindowController.getLocalFilms().set(i, new tableData(1, 1, 1, rs.getDouble(1), "1", rs.getString(2), rs.getString(3), new ImageView(favorite_border_black),rs.getBoolean(5))); | ||||
| 			} | ||||
| 			stmt.close(); | ||||
| 			rs.close(); | ||||
| 		} catch (SQLException e) { | ||||
| 			try { | ||||
| 				stmt = connection.createStatement(); | ||||
| 				ResultSet rs = stmt.executeQuery("SELECT * FROM film_streaming WHERE titel = \""+name+"\";" ); | ||||
| 				if(rs.getString(8).equals("favorite_black")){ | ||||
| 					mainWindowController.getStreamingFilms().set(i,new tableData(rs.getInt(1), rs.getInt(2), rs.getInt(3), rs.getDouble(4), rs.getString(5), rs.getString(6), rs.getString(7),  new ImageView(favorite_black),rs.getBoolean(9))); | ||||
| 				}else{ | ||||
| 					mainWindowController.getStreamingFilms().set(i,new tableData(rs.getInt(1), rs.getInt(2), rs.getInt(3), rs.getDouble(4), rs.getString(5), rs.getString(6), rs.getString(7), new ImageView(favorite_border_black),rs.getBoolean(9))); | ||||
| 				} | ||||
| 				stmt.close(); | ||||
| 				rs.close(); | ||||
| 			} catch (SQLException e1) { | ||||
| 				System.err.println("Ups! an error occured!");  | ||||
| 				e1.printStackTrace();  | ||||
| 			}  | ||||
| 		}  | ||||
| 	} | ||||
| 	/** | ||||
| 	 * check if there are any entries that have been removed from the film-directory | ||||
| 	 * @throws SQLException | ||||
| 	 */ | ||||
| 	private void checkRemoveEntry() throws SQLException{ | ||||
| 		System.out.println("checking for entrys to remove to DB ..."); | ||||
| 		Statement stmt = connection.createStatement();  | ||||
| 		 | ||||
| 		for(int a=0; a<filmsdbLocal.size(); a++){ | ||||
| 			if(!filmsDir.contains(filmsdbLocal.get(a))){ | ||||
| 				try { | ||||
| 					stmt.executeUpdate("delete from film_local where titel = \""+filmsdbLocal.get(a) + "\""); | ||||
| 					connection.commit(); | ||||
| 					stmt.close(); | ||||
| 					System.out.println("removed \""+filmsdbLocal.get(a)+"\" from databsae"); | ||||
| 				} catch (Exception e) { | ||||
| 					e.printStackTrace(); | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 			 | ||||
| 		for(int b=0; b<filmsdbStreamURL.size(); b++){ | ||||
| 			if(!filmsStreamURL.contains(filmsdbStreamURL.get(b))){ | ||||
| 				try { | ||||
| 					stmt.executeUpdate("delete from film_streaming where titel = \"" + filmsdbStream.get(b) + "\""); | ||||
| 					connection.commit(); | ||||
| 					stmt.close(); | ||||
| 					System.out.println("removed \""+filmsdbStream.get(b)+"\" from databsae"); | ||||
| 				} catch (Exception e) { | ||||
| 					e.printStackTrace(); | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	/** | ||||
| 	 * check if there are new films in the film-directory | ||||
| 	 * @throws SQLException | ||||
| 	 * @throws FileNotFoundException | ||||
| 	 * @throws IOException | ||||
| 	 * if lastName != filmsStreamData.get(b) then set i = 0, file changed | ||||
| 	 */ | ||||
| 	private void checkAddEntry() throws SQLException, FileNotFoundException, IOException{ | ||||
| 		String lastName = ""; | ||||
| 		System.out.println("checking for entrys to add to DB ..."); | ||||
| 		String[] entries = new File(mainWindowController.getPath()).list(); | ||||
| 		Statement stmt = connection.createStatement(); | ||||
| 		PreparedStatement ps = connection.prepareStatement("insert into film_streaming values (?, ?, ?, ?, ?, ?, ?, ?, ?)"); | ||||
| 		int i=0; | ||||
| 		 | ||||
| 		for(int a=0; a<filmsDir.size(); a++){ | ||||
| 			if(!filmsdbLocal.contains(filmsDir.get(a))){ | ||||
| 				stmt.executeUpdate("insert into film_local values (0, \""+cutOffEnd(entries[a])+"\", \""+entries[a]+"\",\"favorite_border_black\",0)"); | ||||
| 				connection.commit(); | ||||
| 				stmt.close(); | ||||
| 				System.out.println("added \""+filmsDir.get(a)+"\" to databsae"); | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 		for(int b=0; b<filmsStreamURL.size(); b++){ | ||||
| 			if(filmsdbStreamURL.contains(filmsStreamURL.get(b))) { | ||||
| 			} else { | ||||
| 				if(lastName != "" && lastName != filmsStreamData.get(b)) { | ||||
| 					i = 0; | ||||
| 				} | ||||
| 				lastName = filmsStreamData.get(b); | ||||
| 				JsonObject object = Json.parse(new FileReader(filmsStreamData.get(b))).asObject(); | ||||
| 				JsonArray items = object.get("entries").asArray(); | ||||
| 				System.out.println(items.size()+", "+i+"; "+b); | ||||
| 				String streamURL = items.get(i).asObject().getString("streamUrl",""); | ||||
| 				String titel = items.get(i).asObject().getString("titel",""); | ||||
| 				 | ||||
| 				if(streamURL.equals(filmsStreamURL.get(b))){ | ||||
| 					System.out.println("added \""+titel+"\""); | ||||
| 					 | ||||
| 					ps.setInt(1, items.get(i).asObject().getInt("year", 0)); | ||||
| 					ps.setInt(2, items.get(i).asObject().getInt("season", 0)); | ||||
| 					ps.setInt(3, items.get(i).asObject().getInt("episode", 0)); | ||||
| 					ps.setInt(4, 0); | ||||
| 					ps.setString(5, items.get(i).asObject().getString("resolution", "")); | ||||
| 					ps.setString(6, items.get(i).asObject().getString("titel","")); | ||||
| 					ps.setString(7, items.get(i).asObject().getString("streamUrl", "")); | ||||
| 					ps.setString(8, "favorite_border_black"); | ||||
| 					ps.setBoolean(9, false); | ||||
| 					ps.addBatch(); // adds the entry | ||||
| 				} | ||||
| 				i++; | ||||
| 			} | ||||
| 		} | ||||
| 		ps.executeBatch();			 | ||||
| 		connection.commit(); | ||||
| 		ps.close(); | ||||
| 	} | ||||
| 	 | ||||
| 	void ausgeben(){ | ||||
| 	System.out.println("Outputting all entries ... \n");  | ||||
| 	try {  | ||||
| 		Statement stmt = connection.createStatement();  | ||||
| 		ResultSet rs = stmt.executeQuery("SELECT * FROM film_local");  | ||||
| 		while (rs.next()) {  | ||||
| 			System.out.println(rs.getString(1)); | ||||
| 			System.out.println(rs.getString(2)); | ||||
| 			System.out.println(rs.getString(3)); | ||||
| 			System.out.println(rs.getString(4)); | ||||
| 			System.out.println(rs.getString(5)+"\n"); | ||||
| 		} | ||||
| 		stmt.close(); | ||||
| 		rs.close(); | ||||
| 		 | ||||
| 		System.out.println("Streaming Entries: \n"); | ||||
| 		 | ||||
| 		rs = stmt.executeQuery("SELECT * FROM film_streaming;");  | ||||
| 		while (rs.next()) {  | ||||
| 			System.out.println(rs.getString(1)); | ||||
| 			System.out.println(rs.getString(2)); | ||||
| 			System.out.println(rs.getString(3)); | ||||
| 			System.out.println(rs.getString(4)); | ||||
| 			System.out.println(rs.getString(5)); | ||||
| 			System.out.println(rs.getString(6)); | ||||
| 			System.out.println(rs.getString(7)); | ||||
| 			System.out.println(rs.getString(8)); | ||||
| 			System.out.println(rs.getString(9)+"\n"); | ||||
| 		} | ||||
| 		stmt.close(); | ||||
| 		rs.close();  | ||||
|  | ||||
| 	} catch (SQLException e) {  | ||||
| 		System.err.println("Ups! an error occured!");  | ||||
| 		e.printStackTrace();  | ||||
| 	} | ||||
| } | ||||
| 	 | ||||
| 	//get favorite status | ||||
| 	void getFavStatus(String name){ | ||||
| 		try{ | ||||
| 			Statement stmt = connection.createStatement();  | ||||
| 			ResultSet rs = stmt.executeQuery("SELECT titel, rating, favIcon FROM film_local WHERE titel = \""+name+"\";" ); //SQL Befehl | ||||
| 			System.out.println("local:"+rs.getString("rating")+", "+rs.getString("titel")+", "+rs.getString("favIcon")); | ||||
| 			stmt.close(); | ||||
| 			rs.close(); | ||||
| 		}catch(SQLException e){ | ||||
| 			try { | ||||
| 				Statement stmtS = connection.createStatement();  | ||||
| 				ResultSet rsS = stmtS.executeQuery("SELECT titel, rating, favIcon FROM film_streaming WHERE titel = \""+name+"\";" ); | ||||
| 				System.out.println("streaming:"+rsS.getString("rating")+", "+rsS.getString("titel")+", "+rsS.getString("favIcon")); | ||||
| 				stmtS.close(); | ||||
| 				rsS.close(); | ||||
| 			} catch (SQLException e1) { | ||||
| 				System.out.println("Ups! an error occured!"); | ||||
| 				e1.printStackTrace(); | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 	} | ||||
| 	//set rating=0 and favorite_border_black | ||||
| 	void dislike(String name,String streamUrl){ | ||||
| 		System.out.println("defavorisieren ...");		 | ||||
| 		try{ | ||||
| 			Statement stmt = connection.createStatement();  | ||||
| 			stmt.executeUpdate("UPDATE film_local SET rating=0,favIcon='favorite_border_black' WHERE titel=\""+name+"\";"); | ||||
| 			connection.commit(); | ||||
| 			stmt.close(); | ||||
| 		}catch(SQLException e){ | ||||
| 			System.out.println("Ups! an error occured!"); | ||||
| 			e.printStackTrace(); | ||||
| 		} | ||||
| 		try { | ||||
| 			Statement stmt = connection.createStatement();  | ||||
| 			stmt.executeUpdate("UPDATE film_streaming SET rating=0,favIcon='favorite_border_black' WHERE streamUrl=\""+streamUrl+"\";"); | ||||
| 			connection.commit(); | ||||
| 			stmt.close(); | ||||
| 		} catch (SQLException e1) { | ||||
| 			System.out.println("Ups! an error occured!"); | ||||
| 			e1.printStackTrace(); | ||||
| 		} | ||||
| 	} | ||||
| 	//set rating=1 and favorite_black | ||||
| 	void like(String name,String streamUrl){ | ||||
| 		System.out.println("favorisieren ..."); | ||||
| 		try{ | ||||
| 			Statement stmt = connection.createStatement();  | ||||
| 			stmt.executeUpdate("UPDATE film_local SET rating=1,favIcon='favorite_black' WHERE titel=\""+name+"\";"); | ||||
| 			connection.commit(); | ||||
| 			stmt.close(); | ||||
| 		}catch(SQLException e){ | ||||
| 			System.out.println("Ups! an error occured!"); | ||||
| 			e.printStackTrace(); | ||||
| 		} | ||||
| 		try { | ||||
| 			Statement stmt = connection.createStatement();  | ||||
| 			stmt.executeUpdate("UPDATE film_streaming SET rating=1,favIcon='favorite_black' WHERE streamUrl=\""+streamUrl+"\";"); | ||||
| 			connection.commit(); | ||||
| 			stmt.close(); | ||||
| 		} catch (SQLException e1) { | ||||
| 			System.out.println("Ups! an error occured!"); | ||||
| 			e1.printStackTrace(); | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	void setCached(String streamUrl) throws SQLException{ | ||||
| 		try{ | ||||
| 			Statement stmt = connection.createStatement(); | ||||
| 			stmt.executeUpdate("UPDATE film_local SET cached=1 WHERE streamUrl=\""+streamUrl+"\";"); | ||||
| 			connection.commit(); | ||||
| 			stmt.close(); | ||||
| 		}catch(SQLException e){ | ||||
| 			System.out.println("Ups! an error occured!"); | ||||
| 			e.printStackTrace(); | ||||
| 		} | ||||
| 		try { | ||||
| 			Statement stmt = connection.createStatement();  | ||||
| 			stmt.executeUpdate("UPDATE film_streaming SET cached=1 WHERE streamUrl=\""+streamUrl+"\";"); | ||||
| 			connection.commit(); | ||||
| 			stmt.close(); | ||||
| 		} catch (SQLException e1) { | ||||
| 			System.out.println("Ups! an error occured!"); | ||||
| 			e1.printStackTrace(); | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	void addCache(	String streamUrl, String Title, String Year, String Rated, String Released, String Runtime, String Genre, String Director, | ||||
| 					String Writer, String Actors, String Plot, String Language, String Country, String Awards, String Metascore, String imdbRating, | ||||
| 					String Type, String imdbVotes, String imdbID, String Poster, String Response) throws SQLException{ | ||||
| 		PreparedStatement ps = connection.prepareStatement("insert into cache values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"); | ||||
| 		 | ||||
| 		System.out.println("adding to cache: " + Title); | ||||
| 		ps.setString(1,streamUrl); | ||||
| 		ps.setString(2,Title); | ||||
| 		ps.setString(3,Year); | ||||
| 		ps.setString(4,Rated); | ||||
| 		ps.setString(5,Released); | ||||
| 		ps.setString(6,Runtime); | ||||
| 		ps.setString(7,Genre); | ||||
| 		ps.setString(8,Director); | ||||
| 		ps.setString(9,Writer); | ||||
| 		ps.setString(10,Actors); | ||||
| 		ps.setString(11,Plot); | ||||
| 		ps.setString(12,Language); | ||||
| 		ps.setString(13,Country); | ||||
| 		ps.setString(14,Awards); | ||||
| 		ps.setString(15,Metascore); | ||||
| 		ps.setString(16,imdbRating); | ||||
| 		ps.setString(17,imdbVotes); | ||||
| 		ps.setString(18,imdbID); | ||||
| 		ps.setString(19,Type); | ||||
| 		ps.setString(20,Poster); | ||||
| 		ps.setString(21,Response); | ||||
| 		ps.addBatch(); | ||||
| 		ps.executeBatch();			 | ||||
| 		connection.commit(); | ||||
| 		ps.close(); | ||||
| 		System.out.println("done!"); | ||||
| 	} | ||||
| 	 | ||||
| 	void readCache(String streamUrl){ | ||||
| 		try{ | ||||
| 			Statement stmt = connection.createStatement(); | ||||
| 			ResultSet rs = stmt.executeQuery("SELECT * FROM cache WHERE streamUrl=\""+streamUrl+"\";"); | ||||
| 			ArrayList<Text> nameText = new ArrayList<Text>(); | ||||
| 			ArrayList<Text> responseText = new ArrayList<Text>(); | ||||
| 			String fontFamily = main.getFONT_FAMILY(); | ||||
| 			Image im; | ||||
| 			int fontSize = (int) Math.round(mainWindowController.size); | ||||
| 			int j=2; | ||||
| 			 | ||||
| 			nameText.add(0, new Text(mainWindowController.title+": ")); | ||||
| 			nameText.add(1, new Text(mainWindowController.year+": ")); | ||||
| 			nameText.add(2, new Text(mainWindowController.rating+": ")); | ||||
| 			nameText.add(3, new Text(mainWindowController.publishedOn+": ")); | ||||
| 			nameText.add(4, new Text(mainWindowController.duration+": ")); | ||||
| 			nameText.add(5, new Text(mainWindowController.genre+": ")); | ||||
| 			nameText.add(6, new Text(mainWindowController.director+": ")); | ||||
| 			nameText.add(7, new Text(mainWindowController.writer+": ")); | ||||
| 			nameText.add(8, new Text(mainWindowController.actors+": ")); | ||||
| 			nameText.add(9, new Text(mainWindowController.plot+": ")); | ||||
| 			nameText.add(10, new Text(mainWindowController.language+": ")); | ||||
| 			nameText.add(11, new Text(mainWindowController.country+": ")); | ||||
| 			nameText.add(12, new Text(mainWindowController.awards+": ")); | ||||
| 			nameText.add(13, new Text(mainWindowController.metascore+": ")); | ||||
| 			nameText.add(14, new Text(mainWindowController.imdbRating+": ")); | ||||
| 			nameText.add(15, new Text(mainWindowController.type+": ")); | ||||
| 			 | ||||
| 			for(int i=0; i<15; i++){ | ||||
| 				responseText.add(new Text(rs.getString(j)+"\n")); | ||||
| 				j++; | ||||
| 			} | ||||
| 			responseText.add(new Text(rs.getString(19)+"\n"));		 | ||||
| 			im = new Image(new File(rs.getString(20)).toURI().toString()); | ||||
| 			 | ||||
| 			stmt.close(); | ||||
| 			rs.close(); | ||||
| 			 | ||||
| 			for(int i=0; i<nameText.size(); i++){ | ||||
| 				nameText.get(i).setFont(Font.font (fontFamily, FontWeight.BOLD, fontSize)); | ||||
| 				responseText.get(i).setFont(Font.font(fontFamily, fontSize)); | ||||
| 			} | ||||
| 			 | ||||
| 			mainWindowController.textFlow.getChildren().remove(0, mainWindowController.textFlow.getChildren().size()); | ||||
| 			 | ||||
| 			for(int i=0;i<nameText.size(); i++){ | ||||
| 				mainWindowController.textFlow.getChildren().addAll(nameText.get(i),responseText.get(i)); | ||||
| 			} | ||||
| 			 | ||||
| 			try{ | ||||
| 				mainWindowController.image1.setImage(im); | ||||
| 			}catch (Exception e){ | ||||
| 				mainWindowController.image1.setImage(new Image("resources/icons/close_black_2048x2048.png")); | ||||
| 				e.printStackTrace(); | ||||
| 			} | ||||
| 			mainWindowController.image1.setImage(im); | ||||
| 			 | ||||
| 		}catch (SQLException e) { | ||||
| 			System.out.println("Ups! an error occured!"); | ||||
| 			e.printStackTrace(); | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| //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); | ||||
| 	} | ||||
| 	 | ||||
| } | ||||
| @ -1,105 +0,0 @@ | ||||
| /** | ||||
|  * updater for Project HomeFlix | ||||
|  * checks for Updates and downloads it in case there is one | ||||
|  */ | ||||
| package org.kellerkinder.Project_HomeFlix; | ||||
|  | ||||
| import java.io.BufferedReader; | ||||
| import java.io.File; | ||||
| import java.io.IOException; | ||||
| import java.io.InputStreamReader; | ||||
| import java.net.HttpURLConnection; | ||||
| import java.net.URL; | ||||
| import javax.swing.ProgressMonitor; | ||||
| import javax.swing.ProgressMonitorInputStream; | ||||
|  | ||||
| import org.apache.commons.io.FileUtils; | ||||
|  | ||||
| import com.eclipsesource.json.Json; | ||||
| import com.eclipsesource.json.JsonArray; | ||||
| import com.eclipsesource.json.JsonObject; | ||||
| import com.eclipsesource.json.JsonValue; | ||||
| import javafx.application.Platform; | ||||
|  | ||||
| public class updater implements Runnable{ | ||||
| 	 | ||||
| 	private MainWindowController mainWindowController; | ||||
| 	private String buildNumber; | ||||
| 	private String apiOutput; | ||||
| 	private String updateBuildNumber;	//tag_name from Github | ||||
| 	private String browserDownloadUrl;	//update download link | ||||
| 	private String githubApi = "https://api.github.com/repos/Seil0/Project-HomeFlix/releases/latest"; | ||||
| 	 | ||||
| 	 | ||||
| 	public updater(MainWindowController m, String buildNumber){ | ||||
| 		mainWindowController=m; | ||||
| 		this.buildNumber=buildNumber; | ||||
| 	} | ||||
| 	 | ||||
| 	public void run(){ | ||||
| 		System.out.println("check for updates ..."); | ||||
| 		Platform.runLater(() -> { | ||||
| 			mainWindowController.updateBtn.setText(mainWindowController.bundle.getString("checkingUpdates")); | ||||
|          }); | ||||
|  | ||||
|         try { | ||||
| 			URL githubApiUrl = new URL(githubApi); | ||||
| 	        BufferedReader ina = new BufferedReader(new InputStreamReader(githubApiUrl.openStream())); | ||||
| 			apiOutput = ina.readLine(); | ||||
| 	        ina.close(); | ||||
| 		} catch (IOException e1) { | ||||
| 			Platform.runLater(() -> { | ||||
| 				mainWindowController.showErrorMsg(mainWindowController.errorUpdateV, e1); | ||||
| 			}); | ||||
| 		} | ||||
|  | ||||
|     	JsonObject object = Json.parse(apiOutput).asObject(); | ||||
|     	JsonArray objectAssets = Json.parse(apiOutput).asObject().get("assets").asArray(); | ||||
|     	 | ||||
|     	updateBuildNumber = object.getString("tag_name", ""); | ||||
| //    	updateName = object.getString("name", ""); | ||||
| //    	updateChanges = object.getString("body", ""); | ||||
|     	for (JsonValue asset : objectAssets) { | ||||
|     		browserDownloadUrl = asset.asObject().getString("browser_download_url", ""); | ||||
|     		 | ||||
|     	} | ||||
| 		System.out.println("Build: "+buildNumber+", Update: "+updateBuildNumber); | ||||
| 		 | ||||
| 		//Compares the program BuildNumber with the current BuildNumber if  program BuildNumber <  current BuildNumber then perform a update | ||||
| 		int iversion = Integer.parseInt(buildNumber); | ||||
| 		int iaktVersion = Integer.parseInt(updateBuildNumber.replace(".", "")); | ||||
| 		 | ||||
| 		if(iversion >= iaktVersion){ | ||||
| 			Platform.runLater(() -> { | ||||
| 				mainWindowController.updateBtn.setText(mainWindowController.bundle.getString("updateBtnNotavail")); | ||||
| 	         }); | ||||
| 			System.out.println("no update available"); | ||||
| 		}else{ | ||||
| 			Platform.runLater(() -> { | ||||
| 				mainWindowController.updateBtn.setText(mainWindowController.bundle.getString("updateBtnavail")); | ||||
| 	         }); | ||||
| 			System.out.println("update available"); | ||||
| 			System.out.println("download link: " + browserDownloadUrl); | ||||
| 			try {		 | ||||
| 				//open new Http connection, ProgressMonitorInputStream for downloading the data | ||||
| 				HttpURLConnection conn = (HttpURLConnection) new URL(browserDownloadUrl).openConnection(); | ||||
| 				ProgressMonitorInputStream pmis = new ProgressMonitorInputStream(null, "Downloading...", conn.getInputStream()); | ||||
| 				ProgressMonitor pm = pmis.getProgressMonitor(); | ||||
| 		        pm.setMillisToDecideToPopup(0); | ||||
| 		        pm.setMillisToPopup(0); | ||||
| 		        pm.setMinimum(0);// tell the progress bar that we start at the beginning of the stream | ||||
| 		        pm.setMaximum(conn.getContentLength());// tell the progress bar the total number of bytes we are going to read. | ||||
| 				FileUtils.copyInputStreamToFile(pmis, new File("ProjectHomeFlix_update.jar"));	//download update			 | ||||
| 				org.apache.commons.io.FileUtils.copyFile(new File("ProjectHomeFlix_update.jar"), new File("ProjectHomeFlix.jar"));	//TODO rename update to old name | ||||
| 				org.apache.commons.io.FileUtils.deleteQuietly(new File("ProjectHomeFlix_update.jar"));	//delete update | ||||
| 				Runtime.getRuntime().exec("java -jar ProjectHomeFlix.jar");	//start again | ||||
| 				System.exit(0);	//finishes itself | ||||
| 				 | ||||
| 			} catch (IOException e) { | ||||
| 				Platform.runLater(() -> { | ||||
| 					mainWindowController.showErrorMsg(mainWindowController.errorUpdateD, e); | ||||
| 				}); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| @ -20,7 +20,7 @@ | ||||
| <?import javafx.scene.text.Font?> | ||||
| <?import javafx.scene.text.TextFlow?> | ||||
|  | ||||
| <AnchorPane fx:id="anpane" prefHeight="600.0" prefWidth="950.0" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1" fx:controller="org.kellerkinder.Project_HomeFlix.MainWindowController"> | ||||
| <AnchorPane fx:id="anpane" prefHeight="600.0" prefWidth="950.0" xmlns="http://javafx.com/javafx/9" xmlns:fx="http://javafx.com/fxml/1" fx:controller="kellerkinder.HomeFlix.application.MainWindowController"> | ||||
| 	<children> | ||||
|       <ScrollPane fx:id="scrollPane" fitToWidth="true" layoutX="408.0" layoutY="44.0" prefHeight="544.0" prefWidth="320.0" AnchorPane.bottomAnchor="12.0" AnchorPane.leftAnchor="408.0" AnchorPane.rightAnchor="222.0" AnchorPane.topAnchor="44.0"> | ||||
|          <content> | ||||
| @ -100,7 +100,7 @@ | ||||
|             <ChoiceBox fx:id="cbLocal" layoutX="118.0" layoutY="208.0" prefWidth="150.0" AnchorPane.leftAnchor="118.0" AnchorPane.topAnchor="208.0" /> | ||||
|             <JFXButton fx:id="updateBtn" layoutX="16.0" layoutY="269.0" onAction="#updateBtnAction" AnchorPane.leftAnchor="14.0" AnchorPane.topAnchor="253.0" /> | ||||
|             <Label fx:id="autoUpdateLabel" layoutX="14.0" layoutY="310.0" prefHeight="17.0" text="check at startup for updates:" AnchorPane.leftAnchor="14.0" AnchorPane.topAnchor="298.0" /> | ||||
|             <JFXToggleButton fx:id="autoupdateBtn" layoutX="14.0" layoutY="336.0" onAction="#autoupdateBtnAction" AnchorPane.leftAnchor="14.0" AnchorPane.topAnchor="320.0" /> | ||||
|             <JFXToggleButton fx:id="autoUpdateToggleBtn" layoutX="14.0" layoutY="336.0" onAction="#autoUpdateToggleBtnAction" AnchorPane.leftAnchor="14.0" AnchorPane.topAnchor="320.0" /> | ||||
|             <Label fx:id="versionLabel" layoutX="14.0" layoutY="418.0" text="Label" AnchorPane.leftAnchor="14.0" AnchorPane.topAnchor="396.0" /> | ||||
|             <Label fx:id="settingsHead1Label" layoutX="14.0" layoutY="24.0" text="HomeFlix Settings" AnchorPane.leftAnchor="14.0" AnchorPane.topAnchor="24.0"> | ||||
|                <font> | ||||
|  | ||||
| @ -15,9 +15,9 @@ mainColorLabel = Hauptfarbe: | ||||
| fontsizeLabel = Schriftgr\u00F6\u00DFe: | ||||
| localLabel = Sprache: | ||||
| checkUpdates = Auf Update pr\u00FCfen | ||||
| checkingUpdates = Es wird nach Updates gesucht... | ||||
| updateBtnavail = Update verf\u00FCgbar | ||||
| updateBtnNotavail = Kein Update verf\u00FCgbar | ||||
| updateBtnChecking = Es wird nach Updates gesucht... | ||||
| updateBtnUpdateAvailable = Update verf\u00FCgbar | ||||
| updateBtnNoUpdateAvailable = Kein Update verf\u00FCgbar | ||||
| autoUpdateLabel = beim Start nach Updates suchen: | ||||
| version = Version: | ||||
|  | ||||
|  | ||||
| @ -15,9 +15,9 @@ mainColorLabel = main color: | ||||
| fontsizeLabel = font size: | ||||
| localLabel = local: | ||||
| checkUpdates = check for updates | ||||
| checkingUpdates = checking for updates... | ||||
| updateBtnavail = update available | ||||
| updateBtnNotavail = no update available | ||||
| updateBtnChecking = checking for updates... | ||||
| updateBtnUpdateAvailable = update available | ||||
| updateBtnNoUpdateAvailable = no update available | ||||
| autoUpdateLabel = check at startup for updates: | ||||
| version = Version: | ||||
|  | ||||
|  | ||||
		Reference in New Issue
	
	Block a user