Browse Source

code cleanup

pull/22/head
Jannik 4 years ago
parent
commit
f14159407f
  1. 260
      src/main/java/kellerkinder/HomeFlix/controller/DBController.java

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

@ -64,11 +64,12 @@ public class DBController {
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<String> filmsdbAll = new ArrayList<String>();
private List<String> filmsdbLocal = new ArrayList<String>();
private List<String> filmsdbDir = new ArrayList<String>();
private List<String> filmsdbStream = new ArrayList<String>();
private List<String> filmsdbStreamURL = new ArrayList<String>();
private List<String> filmsAll = new ArrayList<String>();
private List<String> filmsDir = new ArrayList<String>();
private List<String> filmsDirURL = new ArrayList<String>();
private List<String> filmsStream = new ArrayList<String>();
private List<String> filmsStreamURL = new ArrayList<String>();
private List<String> filmsStreamData = new ArrayList<String>();
@ -84,11 +85,7 @@ public class DBController {
}
public void loadDatabase() {
if (System.getProperty("os.name").equals("Linux")) {
DB_PATH = System.getProperty("user.home") + "/HomeFlix/Homeflix.db";
}else{
DB_PATH = System.getProperty("user.home") + "\\Documents\\HomeFlix" + "\\" + "Homeflix.db";
}
DB_PATH = main.getDirectory() + "/Homeflix.db";
try {
// create a database connection
connection = DriverManager.getConnection("jdbc:sqlite:" + DB_PATH);
@ -101,23 +98,30 @@ public class DBController {
}
public void createDatabase() {
PreparedStatement ps;
PreparedStatement psS;
/**
* if tables don't exist create them
* cache table: streamUrl is primary key
*/
try {
Statement stmt = connection.createStatement();
stmt.executeUpdate("create table if not exists film_local (rating, titel, streamUrl, favIcon, cached)");
stmt.executeUpdate("create table if not exists film_streaming (year, season, episode, rating, resolution, titel, streamUrl, favIcon, cached)");
stmt.executeUpdate("create table if not exists film_streaming (year, season, episode,"
+ " rating, resolution, titel, streamUrl, favIcon, cached)");
stmt.executeUpdate("create table if not exists cache ("
+ "streamUrl, Title, Year, Rated, Released, Runtime, Genre, Director, Writer,"
+ " Actors, Plot, Language, Country, Awards, Metascore, imdbRating, imdbVotes,"
+ " imdbID, Type, Poster, Response)");
stmt.close();
} catch (SQLException e) {
LOGGER.error(e);
}
// get all entries from the tables
try {
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM film_local");
while (rs.next()) {
filmsdbLocal.add(rs.getString(2));
filmsdbDir.add(rs.getString(2));
}
stmt.close();
rs.close();
@ -133,23 +137,22 @@ public class DBController {
LOGGER.error("Ups! an error occured!", e);
}
// getting all files from the selected directory TODO rework
String[] entries = new File(mainWindowController.getPath()).list();
if (mainWindowController.getPath().equals("") || mainWindowController.getPath() == null) {
LOGGER.warn("no path selected!");
} else if (new File(mainWindowController.getPath()).exists()) {
LOGGER.info(entries.length);
for (int i = 0; i != entries.length; i++) {
filmsDir.add(cutOffEnd(entries[i]));
// getting all files from the selected directory
if (new File(mainWindowController.getPath()).exists()) {
for (String entry : new File(mainWindowController.getPath()).list()) {
filmsDir.add(cutOffEnd(entry));
filmsDirURL.add(entry);
// System.out.println(cutOffEnd(entry));
// System.out.println(entry);
}
} else {
LOGGER.error(mainWindowController.getPath() + "dosen't exist!");
}
// getting all entries from the streaming lists
for (int v = 0; v < mainWindowController.getStreamingData().size(); v++) {
for (int i = 0; i < mainWindowController.getStreamingData().size(); i++) {
String fileName = mainWindowController.getStreamingPath() + "/"
+ mainWindowController.getStreamingData().get(v).getStreamUrl();
+ mainWindowController.getStreamingData().get(i).getStreamUrl();
try {
JsonObject object = Json.parse(new FileReader(fileName)).asObject();
JsonArray items = object.get("entries").asArray();
@ -157,6 +160,10 @@ public class DBController {
filmsStream.add(item.asObject().getString("titel", ""));
filmsStreamURL.add(item.asObject().getString("streamUrl", ""));
filmsStreamData.add(fileName);
// System.out.println(item.asObject().getString("titel", ""));
// System.out.println(item.asObject().getString("streamUrl", ""));
// System.out.println(fileName);
}
} catch (IOException e) {
e.printStackTrace();
@ -166,73 +173,18 @@ public class DBController {
// add all entries to filmsAll and filmsdbAl, for later comparing
filmsAll.addAll(filmsDir);
filmsAll.addAll(filmsStream);
filmsdbAll.addAll(filmsdbLocal);
filmsdbAll.addAll(filmsdbDir);
filmsdbAll.addAll(filmsdbStream);
LOGGER.info("films in directory: " + filmsAll.size());
LOGGER.info("filme in db: " + filmsdbAll.size());
/**
* if filmsdbAll.size() == 0 database is empty, we need to fill it else check if
* there is something to remove or to add TODO separate local and streaming for
* better error handling
* if filmsdbAll.size() == 0 the database is empty, we need to fill it with loadFilms()
* else check if there is something to remove or to add
*/
if (filmsdbAll.size() == 0) {
LOGGER.info("Database is empty, creating tables ...");
try {
ps = connection.prepareStatement("insert into film_local values (?, ?, ?, ?, ?)");
psS = connection.prepareStatement("insert into film_streaming values (?, ?, ?, ?, ?, ?, ?, ?, ?)");
if (mainWindowController.getPath().equals("") || mainWindowController.getPath() == null) {
LOGGER.warn("no path selected!");
} else if (new File(mainWindowController.getPath()).exists()) {
for (int j = 0; j != entries.length; j++) // goes through all the files in the directory
{
ps.setInt(1, 0); // rating as integer 1. column
ps.setString(2, cutOffEnd(entries[j])); // name as String without ending 2. column
ps.setString(3, entries[j]); // path as String 3. column
ps.setString(4, "favorite_border_black");
ps.setBoolean(5, false);
ps.addBatch(); // add command to prepared statement
}
}
if (mainWindowController.getStreamingPath().equals("") || mainWindowController.getStreamingPath().equals(null)) {
LOGGER.warn("no path selected!");
} else {
for (int i = 0; i < mainWindowController.getStreamingData().size(); i++) {
String fileNamea = mainWindowController.getStreamingPath() + "/"
+ mainWindowController.getStreamingData().get(i).getStreamUrl();
try {
JsonObject object = Json.parse(new FileReader(fileNamea)).asObject();
JsonArray items = object.get("entries").asArray();
for (JsonValue item : items) {
psS.setInt(1, item.asObject().getInt("year", 0));
psS.setInt(2, item.asObject().getInt("season", 0));
psS.setInt(3, item.asObject().getInt("episode", 0));
psS.setInt(4, 0);
psS.setString(5, item.asObject().getString("resolution", ""));
psS.setString(6, item.asObject().getString("titel", ""));
psS.setString(7, item.asObject().getString("streamUrl", ""));
psS.setString(8, "favorite_border_black");
psS.setBoolean(9, false);
psS.addBatch(); // add command to prepared statement
}
} catch (IOException e) {
LOGGER.error(e);
}
}
}
ps.executeBatch(); // execute statement to write entries into table
psS.executeBatch();
connection.commit();
ps.close();
psS.close();
} catch (SQLException e) {
LOGGER.error(e);
}
loadFilms();
} else {
// check if film added or removed
try {
checkAddEntry();
checkRemoveEntry();
@ -240,35 +192,80 @@ public class DBController {
e.printStackTrace();
}
}
// if cache table dosen't exist create it
}
private void loadFilms() {
PreparedStatement ps;
PreparedStatement psS;
LOGGER.info("Database is empty, filling tables ...");
try {
Statement stmt = connection.createStatement();
// streamUrl is primary key
stmt.executeUpdate("create table if not exists cache ("
+ "streamUrl, Title, Year, Rated, Released, Runtime, Genre, Director, Writer,"
+ " Actors, Plot, Language, Country, Awards, Metascore, imdbRating, imdbVotes,"
+" imdbID, Type, Poster, Response)"
);
stmt.close();
ps = connection.prepareStatement("insert into film_local values (?, ?, ?, ?, ?)");
psS = connection.prepareStatement("insert into film_streaming values (?, ?, ?, ?, ?, ?, ?, ?, ?)");
if (new File(mainWindowController.getPath()).exists()) {
// go through all the files in the directory
for (int j = 0; j != filmsDir.size(); j++)
{
ps.setInt(1, 0); // rating as integer 1. column
ps.setString(2, filmsDir.get(j)); // name as String without ending 2. column
ps.setString(3, filmsDirURL.get(j)); // path as String 3. column
ps.setString(4, "favorite_border_black");
ps.setBoolean(5, false);
ps.addBatch(); // add command to prepared statement
}
}
if (mainWindowController.getStreamingPath().equals("") || mainWindowController.getStreamingPath().equals(null)) {
LOGGER.warn("no path selected!");
} else {
for (int i = 0; i < mainWindowController.getStreamingData().size(); i++) {
String fileNamea = mainWindowController.getStreamingPath() + "/"
+ mainWindowController.getStreamingData().get(i).getStreamUrl();
try {
JsonObject object = Json.parse(new FileReader(fileNamea)).asObject();
JsonArray items = object.get("entries").asArray();
for (JsonValue item : items) {
psS.setInt(1, item.asObject().getInt("year", 0));
psS.setInt(2, item.asObject().getInt("season", 0));
psS.setInt(3, item.asObject().getInt("episode", 0));
psS.setInt(4, 0);
psS.setString(5, item.asObject().getString("resolution", ""));
psS.setString(6, item.asObject().getString("titel", ""));
psS.setString(7, item.asObject().getString("streamUrl", ""));
psS.setString(8, "favorite_border_black");
psS.setBoolean(9, false);
psS.addBatch(); // add command to prepared statement
}
} catch (IOException e) {
LOGGER.error(e);
}
}
}
ps.executeBatch(); // execute statement to write entries into table
psS.executeBatch();
connection.commit();
ps.close();
psS.close();
} catch (SQLException e) {
LOGGER.error(e);
}
}
// loading data from database to mainWindowController
public void loadData(){
public void loadData() {
LOGGER.info("loading data to mwc ...");
try {
try {
//load local Data
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM film_local ORDER BY titel");
while (rs.next()) {
if(rs.getString(4).equals("favorite_black")){
mainWindowController.getLocalFilms().add( new tableData(1, 1, 1, rs.getDouble(1), "1", rs.getString(2), rs.getString(3), new ImageView(favorite_black),rs.getBoolean(5)));
}else{
mainWindowController.getLocalFilms().add( new tableData(1, 1, 1, rs.getDouble(1), "1", rs.getString(2), rs.getString(3), new ImageView(favorite_border_black),rs.getBoolean(5)));
if (rs.getString(4).equals("favorite_black")) {
mainWindowController.getLocalFilms().add(new tableData(1, 1, 1, rs.getDouble(1), "1",
rs.getString(2), rs.getString(3), new ImageView(favorite_black), rs.getBoolean(5)));
} else {
mainWindowController.getLocalFilms().add(new tableData(1, 1, 1, rs.getDouble(1), "1",
rs.getString(2), rs.getString(3), new ImageView(favorite_border_black), rs.getBoolean(5)));
}
}
stmt.close();
@ -277,10 +274,14 @@ public class DBController {
//load streaming Data FIXME check if there are streaming data before loading -> maybe there is an issue now
rs = stmt.executeQuery("SELECT * FROM film_streaming ORDER BY titel;");
while (rs.next()) {
if(rs.getString(8).equals("favorite_black")){
mainWindowController.getStreamingFilms().add(new tableData(rs.getInt(1), rs.getInt(2), rs.getInt(3), rs.getDouble(4), rs.getString(5), rs.getString(6), rs.getString(7), new ImageView(favorite_black),rs.getBoolean(9)));
}else{
mainWindowController.getStreamingFilms().add(new tableData(rs.getInt(1), rs.getInt(2), rs.getInt(3), rs.getDouble(4), rs.getString(5), rs.getString(6), rs.getString(7), new ImageView(favorite_border_black),rs.getBoolean(9)));
if (rs.getString(8).equals("favorite_black")) {
mainWindowController.getStreamingFilms().add(new tableData(rs.getInt(1),
rs.getInt(2), rs.getInt(3), rs.getDouble(4), rs.getString(5), rs.getString(6),
rs.getString(7), new ImageView(favorite_black),rs.getBoolean(9)));
} else {
mainWindowController.getStreamingFilms().add(new tableData(rs.getInt(1),
rs.getInt(2), rs.getInt(3), rs.getDouble(4), rs.getString(5), rs.getString(6),
rs.getString(7), new ImageView(favorite_border_black), rs.getBoolean(9)));
}
}
stmt.close();
@ -297,15 +298,17 @@ public class DBController {
//FIXME it seems that there is an issue at the moment with streaming refreshing wrong entry if there is more than one with the same name
public void refresh(String name, int i) throws SQLException {
LOGGER.info("refresh ...");
Statement stmt;
Statement stmt;
try {
stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM film_local WHERE titel = \""+name+"\";" );
if(rs.getString(4).equals("favorite_black")){
mainWindowController.getLocalFilms().set(i, new tableData(1, 1, 1, rs.getDouble(1), "1", rs.getString(2), rs.getString(3), new ImageView(favorite_black),rs.getBoolean(5)));
}else{
mainWindowController.getLocalFilms().set(i, new tableData(1, 1, 1, rs.getDouble(1), "1", rs.getString(2), rs.getString(3), new ImageView(favorite_border_black),rs.getBoolean(5)));
if (rs.getString(4).equals("favorite_black")) {
mainWindowController.getLocalFilms().set(i, new tableData(1, 1, 1, rs.getDouble(1), "1",
rs.getString(2), rs.getString(3), new ImageView(favorite_black), rs.getBoolean(5)));
} else {
mainWindowController.getLocalFilms().set(i, new tableData(1, 1, 1, rs.getDouble(1), "1",
rs.getString(2), rs.getString(3), new ImageView(favorite_border_black), rs.getBoolean(5)));
}
stmt.close();
rs.close();
@ -314,10 +317,14 @@ public class DBController {
try {
stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM film_streaming WHERE titel = \""+name+"\";" );
if(rs.getString(8).equals("favorite_black")){
mainWindowController.getStreamingFilms().set(i,new tableData(rs.getInt(1), rs.getInt(2), rs.getInt(3), rs.getDouble(4), rs.getString(5), rs.getString(6), rs.getString(7), new ImageView(favorite_black),rs.getBoolean(9)));
}else{
mainWindowController.getStreamingFilms().set(i,new tableData(rs.getInt(1), rs.getInt(2), rs.getInt(3), rs.getDouble(4), rs.getString(5), rs.getString(6), rs.getString(7), new ImageView(favorite_border_black),rs.getBoolean(9)));
if (rs.getString(8).equals("favorite_black")) {
mainWindowController.getStreamingFilms().set(i, new tableData(rs.getInt(1), rs.getInt(2),
rs.getInt(3), rs.getDouble(4),rs.getString(5), rs.getString(6), rs.getString(7),
new ImageView(favorite_black), rs.getBoolean(9)));
} else {
mainWindowController.getStreamingFilms().set(i, new tableData(rs.getInt(1), rs.getInt(2),
rs.getInt(3), rs.getDouble(4), rs.getString(5), rs.getString(6), rs.getString(7),
new ImageView(favorite_border_black), rs.getBoolean(9)));
}
stmt.close();
rs.close();
@ -329,33 +336,32 @@ public class DBController {
/**
* check if there are any entries that have been removed from the film-directory
*
* @throws SQLException
*/
private void checkRemoveEntry() throws SQLException {
LOGGER.info("checking for entrys to remove to DB ...");
Statement stmt = connection.createStatement();
for (int a = 0; a < filmsdbLocal.size(); a++) {
if (!filmsDir.contains(filmsdbLocal.get(a))) {
for (int i = 0; i < filmsdbDir.size(); i++) {
if (!filmsDir.contains(filmsdbDir.get(i))) {
try {
stmt.executeUpdate("delete from film_local where titel = \"" + filmsdbLocal.get(a) + "\"");
stmt.executeUpdate("delete from film_local where titel = \"" + filmsdbDir.get(i) + "\"");
connection.commit();
stmt.close();
LOGGER.info("removed \"" + filmsdbLocal.get(a) + "\" from database");
LOGGER.info("removed \"" + filmsdbDir.get(i) + "\" from database");
} catch (Exception e) {
e.printStackTrace();
}
}
}
for (int b = 0; b < filmsdbStreamURL.size(); b++) {
if (!filmsStreamURL.contains(filmsdbStreamURL.get(b))) {
for (int j = 0; j < filmsdbStreamURL.size(); j++) {
if (!filmsStreamURL.contains(filmsdbStreamURL.get(j))) {
try {
stmt.executeUpdate("delete from film_streaming where titel = \"" + filmsdbStream.get(b) + "\"");
stmt.executeUpdate("delete from film_streaming where titel = \"" + filmsdbStream.get(j) + "\"");
connection.commit();
stmt.close();
LOGGER.info("removed \"" + filmsdbStream.get(b) + "\" from database");
LOGGER.info("removed \"" + filmsdbStream.get(j) + "\" from database");
} catch (Exception e) {
e.printStackTrace();
}
@ -365,24 +371,21 @@ public class DBController {
/**
* check if there are new films in the film-directory
*
* @throws SQLException
* @throws FileNotFoundException
* @throws IOException
* if lastName != filmsStreamData.get(b) then set i = 0, file
* changed
* if lastName != filmsStreamData.get(b) then set i = 0, file changed
*/
private void checkAddEntry() throws SQLException, FileNotFoundException, IOException {
String lastName = "";
LOGGER.info("checking for entrys to add to DB ...");
String[] entries = new File(mainWindowController.getPath()).list();
Statement stmt = connection.createStatement();
PreparedStatement ps = connection
.prepareStatement("insert into film_streaming values (?, ?, ?, ?, ?, ?, ?, ?, ?)");
PreparedStatement ps = connection.prepareStatement("insert into film_streaming values (?, ?, ?, ?, ?, ?, ?, ?, ?)");
int i = 0;
for (int a = 0; a < filmsDir.size(); a++) {
if (!filmsdbLocal.contains(filmsDir.get(a))) {
if (!filmsdbDir.contains(filmsDir.get(a))) {
stmt.executeUpdate("insert into film_local values (0, \"" + cutOffEnd(entries[a]) + "\", \""
+ entries[a] + "\",\"favorite_border_black\",0)");
connection.commit();
@ -479,8 +482,7 @@ public class DBController {
LOGGER.info("streaming:" + rsS.getString("rating") + ", " + rsS.getString("titel") + ", " + rsS.getString("favIcon"));
stmtS.close();
rsS.close();
}
}
} catch (SQLException e) {
LOGGER.error("Ups! an error occured!", e);
}

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