From f27c3810ffbd9d1bdd3169edbcc6fee8d7194ecf Mon Sep 17 00:00:00 2001 From: Jannik Date: Mon, 5 Mar 2018 22:37:32 +0100 Subject: [PATCH] more code cleanup and bug fixes * removed year and resolution from all tables as they're not used anywhere * fixed a bug that caused issues, when refreshing streaming entres with the same title * like, dislike are now based on the streamUrl insted of the title * fixed a bug, that ocured when liking/disliking the last entry in the table --- .../application/MainWindowController.java | 231 ++++++------- .../HomeFlix/controller/DBController.java | 304 +++++++++--------- ...{tableData.java => FilmTabelDataType.java} | 39 +-- .../HomeFlix/datatypes/SourceDataType.java | 64 ++++ .../locals/HomeFlix-Local_de_DE.properties | 2 - .../locals/HomeFlix-Local_en_US.properties | 2 - 6 files changed, 320 insertions(+), 322 deletions(-) rename src/main/java/kellerkinder/HomeFlix/datatypes/{tableData.java => FilmTabelDataType.java} (78%) create mode 100644 src/main/java/kellerkinder/HomeFlix/datatypes/SourceDataType.java diff --git a/src/main/java/kellerkinder/HomeFlix/application/MainWindowController.java b/src/main/java/kellerkinder/HomeFlix/application/MainWindowController.java index 914a603..3c5e30f 100644 --- a/src/main/java/kellerkinder/HomeFlix/application/MainWindowController.java +++ b/src/main/java/kellerkinder/HomeFlix/application/MainWindowController.java @@ -39,7 +39,6 @@ import java.io.Writer; import java.math.BigInteger; import java.net.URI; import java.net.URISyntaxException; -import java.sql.SQLException; import java.util.ArrayList; import java.util.Locale; import java.util.Properties; @@ -99,7 +98,8 @@ import javafx.util.Duration; import kellerkinder.HomeFlix.controller.DBController; import kellerkinder.HomeFlix.controller.UpdateController; import kellerkinder.HomeFlix.controller.apiQuery; -import kellerkinder.HomeFlix.datatypes.tableData; +import kellerkinder.HomeFlix.datatypes.SourceDataType; +import kellerkinder.HomeFlix.datatypes.FilmTabelDataType; public class MainWindowController { @@ -119,10 +119,10 @@ public class MainWindowController { private VBox sideMenuVBox; @FXML - private TreeTableView treeTableViewfilm; + private TreeTableView treeTableViewfilm; @FXML - private TableView sourcesTable; + private TableView sourcesTable; @FXML private TextFlow textFlow; @@ -211,28 +211,24 @@ public class MainWindowController { private ImageView imv1; @FXML - public TreeItem root = new TreeItem<>(new tableData(1, 1, 1, 5.0, "1", "filme", "1", imv1, false)); + private TreeItem filmRoot = new TreeItem<>(new FilmTabelDataType(1, 1, 5.0, "filme", "1", imv1, false)); @FXML - TreeTableColumn columnRating = new TreeTableColumn<>("Rating"); + TreeTableColumn columnRating = new TreeTableColumn<>("Rating"); @FXML - TreeTableColumn columnTitel = new TreeTableColumn<>("Titel"); + TreeTableColumn columnTitel = new TreeTableColumn<>("Titel"); @FXML - TreeTableColumn columnStreamUrl = new TreeTableColumn<>("File Name"); + TreeTableColumn columnStreamUrl = new TreeTableColumn<>("File Name"); @FXML - TreeTableColumn columnResolution = new TreeTableColumn<>("Resolution"); + TreeTableColumn columnSeason = new TreeTableColumn<>("Season"); @FXML - TreeTableColumn columnYear = new TreeTableColumn<>("Year"); - @FXML - TreeTableColumn columnSeason = new TreeTableColumn<>("Season"); - @FXML - TreeTableColumn columnEpisode = new TreeTableColumn<>("Episode"); + TreeTableColumn columnEpisode = new TreeTableColumn<>("Episode"); @FXML - public TreeItem streamingRoot =new TreeItem<>(new tableData(1 ,1 ,1 ,1.0 ,"1" ,"filme" ,"1", imv1, false)); // TODO make private + private TreeItem streamingRoot =new TreeItem<>(new SourceDataType("", "")); @FXML - private TableColumn sourceColumn; + private TableColumn sourceColumn; @FXML - private TableColumn modeColumn; + private TableColumn modeColumn; private boolean menuTrue = false; private boolean settingsTrue = false; @@ -256,8 +252,8 @@ public class MainWindowController { private String vlcNotInstalled; private String streamingPath; private String color; - private String name; - private String datPath; + private String title; + private String streamUrl; private String mode; private String ratingSortType; private String local; @@ -268,12 +264,12 @@ public class MainWindowController { private int next; private ResourceBundle bundle; - private ObservableList filterData = FXCollections.observableArrayList(); + private ObservableList filterData = FXCollections.observableArrayList(); private ObservableList languages = FXCollections.observableArrayList("English (en_US)", "Deutsch (de_DE)"); private ObservableList branches = FXCollections.observableArrayList("stable", "beta"); - private ObservableList localFilms = FXCollections.observableArrayList(); - private ObservableList streamingFilms = FXCollections.observableArrayList(); - private ObservableList sourcesList = FXCollections.observableArrayList(); + private ObservableList localFilms = FXCollections.observableArrayList(); + private ObservableList streamingFilms = FXCollections.observableArrayList(); + private ObservableList sourcesList = FXCollections.observableArrayList(); private ImageView skip_previous_white = new ImageView(new Image("icons/ic_skip_previous_white_18dp_1x.png")); private ImageView skip_previous_black = new ImageView(new Image("icons/ic_skip_previous_black_18dp_1x.png")); private ImageView skip_next_white = new ImageView(new Image("icons/ic_skip_next_white_18dp_1x.png")); @@ -284,14 +280,15 @@ public class MainWindowController { private MenuItem like = new MenuItem("like"); private MenuItem dislike = new MenuItem("dislike"); //TODO one option (like or dislike) private ContextMenu menu = new ContextMenu(like, dislike); - Properties props = new Properties(); + private Properties props = new Properties(); private Main main; private UpdateController updateController; private apiQuery ApiQuery; DBController dbController; - /**"Main" Method called in Main.java main() when starting + /** + * "Main" Method called in Main.java main() when starting * Initialize other objects: Updater, dbController and ApiQuery */ void setMain(Main main) { @@ -308,44 +305,38 @@ public class MainWindowController { initUI(); } - //Initialize the tables (treeTableViewfilm and tableViewStreamingdata) + // Initialize the tables (treeTableViewfilm and sourcesTable) private void initTabel() { - //film Table - columnRating.setMaxWidth(80); - columnTitel.setMaxWidth(260); - columnStreamUrl.setMaxWidth(0); - columnRating.setStyle("-fx-alignment: CENTER;"); - - treeTableViewfilm.setRoot(root); - treeTableViewfilm.setColumnResizePolicy( TreeTableView.CONSTRAINED_RESIZE_POLICY ); - treeTableViewfilm.setShowRoot(false); - - //write content into cell - columnTitel.setCellValueFactory(cellData -> cellData.getValue().getValue().titleProperty()); - columnRating.setCellValueFactory(cellData -> cellData.getValue().getValue().imageProperty()); - columnStreamUrl.setCellValueFactory(cellData -> cellData.getValue().getValue().streamUrlProperty()); - columnResolution.setCellValueFactory(cellData -> cellData.getValue().getValue().resolutionProperty()); - columnYear.setCellValueFactory(cellData -> cellData.getValue().getValue().yearProperty().asObject()); - columnSeason.setCellValueFactory(cellData -> cellData.getValue().getValue().seasonProperty().asObject()); - columnEpisode.setCellValueFactory(cellData -> cellData.getValue().getValue().episodeProperty().asObject()); + // film Table + columnStreamUrl.setMaxWidth(0); + columnRating.setStyle("-fx-alignment: CENTER;"); - //add columns to treeTableViewfilm + treeTableViewfilm.setRoot(filmRoot); + treeTableViewfilm.setColumnResizePolicy(TreeTableView.CONSTRAINED_RESIZE_POLICY); + treeTableViewfilm.setShowRoot(false); + + // write content into cell + columnTitel.setCellValueFactory(cellData -> cellData.getValue().getValue().titleProperty()); + columnRating.setCellValueFactory(cellData -> cellData.getValue().getValue().imageProperty()); + columnStreamUrl.setCellValueFactory(cellData -> cellData.getValue().getValue().streamUrlProperty()); + columnSeason.setCellValueFactory(cellData -> cellData.getValue().getValue().seasonProperty().asObject()); + columnEpisode.setCellValueFactory(cellData -> cellData.getValue().getValue().episodeProperty().asObject()); + + // add columns to treeTableViewfilm treeTableViewfilm.getColumns().add(columnTitel); treeTableViewfilm.getColumns().add(columnRating); treeTableViewfilm.getColumns().add(columnStreamUrl); - treeTableViewfilm.getColumns().add(columnResolution); - treeTableViewfilm.getColumns().add(columnYear); treeTableViewfilm.getColumns().add(columnSeason); treeTableViewfilm.getColumns().add(columnEpisode); treeTableViewfilm.getColumns().get(2).setVisible(false); //hide columnStreamUrl (column with file URL, important for opening a file/stream) - //context menu for treeTableViewfilm + // context menu for treeTableViewfilm treeTableViewfilm.setContextMenu(menu); // sourcesTreeTable - sourceColumn.setCellValueFactory(cellData -> cellData.getValue().titleProperty()); - modeColumn.setCellValueFactory(cellData -> cellData.getValue().streamUrlProperty()); + sourceColumn.setCellValueFactory(cellData -> cellData.getValue().pathProperty()); + modeColumn.setCellValueFactory(cellData -> cellData.getValue().modeProperty()); sourcesTable.setItems(sourcesList); } @@ -375,9 +366,9 @@ public class MainWindowController { searchTextField.textProperty().addListener(new ChangeListener() { @Override public void changed(ObservableValue observable, String oldValue, String newValue) { - ObservableList helpData; + ObservableList helpData; filterData.removeAll(filterData); - root.getChildren().remove(0, root.getChildren().size()); + filmRoot.getChildren().removeAll(filmRoot.getChildren()); if (mode.equals("local")) { helpData = localFilms; @@ -392,7 +383,7 @@ public class MainWindowController { } for (int i = 0; i < filterData.size(); i++) { - root.getChildren().add(new TreeItem(filterData.get(i))); // add filtered data to root node after search + filmRoot.getChildren().add(new TreeItem(filterData.get(i))); // add filtered data to root node after search } if (searchTextField.getText().hashCode() == hashA) { setColor("000000"); @@ -428,8 +419,8 @@ public class MainWindowController { @Override public void changed(ObservableValue ov, Number old_val, Number new_val) { setSize(fontsizeSlider.getValue()); - if (name != null) { - dbController.readCache(datPath); + if (title != null) { + dbController.readCache(streamUrl); } // ta1.setFont(Font.font("System", size)); saveSettings(); @@ -439,17 +430,8 @@ public class MainWindowController { like.setOnAction(new EventHandler() { @Override public void handle(ActionEvent event) { - if (mode.equals("streaming")) { - dbController.like(name, streamingFilms.get(selected).getStreamUrl()); - } else { - dbController.like(name, localFilms.get(selected).getStreamUrl()); - } - dbController.getFavStatus(name); - try { - dbController.refresh(name, selected); - } catch (SQLException e) { - LOGGER.error("(like-problem), it seems as a cat has stolen the \"like-methode\"!", e); - } + dbController.like(streamUrl); + dbController.refresh(streamUrl, selected); refreshTable(); } }); @@ -457,17 +439,8 @@ public class MainWindowController { dislike.setOnAction(new EventHandler() { @Override public void handle(ActionEvent event) { - if (mode.equals("streaming")) { - dbController.dislike(name, streamingFilms.get(selected).getStreamUrl()); - } else { - dbController.dislike(name, localFilms.get(selected).getStreamUrl()); - } - dbController.getFavStatus(name); - try { - dbController.refresh(name, selected); - } catch (SQLException e) { - LOGGER.error("There was a problem with the like/dislike function!", e); - } + dbController.dislike(streamUrl); + dbController.refresh(streamUrl, selected); refreshTable(); } }); @@ -477,15 +450,14 @@ public class MainWindowController { */ columnRating.sortTypeProperty().addListener(new ChangeListener() { @Override - public void changed(ObservableValue paramObservableValue, SortType paramT1, - SortType paramT2) { + public void changed(ObservableValue paramObservableValue, SortType paramT1, SortType paramT2) { LOGGER.info("NAME Clicked -- sortType = " + paramT1 + ", SortType=" + paramT2); ArrayList fav_true = new ArrayList(); ArrayList fav_false = new ArrayList(); - ObservableList helpData; + ObservableList helpData; filterData.removeAll(filterData); // treeTableViewfilm.getSelectionModel().clearSelection(selected); - root.getChildren().remove(0, root.getChildren().size()); + filmRoot.getChildren().removeAll(filmRoot.getChildren()); if (mode.equals("local")) { helpData = localFilms; @@ -520,7 +492,8 @@ public class MainWindowController { LOGGER.info(filterData.size()); // Debug, delete? for (int i = 0; i < filterData.size(); i++) { // LOGGER.info(filterData.get(i).getTitle()+"; "+filterData.get(i).getRating()); // Debugging - root.getChildren().add(new TreeItem(filterData.get(i))); // add filtered data to root node after search + // add filtered data to root node after search + filmRoot.getChildren().add(new TreeItem(filterData.get(i))); } } }); @@ -533,23 +506,22 @@ public class MainWindowController { selected = treeTableViewfilm.getSelectionModel().getSelectedIndex(); // get selected item last = selected - 1; next = selected + 1; - name = columnTitel.getCellData(selected); // get name of selected item - datPath = columnStreamUrl.getCellData(selected); // get file path of selected item + title = columnTitel.getCellData(selected); // get name of selected item + streamUrl = columnStreamUrl.getCellData(selected); // get file path of selected item if (mode.equals("local")) { if (localFilms.get(selected).getCached() == true) { - LOGGER.info("loading from cache: " + name); - dbController.readCache(datPath); + LOGGER.info("loading from cache: " + title); + dbController.readCache(streamUrl); } else { - ApiQuery.startQuery(name, datPath); // start api query + ApiQuery.startQuery(title, streamUrl); // start api query } } else { - LOGGER.info(streamingFilms.size()); if (streamingFilms.get(selected).getCached() == true) { - LOGGER.info("loading from cache: " + name); - dbController.readCache(datPath); + LOGGER.info("loading from cache: " + title); + dbController.readCache(streamUrl); } else { - ApiQuery.startQuery(name, datPath); // start api query + ApiQuery.startQuery(title, streamUrl); // start api query } } } @@ -587,7 +559,7 @@ public class MainWindowController { if (Desktop.isDesktopSupported()) { new Thread(() -> { try { - Desktop.getDesktop().browse(new URI(datPath)); //open the streaming URL in browser + Desktop.getDesktop().browse(new URI(streamUrl)); //open the streaming URL in browser } catch (IOException | URISyntaxException e) { e.printStackTrace(); showErrorMsg(errorOpenStream, (IOException) e); @@ -617,14 +589,14 @@ public class MainWindowController { vlcInfoDialog.show(); }else{ try { - Runtime.getRuntime().exec(new String[] { "vlc", datPath}); // TODO switch to ProcessBuilder + Runtime.getRuntime().exec(new String[] { "vlc", streamUrl}); // TODO switch to ProcessBuilder } catch (IOException e) { showErrorMsg(errorPlay,e); } } }else if(System.getProperty("os.name").contains("Windows") || System.getProperty("os.name").contains("Mac OS X")){ try { - Desktop.getDesktop().open(new File(datPath)); + Desktop.getDesktop().open(new File(streamUrl)); } catch (IOException e) { showErrorMsg(errorPlay,e); } @@ -639,7 +611,7 @@ public class MainWindowController { @FXML private void openfolderbtnclicked() { - String dest = new File(datPath).getParentFile().getAbsolutePath(); + String dest = new File(streamUrl).getParentFile().getAbsolutePath(); if (!System.getProperty("os.name").contains("Linux")) { try { Desktop.getDesktop().open(new File(dest)); @@ -689,7 +661,7 @@ public class MainWindowController { switchBtn.setText("streaming"); } saveSettings(); - root.getChildren().remove(0,root.getChildren().size()); + filmRoot.getChildren().removeAll(filmRoot.getChildren()); addDataUI(); settingsScrollPane.setVisible(false); sideMenuSlideOut(); //disables side-menu @@ -750,45 +722,42 @@ public class MainWindowController { saveSettings(); } - private void refreshTable(){ - if(mode.equals("local")){ - root.getChildren().set(selected, new TreeItem(localFilms.get(selected))); - }else if(mode.equals("streaming")){ - root.getChildren().set(selected, new TreeItem(streamingFilms.get(selected))); + // refresh the selected child of the root node + private void refreshTable() { + if (mode.equals("local")) { + filmRoot.getChildren().get(selected).setValue(localFilms.get(selected)); + } else { + filmRoot.getChildren().get(selected).setValue(streamingFilms.get(selected)); } } + // TODO rework public void addDataUI(){ + if(mode.equals("local")){ for(int i = 0; i < localFilms.size(); i++){ - root.getChildren().add(new TreeItem(localFilms.get(i))); //add data to root-node + filmRoot.getChildren().add(new TreeItem(localFilms.get(i))); //add data to root-node } columnRating.setMaxWidth(85); columnTitel.setMaxWidth(290); treeTableViewfilm.getColumns().get(3).setVisible(false); treeTableViewfilm.getColumns().get(4).setVisible(false); - treeTableViewfilm.getColumns().get(5).setVisible(false); - treeTableViewfilm.getColumns().get(6).setVisible(false); }else if(mode.equals("streaming")){ for(int i = 0; i < streamingFilms.size(); i++){ - root.getChildren().add(new TreeItem(streamingFilms.get(i))); //add data to root-node + filmRoot.getChildren().add(new TreeItem(streamingFilms.get(i))); //add data to root-node } - columnTitel.setMaxWidth(150); - columnResolution.setMaxWidth(65); - columnRating.setMaxWidth(50); - columnYear.setMaxWidth(43); - columnSeason.setMaxWidth(42); - columnEpisode.setMaxWidth(44); + columnTitel.setMaxWidth(215); + columnRating.setMaxWidth(60); + columnSeason.setMaxWidth(55); + columnEpisode.setMaxWidth(64); treeTableViewfilm.getColumns().get(3).setVisible(true); treeTableViewfilm.getColumns().get(4).setVisible(true); - treeTableViewfilm.getColumns().get(5).setVisible(true); - treeTableViewfilm.getColumns().get(6).setVisible(true); } } public void addSourceToTable(String path, String mode) { - sourcesList.add(new tableData(1, 1, 1, 5.0, "1", path, mode, imv1, false)); - streamingRoot.getChildren().add(new TreeItem(sourcesList.get(sourcesList.size() - 1))); // adds data to root-node + sourcesList.add(new SourceDataType(path, mode)); + streamingRoot.getChildren().add(new TreeItem(sourcesList.get(sourcesList.size() - 1))); // adds data to root-node } public void addSource(String path, String mode) { @@ -913,9 +882,7 @@ public class MainWindowController { 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")); errorPlay = getBundle().getString("errorPlay"); errorOpenStream = getBundle().getString("errorOpenStream"); errorMode = getBundle().getString("errorMode"); @@ -926,7 +893,7 @@ public class MainWindowController { } // TODO rework to material design - public void showErrorMsg(String msg, IOException exception) { + public void showErrorMsg(String msg, Exception exception) { Alert alert = new Alert(AlertType.ERROR); alert.setTitle("Error"); alert.setHeaderText(""); @@ -1141,27 +1108,27 @@ public class MainWindowController { return mode; } - public ObservableList getLocalFilms() { + public ObservableList getLocalFilms() { return localFilms; } - public void setLocalFilms(ObservableList localFilms) { + public void setLocalFilms(ObservableList localFilms) { this.localFilms = localFilms; } - public ObservableList getStreamingFilms() { + public ObservableList getStreamingFilms() { return streamingFilms; } - public void setStreamingFilms(ObservableList streamingFilms) { + public void setStreamingFilms(ObservableList streamingFilms) { this.streamingFilms = streamingFilms; } - public ObservableList getSourcesList() { + public ObservableList getSourcesList() { return sourcesList; } - public void setSourcesList(ObservableList sourcesList) { + public void setSourcesList(ObservableList sourcesList) { this.sourcesList = sourcesList; } @@ -1185,23 +1152,19 @@ public class MainWindowController { 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; + public TreeItem getFilmRoot() { + return filmRoot; + } + + public TreeItem getStreamingRoot() { + return streamingRoot; } } diff --git a/src/main/java/kellerkinder/HomeFlix/controller/DBController.java b/src/main/java/kellerkinder/HomeFlix/controller/DBController.java index bfcdfcb..22ea0f4 100644 --- a/src/main/java/kellerkinder/HomeFlix/controller/DBController.java +++ b/src/main/java/kellerkinder/HomeFlix/controller/DBController.java @@ -49,7 +49,8 @@ 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; +import kellerkinder.HomeFlix.datatypes.SourceDataType; +import kellerkinder.HomeFlix.datatypes.FilmTabelDataType; public class DBController { @@ -79,7 +80,7 @@ public class DBController { LOGGER.info("<========== finished loading sql ==========>"); } - public void initDatabaseConnection() { + private void initDatabaseConnection() { DB_PATH = main.getDirectory() + "/Homeflix.db"; try { // create a database connection @@ -99,9 +100,8 @@ public class DBController { private void createDatabase() { 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.executeUpdate("create table if not exists film_local (rating, titel, streamUrl, cached)"); + stmt.executeUpdate("create table if not exists film_streaming (season, episode, rating, titel, streamUrl, cached)"); 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," @@ -119,15 +119,15 @@ public class DBController { Statement stmt = connection.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM film_local"); while (rs.next()) { - filmsdbDir.add(rs.getString(2)); + filmsdbDir.add(rs.getString("titel")); } stmt.close(); rs.close(); rs = stmt.executeQuery("SELECT * FROM film_streaming;"); while (rs.next()) { - filmsdbAll.add(rs.getString(6)); - filmsdbStreamURL.add(rs.getString(7)); + filmsdbAll.add(rs.getString("titel")); + filmsdbStreamURL.add(rs.getString("streamUrl")); } stmt.close(); rs.close(); @@ -145,7 +145,7 @@ public class DBController { private void loadSources() { // remove sources from table mainWindowController.getSourcesList().removeAll(mainWindowController.getSourcesList()); - mainWindowController.streamingRoot.getChildren().removeAll(mainWindowController.streamingRoot.getChildren()); + mainWindowController.getStreamingRoot().getChildren().removeAll(mainWindowController.getStreamingRoot().getChildren()); try { JsonArray sources = Json.parse(new FileReader(main.getDirectory() + "/sources.json")).asArray(); @@ -187,19 +187,19 @@ public class DBController { } // loading data from database to mainWindowController - public void loadDataToMWC() { + private void loadDataToMWC() { 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))); + if (rs.getInt("rating") == 1) { + mainWindowController.getLocalFilms().add(new FilmTabelDataType(1, 1, rs.getDouble("rating"), rs.getString("titel"), + rs.getString("streamUrl"), new ImageView(favorite_black), rs.getBoolean("cached"))); } 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))); + mainWindowController.getLocalFilms().add(new FilmTabelDataType(1, 1, rs.getDouble("rating"), rs.getString("titel"), + rs.getString("streamUrl"), new ImageView(favorite_border_black), rs.getBoolean("cached"))); } } stmt.close(); @@ -208,14 +208,14 @@ public class DBController { //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))); + if (rs.getInt("rating") == 1) { + mainWindowController.getStreamingFilms().add(new FilmTabelDataType(rs.getInt("season"), + rs.getInt("episode"), rs.getDouble("rating"), rs.getString("titel"), rs.getString("streamUrl"), + new ImageView(favorite_black), rs.getBoolean("cached"))); } 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))); + mainWindowController.getStreamingFilms().add(new FilmTabelDataType(rs.getInt("season"), + rs.getInt("episode"),rs.getDouble("rating"), rs.getString("titel"),rs.getString("streamUrl"), + new ImageView(favorite_border_black), rs.getBoolean("cached"))); } } stmt.close(); @@ -228,43 +228,43 @@ public class DBController { 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 { + /** + * refresh data in mainWindowController localFilms and streamingFilms + * @param title of the film + * @param i index of the film in LocalFilms list + * @throws SQLException + */ + public void refresh(String streamUrl, int index) { 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))); + Statement stmt = connection.createStatement(); + + if (mainWindowController.getMode().equals("local")) { + ResultSet rs = stmt.executeQuery("SELECT * FROM film_local WHERE streamUrl = \"" + streamUrl + "\";"); + if (rs.getInt("rating") == 1) { + mainWindowController.getLocalFilms().set(index, new FilmTabelDataType(1, 1, rs.getDouble("rating"), + rs.getString("titel"), rs.getString("streamUrl"), new ImageView(favorite_black), rs.getBoolean("cached"))); + } else { + mainWindowController.getLocalFilms().set(index, new FilmTabelDataType(1, 1, rs.getDouble("rating"), + rs.getString("titel"), rs.getString("streamUrl"), new ImageView(favorite_border_black), rs.getBoolean("cached"))); + } + rs.close(); } 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))); + ResultSet rs = stmt.executeQuery("SELECT * FROM film_streaming WHERE streamUrl = \"" + streamUrl + "\";"); + if (rs.getInt("rating") == 1) { + mainWindowController.getStreamingFilms().set(index, new FilmTabelDataType(rs.getInt("season"), + rs.getInt("episode"), rs.getDouble("rating"), rs.getString("titel"), rs.getString("streamUrl"), + new ImageView(favorite_black), rs.getBoolean("cached"))); + } else { + mainWindowController.getStreamingFilms().set(index, new FilmTabelDataType(rs.getInt("season"), + rs.getInt("episode"), rs.getDouble("rating"), rs.getString("titel"), rs.getString("streamUrl"), + new ImageView(favorite_border_black), rs.getBoolean("cached"))); + } + rs.close(); } 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); - } + } catch (Exception e) { + LOGGER.error("Ups! error while refreshing mwc!", e); } } @@ -297,7 +297,7 @@ public class DBController { // remove all films from the mwc lists mainWindowController.getLocalFilms().removeAll(mainWindowController.getLocalFilms()); mainWindowController.getStreamingFilms().removeAll(mainWindowController.getStreamingFilms()); - mainWindowController.root.getChildren().removeAll(mainWindowController.root.getChildren()); + mainWindowController.getFilmRoot().getChildren().removeAll(mainWindowController.getFilmRoot().getChildren()); loadDataToMWC(); // load the new data to the mwc } @@ -315,7 +315,6 @@ public class DBController { if (!filmsAll.contains(cutOffEnd(entry))) { stmt.executeUpdate("delete from film_local where titel = \"" + entry + "\""); connection.commit(); - stmt.close(); LOGGER.info("removed \"" + entry + "\" from database"); } } @@ -324,11 +323,11 @@ public class DBController { if (!filmsStreamURL.contains(entry)) { stmt.executeUpdate("delete from film_streaming where streamUrl = \"" + entry + "\""); connection.commit(); - stmt.close(); LOGGER.info("removed \"" + entry + "\" from database"); } } + stmt.close(); } catch (Exception e) { LOGGER.error(e); } @@ -346,13 +345,13 @@ public class DBController { LOGGER.info("checking for entrys to add to DB ..."); // source is a single source of the sources list - for (tableData source : mainWindowController.getSourcesList()) { + for (SourceDataType source : mainWindowController.getSourcesList()) { // if it's a local source check the folder for new film - if (source.getStreamUrl().equals("local")) { - for (String entry : new File(source.getTitle()).list()) { + if (source.getMode().equals("local")) { + for (String entry : new File(source.getPath()).list()) { if (!filmsdbAll.contains(cutOffEnd(entry))) { stmt.executeUpdate("insert into film_local values (0, \"" + cutOffEnd(entry) + "\", \"" - + source.getTitle() + "/" + entry + "\",\"favorite_border_black\",0)"); + + source.getPath() + "/" + entry + "\",\"favorite_border_black\",0)"); connection.commit(); stmt.close(); LOGGER.info("added \"" + entry + "\" to database"); @@ -363,7 +362,7 @@ public class DBController { // if it's a streaming source check the file for new films for (String entry : filmsStreamURL) { if (!filmsdbStreamURL.contains(entry)) { - JsonArray items = Json.parse(new FileReader(source.getTitle())).asObject().get("entries").asArray(); + JsonArray items = Json.parse(new FileReader(source.getPath())).asObject().get("entries").asArray(); // for each item, check if it's the needed for (JsonValue item : items) { String streamUrl = item.asObject().getString("streamUrl", ""); @@ -378,8 +377,7 @@ public class DBController { ps.setString(5, item.asObject().getString("resolution", "")); ps.setString(6, titel); ps.setString(7, streamUrl); - ps.setString(8, "favorite_border_black"); - ps.setBoolean(9, false); + ps.setBoolean(8, false); ps.addBatch(); // adds the entry LOGGER.info("added \"" + titel + "\" to database"); filmsAll.add(cutOffEnd(titel)); @@ -401,11 +399,10 @@ public class DBController { 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"); + System.out.println(rs.getString("rating")); + System.out.println(rs.getString("titel")); + System.out.println(rs.getString("streamUrl")); + System.out.println(rs.getString("cached") + "\n"); } stmt.close(); rs.close(); @@ -414,15 +411,12 @@ public class DBController { 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"); + System.out.println(rs.getString("season")); + System.out.println(rs.getString("episode")); + System.out.println(rs.getString("rating")); + System.out.println(rs.getString("titel")); + System.out.println(rs.getString("streamUrl")); + System.out.println(rs.getString("cached") + "\n"); } stmt.close(); rs.close(); @@ -431,80 +425,21 @@ public class DBController { LOGGER.error("An error occured, while printing all entries", e); } } - - // get favorite status - public void getFavStatus(String name) { - try { - if (mainWindowController.getMode().equals("local")) { - 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(); - } else { - 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 e) { - LOGGER.error("Ups! an error occured!", e); - } - } - // set rating=0 and favorite_border_black - public void dislike(String name, String streamUrl) { - LOGGER.info("defavorisieren ..."); - try { - if (mainWindowController.getMode().equals("local")) { - Statement stmt = connection.createStatement(); - stmt.executeUpdate("UPDATE film_local SET rating=0,favIcon='favorite_border_black' WHERE titel=\"" + name + "\";"); - connection.commit(); - stmt.close(); - } else { - 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 - public void like(String name, String streamUrl) { - LOGGER.info("favorisieren ..."); - try { - if (mainWindowController.getMode().equals("local")) { - Statement stmt = connection.createStatement(); - stmt.executeUpdate("UPDATE film_local SET rating=1,favIcon='favorite_black' WHERE titel=\"" + name + "\";"); - connection.commit(); - stmt.close(); - } else { - 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 { + /** + * update the database entry for the given film, rating = 0 + * @param name of the film + * @param streamUrl URL of the film + */ + public void dislike(String streamUrl) { + LOGGER.info("dislike " + streamUrl); 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 + "\";"); + if (mainWindowController.getMode().equals("local")) { + stmt.executeUpdate("UPDATE film_local SET rating=0 WHERE streamUrl=\"" + streamUrl + "\";"); + } else { + stmt.executeUpdate("UPDATE film_streaming SET rating=0 WHERE streamUrl=\"" + streamUrl + "\";"); + } connection.commit(); stmt.close(); } catch (SQLException e) { @@ -512,6 +447,71 @@ public class DBController { } } + /** + * update the database entry for the given film, rating = 1 + * @param name of the film + * @param streamUrl URL of the film + */ + public void like(String streamUrl) { + LOGGER.info("like " + streamUrl); + try { + Statement stmt = connection.createStatement(); + if (mainWindowController.getMode().equals("local")) { + stmt.executeUpdate("UPDATE film_local SET rating=1 WHERE streamUrl=\"" + streamUrl + "\";"); + } else { + stmt.executeUpdate("UPDATE film_streaming SET rating=1 WHERE streamUrl=\"" + streamUrl + "\";"); + } + connection.commit(); + stmt.close(); + } catch (SQLException e) { + LOGGER.error("Ups! an error occured!", e); + } + } + + /** + * update the database entry for the given film, cached = 1 + * @param streamUrl URL of the film + */ + void setCached(String streamUrl) { + try { + Statement stmt = connection.createStatement(); + if (mainWindowController.getMode().equals("local")) { + stmt.executeUpdate("UPDATE film_local SET cached=1 WHERE streamUrl=\"" + streamUrl + "\";"); + } else { + 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); + } + } + + /** + * add the received data to the cache table + * @param streamUrl URL of the film + * @param Title + * @param Year + * @param Rated + * @param Released + * @param Runtime + * @param Genre + * @param Director + * @param Writer + * @param Actors + * @param Plot + * @param Language + * @param Country + * @param Awards + * @param Metascore + * @param imdbRating + * @param Type + * @param imdbVotes + * @param imdbID + * @param Poster + * @param Response + * @throws SQLException + */ 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{ @@ -546,6 +546,10 @@ public class DBController { LOGGER.info("done!"); } + /** + * sets the cached data to mwc's TextFlow + * @param streamUrl URL of the film + */ public void readCache(String streamUrl) { try { Statement stmt = connection.createStatement(); @@ -573,7 +577,7 @@ public class DBController { 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++; diff --git a/src/main/java/kellerkinder/HomeFlix/datatypes/tableData.java b/src/main/java/kellerkinder/HomeFlix/datatypes/FilmTabelDataType.java similarity index 78% rename from src/main/java/kellerkinder/HomeFlix/datatypes/tableData.java rename to src/main/java/kellerkinder/HomeFlix/datatypes/FilmTabelDataType.java index 462df51..656fa1b 100644 --- a/src/main/java/kellerkinder/HomeFlix/datatypes/tableData.java +++ b/src/main/java/kellerkinder/HomeFlix/datatypes/FilmTabelDataType.java @@ -32,44 +32,34 @@ import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.StringProperty; import javafx.scene.image.ImageView; -public class tableData { - private final IntegerProperty year = new SimpleIntegerProperty(); +public class FilmTabelDataType { private final IntegerProperty season = new SimpleIntegerProperty(); private final IntegerProperty episode = new SimpleIntegerProperty(); private final DoubleProperty rating = new SimpleDoubleProperty(); - private final StringProperty resolution = new SimpleStringProperty(); private final StringProperty title = new SimpleStringProperty(); private final StringProperty streamUrl = new SimpleStringProperty(); private final SimpleObjectProperty image = new SimpleObjectProperty<>(); private final BooleanProperty cached = new SimpleBooleanProperty(); - /** + /** TODO rating boolean * tableData is the data-type of tree-table-view - * @param year the release year of the film * @param season season if it's a series * @param episode episode if it's a series - * @param rating indicator for favourites, used for sorting the items - * @param resolution resolution of the film + * @param rating indicator for favorites, used for sorting the items * @param titel title of the film * @param streamUrl the concrete path to the file or the URL - * @param image the favourite icon * @param cached indicator for caching status */ - public tableData (final int year, final int season, final int episode, final double rating, final String resolution, final String title, final String streamUrl, final ImageView image, final boolean cached) { - this.year.set(year); + public FilmTabelDataType(final int season, final int episode, final double rating, final String title, + final String streamUrl, final ImageView image, final boolean cached) { this.season.set(season); this.episode.set(episode); this.rating.set(rating); - this.resolution.set(resolution); this.title.set(title); this.streamUrl.set(streamUrl); this.image.set(image); this.cached.set(cached); } - - public IntegerProperty yearProperty(){ - return year; - } public IntegerProperty seasonProperty(){ return season; @@ -83,10 +73,6 @@ public class tableData { return rating; } - public StringProperty resolutionProperty(){ - return resolution; - } - public StringProperty titleProperty(){ return title; } @@ -103,10 +89,6 @@ public class tableData { return cached; } - - public final int getYear() { - return yearProperty().get(); - } public final int getSeason() { return seasonProperty().get(); @@ -119,10 +101,6 @@ public class tableData { public final double getRating() { return ratingProperty().get(); } - - public final String getResolution() { - return resolutionProperty().get(); - } public final String getTitle() { return titleProperty().get(); @@ -141,9 +119,6 @@ public class tableData { } - public final void setYear(int year) { - yearProperty().set(year); - } public final void setSeason(int season) { seasonProperty().set(season); @@ -157,10 +132,6 @@ public class tableData { ratingProperty().set(rating); } - public final void setResolution(String resolution) { - resolutionProperty().set(resolution); - } - public final void setTitle(String title) { titleProperty().set(title); } diff --git a/src/main/java/kellerkinder/HomeFlix/datatypes/SourceDataType.java b/src/main/java/kellerkinder/HomeFlix/datatypes/SourceDataType.java new file mode 100644 index 0000000..aab7fa5 --- /dev/null +++ b/src/main/java/kellerkinder/HomeFlix/datatypes/SourceDataType.java @@ -0,0 +1,64 @@ +/** + * 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.SimpleStringProperty; +import javafx.beans.property.StringProperty; + +public class SourceDataType { + private final StringProperty path = new SimpleStringProperty(); + private final StringProperty mode = new SimpleStringProperty(); + + /** + * data type for the source table + * @param path of the source + * @param mode of the source, stream or local + */ + public SourceDataType (final String path, final String mode) { + this.path.set(path); + this.mode.set(mode); + } + + public StringProperty pathProperty(){ + return path; + } + + public StringProperty modeProperty(){ + return mode; + } + + public final String getPath() { + return pathProperty().get(); + } + + public final String getMode() { + return modeProperty().get(); + } + + public final void setPath(String path) { + pathProperty().set(path); + } + + public final void setMode(String mode) { + modeProperty().set(mode); + } +} diff --git a/src/main/resources/locals/HomeFlix-Local_de_DE.properties b/src/main/resources/locals/HomeFlix-Local_de_DE.properties index b016f17..86e45e2 100644 --- a/src/main/resources/locals/HomeFlix-Local_de_DE.properties +++ b/src/main/resources/locals/HomeFlix-Local_de_DE.properties @@ -26,9 +26,7 @@ branchLbl = Updatezweig columnName = Name columnRating = Bewertung columnStreamUrl = Datei Name -columnResolution = Aufl\u00F6sung columnSeason = Staffel -columnYear = Jahr #error translations errorUpdateV = Beim ausf\u00FChren des Updates ist ein Fehler aufgetreten! \nError: could not check update version (nvc)\nWeitere Hilfe erhalten sie unter www.kellerkinder.xyz \noder wenden sie sich an support@kellerkinder.xyz diff --git a/src/main/resources/locals/HomeFlix-Local_en_US.properties b/src/main/resources/locals/HomeFlix-Local_en_US.properties index 803fc48..ad952bd 100644 --- a/src/main/resources/locals/HomeFlix-Local_en_US.properties +++ b/src/main/resources/locals/HomeFlix-Local_en_US.properties @@ -26,9 +26,7 @@ branchLbl = Branch columnName = Name columnRating = Rating columnStreamUrl = File Name -columnResolution = Resolution columnSeason = Season -columnYear = Year #error translations errorUpdateV = An error has occurred during update! \nError: could not check update version (nvc) \nTo get help, visit www.kellerkinder.xyz \nor contcat support@kellerkinder.xyz