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);
}