Browse Source

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
pull/24/head
Jannik 4 years ago
parent
commit
9a4eae0be9
  1. 65
      src/main/java/kellerkinder/HomeFlix/controller/DBController.java
  2. 21
      src/main/java/kellerkinder/HomeFlix/controller/OMDbAPIController.java
  3. 2
      src/main/java/kellerkinder/HomeFlix/player/PlayerController.java

65
src/main/java/kellerkinder/HomeFlix/controller/DBController.java

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

21
src/main/java/kellerkinder/HomeFlix/controller/OMDbAPIController.java

@ -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[]

2
src/main/java/kellerkinder/HomeFlix/player/PlayerController.java

@ -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…
Cancel
Save

Du besuchst diese Seite mit einem veralteten IPv4-Internetzugang. Möglicherweise treten in Zukunft Probleme mit der Erreichbarkeit und Performance auf. Bitte frage deinen Internetanbieter oder Netzwerkadministrator nach IPv6-Unterstützung.
You are visiting this site with an outdated IPv4 internet access. You may experience problems with accessibility and performance in the future. Please ask your ISP or network administrator for IPv6 support.
Weitere Infos | More Information
Klicke zum schließen | Click to close