|
|
@ -25,6 +25,7 @@ import java.io.FileNotFoundException; |
|
|
|
import java.io.IOException; |
|
|
|
import java.net.URLConnection; |
|
|
|
import java.sql.Connection; |
|
|
|
import java.sql.Date; |
|
|
|
import java.sql.DriverManager; |
|
|
|
import java.sql.PreparedStatement; |
|
|
|
import java.sql.ResultSet; |
|
|
@ -50,7 +51,7 @@ public class DBController { |
|
|
|
private String DB_PATH; |
|
|
|
private Image favorite_black = new Image("icons/ic_favorite_black_18dp_1x.png"); |
|
|
|
private Image favorite_border_black = new Image("icons/ic_favorite_border_black_18dp_1x.png"); |
|
|
|
private List<DatabaseDataType> databaseStream = new ArrayList<DatabaseDataType>(); // contains all films stored in the database |
|
|
|
private List<DatabaseDataType> databaseStreams = new ArrayList<DatabaseDataType>(); // contains all films stored in the database |
|
|
|
private List<DatabaseDataType> sourceStreams = new ArrayList<DatabaseDataType>(); // contains all films from the sources |
|
|
|
private Connection connection = null; |
|
|
|
private static final Logger LOGGER = LogManager.getLogger(DBController.class.getName()); |
|
|
@ -79,11 +80,8 @@ public class DBController { |
|
|
|
* refresh the database |
|
|
|
*/ |
|
|
|
public void init() { |
|
|
|
LOGGER.info("<========== starting loading sql ==========>"); |
|
|
|
initDatabaseConnection(); |
|
|
|
createDatabase(); |
|
|
|
refreshDataBase(); |
|
|
|
LOGGER.info("<========== finished loading sql ==========>"); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
@ -98,9 +96,9 @@ public class DBController { |
|
|
|
connection.setAutoCommit(false); |
|
|
|
} 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.error("error while loading the HomeFlix database", e); |
|
|
|
} |
|
|
|
LOGGER.info("ROM database loaded successfull"); |
|
|
|
LOGGER.info("HomeFlix database loaded successfull"); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
@ -131,9 +129,9 @@ public class DBController { |
|
|
|
Statement stmt = connection.createStatement(); |
|
|
|
ResultSet rs = stmt.executeQuery("SELECT * FROM films"); |
|
|
|
while (rs.next()) { |
|
|
|
databaseStream.add(new DatabaseDataType(rs.getString("streamUrl"), |
|
|
|
databaseStreams.add(new DatabaseDataType(rs.getString("streamUrl"), |
|
|
|
rs.getString("title"), rs.getString("season"), rs.getString("episode"), |
|
|
|
rs.getInt("favorite"), rs.getBoolean("cached"), rs.getDouble("currentTime"))); |
|
|
|
rs.getInt("favorite"), rs.getDate("cached"), rs.getDouble("currentTime"))); |
|
|
|
} |
|
|
|
stmt.close(); |
|
|
|
rs.close(); |
|
|
@ -157,17 +155,17 @@ public class DBController { |
|
|
|
*/ |
|
|
|
public ObservableList<FilmTabelDataType> getDatabaseFilmsList() { |
|
|
|
ObservableList<FilmTabelDataType> filmsList = FXCollections.observableArrayList(); |
|
|
|
LOGGER.info("loading data to mwc ..."); |
|
|
|
LOGGER.info("loading data from database ..."); |
|
|
|
try { |
|
|
|
//load local Data |
|
|
|
Statement stmt = connection.createStatement(); |
|
|
|
ResultSet rs = stmt.executeQuery("SELECT * FROM films ORDER BY title"); |
|
|
|
|
|
|
|
while (rs.next()) { |
|
|
|
while (rs.next()) { |
|
|
|
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.getBoolean("cached"), imageView)); |
|
|
|
rs.getDate("cached").toLocalDate(), imageView)); |
|
|
|
} |
|
|
|
stmt.close(); |
|
|
|
rs.close(); |
|
|
@ -175,8 +173,6 @@ public class DBController { |
|
|
|
LOGGER.error("Ups! an error occured!", e); |
|
|
|
} |
|
|
|
|
|
|
|
LOGGER.info("loading data to the GUI ..."); |
|
|
|
|
|
|
|
return filmsList; |
|
|
|
} |
|
|
|
|
|
|
@ -197,7 +193,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.getBoolean("cached"), imageView); |
|
|
|
rs.getDate("cached").toLocalDate(), imageView); |
|
|
|
} |
|
|
|
rs.close(); |
|
|
|
ps.close(); |
|
|
@ -212,16 +208,16 @@ public class DBController { |
|
|
|
* refresh database to contain all (new added) entries |
|
|
|
*/ |
|
|
|
public void refreshDataBase() { |
|
|
|
LOGGER.info("refreshing the Database ..."); |
|
|
|
LOGGER.info("<========== starting refreshing database ==========>"); |
|
|
|
|
|
|
|
// clean all ArraLists |
|
|
|
databaseStream.clear(); |
|
|
|
databaseStreams.clear(); |
|
|
|
sourceStreams.clear(); |
|
|
|
|
|
|
|
loadSources(); // reload all sources |
|
|
|
loadDatabase(); // reload all films saved in the DB |
|
|
|
|
|
|
|
LOGGER.info("filme in db: " + databaseStream.size()); |
|
|
|
LOGGER.info("filme in db: " + databaseStreams.size()); |
|
|
|
|
|
|
|
try { |
|
|
|
checkAddEntry(); |
|
|
@ -229,6 +225,8 @@ public class DBController { |
|
|
|
} catch (Exception e) { |
|
|
|
LOGGER.error("Error while refreshing the database", e); |
|
|
|
} |
|
|
|
|
|
|
|
LOGGER.info("<========== finished refreshing database ==========>"); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
@ -239,7 +237,7 @@ public class DBController { |
|
|
|
PreparedStatement ps = connection.prepareStatement("DELETE FROM films WHERE streamUrl = ?"); |
|
|
|
LOGGER.info("checking for entrys to remove to DB ..."); |
|
|
|
|
|
|
|
for (DatabaseDataType dbStreamEntry : databaseStream) { |
|
|
|
for (DatabaseDataType dbStreamEntry : databaseStreams) { |
|
|
|
// if the directory doen't contain the entry form the database, remove it |
|
|
|
|
|
|
|
// if sourceStreams has a item where StreamUrl equals dbStreamEntry.getStreamUrl() return it, else null |
|
|
@ -275,7 +273,7 @@ public class DBController { |
|
|
|
for (DatabaseDataType sourceStreamEntry : sourceStreams) { |
|
|
|
|
|
|
|
// if databaseStream has a item where StreamUrl equals sourceStreamEntry.getStreamUrl() return it, else null |
|
|
|
DatabaseDataType result = databaseStream.stream() |
|
|
|
DatabaseDataType result = databaseStreams.stream() |
|
|
|
.filter(x -> sourceStreamEntry.getStreamUrl().equals(x.getStreamUrl())) |
|
|
|
.findAny() |
|
|
|
.orElse(null); |
|
|
@ -287,11 +285,11 @@ public class DBController { |
|
|
|
ps.setString(3, sourceStreamEntry.getSeason()); |
|
|
|
ps.setString(4, sourceStreamEntry.getEpisode()); |
|
|
|
ps.setInt(5, sourceStreamEntry.getFavorite()); |
|
|
|
ps.setBoolean(6, sourceStreamEntry.getCached()); |
|
|
|
ps.setDate(6, sourceStreamEntry.getCached()); |
|
|
|
ps.setDouble(7, sourceStreamEntry.getCurrentTime()); |
|
|
|
ps.addBatch(); // adds the entry |
|
|
|
LOGGER.info("Added \"" + sourceStreamEntry.getTitle() + "\" to database"); |
|
|
|
databaseStream.add(sourceStreamEntry); |
|
|
|
databaseStreams.add(sourceStreamEntry); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@ -365,8 +363,9 @@ public class DBController { |
|
|
|
*/ |
|
|
|
public void setCached(String streamUrl) { |
|
|
|
try { |
|
|
|
PreparedStatement ps = connection.prepareStatement("UPDATE films SET cached = 1 WHERE streamUrl = ?"); |
|
|
|
ps.setString(1, streamUrl); |
|
|
|
PreparedStatement ps = connection.prepareStatement("UPDATE films SET cached = ? WHERE streamUrl = ?"); |
|
|
|
ps.setDate(1, new Date(System.currentTimeMillis())); |
|
|
|
ps.setString(2, streamUrl); |
|
|
|
ps.executeUpdate(); |
|
|
|
connection.commit(); |
|
|
|
ps.close(); |
|
|
@ -501,7 +500,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.getBoolean("cached"), new ImageView(favorite_border_black))); |
|
|
|
rs.getDate("cached").toLocalDate(), new ImageView(favorite_border_black))); |
|
|
|
} |
|
|
|
stmt.close(); |
|
|
|
rs.close(); |
|
|
@ -519,7 +518,7 @@ public class DBController { |
|
|
|
* @return {@link Double} currentTime in ms |
|
|
|
*/ |
|
|
|
public double getCurrentTime(String streamUrl) { |
|
|
|
LOGGER.info("get currentTime: " + streamUrl); |
|
|
|
LOGGER.info("get currentTime for " + streamUrl); |
|
|
|
double currentTime = 0; |
|
|
|
try { |
|
|
|
PreparedStatement ps = connection.prepareStatement("SELECT * FROM films WHERE streamUrl = ?"); |
|
|
@ -541,7 +540,7 @@ public class DBController { |
|
|
|
* @param currentTime currentTime in ms of the film |
|
|
|
*/ |
|
|
|
public void setCurrentTime(String streamUrl, double currentTime) { |
|
|
|
LOGGER.info("set currentTime: " + streamUrl); |
|
|
|
LOGGER.info("set currentTime = " + currentTime + " for " + streamUrl); |
|
|
|
try { |
|
|
|
PreparedStatement ps = connection.prepareStatement("UPDATE films SET currentTime = ? WHERE streamUrl = ?"); |
|
|
|
ps.setDouble(1, currentTime); |
|
|
@ -586,7 +585,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.getBoolean("cached"), new ImageView()); |
|
|
|
rs.getDate("cached").toLocalDate(), new ImageView()); |
|
|
|
|
|
|
|
rs.close(); |
|
|
|
ps.close(); |
|
|
@ -596,7 +595,7 @@ public class DBController { |
|
|
|
return nextFilm; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
/** TODO rework, we should save the next episode in the root entry |
|
|
|
* get the last watched episode |
|
|
|
* @param title the title of the series |
|
|
|
* @return the last watched episode as {@link FilmTabelDataType} object |
|
|
@ -612,12 +611,9 @@ 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.getBoolean("cached"), new ImageView()); |
|
|
|
rs.getDate("cached").toLocalDate(), new ImageView()); |
|
|
|
// get the first episode where currentTime != 0 |
|
|
|
if (rs.getDouble("currentTime") > lastCurrentTime) { |
|
|
|
lastCurrentTime = rs.getDouble("currentTime"); |
|
|
|
nextFilm = new FilmTabelDataType(rs.getString("streamUrl"), rs.getString("title"), |
|
|
|
rs.getString("season"), rs.getString("episode"), rs.getBoolean("favorite"), |
|
|
|
rs.getBoolean("cached"), new ImageView()); |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
@ -626,7 +622,7 @@ public class DBController { |
|
|
|
} catch (Exception e) { |
|
|
|
LOGGER.error("Ups! error while getting the last watched episode!", e); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return nextFilm; |
|
|
|
} |
|
|
|
|
|
|
|