From 5fb7947cc85094650c98917b0d4897bfcb973cc1 Mon Sep 17 00:00:00 2001 From: Seil0 Date: Fri, 6 Jan 2017 00:04:07 +0100 Subject: [PATCH] worked on dbcontroller part 4 nearly finished only a few things to do (addEntry and UI things) --- bin/application/DBController.class | Bin 7938 -> 12254 bytes bin/application/Main.class | Bin 6760 -> 6957 bytes bin/application/MainWindowController$1.class | Bin 2524 -> 2524 bytes bin/application/MainWindowController$2.class | Bin 2589 -> 2626 bytes bin/application/MainWindowController$3.class | Bin 1571 -> 1571 bytes bin/application/MainWindowController$4.class | Bin 1991 -> 1991 bytes bin/application/MainWindowController$5.class | Bin 0 -> 1522 bytes bin/application/MainWindowController$6.class | Bin 0 -> 1525 bytes bin/application/MainWindowController.class | Bin 34824 -> 33923 bytes src/application/DBController.java | 370 ++++++++++++++----- src/application/Main.java | 41 +- src/application/MainWindowController.java | 196 ++++++---- 12 files changed, 416 insertions(+), 191 deletions(-) create mode 100644 bin/application/MainWindowController$5.class create mode 100644 bin/application/MainWindowController$6.class diff --git a/bin/application/DBController.class b/bin/application/DBController.class index 84109e84218b2f8cc6ddf9138d36291765b92fba..5f9d28e4dd6b2253c3403c062220e0b56db8fda0 100644 GIT binary patch literal 12254 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 Rs9PssUf{n;k}moE{{yL_6uAHZ literal 7938 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 s@F~&p~3{GPpm@MR4zA*wJ8S9#* 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 Hah3r9Vw()5 diff --git a/bin/application/MainWindowController$2.class b/bin/application/MainWindowController$2.class index 6456f45a1ef08b48942485db8513f763a59a13e5..817f200010d76b7ff820684f20f9d3d3406eac2f 100644 GIT binary patch delta 754 zcmYL{OH30%7{~uJ`(oP((FCj*6WfYFTd+_O71WAU9#TQ%CBB!sLMv^dT?;<(pfSco z4|5{X7*C!|G&a?0G>u0O8V@FV)w^Ci8sltB!X`8S-|YAO=bQOGAi`a8z1oX@4Sl>@u5BDZgurQ~qv=I6(_>^!2R31l zA&Mgex)F<+*=&7VE59yB)nSZiILbfE4X$IhO`9>TF>}dspci8dQatTq_Hs}>c5tICRRb7K!Nq&dWl=N0itLbYS zzrxAUBF^yNRgJzYsHRuprPt6+Z=jDZV}ahp1Hmiw79P{v_$2fPy~D%0Yj7Gdaed$? z&cg&P(*;2is__*wn1zgpXm?zYf`_8}6-tOqw(6Y5ML~1?iN3*;6yy}KHsO*_RO!iY#1ZwQxzOEPjR@mIT=!#6FXF{sUirrgH!Q delta 776 zcmZXS%TH556vn@qd#AT8BdOAc)PT|kBaia92&jlCltNKNl$ZFfa4jIT&{n{>VB^y0 zVpc?raplfPB!y~J;*y0s7cSNR!Hq#Z7n)$=Bs1S{=FEKOWM)2jpLso-zu$fU(1=9? zoFS+JEV$C}l`*%Hyg{w;VKvLc#RnK%v9U2Loh~=)3s8nii7Hg9A}!>ok*GzTifGj? z6Gsd*FqEo(tyD;|ZBkFPmcUVoV>r&>NLe$8?+eRlOT5(eS)XLZ?Rjijf z+t4o2fv{@T%R3_IHqgc3nTpNF>ZW6fc-=rIHJOM@L=k2v$RvA{3sx!|OIvR2#~F#U z=>4ZyQ+?zWYEv(F^`YOud4>SZ0)B}L_IV?2Wd^Oqj2jUQNDN{~nWDxqB5?_$YFv~# zOP?P3lG8FFaWpf!t^=(8j1@cTp#EgTzY%i?qvojc1tS)8Lu78jQh*jYOC z-+>&4DcJ+Te8Q){__JdB)}qPYx079e4|7y|M?>CXH`y9459Dx7d0mH>5-8+J1oKTrfOsZBB5q6@KU4CCP2WD#j7#24H~ z96CBNgb5;nr|8PlB<+-7;k?NdncN}X1F?l}#(q&L()6^$hiM8GP{<@Fopf(i^#*1_ m8;I0U&myU|TqTur6yZprcw5uRkm~eB?qY$+el)vEYJUNtRiBpt diff --git a/bin/application/MainWindowController$3.class b/bin/application/MainWindowController$3.class index 065ee4a04136ec4329c68046f71fcb30f8ac5c92..e001ad487af2bba85eabe2ea2c4e207baffa5e68 100644 GIT binary patch delta 46 zcmZ3?vzTYYWF}TaMg~=l$qI~$n|Ct#Gck5g=44Ia?PcI*>SK^(>Ss`3nlQPHbu9oA C*$b5b delta 46 zcmZ3?vzTYYWF}T4Mg~=l$qI~$n|Ct#Gcndr=44IaZDinPYGRONYGzPiYMETdx)uNr C+Y4F% diff --git a/bin/application/MainWindowController$4.class b/bin/application/MainWindowController$4.class index c0c99b0c9e79cf8921d4833520bc7fb34d8f45d8..8ddea87366e9216fb1c20fe34058cd05b3889f74 100644 GIT binary patch delta 46 zcmV+}0MY-)562I%asvf20RSZ^lOO>hvzP+|0|AqhoCa|XmH-q2mjEgPm;f;XnUfj^ Etsub*`v3p{ delta 46 zcmX@kf1H0q5i_eXBZI2OWCcdW%`=#pnHk$B&tWU%?P3sN>SoYl>R~Ws>YXgbz7_x- C!wbLw diff --git a/bin/application/MainWindowController$5.class b/bin/application/MainWindowController$5.class new file mode 100644 index 0000000000000000000000000000000000000000..09ad93f76124e7bc10ffe4c2a730bcd08153b28b GIT binary patch literal 1522 zcma)6T~8B16g{&oEG>f+lurc_i?#(R-y%hnPbn6SDXGuf?NAoh-MYIVFa8q~jmF?B z383-8`0S4|-r3gB5(u=}&g`8#=bn4+z5Vm|=Pv*g$f!^l`n6KYG<3}~Y%9608P;pV zD%kH9ZOe0P(-cm0Qbmvr(b3ZBegykidVwbzea}2>nyC6bfXyQ=O5Jmva93ey)0x{{(oG~o% zV)sp6I2&5t6b!8yTi48-<{0w5Vhl=}4AD!YMkgiBEk8Ymo>-aG;i0HYzH}p z@Zgl~*cGdsmZ(XN5sWgZj@WdByT#Cc4uiC$Fb?X~38Luts{7VVW?yBN_jOT{wc(hO z&Cy(l;R zTF055`QI%n=1KmG!i1^E7dhI{&JfPpyN)ha4B5_I=Z)*IgrQ8bM$sbu9r8<8RlPjB zsoI>X=XSRCsJgA^D5d6QOE+zoI%i#YTXunCO^VtmhqvrYv&7SuC7eZ5b6w%0kN5}Z zsRN5dXV_O}QDI1Y2q8sCa|mLVuoT*XaFq8d#)FZ0 zO5sT*g*Y8bAwr44-*|e0g;O2s$wlTXHIObrEcv@-toZ9QtoqhYr16|~Qd@b0KK}sF CqJAd; literal 0 HcmV?d00001 diff --git a/bin/application/MainWindowController$6.class b/bin/application/MainWindowController$6.class new file mode 100644 index 0000000000000000000000000000000000000000..7a2dbacd54f5923c874ac15bc4461658e1869962 GIT binary patch literal 1525 zcma)6T~pIQ6g`_3Ld#+c%BO-@i_(IWFA*uCd=x3RI!+mU4(S4cnA9X7Fa91MoYBF7 z;`reB?2mH1o7QQ|z(70cZtmVa_uO;u?VrCte*u_APKCk{(@G`N&^6DntyEq!tapZ0 zv_CG}mgm@}DV+F>iXcODPdn67re^J=-fZm&-BZ!b&?~LmM=5bAEH9OjziXORq-zY# z-mc-s$0zcW#Ifi_%8iSH1L;T99@fk^T*H4e3e>m5W`=Txt^c6@aHbdw^ zpNd|F!K-rTxQ#muytq}<9k`P4 z2*)TM)d){sv(QLwj_uJXSGH6#aH}KbWb)+g#>I7bRI9 zjv3h>krJiu5jlN-!_jmh3C?mnMVKK}RdiyCp~-J+S&U0d&A>>I?uxGG!%@Gq`BCy( zsoHJb=i26f!>CxK3S1T@Ol`i*(TOgGaKS!sbg^p4j_$o^V#g#5Wl}J9EYja0zieIM zE90AP%&C5K=NpgeJ9~jriexO^v|VbRyzqAIBFDNEwN=h<#h1p3XDv%O%ckbK!o?u* z575&D7LCejr9YqmJt4@T%2%{2-w;!dF{gaTf^vc-rHrg{<})0uu&6R5K7^1aqy+>qPgn}=Ksd@L6;r|J zBBk)WnnHpOr4XUy$ZxzTW2vS?Gr7oor3TU^h!uaA!K%N$#F}sIK^CuQC$*I~=<^Th C^MB+3 literal 0 HcmV?d00001 diff --git a/bin/application/MainWindowController.class b/bin/application/MainWindowController.class index 609d3c27d201827cbb507489791ca739fbb5c1d5..44366992d71d05838b100ed00adde22cff1f8caa 100644 GIT binary patch literal 33923 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 OHw#yy7b2W(75pDA(L^Nx diff --git a/src/application/DBController.java b/src/application/DBController.java index 1268921..eb64331 100644 --- a/src/application/DBController.java +++ b/src/application/DBController.java @@ -1,27 +1,28 @@ /** * DBController for Project HomeFlix - * * connection is in manual commit! + * TODO überprüfen ob neue filme hinzu gekommen sind */ package application; -import java.sql.Connection; //für Datenbank -import java.sql.DriverManager; //für Datenbank -import java.sql.PreparedStatement; //für Datenbank -import java.sql.ResultSet; //für Datenbank -import java.sql.SQLException; //für Datenbank -import java.sql.Statement; //für Datenbank +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.List; import com.eclipsesource.json.Json; import com.eclipsesource.json.JsonArray; import com.eclipsesource.json.JsonObject; import com.eclipsesource.json.JsonValue; -import java.io.File; -import java.io.FileReader; -import java.io.IOException; - public class DBController { public DBController(MainWindowController m) { @@ -30,6 +31,11 @@ public class DBController { private MainWindowController mainWindowController; private String DB_PATH = System.getProperty("user.home") + "\\Documents\\HomeFlix" + "\\" + "Homeflix.db"; // der Pfad der Datenbank-Datei + private List filmsdb = new ArrayList(); + private List filmsAll = new ArrayList(); + private List filmsDir = new ArrayList(); + private List filmsStream = new ArrayList(); + private List counter = new ArrayList(); Connection connection = null; public void main() { @@ -39,8 +45,8 @@ public class DBController { // Statement statement = connection.createStatement(); // statement.setQueryTimeout(30); // set timeout to 30 sec. TODO don't know wath to do with this - connection.setAutoCommit(false); //Autocommit to false -> manual commit is active! - fuelleDatenbank(); + connection.setAutoCommit(false); //Autocommit to false -> manual commit is active +// fuelleDatenbank(); } catch (SQLException e) { // if the error message is "out of memory", it probably means no database file is found System.err.println(e.getMessage()); @@ -56,72 +62,239 @@ public class DBController { // } } - public void fuelleDatenbank() { - - try { - System.out.println("Erstelle Einträge local"); + void createDatabase() { + System.out.println("<=====starting loading sql=====>"); + + PreparedStatement ps; + PreparedStatement psS; + String[] entries = new File(mainWindowController.getPath()).list(); + + try { Statement stmt = connection.createStatement(); - Statement stmtS = connection.createStatement(); - stmt.executeUpdate("drop table if exists film_local"); - stmtS.executeUpdate("drop table if exists film_streaming"); - stmt.executeUpdate("create table film_local (rating, titel, streamUrl)"); // Tabelle "filme" und die Spalten "titel", "pfad", "bewertung" erstellen - stmtS.executeUpdate("create table film_streaming (year, season, episode, rating, resolution, titel, streamUrl)"); // Tabelle "filme" und die Spalten "titel", "pfad", "bewertung" erstellen + stmt.executeUpdate("create table if not exists film_local (rating, titel, streamUrl)"); + stmt.executeUpdate("create table if not exists film_streaming (year, season, episode, rating, resolution, titel, streamUrl)"); + stmt.close(); + } catch (SQLException e1) { + e1.printStackTrace(); + } + + try { + Statement stmt = connection.createStatement(); + ResultSet rs = stmt.executeQuery("SELECT * FROM film_local"); + while (rs.next()) { + filmsdb.add(rs.getString(2)); + } + stmt.close(); + rs.close(); - - PreparedStatement ps = connection.prepareStatement("insert into film_local values (?, ?, ?)"); // SQL Befehl - PreparedStatement psS = connection.prepareStatement("insert into film_streaming values (?, ?, ?, ?, ?, ?, ?)"); // SQL Befehl - - String[] entries = new File(mainWindowController.getPath()).list(); - - for(int i=0;i!=entries.length;i++) // Geht alle Dateien im Verzeichniss durch - { - //System.out.println(file[i].getName()); - ps.setInt(1, 0); // definiert Bewertung als Integer in der dritten Spalte - ps.setString(2, ohneEndung(entries[i])); // definiert Name als String in der ersten Spalte - ps.setString(3,entries[i]); // definiert Pfad als String in der zweiten Spalte - ps.addBatch(); // fügt den Eintrag hinzu + rs = stmt.executeQuery("SELECT * FROM film_streaming;"); + while (rs.next()) { + filmsdb.add(rs.getString(6)); + } + stmt.close(); + rs.close(); + }catch (SQLException ea){ + //TODO } - - - System.out.println("Erstelle Einträge streaming \n"); - if(mainWindowController.getStreamingPath().equals("")||mainWindowController.getStreamingPath().equals(null)){ - System.out.println("Kein Pfad angegeben"); //falls der Pfad null oder "" ist - }else{ - for(int i=0; i< mainWindowController.streamingData.size(); i++){ - String fileName = mainWindowController.getStreamingPath()+"/"+mainWindowController.streamingData.get(i).getStreamUrl(); + + System.out.println("filme in db: "+filmsdb.size()); + + for(int i=0;i!=entries.length;i++){ + filmsDir.add(cutOffEnd(entries[i])); + } + + for(int v=0; v< mainWindowController.streamingData.size(); v++){ + String fileName = mainWindowController.getStreamingPath()+"/"+mainWindowController.streamingData.get(v).getStreamUrl(); try { JsonObject object = Json.parse(new FileReader(fileName)).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.addBatch(); // fügt den Eintrag hinzu + filmsStream.add(item.asObject().getString("titel","")); } } catch (IOException e) { - //Auto-generated catch block e.printStackTrace(); } + } + filmsAll.addAll(filmsDir); + filmsAll.addAll(filmsStream); + System.out.println("films in directory: "+filmsAll.size()); + + + if(filmsdb.size() == 0){ + System.out.println("creating entries ..."); + + try{ + ps = connection.prepareStatement("insert into film_local values (?, ?, ?)"); + psS = connection.prepareStatement("insert into film_streaming values (?, ?, ?, ?, ?, ?, ?)"); + + for(int j=0;j!=entries.length;j++) // Geht alle Dateien im Verzeichniss durch + { + ps.setInt(1, 0); // definiert Bewertung als Integer in der dritten Spalte + ps.setString(2, cutOffEnd(entries[j])); // definiert Name als String in der ersten Spalte + ps.setString(3,entries[j]); // definiert Pfad als String in der zweiten Spalte + ps.addBatch(); // fügt den Eintrag hinzu + } + + if(mainWindowController.getStreamingPath().equals("")||mainWindowController.getStreamingPath().equals(null)){ + System.out.println("Kein Pfad angegeben"); //falls der Pfad null oder "" ist + }else{ + for(int i=0; i< mainWindowController.streamingData.size(); i++){ + String fileNamea = mainWindowController.getStreamingPath()+"/"+mainWindowController.streamingData.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.addBatch(); // fügt den Eintrag hinzu + } + } catch (IOException e) { + e.printStackTrace(); + } + } + } + ps.executeBatch(); // scheibt alle Einträge in die Datenbank + psS.executeBatch(); + connection.commit(); + ps.close(); + psS.close(); + }catch (SQLException ea) { + System.err.println("Konnte nicht ausgeführt werden"); + ea.printStackTrace(); + } + }else if(filmsdb.size() == filmsAll.size()){ + for(int i=0;i maybe there is an issue now + rs = stmt.executeQuery("SELECT * FROM film_streaming;"); + while (rs.next()) { + mainWindowController.streamData.add(new streamUiData(rs.getInt(1), rs.getInt(2), rs.getInt(3), rs.getDouble(4), rs.getString(5), rs.getString(6), rs.getString(7))); } -// connection.setAutoCommit(false); - ps.executeBatch(); // scheibt alle Einträge in die Datenbank - psS.executeBatch(); - connection.commit(); - ps.close(); - psS.close(); - //connection.close(); - } catch (SQLException ea) { - System.err.println("Konnte nicht ausgeführt werden"); - ea.printStackTrace(); + stmt.close(); + rs.close(); + } catch (SQLException e) { + System.err.println("Ups! an error occured!"); + e.printStackTrace(); + } + System.out.println("<=====finished loading sql=====>"); + } + + //refreshs the data in mainWindowController.newDaten and mainWindowController.streamData + void refresh(String name,int i) throws SQLException{ + System.out.println("refresh ..."); + Statement stmt; + try { + stmt = connection.createStatement(); + ResultSet rs = stmt.executeQuery("SELECT * FROM film_local WHERE titel = '"+name+"';" ); + mainWindowController.newDaten.set(i, new streamUiData(1, 1, 1, rs.getDouble(1), "1", rs.getString(2), rs.getString(3))); + stmt.close(); + rs.close(); + } catch (SQLException e) { + try { + stmt = connection.createStatement(); + ResultSet rs = stmt.executeQuery("SELECT * FROM film_streaming WHERE titel = '"+name+"';" ); + mainWindowController.streamData.set(i,new streamUiData(rs.getInt(1), rs.getInt(2), rs.getInt(3), rs.getDouble(4), rs.getString(5), rs.getString(6), rs.getString(7))); + stmt.close(); + rs.close(); + } catch (SQLException e1) { + System.err.println("Ups! an error occured!"); + e1.printStackTrace(); + } } } - public void ausgeben(){ + private void updateDB(){ + System.out.println("updating DB ..."); + for(int i=0; i check config.xml TODO nur Windows getestet siehe dir und file + //dir exists -> check config.xml if(dir.exists() == true){ if (file.exists() != true) { mainWindowController.setPath(firstStart()); @@ -105,26 +107,31 @@ public class Main extends Application { Runtime.getRuntime().exec("java -jar ProjectHomeFlix.jar"); //start again (preventing Bugs) System.exit(0); //finishes itself } -// mainWindowController.loadStreamingSettings(); - mainWindowController.applyColor(); //setzt die Theme Farbe - mainWindowController.cbLocal.getSelectionModel().select(mainWindowController.getLocal()); //setzt local + + mainWindowController.loadStreamingSettings(); + mainWindowController.applyColor(); //set theme color + mainWindowController.cbLocal.getSelectionModel().select(mainWindowController.getLocal()); //set local mainWindowController.mainColor.setValue(Color.valueOf(mainWindowController.getColor())); - mainWindowController.loadData(); //läd die Daten im Controller + + mainWindowController.dbController.main(); //initialize database controller + mainWindowController.dbController.createDatabase(); //creating the database + mainWindowController.dbController.loadData(); //loading data from database to mainWindowController + +// mainWindowController.loadData(); //läd die Daten im Controller mainWindowController.addDataUI(); - Scene scene = new Scene(pane); //neue Scen um inhalt der stage anzuzeigen + Scene scene = new Scene(pane); //create new scene, append pane to scene - primaryStage.setScene(scene); - primaryStage.show(); //zeige scene + primaryStage.setScene(scene); //append scene to stage + primaryStage.show(); //show stage } catch (IOException e) { - // Auto-generated catch block e.printStackTrace(); } } //methode für den erstmaligen Start private String firstStart(){ - Alert alert = new Alert(AlertType.CONFIRMATION); //neuer alert mit filechooser + Alert alert = new Alert(AlertType.CONFIRMATION); //new alert with filechooser alert.setTitle("Project HomeFlix"); alert.setHeaderText("Es ist kein Stammverzeichniss für Filme angegeben!"); //TODO translate alert.setContentText("Stammverzeichniss angeben?"); diff --git a/src/application/MainWindowController.java b/src/application/MainWindowController.java index 35f68e5..1e4eaad 100644 --- a/src/application/MainWindowController.java +++ b/src/application/MainWindowController.java @@ -26,7 +26,6 @@ import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; -import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; @@ -36,16 +35,13 @@ import java.io.StringWriter; import java.math.BigInteger; import java.net.URI; import java.net.URISyntaxException; +import java.sql.SQLException; import java.util.Locale; import java.util.Properties; import java.util.ResourceBundle; import org.apache.commons.lang3.SystemUtils; -import com.eclipsesource.json.Json; -import com.eclipsesource.json.JsonArray; -import com.eclipsesource.json.JsonObject; -import com.eclipsesource.json.JsonValue; import com.jfoenix.controls.JFXButton; import com.jfoenix.controls.JFXColorPicker; import com.jfoenix.controls.JFXDialog; @@ -63,11 +59,15 @@ import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.collections.FXCollections; import javafx.collections.ObservableList; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; import javafx.fxml.FXML; import javafx.scene.control.Alert; import javafx.scene.control.Alert.AlertType; import javafx.scene.control.ChoiceBox; +import javafx.scene.control.ContextMenu; import javafx.scene.control.Label; +import javafx.scene.control.MenuItem; import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; import javafx.scene.control.TextArea; @@ -211,7 +211,9 @@ public class MainWindowController { private String Name; private String datPath; private String autoUpdate; - private String mode; + private String mode; + @SuppressWarnings("unused") + private String ratingSortType; String title; String year; String rating; @@ -237,10 +239,10 @@ public class MainWindowController { private File selectedStreamingFolder; ResourceBundle bundle; - private ObservableList newDaten = FXCollections.observableArrayList(); private ObservableList filterData = FXCollections.observableArrayList(); - private ObservableList streamData = FXCollections.observableArrayList(); private ObservableList locals = FXCollections.observableArrayList("english", "deutsch"); + ObservableList newDaten = FXCollections.observableArrayList(); + ObservableList streamData = FXCollections.observableArrayList(); ObservableList streamingData = FXCollections.observableArrayList(); private ImageView menu_icon_black = new ImageView(new Image("recources/icons/menu_icon_black.png")); private ImageView menu_icon_white = new ImageView(new Image("recources/icons/menu_icon_white.png")); @@ -251,11 +253,14 @@ public class MainWindowController { private ImageView play_arrow_white = new ImageView(new Image("recources/icons/ic_play_arrow_white_18dp_1x.png")); private ImageView play_arrow_black = new ImageView(new Image("recources/icons/ic_play_arrow_black_18dp_1x.png")); private DirectoryChooser directoryChooser = new DirectoryChooser(); + private ContextMenu menu = new ContextMenu(); + private MenuItem like = new MenuItem("like"); + private MenuItem dislike = new MenuItem("dislike"); //TODO one option (like or dislike) Properties props = new Properties(); private updater Updater; private apiQuery ApiQuery; - private DBController dbController; + DBController dbController; //wenn menubtn clicked /** @@ -427,12 +432,13 @@ public class MainWindowController { @FXML private void debugBtnclicked(){ -// dbController.ausgeben(); - dbController.getFavStatus("Zootopia"); - dbController.favorisieren("Zootopia"); - dbController.getFavStatus("Zootopia"); - dbController.defavorisieren("Zootopia"); - dbController.getFavStatus("Zootopia"); + System.out.println(columnRating.getSortType()); +// System.out.println(newDaten.get(selected).getTitel()+","+newDaten.get(selected).getRating()); +// dbController.getFavStatus("Zootopia"); +// dbController.like("Zootopia"); +// dbController.getFavStatus("House of Cards"); +// dbController.dislike("Zootopia"); +// dbController.getFavStatus("Zootopia"); //for testing } @@ -510,19 +516,21 @@ public class MainWindowController { //"Main" Methode die beim start von der Klasse Main aufgerufen wird, initialiesirung der einzellnen UI-Objekte public void setMain(Main main) { + Updater = new updater(this); + ApiQuery = new apiQuery(this); + dbController = new DBController(this); loadSettings(); initTabel(); initActions(); - Updater = new updater(this); - ApiQuery = new apiQuery(this); - dbController = new DBController(this); - System.out.println("Mode: "+mode); //TODO debugging - - loadStreamingSettings(); - dbController.main(); + +// if(ratingSortType == "DESCENDING"){ //TODO not fully implemented yet +// columnRating.setSortType(TreeTableColumn.SortType.DESCENDING); +// }else{ +// columnRating.setSortType(TreeTableColumn.SortType.ASCENDING); +// } debugBtn.setDisable(false); //debugging btn for tests debugBtn.setVisible(true); @@ -532,6 +540,7 @@ public class MainWindowController { sliderFontSize.setValue(getSize()); cbLocal.setItems(locals); + menu.getItems().addAll(like,dislike); updateBtn.setFont(Font.font("System", 12)); @@ -544,7 +553,7 @@ public class MainWindowController { ta1.setWrapText(true); ta1.setEditable(false); - ta1.setFont(Font.font("System", getSize())); + ta1.setFont(Font.font("System", getSize())); } //initialisierung der Tabellen für filme(beide Modi) und Streaming-Settings @@ -603,6 +612,9 @@ public class MainWindowController { } }); + //context menu for treetableview + treeTableViewfilm.setContextMenu(menu); + //Streaming-Settings Tabelle dataNameColumn.setCellValueFactory(cellData -> cellData.getValue().titelProperty()); dataNameEndColumn.setCellValueFactory(cellData -> cellData.getValue().streamUrlProperty()); @@ -611,13 +623,13 @@ public class MainWindowController { tableViewStreamingdata.setItems(streamingData); } - //initialisierung der Button Actions + //Initializing the actions + @SuppressWarnings("unchecked") private void initActions(){ //TODO unterscheiden zwischen streaming und local tfsearch.textProperty().addListener(new ChangeListener() { - @SuppressWarnings("unchecked") - @Override + @Override public void changed(ObservableValue observable,String oldValue, String newValue) { int counter = newDaten.size(); filterData.removeAll(filterData); @@ -652,56 +664,90 @@ public class MainWindowController { saveSettings(); } }); + + like.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + dbController.like(Name); + dbController.getFavStatus(Name); + try { + dbController.refresh(Name, selected); + } catch (SQLException e) { + // TODO Auto-generated catch block error msg + e.printStackTrace(); + } + refreshTable(); + } + }); + + dislike.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + dbController.dislike(Name); + dbController.getFavStatus(Name); + try { + dbController.refresh(Name, selected); + } catch (SQLException e) { + // TODO Auto-generated catch block error msg + e.printStackTrace(); + } + refreshTable(); + } + }); + } + + private void refreshTable(){ + root.getChildren().set(selected, new TreeItem(newDaten.get(selected))); } //lädt die Daten im angegeben Ordner in newDaten - void loadData(){ - //load local Data - if(getPath().equals("")||getPath().equals(null)){ - System.out.println("Kein Pfad angegeben"); //falls der Pfad null oder "" ist - }else{ - String[] entries = new File(getPath()).list(); - for(int i = 0; i < entries.length; i++){ - String titel = ohneEndung(entries[i]); - String data = entries[i]; - newDaten.add(new streamUiData(1, 1, 1, 5.0, "1", titel, data)); - } - } - - //load streaming Data TODO prüfen ob streaming daten vorhanden -> momentan evtl. fehler - String titel = null; - String resolution = null; - String streamUrl = null; - int season; - int episode; - int year; - double rating = 5.0; - if(getStreamingPath().equals("")||getStreamingPath().equals(null)){ - System.out.println("Kein Pfad angegeben"); //falls der Pfad null oder "" ist - }else{ - for(int i=0; i< streamingData.size(); i++){ - String fileName = streamingPath+"/"+streamingData.get(i).getStreamUrl(); - try { - JsonObject object = Json.parse(new FileReader(fileName)).asObject(); - JsonArray items = object.get("entries").asArray(); - - for (JsonValue item : items) { - titel = item.asObject().getString("titel",""); - season = item.asObject().getInt("season", 0); - episode = item.asObject().getInt("episode", 0); - year = item.asObject().getInt("year", 0); - resolution = item.asObject().getString("resolution", ""); - streamUrl = item.asObject().getString("streamUrl", ""); - streamData.add(new streamUiData(year, season, episode, rating, resolution, titel, streamUrl)); - } - - } catch (IOException e) { - //Auto-generated catch block - e.printStackTrace(); - } - } - } - } +// void loadData(){ +// //load local Data +// if(getPath().equals("")||getPath().equals(null)){ +// System.out.println("Kein Pfad angegeben"); //falls der Pfad null oder "" ist +// }else{ +// String[] entries = new File(getPath()).list(); +// for(int i = 0; i < entries.length; i++){ +// String titel = ohneEndung(entries[i]); +// String data = entries[i]; +// newDaten.add(new streamUiData(1, 1, 1, 5.0, "1", titel, data)); +// } +// } +// +// //load streaming Data TODO prüfen ob streaming daten vorhanden -> momentan evtl. fehler +// String titel = null; +// String resolution = null; +// String streamUrl = null; +// int season; +// int episode; +// int year; +// double rating = 5.0; +// if(getStreamingPath().equals("")||getStreamingPath().equals(null)){ +// System.out.println("Kein Pfad angegeben"); //falls der Pfad null oder "" ist +// }else{ +// for(int i=0; i< streamingData.size(); i++){ +// String fileName = streamingPath+"/"+streamingData.get(i).getStreamUrl(); +// try { +// JsonObject object = Json.parse(new FileReader(fileName)).asObject(); +// JsonArray items = object.get("entries").asArray(); +// +// for (JsonValue item : items) { +// titel = item.asObject().getString("titel",""); +// season = item.asObject().getInt("season", 0); +// episode = item.asObject().getInt("episode", 0); +// year = item.asObject().getInt("year", 0); +// resolution = item.asObject().getString("resolution", ""); +// streamUrl = item.asObject().getString("streamUrl", ""); +// streamData.add(new streamUiData(year, season, episode, rating, resolution, titel, streamUrl)); +// } +// +// } catch (IOException e) { +// //Auto-generated catch block +// e.printStackTrace(); +// } +// } +// } +// } void addDataUI(){ if(mode.equals("local")){ @@ -731,7 +777,7 @@ public class MainWindowController { } } - private void loadStreamingSettings(){ + void loadStreamingSettings(){ if(getStreamingPath().equals("")||getStreamingPath().equals(null)){ System.out.println("Kein Pfad angegeben"); //falls der Pfad null oder "" ist }else{ @@ -946,6 +992,7 @@ public class MainWindowController { props.setProperty("local", Integer.toString(getLocal())); props.setProperty("streamingPath", getStreamingPath()); props.setProperty("mode", getMode()); + props.setProperty("ratingSortType", columnRating.getSortType().toString()); OutputStream outputStream = new FileOutputStream(file); //new outputstream props.storeToXML(outputStream, "Project HomeFlix settings"); //writes new .xml outputStream.close(); @@ -967,6 +1014,7 @@ public class MainWindowController { autoUpdate = props.getProperty("autoUpdate"); local = Integer.parseInt(props.getProperty("local")); mode = props.getProperty("mode"); + ratingSortType = props.getProperty("ratingSortType"); inputStream.close(); } catch (IOException e) { // showErrorMsg(errorLoad, e); //TODO das soll beim ersten start nicht erscheinen