diff --git a/pom.xml b/pom.xml index d9f7a89..f69889e 100644 --- a/pom.xml +++ b/pom.xml @@ -51,7 +51,7 @@ com.jfoenix jfoenix - 9.0.8 + 9.0.9 diff --git a/src/main/java/kellerkinder/HomeFlix/application/MainWindowController.java b/src/main/java/kellerkinder/HomeFlix/application/MainWindowController.java index fc0b6bd..8943e12 100644 --- a/src/main/java/kellerkinder/HomeFlix/application/MainWindowController.java +++ b/src/main/java/kellerkinder/HomeFlix/application/MainWindowController.java @@ -146,7 +146,7 @@ public class MainWindowController { @FXML private TreeTableColumn columnFavorite; @FXML private TreeTableColumn columnSeason; @FXML private TreeTableColumn columnEpisode; - @FXML private TreeItem filmRoot = new TreeItem<>(new FilmTabelDataType("", "", "", "", false, null, null)); + @FXML private TreeItem filmRoot = new TreeItem<>(new FilmTabelDataType("", "", "", "", false, null)); @FXML private ScrollPane textScrollPane; @@ -180,7 +180,7 @@ public class MainWindowController { private int indexTable; private int indexList; private int next; - private FilmTabelDataType currentTableFilm = new FilmTabelDataType("", "", "", "", false, null, null); + private FilmTabelDataType currentTableFilm = new FilmTabelDataType("", "", "", "", false, null); private ObservableList languages = FXCollections.observableArrayList("English (en_US)", "Deutsch (de_DE)"); private ObservableList branches = FXCollections.observableArrayList("stable", "beta"); @@ -394,7 +394,8 @@ public class MainWindowController { } } - if ((currentTableFilm.getCached().isAfter(lastValidCache)) && dbController.searchCacheByURL(getCurrentStreamUrl())) { + if ((dbController.getCached(getCurrentStreamUrl()).isAfter(lastValidCache) || getCurrentStreamUrl().contains("_rootNode")) + && dbController.searchCacheByURL(getCurrentStreamUrl())) { LOGGER.info("loading from cache: " + getCurrentTitle()); setSelectedFilmInfo(dbController.readCache(getCurrentStreamUrl())); } else { @@ -607,12 +608,12 @@ public class MainWindowController { TreeItem episodeNode = new TreeItem<>( new FilmTabelDataType(element.getStreamUrl(), element.getTitle(), element.getSeason(), element.getEpisode(), element.getFavorite(), - element.getCached(), element.getImage())); + element.getImage())); filmRoot.getChildren().get(i).getChildren().add(episodeNode); } else if (filmRoot.getChildren().get(i).nextSibling() == null) { TreeItem seriesRootNode = new TreeItem<>( new FilmTabelDataType(element.getTitle() + "_rootNode", element.getTitle(), "", "", - element.getFavorite(), element.getCached(), element.getImage())); + element.getFavorite(), element.getImage())); filmRoot.getChildren().add(seriesRootNode); } } @@ -620,13 +621,13 @@ public class MainWindowController { // add new root node TreeItem seriesRootNode = new TreeItem<>( new FilmTabelDataType(element.getTitle() + "_rootNode", element.getTitle(), "", "", - element.getFavorite(), element.getCached(), element.getImage())); + element.getFavorite(), element.getImage())); filmRoot.getChildren().add(seriesRootNode); // add new element TreeItem episodeNode = new TreeItem<>(new FilmTabelDataType( element.getStreamUrl(), element.getTitle(), element.getSeason(), element.getEpisode(), - element.getFavorite(), element.getCached(), element.getImage())); + element.getFavorite(), element.getImage())); filmRoot.getChildren().get(0).getChildren().add(episodeNode); } @@ -836,7 +837,7 @@ public class MainWindowController { try { posterImageView.setImage(new Image(new File(cacheData[20]).toURI().toString())); } catch (Exception e) { - posterImageView.setImage(new Image(cacheData[20])); + posterImageView.setImage(new Image("icons/Homeflix_Poster.png")); LOGGER.error("No Poster found, useing default."); } } else { diff --git a/src/main/java/kellerkinder/HomeFlix/controller/DBController.java b/src/main/java/kellerkinder/HomeFlix/controller/DBController.java index 737e6e8..4986208 100644 --- a/src/main/java/kellerkinder/HomeFlix/controller/DBController.java +++ b/src/main/java/kellerkinder/HomeFlix/controller/DBController.java @@ -32,6 +32,7 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; @@ -130,7 +131,7 @@ public class DBController { while (rs.next()) { databaseStreams.add(new DatabaseDataType(rs.getString("streamUrl"), rs.getString("title"), rs.getString("season"), rs.getString("episode"), - rs.getInt("favorite"), rs.getDate("cached"), rs.getDouble("currentTime"))); + rs.getInt("favorite"), rs.getDouble("currentTime"))); } stmt.close(); rs.close(); @@ -140,7 +141,7 @@ public class DBController { } /** - * load all sources + * load all source streams */ private void loadSources() { SourcesController sourcesController = new SourcesController(); @@ -163,7 +164,7 @@ public class DBController { ImageView imageView = rs.getBoolean("favorite") ? new ImageView(favorite_black) : new ImageView(favorite_border_black); filmsList.add(new FilmTabelDataType(rs.getString("streamUrl"), rs.getString("title"), rs.getString("season"), rs.getString("episode") ,rs.getBoolean("favorite"), - rs.getDate("cached").toLocalDate(), imageView)); + imageView)); } stmt.close(); rs.close(); @@ -191,7 +192,7 @@ public class DBController { ImageView imageView = rs.getBoolean("favorite") ? new ImageView(favorite_black) : new ImageView(favorite_border_black); film = new FilmTabelDataType(rs.getString("streamUrl"), rs.getString("title"), rs.getString("season"), rs.getString("episode"), rs.getBoolean("favorite"), - rs.getDate("cached").toLocalDate(), imageView); + imageView); } rs.close(); ps.close(); @@ -322,7 +323,7 @@ public class DBController { ps.setString(3, sourceStreamEntry.getSeason()); ps.setString(4, sourceStreamEntry.getEpisode()); ps.setInt(5, sourceStreamEntry.getFavorite()); - ps.setDate(6, sourceStreamEntry.getCached()); + ps.setDate(6, new Date(0)); ps.setDouble(7, sourceStreamEntry.getCurrentTime()); ps.addBatch(); // adds the entry LOGGER.info("Added \"" + sourceStreamEntry.getTitle() + "\" to database"); @@ -411,6 +412,30 @@ public class DBController { } } + /** + * get the cached date for the film + * @param streamUrl URL of the film + */ + public LocalDate getCached(String streamUrl) { + LocalDate cacheDate = LocalDate.now().minusDays(31); + try { + PreparedStatement ps = connection.prepareStatement("SELECT cached FROM films WHERE streamUrl = ?"); + ps.setString(1, streamUrl); + ResultSet rs = ps.executeQuery(); + + while (rs.next()) { + cacheDate = rs.getDate("cached").toLocalDate(); + } + + rs.close(); + ps.close(); + } catch (SQLException e) { + LOGGER.error("Ups! an error occured!", e); + } + + return cacheDate; + } + /** * add the received data to the cache table * @param streamUrl URL of the film @@ -537,7 +562,7 @@ public class DBController { while (rs.next()) { notCachedEntries.add(new FilmTabelDataType(rs.getString("streamUrl"), rs.getString("title"), rs.getString("season"), rs.getString("episode"), rs.getBoolean("favorite"), - rs.getDate("cached").toLocalDate(), new ImageView(favorite_border_black))); + new ImageView(favorite_border_black))); } stmt.close(); rs.close(); @@ -622,7 +647,7 @@ public class DBController { // at this point we have found the correct episode nextFilm = new FilmTabelDataType(rs.getString("streamUrl"), rs.getString("title"), rs.getString("season"), rs.getString("episode"), rs.getBoolean("favorite"), - rs.getDate("cached").toLocalDate(), new ImageView()); + new ImageView()); rs.close(); ps.close(); @@ -648,7 +673,7 @@ public class DBController { while (rs.next()) { nextFilm = new FilmTabelDataType(rs.getString("streamUrl"), rs.getString("title"), rs.getString("season"), rs.getString("episode"), rs.getBoolean("favorite"), - rs.getDate("cached").toLocalDate(), new ImageView()); + new ImageView()); // get the first episode where currentTime != 0 if (rs.getDouble("currentTime") > lastCurrentTime) { break; diff --git a/src/main/java/kellerkinder/HomeFlix/controller/OMDbAPIController.java b/src/main/java/kellerkinder/HomeFlix/controller/OMDbAPIController.java index f598446..ab7c63a 100644 --- a/src/main/java/kellerkinder/HomeFlix/controller/OMDbAPIController.java +++ b/src/main/java/kellerkinder/HomeFlix/controller/OMDbAPIController.java @@ -130,18 +130,23 @@ public class OMDbAPIController implements Runnable { omdbResponse.setWebsite(object.getString("Website", "")); omdbResponse.setResponse(object.getString("Response", "")); - // resize the image to fit in the posterImageView and add it to the cache - try { - BufferedImage originalImage = ImageIO.read(new URL(object.getString("Poster", ""))); - // change path to where file is located - omdbResponse.setPoster(XMLController.getPosterCache() + "/" + omdbResponse.getTitle() + ".png"); - ImageIO.write(originalImage, "png", new File(omdbResponse.getPoster())); - LOGGER.info("adding poster to cache: " + omdbResponse.getPoster()); - } catch (Exception e) { - LOGGER.error(e); + // if a poster exist try resizing it to fit in the posterImageView and add it to the cache, else use the default + if (omdbResponse.getPoster() != null) { + try { + BufferedImage originalImage = ImageIO.read(new URL(object.getString("Poster", ""))); + // change path to where file is located + omdbResponse.setPoster(XMLController.getPosterCache() + "/" + omdbResponse.getTitle() + ".png"); + ImageIO.write(originalImage, "png", new File(omdbResponse.getPoster())); + LOGGER.info("adding poster to cache: " + omdbResponse.getPoster()); + } catch (Exception e) { + LOGGER.error(e); + } + } else { + omdbResponse.setPoster("icons/Homeflix_Poster.png"); } + synchronized (this) { // adding to cache dbController.addCache(currentTableFilm.getStreamUrl(), omdbResponse); diff --git a/src/main/java/kellerkinder/HomeFlix/controller/SourcesController.java b/src/main/java/kellerkinder/HomeFlix/controller/SourcesController.java index ef07925..f4eade9 100644 --- a/src/main/java/kellerkinder/HomeFlix/controller/SourcesController.java +++ b/src/main/java/kellerkinder/HomeFlix/controller/SourcesController.java @@ -26,7 +26,6 @@ import java.io.File; import java.io.FileReader; import java.io.IOException; import java.nio.file.Files; -import java.sql.Date; import java.util.ArrayList; import java.util.List; @@ -89,7 +88,7 @@ public class SourcesController { for (File file : new File(path).listFiles()) { // if it's valid file add it to the sourceStreams if (isValidFile(file)) { - sourceStreams.add(new DatabaseDataType(file.getPath(), cutOffEnd(file.getName()), "", "", 0, new Date(0), 0.0)); + sourceStreams.add(new DatabaseDataType(file.getPath(), cutOffEnd(file.getName()), "", "", 0, 0.0)); } else if(file.isDirectory()) { // get all directories (series), root and season must be directories int sn = 1; @@ -100,7 +99,7 @@ public class SourcesController { // check whether the episode is a valid file if (isValidFile(episode)) { sourceStreams.add(new DatabaseDataType(episode.getPath(), cutOffEnd(file.getName()), - Integer.toString(sn), Integer.toString(ep), 0, new Date(0), 0.0)); + Integer.toString(sn), Integer.toString(ep), 0, 0.0)); ep++; } } @@ -122,7 +121,7 @@ public class SourcesController { sourceStreams.add(new DatabaseDataType(item.asObject().getString("streamUrl", ""), item.asObject().getString("title", ""), item.asObject().getString("season", ""), - item.asObject().getString("episode", ""), 0, new Date(0), 0.0)); + item.asObject().getString("episode", ""), 0, 0.0)); } LOGGER.info("added " + items.size() +" stream entries from: " + path); } catch (IOException e) { diff --git a/src/main/java/kellerkinder/HomeFlix/datatypes/DatabaseDataType.java b/src/main/java/kellerkinder/HomeFlix/datatypes/DatabaseDataType.java index f3fcd2f..cabd80e 100644 --- a/src/main/java/kellerkinder/HomeFlix/datatypes/DatabaseDataType.java +++ b/src/main/java/kellerkinder/HomeFlix/datatypes/DatabaseDataType.java @@ -22,8 +22,6 @@ package kellerkinder.HomeFlix.datatypes; -import java.sql.Date; - public class DatabaseDataType { private String streamUrl; @@ -31,20 +29,18 @@ public class DatabaseDataType { private String season; private String episode; private int favorite; - private Date cached; private double currentTime; public DatabaseDataType() { // constructor stub } - public DatabaseDataType(String streamUrl, String title, String season, String episode, int favorite, Date cached, double currentTime) { + public DatabaseDataType(String streamUrl, String title, String season, String episode, int favorite, double currentTime) { this.streamUrl = streamUrl; this.title = title; this.season = season; this.episode = episode; this.favorite = favorite; - this.cached = cached; this.currentTime = currentTime; } @@ -88,14 +84,6 @@ public class DatabaseDataType { this.favorite = favorite; } - public Date getCached() { - return cached; - } - - public void setCached(Date cached) { - this.cached = cached; - } - public double getCurrentTime() { return currentTime; } diff --git a/src/main/java/kellerkinder/HomeFlix/datatypes/FilmTabelDataType.java b/src/main/java/kellerkinder/HomeFlix/datatypes/FilmTabelDataType.java index 0d7301c..d774532 100644 --- a/src/main/java/kellerkinder/HomeFlix/datatypes/FilmTabelDataType.java +++ b/src/main/java/kellerkinder/HomeFlix/datatypes/FilmTabelDataType.java @@ -20,8 +20,6 @@ */ package kellerkinder.HomeFlix.datatypes; -import java.time.LocalDate; - import javafx.beans.property.BooleanProperty; import javafx.beans.property.SimpleBooleanProperty; import javafx.beans.property.SimpleObjectProperty; @@ -35,7 +33,6 @@ public class FilmTabelDataType { private final StringProperty season = new SimpleStringProperty(); private final StringProperty episode = new SimpleStringProperty(); private final BooleanProperty favorite = new SimpleBooleanProperty(); - private final SimpleObjectProperty cached = new SimpleObjectProperty<>(); private final SimpleObjectProperty image = new SimpleObjectProperty<>(); /** @@ -49,13 +46,12 @@ public class FilmTabelDataType { * @param image favorite icon */ public FilmTabelDataType(final String streamUrl, final String title, final String season, final String episode, - final boolean favorite, final LocalDate cached, final ImageView image) { + final boolean favorite, final ImageView image) { this.streamUrl.set(streamUrl); this.title.set(title); this.season.set(season); this.episode.set(episode); this.favorite.set(favorite); - this.cached.set(cached); this.image.set(image); } @@ -79,10 +75,6 @@ public class FilmTabelDataType { return favorite; } - public SimpleObjectProperty cachedProperty(){ - return cached; - } - public SimpleObjectProperty imageProperty(){ return image; } @@ -108,10 +100,6 @@ public class FilmTabelDataType { return favoriteProperty().get(); } - public final LocalDate getCached(){ - return cachedProperty().get(); - } - public final ImageView getImage() { return imageProperty().get(); } @@ -137,10 +125,6 @@ public class FilmTabelDataType { favoriteProperty().set(favorite); } - public final void setCached(LocalDate cached){ - cachedProperty().set(cached); - } - public final void setImage(ImageView image) { imageProperty().set(image); }