autoplay fixes
* HomeFlix should atoplay the next episode evene the jump between episodes or seasons is greater than 1 * if a movie is not found at the omdb we are searching for it, this shoul work for the most movies
This commit is contained in:
parent
23e46b7913
commit
9a4eae0be9
@ -335,7 +335,7 @@ public class DBController {
|
||||
if (source.getMode().equals("local")) {
|
||||
for (File file : new File(source.getPath()).listFiles()) {
|
||||
String mimeType = URLConnection.guessContentTypeFromName(file.getPath());
|
||||
// if file is file and has mime type "video" TODO needs testing
|
||||
// if file is file and has mime type "video"
|
||||
if (file.isFile() && mimeType != null && mimeType.contains("video")) {
|
||||
// get all files (films)
|
||||
if (!filmsdbStreamURL.contains(file.getPath())) {
|
||||
@ -667,40 +667,59 @@ public class DBController {
|
||||
}
|
||||
}
|
||||
|
||||
/** TODO check if we relay need to separate between favorites and none favorites
|
||||
/**
|
||||
* get the next episode of a
|
||||
* @param title URL of the film
|
||||
* @param nextEp number of the next episode
|
||||
* @return {@link FilmTabelDataType} the next episode as object
|
||||
*/
|
||||
public FilmTabelDataType getNextEpisode(String title, int nextEp, int season) {
|
||||
public FilmTabelDataType getNextEpisode(String title, int episode, int season) {
|
||||
FilmTabelDataType nextFilm = null;
|
||||
ResultSet rs;
|
||||
int nextEpisode = 3000;
|
||||
|
||||
try {
|
||||
Statement stmt = connection.createStatement();
|
||||
ResultSet rs = stmt.executeQuery("SELECT * FROM films WHERE title = \"" + title + "\" AND episode = \""
|
||||
+ nextEp + "\" AND season = \"" + season + "\";");
|
||||
if (rs.next()) {
|
||||
if (rs.getBoolean("favorite") == true) {
|
||||
|
||||
rs = stmt.executeQuery("SELECT * FROM films WHERE title = \"" + title + "\" AND season = \"" + season + "\";");
|
||||
while(rs.next()) {
|
||||
int rsEpisode = Integer.parseInt(rs.getString("episode"));
|
||||
if (rsEpisode > episode && rsEpisode < nextEpisode) {
|
||||
// fitting episode found in current season, if rsEpisode < nextEpisode -> nextEpisode = rsEpisode
|
||||
nextEpisode = rsEpisode;
|
||||
System.out.println("next episode is: " + nextEpisode);
|
||||
// favorite image is black
|
||||
nextFilm = new FilmTabelDataType(rs.getString("streamUrl"), rs.getString("title"),
|
||||
rs.getString("season"), rs.getString("episode"), rs.getBoolean("favorite"),
|
||||
rs.getBoolean("cached"), new ImageView(favorite_black));
|
||||
} else {
|
||||
nextFilm = 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));
|
||||
}
|
||||
} else {
|
||||
rs = stmt.executeQuery("SELECT * FROM films WHERE title = \"" + title
|
||||
+ "\" AND episode = \"1\" AND season = \"" + (season + 1) + "\";");
|
||||
while (rs.next()) {
|
||||
if (rs.getBoolean("favorite") == true) {
|
||||
nextFilm = new FilmTabelDataType(rs.getString("streamUrl"), rs.getString("title"),
|
||||
rs.getString("season"), rs.getString("episode"), rs.getBoolean("favorite"),
|
||||
rs.getBoolean("cached"), new ImageView(favorite_black));
|
||||
} else {
|
||||
nextFilm = 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));
|
||||
}
|
||||
|
||||
if (nextFilm == null) {
|
||||
int nextSeason = 3000;
|
||||
System.out.println("searching next season");
|
||||
rs = stmt.executeQuery("SELECT * FROM films WHERE title = \"" + title + "\";");
|
||||
while(rs.next()) {
|
||||
int rsSeason = Integer.parseInt(rs.getString("season"));
|
||||
if (rsSeason > season && rsSeason < nextSeason) {
|
||||
nextSeason = rsSeason;
|
||||
}
|
||||
}
|
||||
|
||||
if (nextSeason != 3000) {
|
||||
System.out.println("next season is: " + nextSeason);
|
||||
rs = stmt.executeQuery("SELECT * FROM films WHERE title = \"" + title + "\" AND season = \"" + season + "\";");
|
||||
while(rs.next()) {
|
||||
int rsEpisode = Integer.parseInt(rs.getString("episode"));
|
||||
if (rsEpisode > episode && rsEpisode < nextEpisode) {
|
||||
// fitting episode found in current season, if rsEpisode < nextEpisode -> nextEpisode = rsEpisode
|
||||
nextEpisode = rsEpisode;
|
||||
System.out.println("next episode is: " + nextEpisode);
|
||||
// favorite image is black
|
||||
nextFilm = new FilmTabelDataType(rs.getString("streamUrl"), rs.getString("title"),
|
||||
rs.getString("season"), rs.getString("episode"), rs.getBoolean("favorite"),
|
||||
rs.getBoolean("cached"), new ImageView(favorite_black));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -34,6 +34,7 @@ import org.apache.logging.log4j.Logger;
|
||||
|
||||
import com.eclipsesource.json.Json;
|
||||
import com.eclipsesource.json.JsonObject;
|
||||
import com.eclipsesource.json.JsonValue;
|
||||
|
||||
import javafx.application.Platform;
|
||||
import kellerkinder.HomeFlix.application.Main;
|
||||
@ -75,6 +76,7 @@ public class OMDbAPIController implements Runnable {
|
||||
output = ina.readLine();
|
||||
ina.close();
|
||||
LOGGER.info("response from " + URL + " was valid");
|
||||
LOGGER.info("Title was: " + mainWindowController.getCurrentTitle());
|
||||
LOGGER.info(output);
|
||||
} catch (IOException e) {
|
||||
LOGGER.error("error while making api request or reading response");
|
||||
@ -86,6 +88,7 @@ public class OMDbAPIController implements Runnable {
|
||||
|
||||
if (object.getString("Error", "").equals("Movie not found!")) {
|
||||
// if the movie was not found try to search it
|
||||
LOGGER.warn("Movie was not found at first try, searching again!");
|
||||
// TODO split the name intelligent as it may contain the film title
|
||||
// query the api
|
||||
try {
|
||||
@ -94,8 +97,8 @@ public class OMDbAPIController implements Runnable {
|
||||
BufferedReader ina = new BufferedReader(new InputStreamReader(apiUrl.openStream()));
|
||||
output = ina.readLine();
|
||||
ina.close();
|
||||
System.out.println(apiUrl);
|
||||
LOGGER.info("response from search " + URL + " was valid");
|
||||
LOGGER.info("Title was: " + mainWindowController.getCurrentTitle());
|
||||
LOGGER.info(output);
|
||||
} catch (Exception e) {
|
||||
LOGGER.error("error while making api request or reading response");
|
||||
@ -104,13 +107,17 @@ public class OMDbAPIController implements Runnable {
|
||||
}
|
||||
|
||||
JsonObject searchObject = Json.parse(output).asObject();
|
||||
// TODO new query with the actual title
|
||||
if (object.getString("Response", "").equals("True")) {
|
||||
System.out.println(searchObject.getString("Title", ""));
|
||||
if (searchObject.getString("Response", "").equals("True")) {
|
||||
for (JsonValue movie : searchObject.get("Search").asArray()) {
|
||||
// get first entry from the array and set object = movie
|
||||
// TODO probably we have a NullPointerException here!
|
||||
object = (JsonObject) movie;
|
||||
System.out.println(movie.toString());
|
||||
break;
|
||||
|
||||
}
|
||||
System.out.println(object.getString("Title", ""));
|
||||
}
|
||||
|
||||
System.out.println("Movie not found, not setting cache");
|
||||
return;
|
||||
}
|
||||
|
||||
// add the response to the responseString[]
|
||||
|
@ -149,7 +149,7 @@ public class PlayerController {
|
||||
if ((duration - currentTime) < 10000 && episode != 0 && autoplay) {
|
||||
autoplay = false;
|
||||
mainWCon.getDbController().setCurrentTime(film.getStreamUrl(), 0); // reset old video start time
|
||||
FilmTabelDataType nextFilm = mainWCon.getDbController().getNextEpisode(film.getTitle(), (episode + 1), season);
|
||||
FilmTabelDataType nextFilm = mainWCon.getDbController().getNextEpisode(film.getTitle(), episode, season);
|
||||
if (nextFilm != null) {
|
||||
mediaPlayer.stop();
|
||||
init(mainWCon, player, nextFilm);
|
||||
|
Loading…
Reference in New Issue
Block a user