From 03debb418081963f8b50b969f658f81a44790d27 Mon Sep 17 00:00:00 2001 From: Seil0 Date: Thu, 9 Feb 2017 20:39:43 +0100 Subject: [PATCH] code cleanup and general improvements --- bin/application/DBController.class | Bin 14324 -> 14611 bytes bin/application/Main.class | Bin 6957 -> 6769 bytes bin/application/MainWindowController$1.class | Bin 2524 -> 2524 bytes bin/application/MainWindowController$2.class | Bin 2843 -> 2791 bytes bin/application/MainWindowController$3.class | Bin 1571 -> 2011 bytes bin/application/MainWindowController$4.class | Bin 1991 -> 2024 bytes bin/application/MainWindowController$5.class | Bin 2509 -> 2508 bytes bin/application/MainWindowController$6.class | Bin 2469 -> 2468 bytes bin/application/MainWindowController.class | Bin 34337 -> 34998 bytes bin/application/streamUiData.class | Bin 4238 -> 4238 bytes bin/recources/HomeFlix-Local_de_DE.properties | 2 + bin/recources/HomeFlix-Local_en_US.properties | 2 + src/application/DBController.java | 12 +- src/application/Main.java | 148 ++++--------- src/application/MainWindowController.java | 204 +++++++++--------- src/application/apiQuery.java | 2 +- src/application/streamUiData.java | 2 +- 17 files changed, 159 insertions(+), 213 deletions(-) diff --git a/bin/application/DBController.class b/bin/application/DBController.class index dbf1e3d71b3fe6484128b2b2296f96b9f67fd7dd..6f74b57164139f3d4fb7643b302d12bc74e36db0 100644 GIT binary patch literal 14611 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 diff --git a/bin/application/Main.class b/bin/application/Main.class index 60e6aa7fa318e58446f2a713ec43359765e12bd4..5d0638e5e36eae6e2be22aafb7c0481e7c596c59 100644 GIT binary patch literal 6769 zcmbtYdwkT@mH(c+ev{!sV0b7NH55e>AcH`$B^C(;B$yCNAQ-^nFOy%A36q&P^BYJ| z+4`(jtdCl$kNT`qA8i%Mgvwg1?QVDNKHNulx7*!zA6?yN-PZ1QSFQGY?r$cOgz(uv zmVB7|yZ4-X@44skJ?GxnKY00D09MLN4oU>m-GPBbJm&iGR5IG)#*+@p1n2d+``zxr z=vZPykx^g<((!&bJ=EsAJ)U4zbACcb`%ybuFDM&u{a!)DQlkks*+Wt~p6nrQdd5$C zZa+I)$+R<`B;UB9=6EtYC@7Dm5~;Kx>}LJcj)5-M=YD1VsV+9Q~_`1L@R2MlffLY+E_xrTw^<(X}s) zC*%GaLFuBJcAjfJj~PZOstxAhTn8T&oTZu`tIKuSc%sWohj4+QGMn+zb-k&6&RU2? z4lbgi$4nT?_+Gz34Qd5bdOSbB`H*1YqSK93bNWyiOHk)v>G)->O%0-0CUEwe#&OR^Z*H60Sd@R@Vtq{zfOp5jpJ|>vCr!f`F_IpV`vu6_zxG@nQ3}ZenG59z> zLDkW8Ub0KDbh0&0J4s$^^}0m8!KL^l?dPWg_oRa?nncn{2re_IL@0y?Dmz+`Lka5* z!b;dcQ9N(O$Cj_q(aQ~{=x7tYbD0iYVPJG%ns&ArOx4a-!BlHG4UsG(D1>dCus4M5 z3^hxMrLy$XA)VE3Fb$!KwTl?W{HH^^45~2Q!5*?(bLX8hgilj*(NWEfN*u;+EZ3Q? z!EDUYub9DEn4|ir)}LV0EAKNnJJ^H1Hy3jp zq^Mylrwz|y2!xSDwN6PJoP&=Dsu(%mmTZ5gm)`DnYFtN}HRjvhbX@!S!7{%$&bW%4 z7Qc+Ca$-{2XW#^WK~x(HQZ?0#W2TO8a>N-_4XqW;eH2Sq*n7sAEP#dBlr@1E#vtu@#H2i-qTABmn~|nX|Gs&xO#MfhYh~0 zj8g)}o$)TeR~LTN;4wTNEI>uX4+gd^TePc&(f%aSg+8HxQC$czo%NK#(~1%yuC_hy zCkS%);j0GE;8_k5&YI|Vbb|}?!Ao;7c_g?DlUpX*+DUNSuRArzGk(2;=LKgM&Stg2 zl*a7Uq`x72otBBFJq8{#N5)1@H!)|gZnAgP%E47D>jsiNYU>vaUc@m58bv6WwIM?& zVSW?ToY}mL(x&7<)(==|<>zo*tvpP@^0Owe)U;2*2)^mygkXMN_A{T+;ANa-GI6`; z663J75XigKcV030mio?A%3n-}4qg>h|6d7Fqvth)nV1#EDSX%9cho{tX`zPEe65u4 z8T=l8pXot8fr-`1GjZ{Hwf^_Xl*-g4-F_P34;jBUd1~VMV}m#JJQdzGSvQeU4Es}q zKf|Bv&>(F}+cRN2o6nYLs5;0ODr340V(2EH!I&&o0+K{U-(lS)cLMb;=A Ix6sl=-;he4 zZ6D7jQ;ZmeX`^sgJliRmW~539vn`=eVvgmQVI-m)649SzevtQ~?y&NXtL9agU%vYt^%?rJ0Rg>{?h>MX{VmZxK# zzj0lWRv(rNWT7J$5(Lh~W8@;;s!WrVvey`?)q!a-Vvg@My1v`#W;`V=F|t%iAytSH z^axQS%XF}k$e?38njBd^2I(ytw&`zJE|!(VBw-1b$0W_5mSL-#W;w>7B@W9aMm{dA z!xWtD%yAjFxL}^W-pHl)2$|m0fv~KRwT@gy2(?bBpx3%#Fy;*?avNz-&MICxk{Y+M zecRJ+jHN(@9!cx=vu$~IdUj^^=M^ML*6ISs8PcAu6I4j1&hf1FEF=p_vn?q)UOdvK zTB%yx0b7o!)tim9$d&@wFmq}JB1EPoven3^gymhR*Uj{5fp0;pDJ0v8R$boS#tk81 z?O*OC_wHy5$(20bXcnp~MA%a6c$KnC_BgV;fIPOEvJ}tARl?e@WJjBpMOLe0sPwU` zrPC3Yix+8y+!b7tjKqX#qmpP43<%av62Pagod*oN-S{QznJt8c*(jW`RTX)BCbYIY4_9lguVhom3S*WaOaU zyi}#ZMMJl_&dBu&)0#5_-tFF?9}*UwGm5JyJ}}sH!VN}l)Cto#AwR4$lytL^TjW-) zw-{9o$*!HQg6Et9hFg=g+Mse1JmYQhIY(~K$9;4h)yN%M5|mQZO1V?+a)iC}C)NA9 ztna6ify(ced+2nnSFk#nT+v15dPlyHPa>*X`*6@0r>py^^w9d=REpJFSnfqNf8>56 zM}&oBSP#}1cM~aIO)d=FaddWYSufl%8Kw4K&T2p&H1d$<{wf})p)-?8WPMMQz53&q z4IEy=~iBbzI1d8i?;>m9;5R$+-AAhkBF`ClUY=28 zb+fz@5I)^>Plm8O$qX8!&DO@MWjeK1bxi#Gi7BQjne@{3#^Z5z%nwY zH7fX3qT07D@71>DHQKhkINO%@W!v(qY+GJ_ZOa?4ZHXqfWesXu-e+yg+pKMQ_p~i< zo@}8POa7Kq0=}v6_dMFYo3g0=L$xC~zxE{NcSIJPz=bEUcmx+mR_3rOht8L7{S0Wu6dCfDnW+7tNGXf)S?V^ zIG^S0YAnNAT#Suaj%KVt3M;W6m*7i$E_fNAz>moBKI+Bc9G^2ypjTwcr2%#TgMrSu zLJ9wXaP8t@4AtgvZE@FW)=MsToJf};1 zEr)N6;H7UOSAw0jT+)3Bk$z!UnlTCkq>f$ouwzF>?m$0fxeKJgI_9#&%r)B*k_j*C&!xqw;VGiG*J-U zCMV&bnHn_HgJx#X%n6#gK{HRA<8ppZ7L0x^8vR-vFx8!ui#wK#$cioO4=v5fDs6MJ z`Y1v)xqR|Px&`Ee5|K4@D0Sx_(^Wy&tHR}c?%G5^YQkb{rXyd$N5E$6#1?d-75&&s zM{C24*p9>4!H0%+JWlHKxRMv}4!nk4yo~OqyYIo9xC%eVr|~ZKN-3_U>&GOFE|~>S z=Am0^_>Q&`y>b~J$2Ox+uEaixAt6ch%Mg-s6W_xQV?gePFGrA-N3dU>!U1_6gYpuF z0$SnR=;4#jkP1!665Cy@&Ly_b~7w2EY?B z%p6%$#t`Hsnmq;0*Qry5@OR2yk}E8Fof+#onsd_n9GUsAo&QV9U%2^0w)4tg8~!ER zn#D7vje+wZ797PgcIe*hR2;>E+L^NRm~@h_YT?KXO`sTrY&@v&mNP*Ph-JJxwm6P?ps|pw=D3ZFRm`H zom-xh2ZrV0qr|D1@(91U;KMIa+ literal 6957 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 diff --git a/bin/application/MainWindowController$1.class b/bin/application/MainWindowController$1.class index 4eeefa5530026e138ab9b9f2dc4340d927043501..f13e05a5c6f11b7ae1530c1709ac6cfbaadcbd8c 100644 GIT binary patch delta 51 zcmca3d`Eag5eK8v|Odbp>Or8uTOkNEBOx_GxOg;={Ouh{5OnwZLnEWTF Hah3r9SGx=? diff --git a/bin/application/MainWindowController$2.class b/bin/application/MainWindowController$2.class index 11031809078eb894594c5dedc38ce283130b5623..7823df7862f8844927af0886f561da62bcb76325 100644 GIT binary patch delta 564 zcmXYuTWb?h5XXOKlHJ5)E$Jl+eJMsIkXo^&D(XWmjZGCSUMW&gqlv~_+S+Qp$4h*$znfbn?BxBX`Y`!>CG_3buN3si((jVzcFw6;$lWZ`=E5+%`&_t=6pp#P`rz!bA zoNXOv4DOb2*+9kP9OwNVZZ>++kCmUueqP8Z zOKQK$0e;FsmgSHUIYOHj7$Ih*(@uwama0tXn3g7)LPEN%6wy|{m}W*>=Q+w1C5LAW ztk6|W_oy{ftITSVYkHN!{X@Z+WtHXSezQF_NSf;!O=`4Pi$&G8=DHi)*wkRSM|Z$2 mJEDXmx>k*Dt5((M=XXM?u{N}KxfkAca-TU?gZ)c3Mc01?Y-eEr delta 616 zcmXYuTTfF#5P-kkUTIGVmlhLW)Ox9+1WP~?c`%Ixj2e9~#vqA$N=r+rEwr_GuNS<% z$isOsM&soN_&^}lYShL@WBd`m_#3=Cdtj5@`DSKkc4p^$^hr<0=f7`10E0XTpcOG^ zi;67|gtZkcW)?>6YNn{z>b&yAS4w)&b0o}W&RU$qR`~67I$0TjO737Ooe8m#X^Sj5=aX+=Brj?9y305U7UwBCmOt*D zvzT8Q_75p<-K{DR^Mz2{bRGpBs(a3kU{0l+rC_}63qky#Le9tFv-(i)D%L7}4HDk> z3`}_5$zg17*dFyY8PT*j@S4dJP0naeE&5c{x9)GUN%8VuYfU}e;8=synv!`zx1p|? z2D1hll$Pb&ymZRBpLWn0+I4-Jn9h>aGmPsz^Lmyg;m5kfb3Mmbk>7NgAG)HnuBtX& zqe~JTB49e8n}}$J%2cFVLsc%IU8)IryS{-p z^8zNu2OuGn=!NN(7rue<6-;~sb_nw zd7fsGED7A(Y8#F%060f+2>UCR5Y@ zANDG87^Y=}#Zc?WXbq-DtA)}IQ4zriL;MfHqFb$4xQg4DU}$yrN)DOUtTMxyjCKOzw?z_nRoufQwR5=J98gCl zIKva&vc)LPby~#?;tbK_;w7yG4;UD=PU4XYO<1XpzRwrA>(Y)K@4K|z6*e2AZ~NQW zn+&~|m&66y45hmiET1@*`Muqemn=N~-;lA2u$OzLFobNw^dW23N z7l!KS_0jhM0}|@U`?xwLchckIMm(|=M0v}{*qAKVi1#}p@i8Sr+kGDo56Llv1pOxw z0i+eAq*aVcYnYJMF(YkYPTE8pP@}saw8v?*Q#pZP7LN&4WChGY3bJ|1LP%j43wT1v zPf1mqRkL^o7N0~17D?l!<&3uP77eCUEHY3kEFJLjV8( delta 469 zcmX9)$xZ@65PdZapu;4BOANRT1IVz6gS+5*BQf6OJ`&u5mK_>Y#aKObQr)ksUcGwVzaw2W`2F|s31Aufens|$fP5asVLc4a@cSg7Nqc7Qcf&`f#7fruG%{d4=m=jRMI}#330y)U`nB+l- z_fgRx-60^|BP=~YlRBIO(gPukVVrL)i98m0s6ZwPJV>A=Mjrl4K;>F%KwAL?_b`D~ zP6fDRvXpQYN@x05%k~k;aX8ozE+p55&s8ROvQU;$bZaF{y5|Tk>@gD07hZV% E1I)}te*gdg diff --git a/bin/application/MainWindowController$4.class b/bin/application/MainWindowController$4.class index f600c9b2b5e75af38acf106ec01c0815d2d02f24..190ef97ed1935e02df603233f4eb1e06369c8831 100644 GIT binary patch delta 380 zcmYLEyG}wu5IwW^a#1AVA;bh5Au%F8h+tu2qlHfpQ55m*HC_>;6o9n;fz39?SlU|9 z5MyEJOpG7mH&_^FR}y!#yJybXnK|?B`||leeqP@IOyk52L5RsH#agL3!<8Zo$K?=3 z<-PGT(}P6&Vt$)j zs_rwz2HhwU{Quu_H`k|5%>zP7KDqAbNT#g|vgM;S()$3DH#?J`*5qw)p^c>$hXw+C z2bCnw5E2d&;v8vFW)4XFrJx@nj?`EgWVyUTYsf)pw9d#tp0T&9Wv~JA&m)XYX8Kr} z>b4Ig#yTkE$2-`b;M2yAav`(}OJ|ertSXz>)!H5g^t+D(%|>vDV@7IF<%QQT%2Ymi delta 347 zcmaFCf1F?7)W2Q(7#J8#7-HEOm>3z9CMz;3Z8UOVW;JGHP}P{Mz^FKR2J;R{E(R$E zHy#Fe1_4F}p5nx^)Zo;TlFYpH;>jH>zgPl68Yi+SNwYHqGcpKdC6*=X=OpH(>-&}F zCZ!f}F)%WOPCm@q#~3|1h%JM$Y4UD1bU^MwPn_m4k2G@;14l{!wkQ4$* zFtsv>FtssgF|{)oGIapO7#Or58W@BbM1VY?Rt66SPoUu-mKTFJ0~46#17tBX_yXBH zP&p3IRcOXJOYsbW&)D{cLJ3Fj{=qelLD6jo&uNvqym`$ssfq-umYO^v;v&~y8@n* GA_=NgT z0)zlL0)+rP0)_x)0*C;20*U~S0*e5X0*nBj0*wHq0*(Nx0*?T&0+0Z-0+Il`0+W;b F2&&ps9)17- delta 100 zcmV-q0Gt1$6QvWdpaB6iv!MY~0tpCiWp_kjbY*U{`~wC80X4G&2F3vap_9r7`!%Eh z4+5nCIRd5tJOZZxW&)`IcLJ*bj{>X!lLD;(o&v4_qyn!1ssgY8umZ6Fv;wmLy8^V6 G`Ut8-uOQz5 diff --git a/bin/application/MainWindowController.class b/bin/application/MainWindowController.class index 1d86505770ee9a095624afed68dfc794048929cf..6513af971defcea72bc876d7e6ad1b83325b9bcc 100644 GIT binary patch literal 34998 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 Y)+3xWwO?Sej0P%jv$YA~K~};41GDq*JOBUy diff --git a/bin/application/streamUiData.class b/bin/application/streamUiData.class index 034c7a23777cb748bfda8dbf68a8684acab5881f..0f5156dfaa2619922df408392ae8039627636cec 100644 GIT binary patch delta 14 VcmeBE>{Hy(z`-c6xsijH0{|md1Ni^| delta 14 VcmeBE>{Hy(z`-cAxsijH0{|mp1N#5~ diff --git a/bin/recources/HomeFlix-Local_de_DE.properties b/bin/recources/HomeFlix-Local_de_DE.properties index bef1278..4fb3706 100644 --- a/bin/recources/HomeFlix-Local_de_DE.properties +++ b/bin/recources/HomeFlix-Local_de_DE.properties @@ -45,3 +45,5 @@ awards = Auszeichnungen metascore = Metascore imdbRating = IMDB-Bewertung type = Type +firstStartHeader = Es ist kein Stammverzeichnis f\u00FCr Filme angegeben! +firstStartContent = Stammverzeichniss angeben? diff --git a/bin/recources/HomeFlix-Local_en_US.properties b/bin/recources/HomeFlix-Local_en_US.properties index 21669a4..41de6ea 100644 --- a/bin/recources/HomeFlix-Local_en_US.properties +++ b/bin/recources/HomeFlix-Local_en_US.properties @@ -45,3 +45,5 @@ awards = Awards metascore = Metascore imdbRating = IMDB-Rating type = Type +firstStartHeader = There is no root directory for movies! +firstStartContent = Specify a root directory? \ No newline at end of file diff --git a/src/application/DBController.java b/src/application/DBController.java index fddce64..1180f93 100644 --- a/src/application/DBController.java +++ b/src/application/DBController.java @@ -223,9 +223,9 @@ public class DBController { ResultSet rs = stmt.executeQuery("SELECT * FROM film_local"); while (rs.next()) { if(rs.getString(4).equals("favorite_black")){ - mainWindowController.newDaten.add( new streamUiData(1, 1, 1, rs.getDouble(1), "1", rs.getString(2), rs.getString(3), new ImageView(favorite_black))); + mainWindowController.newData.add( new streamUiData(1, 1, 1, rs.getDouble(1), "1", rs.getString(2), rs.getString(3), new ImageView(favorite_black))); }else{ - mainWindowController.newDaten.add( new streamUiData(1, 1, 1, rs.getDouble(1), "1", rs.getString(2), rs.getString(3), new ImageView(favorite_border_black))); + mainWindowController.newData.add( new streamUiData(1, 1, 1, rs.getDouble(1), "1", rs.getString(2), rs.getString(3), new ImageView(favorite_border_black))); } } stmt.close(); @@ -259,9 +259,9 @@ public class DBController { stmt = connection.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM film_local WHERE titel = '"+name+"';" ); if(rs.getString(4).equals("favorite_black")){ - mainWindowController.newDaten.set(i, new streamUiData(1, 1, 1, rs.getDouble(1), "1", rs.getString(2), rs.getString(3), new ImageView(favorite_black))); + mainWindowController.newData.set(i, new streamUiData(1, 1, 1, rs.getDouble(1), "1", rs.getString(2), rs.getString(3), new ImageView(favorite_black))); }else{ - mainWindowController.newDaten.set(i, new streamUiData(1, 1, 1, rs.getDouble(1), "1", rs.getString(2), rs.getString(3), new ImageView(favorite_border_black))); + mainWindowController.newData.set(i, new streamUiData(1, 1, 1, rs.getDouble(1), "1", rs.getString(2), rs.getString(3), new ImageView(favorite_border_black))); } stmt.close(); rs.close(); @@ -359,7 +359,7 @@ public class DBController { } void ausgeben(){ - System.out.println("Eintr�ge ausgeben ... \n"); + System.out.println("Eintraege ausgeben ... \n"); try { Statement stmt = connection.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM film_local"); @@ -461,7 +461,7 @@ public class DBController { } } -//entfernt die Endung +//removes the ending private String cutOffEnd (String str) { if (str == null) return null; diff --git a/src/application/Main.java b/src/application/Main.java index 9e99431..0b7c4c6 100644 --- a/src/application/Main.java +++ b/src/application/Main.java @@ -1,7 +1,7 @@ /** * Project HomeFlix * - * Copyright 2016 + * Copyright 2016-2017 * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -22,9 +22,7 @@ package application; import java.io.File; -import java.io.FileInputStream; import java.io.IOException; -import java.io.InputStream; import java.util.Locale; import java.util.Optional; import java.util.Properties; @@ -38,7 +36,6 @@ import javafx.scene.control.Alert.AlertType; import javafx.scene.control.ButtonType; import javafx.scene.image.Image; import javafx.scene.layout.AnchorPane; -import javafx.scene.paint.Color; import javafx.stage.DirectoryChooser; import javafx.stage.Stage; @@ -46,21 +43,20 @@ public class Main extends Application { public Stage primaryStage; private String path; - private InputStream inputStream; private String streamingPathWin = System.getProperty("user.home") + "\\Documents\\HomeFlix"; private String streamingPathLinux = System.getProperty("user.home") + "/HomeFlix"; private String color = "ee3523"; private String autoUpdate = "0"; private String mode = "local"; //local or streaming + private String local = System.getProperty("user.language")+"_"+System.getProperty("user.country"); private double size = 12; - private int local = 0; - private File dirWin = new File(System.getProperty("user.home") + "/Documents/HomeFlix"); //Windows: C:/Users/"User"/Documents/HomeFlix - private File dirLinux = new File(System.getProperty("user.home") + "/HomeFlix"); - private File fileWin = new File(dirWin + "/config.xml"); //Windows: C:/Users/"User"/Documents/HomeFlix/config.xml - private File fileLinux = new File(dirLinux + "/config.xml"); - Properties props = new Properties(); private ResourceBundle bundle; private MainWindowController mainWindowController; + private File dirWin = new File(System.getProperty("user.home") + "/Documents/HomeFlix"); //Windows: C:/Users/"User"/Documents/HomeFlix + private File dirLinux = new File(System.getProperty("user.home") + "/HomeFlix"); //Linux: /home/"User"/HomeFlix + private File fileWin = new File(dirWin + "/config.xml"); //Windows: C:/Users/"User"/Documents/HomeFlix/config.xml + private File fileLinux = new File(dirLinux + "/config.xml"); //Linux: /home/"User"/HomeFlix/config.xml + Properties props = new Properties(); @Override public void start(Stage primaryStage) { @@ -80,78 +76,50 @@ public class Main extends Application { primaryStage.getIcons().add(new Image(Main.class.getResourceAsStream("/recources/Homeflix_Icon_64x64.png"))); //adds application icon mainWindowController = loader.getController(); //Link of FXMLController and controller class - mainWindowController.setAutoUpdate(autoUpdate); //set autoupdate + mainWindowController.setAutoUpdate(autoUpdate); //set auto-update mainWindowController.setMain(this); //call setMain - //dir exists -> check config.xml + //Linux if directory exists -> check config.xml if(System.getProperty("os.name").equals("Linux")){ - if(dirLinux.exists() == true){ - if (fileLinux.exists() != true) { - mainWindowController.setPath(firstStart()); - if(System.getProperty("os.name").equals("Linux")){ - mainWindowController.setStreamingPath(streamingPathLinux); - }else{ - mainWindowController.setStreamingPath(streamingPathWin); - } - mainWindowController.setColor(color); - mainWindowController.setSize(size); - mainWindowController.setAutoUpdate(autoUpdate); - mainWindowController.setLoaclUI(local); - mainWindowController.setMode(mode); - mainWindowController.saveSettings(); - Runtime.getRuntime().exec("java -jar ProjectHomeFlix.jar"); //start again (preventing Bugs) - System.exit(0); //finishes itself - }else{ - loadSettings(); - } - }else{ - dirLinux.mkdir(); - mainWindowController.setPath(firstStart()); - mainWindowController.setStreamingPath(streamingPathLinux); - mainWindowController.setColor(color); - mainWindowController.setSize(size); - mainWindowController.setAutoUpdate(autoUpdate); - mainWindowController.setLoaclUI(local); - mainWindowController.setMode(mode); - mainWindowController.saveSettings(); - Runtime.getRuntime().exec("java -jar ProjectHomeFlix.jar"); //start again (preventing Bugs) - System.exit(0); //finishes itself + if(dirLinux.exists() != true){ + dirLinux.mkdir(); + }else if(fileLinux.exists() != true){ + mainWindowController.setPath(firstStart()); + mainWindowController.setStreamingPath(streamingPathLinux); + mainWindowController.setColor(color); + mainWindowController.setSize(size); + mainWindowController.setAutoUpdate(autoUpdate); + mainWindowController.setLocal(local); + mainWindowController.setMode(mode); + mainWindowController.saveSettings("l"); + Runtime.getRuntime().exec("java -jar ProjectHomeFlix.jar"); //start again (preventing Bugs) + System.exit(0); //finishes itself } + //windows }else{ - if(dirWin.exists() == true){ - if (fileWin.exists() != true) { - mainWindowController.setPath(firstStart()); - mainWindowController.setStreamingPath(streamingPathWin); - mainWindowController.setColor(color); - mainWindowController.setSize(size); - mainWindowController.setAutoUpdate(autoUpdate); - mainWindowController.setLoaclUI(local); - mainWindowController.setMode(mode); - mainWindowController.saveSettings(); - Runtime.getRuntime().exec("java -jar ProjectHomeFlix.jar"); //start again (preventing Bugs) - System.exit(0); //finishes itself - }else{ - loadSettings(); - } - }else{ - dirWin.mkdir(); - mainWindowController.setPath(firstStart()); - mainWindowController.setStreamingPath(streamingPathWin); - mainWindowController.setColor(color); - mainWindowController.setSize(size); - mainWindowController.setAutoUpdate(autoUpdate); - mainWindowController.setLoaclUI(local); - mainWindowController.setMode(mode); - mainWindowController.saveSettings(); - Runtime.getRuntime().exec("java -jar ProjectHomeFlix.jar"); //start again (preventing Bugs) - System.exit(0); //finishes itself - } + if(dirWin.exists() != true){ + dirWin.mkdir(); + }else if(fileWin.exists() != true){ + mainWindowController.setPath(firstStart()); + mainWindowController.setStreamingPath(streamingPathWin); + mainWindowController.setColor(color); + mainWindowController.setSize(size); + mainWindowController.setAutoUpdate(autoUpdate); + mainWindowController.setLocal(local); + mainWindowController.setMode(mode); + mainWindowController.saveSettings("k"); + Runtime.getRuntime().exec("java -jar ProjectHomeFlix.jar"); //start again (preventing Bugs) + System.exit(0); //finishes itself + } } + mainWindowController.loadSettings(); mainWindowController.loadStreamingSettings(); + mainWindowController.initUI(); + mainWindowController.initActions(); + mainWindowController.initTabel(); + mainWindowController.setLocalUI(); mainWindowController.applyColor(); //set theme color - mainWindowController.cbLocal.getSelectionModel().select(mainWindowController.getLocal()); //set local - mainWindowController.mainColor.setValue(Color.valueOf(mainWindowController.getColor())); mainWindowController.dbController.main(); //initialize database controller mainWindowController.dbController.createDatabase(); //creating the database @@ -165,12 +133,11 @@ public class Main extends Application { } catch (IOException e) { e.printStackTrace(); } - System.out.println(System.getProperty("user.language")+"_"+System.getProperty("user.country")); } //Method for first Start private String firstStart(){ - System.out.println(System.getProperty("user.language")+"_"+System.getProperty("user.country")); + MainWindowController.firststart = true; switch(System.getProperty("user.language")+"_"+System.getProperty("user.country")){ case "en_US": bundle = ResourceBundle.getBundle("recources.HomeFlix-Local", Locale.US); //us_english break; @@ -197,34 +164,7 @@ public class Main extends Application { } return path; } - - //lädt die einstellungen aus der XML - public void loadSettings(){ - try { - if(System.getProperty("os.name").equals("Linux")){ - inputStream = new FileInputStream(fileLinux); - }else{ - inputStream = new FileInputStream(fileWin); - } - props.loadFromXML(inputStream); - path = props.getProperty("path"); //setzt Propselement in Pfad - if(System.getProperty("os.name").equals("Linux")){ - streamingPathLinux = props.getProperty("streamingPath"); - }else{ - streamingPathWin = props.getProperty("streamingPath"); - } - color = props.getProperty("color"); - size = Double.parseDouble(props.getProperty("size")); - autoUpdate = props.getProperty("autoUpdate"); - local = Integer.parseInt(props.getProperty("local")); - mode = props.getProperty("mode"); - inputStream.close(); - } catch (IOException e) { - System.out.println("An error has occurred!"); - e.printStackTrace(); - } - } - + public static void main(String[] args) { launch(args); } diff --git a/src/application/MainWindowController.java b/src/application/MainWindowController.java index 2fed23f..1f70d31 100644 --- a/src/application/MainWindowController.java +++ b/src/application/MainWindowController.java @@ -1,7 +1,7 @@ /** * Project HomeFlix * - * Copyright 2016 + * Copyright 2016-2017 * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -85,6 +85,8 @@ import javafx.stage.DirectoryChooser; import javafx.util.Duration; public class MainWindowController { + private ObservableList locals = FXCollections.observableArrayList("english (en_US)", "deutsch (de_DE)"); + @FXML private AnchorPane anpane; @FXML @@ -138,7 +140,7 @@ public class MainWindowController { @FXML public JFXColorPicker mainColor; @FXML - public ChoiceBox cbLocal; + public ChoiceBox cbLocal = new ChoiceBox<>(locals); @FXML public JFXSlider sliderFontSize; @FXML @@ -182,9 +184,10 @@ public class MainWindowController { private boolean menutrue = false; //saves the position of menubtn (opened or closed) private boolean settingstrue = false; private boolean streamingSettingsTrue = false; + static boolean firststart = false; private int hashA = -2055934614; private String version = "0.4.99"; - private String buildNumber = "112"; + private String buildNumber = "114"; private String versionName = "plasma cow (pre Release)"; private String buildURL = "https://raw.githubusercontent.com/Seil0/Project-HomeFlix/master/updates/buildNumber.txt"; private String downloadLink = "https://raw.githubusercontent.com/Seil0/Project-HomeFlix/master/updates/downloadLink.txt"; @@ -198,7 +201,6 @@ public class MainWindowController { private String errorPlay; private String errorOpenStream; private String errorMode; - @SuppressWarnings("unused") private String errorLoad; private String errorSave; String noFilmFound; @@ -215,6 +217,7 @@ public class MainWindowController { private String mode; @SuppressWarnings("unused") private String ratingSortType; + private String local; String title; String year; String rating; @@ -235,14 +238,12 @@ public class MainWindowController { private int last; private int selected; private int next; - private int local; private File selectedFolder; private File selectedStreamingFolder; ResourceBundle bundle; private ObservableList filterData = FXCollections.observableArrayList(); - private ObservableList locals = FXCollections.observableArrayList("english", "deutsch"); - ObservableList newDaten = FXCollections.observableArrayList(); + ObservableList newData = 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")); @@ -254,9 +255,9 @@ 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) + private ContextMenu menu = new ContextMenu(like, dislike); Properties props = new Properties(); private updater Updater; @@ -278,7 +279,7 @@ public class MainWindowController { if(settingstrue == true){ settingsAnchor.setVisible(false); setPath(tfPath.getText()); - saveSettings(); + saveSettings("a"); settingstrue = false; } if(streamingSettingsTrue == true){ @@ -334,7 +335,7 @@ public class MainWindowController { } }else if(mode.equals("streaming")){ try { - Desktop.getDesktop().browse(new URI(datPath)); //opens the streaming url in browser (TODO other option?) + Desktop.getDesktop().browse(new URI(datPath)); //open the streaming Url in browser (TODO other option?) } catch (URISyntaxException | IOException e) { showErrorMsg(errorOpenStream, (IOException) e); } @@ -386,7 +387,7 @@ public class MainWindowController { }else{ settingsAnchor.setVisible(false); setPath(tfPath.getText()); - saveSettings(); + saveSettings("b"); settingstrue = false; } } @@ -418,7 +419,7 @@ public class MainWindowController { setMode("local"); switchBtn.setText("streaming"); } - saveSettings(); + saveSettings("c"); root.getChildren().remove(0,root.getChildren().size()); addDataUI(); settingsAnchor.setVisible(false); @@ -438,7 +439,7 @@ public class MainWindowController { @FXML private void tfPathAction(){ setPath(tfPath.getText()); - saveSettings(); + saveSettings("d"); } @FXML @@ -448,7 +449,7 @@ public class MainWindowController { System.out.println("No Directory selected"); }else{ setPath(selectedFolder.getAbsolutePath()); - saveSettings(); + saveSettings("e"); tfPath.setText(getPath()); try { Runtime.getRuntime().exec("java -jar ProjectHomeFlix.jar"); //start again @@ -478,7 +479,7 @@ public class MainWindowController { }else{ setAutoUpdate("0"); } - saveSettings(); + saveSettings("f"); } @FXML @@ -493,7 +494,7 @@ public class MainWindowController { System.out.println("No Directory selected"); }else{ setStreamingPath(selectedStreamingFolder.getAbsolutePath()); - saveSettings(); + saveSettings("g"); tfStreamingPath.setText(getStreamingPath()); try { Runtime.getRuntime().exec("java -jar ProjectHomeFlix.jar"); //start again @@ -506,54 +507,18 @@ public class MainWindowController { } - //"Main" Method called in Main.java main() when starting, initialize some UI elements + //"Main" Method called in Main.java main() when starting public void setMain(Main main) { Updater = new updater(this); ApiQuery = new apiQuery(this); - dbController = new DBController(this); - - loadSettings(); - initTabel(); - initActions(); - - System.out.println("Mode: "+mode); //TODO debugging - - //TODO implement sort for rating and alphabetical sort for name after new title was added -// if(ratingSortType == "DESCENDING"){ -// columnRating.setSortType(TreeTableColumn.SortType.DESCENDING); -// }else{ -// columnRating.setSortType(TreeTableColumn.SortType.ASCENDING); -// } - - debugBtn.setDisable(true); //debugging btn for tests - debugBtn.setVisible(false); - - tfPath.setText(getPath()); - - sliderFontSize.setValue(getSize()); - - cbLocal.setItems(locals); - menu.getItems().addAll(like,dislike); - - updateBtn.setFont(Font.font("System", 12)); - - if(autoUpdate.equals("1")){ - autoupdateBtn.setSelected(true); - Updater.update(buildURL, downloadLink, aktBuildNumber, buildNumber); - }else{ - autoupdateBtn.setSelected(false); - } - - ta1.setWrapText(true); - ta1.setEditable(false); - ta1.setFont(Font.font("System", getSize())); + dbController = new DBController(this); } //Initialize the tables (treeTableViewfilm and tableViewStreamingdata) - @SuppressWarnings({ "unchecked"}) - private void initTabel(){ + @SuppressWarnings({ "unchecked"}) //TODO + void initTabel(){ - //filmtabelle + //film Table columnRating.setMaxWidth(80); columnTitel.setMaxWidth(260); columnStreamUrl.setMaxWidth(0); @@ -577,7 +542,7 @@ public class MainWindowController { treeTableViewfilm.getColumns().addAll(columnTitel, columnRating, columnStreamUrl, columnResolution, columnYear, columnSeason, columnEpisode); treeTableViewfilm.getColumns().get(2).setVisible(false); //hide columnStreamUrl (column with file path important for the player) - //Changelistener for TreeTable + //Change-listener for TreeTable treeTableViewfilm.getSelectionModel().selectedItemProperty().addListener(new ChangeListener() { @Override public void changed(ObservableValue observable, Object oldVal, Object newVal) { @@ -596,34 +561,33 @@ public class MainWindowController { //context menu for treetableview treeTableViewfilm.setContextMenu(menu); - //Streaming-Settings Tabelle + //Streaming-Settings Table dataNameColumn.setCellValueFactory(cellData -> cellData.getValue().titelProperty()); dataNameEndColumn.setCellValueFactory(cellData -> cellData.getValue().streamUrlProperty()); tableViewStreamingdata.getColumns().addAll(dataNameColumn, dataNameEndColumn); - tableViewStreamingdata.setItems(streamingData); + tableViewStreamingdata.setItems(streamingData); } //Initializing the actions - @SuppressWarnings("unchecked") - private void initActions(){ + void initActions(){ //TODO unterscheiden zwischen streaming und local tfsearch.textProperty().addListener(new ChangeListener() { @Override public void changed(ObservableValue observable,String oldValue, String newValue) { - int counter = newDaten.size(); + int counter = newData.size(); filterData.removeAll(filterData); root.getChildren().remove(0,root.getChildren().size()); for(int i = 0; i < counter; i++){ - if(newDaten.get(i).getTitel().toLowerCase().contains(tfsearch.getText().toLowerCase())){ - filterData.add(newDaten.get(i)); + if(newData.get(i).getTitel().toLowerCase().contains(tfsearch.getText().toLowerCase())){ + filterData.add(newData.get(i)); //add data from newDaten to filteredData where title contains search input } } for(int i = 0; i < filterData.size(); i++){ - root.getChildren().addAll(new TreeItem(filterData.get(i))); //fügt daten zur Rootnode hinzu + root.getChildren().add(new TreeItem(filterData.get(i))); //add filtered data to root node after search } if(tfsearch.getText().hashCode() == hashA){ setColor("000000"); @@ -632,12 +596,13 @@ public class MainWindowController { } }); - cbLocal.getSelectionModel().selectedIndexProperty() - .addListener(new ChangeListener() { - public void changed(ObservableValue ov, Number value, Number new_value) { - setLocal(new_value.intValue()); - setLoaclUI(local); - saveSettings(); + cbLocal.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener() { + public void changed(ObservableValue ov, Number value, Number new_value) { + String local = cbLocal.getItems().get((int) new_value).toString(); + local = local.substring(local.length()-6,local.length()-1); + setLocal(local); + setLocalUI(); + saveSettings("h"); } }); @@ -646,7 +611,7 @@ public class MainWindowController { public void changed(ObservableValue ov,Number old_val, Number new_val) { setSize(sliderFontSize.getValue()); ta1.setFont(Font.font("System", size)); - saveSettings(); + saveSettings("i"); } }); @@ -656,7 +621,7 @@ public class MainWindowController { if(mode.equals("streaming")){ dbController.like(Name,streamData.get(selected).getStreamUrl()); }else{ - dbController.like(Name,newDaten.get(selected).getStreamUrl()); + dbController.like(Name,newData.get(selected).getStreamUrl()); } dbController.getFavStatus(Name); try { @@ -678,7 +643,7 @@ public class MainWindowController { if(mode.equals("streaming")){ dbController.dislike(Name,streamData.get(selected).getStreamUrl()); }else{ - dbController.dislike(Name,newDaten.get(selected).getStreamUrl()); + dbController.dislike(Name,newData.get(selected).getStreamUrl()); } dbController.getFavStatus(Name); try { @@ -695,9 +660,34 @@ public class MainWindowController { }); } + //initialize UI elements + void initUI(){ + System.out.println("Mode: "+mode); //TODO debugging + debugBtn.setDisable(true); //debugging button for tests + debugBtn.setVisible(false); + + tfPath.setText(getPath()); + sliderFontSize.setValue(getSize()); + mainColor.setValue(Color.valueOf(getColor())); + + updateBtn.setFont(Font.font("System", 12)); + + //TODO rework! + if(autoUpdate.equals("1")){ + autoupdateBtn.setSelected(true); + Updater.update(buildURL, downloadLink, aktBuildNumber, buildNumber); + }else{ + autoupdateBtn.setSelected(false); + } + + ta1.setWrapText(true); + ta1.setEditable(false); + ta1.setFont(Font.font("System", getSize())); + } + private void refreshTable(){ if(mode.equals("local")){ - root.getChildren().set(selected, new TreeItem(newDaten.get(selected))); + root.getChildren().set(selected, new TreeItem(newData.get(selected))); }else if(mode.equals("streaming")){ root.getChildren().set(selected, new TreeItem(streamData.get(selected))); } @@ -705,8 +695,8 @@ public class MainWindowController { void addDataUI(){ if(mode.equals("local")){ - for(int i = 0; i < newDaten.size(); i++){ - root.getChildren().add(new TreeItem(newDaten.get(i))); //add data to root-node + for(int i = 0; i < newData.size(); i++){ + root.getChildren().add(new TreeItem(newData.get(i))); //add data to root-node } columnRating.setMaxWidth(90); columnTitel.setMaxWidth(290); @@ -748,7 +738,7 @@ public class MainWindowController { } } } - //entfernt die Endung vom String + //removes the ending private String ohneEndung (String str) { if (str == null) return null; int pos = str.lastIndexOf("."); @@ -756,7 +746,7 @@ public class MainWindowController { return str.substring(0, pos); } - //setzt die Farben für die UI-Elemente + //set color of UI-Elements void applyColor(){ String style = "-fx-background-color: #"+getColor()+";"; String btnStyleBlack = "-fx-button-type: RAISED; -fx-background-color: #"+getColor()+"; -fx-text-fill: BLACK;"; @@ -805,7 +795,6 @@ public class MainWindowController { menubtn.setGraphic(menu_icon_black); } - //das solte weg kann aber hier bleiben wicht ist dass es zum selben zeitpunkt wie aply color ausgeführt wird if(mode.equals("local")){ switchBtn.setText("streaming"); }else if(mode.equals("streaming")){ @@ -845,14 +834,20 @@ public class MainWindowController { parallelTransition.play(); } - public void setLoaclUI(int local){ - switch(local){ - case 0: bundle = ResourceBundle.getBundle("recources.HomeFlix-Local", Locale.US); //us_english - break; - case 1: bundle = ResourceBundle.getBundle("recources.HomeFlix-Local", Locale.GERMAN); //german - break; - default:bundle = ResourceBundle.getBundle("recources.HomeFlix-Local", Locale.US); //default local - break; + public void setLocalUI(){ + switch(getLocal()){ + case "en_US": + bundle = ResourceBundle.getBundle("recources.HomeFlix-Local", Locale.US); //us_english + cbLocal.getSelectionModel().select(0); + break; + case "de_DE": + bundle = ResourceBundle.getBundle("recources.HomeFlix-Local", Locale.GERMAN); //German + cbLocal.getSelectionModel().select(1); + break; + default: + bundle = ResourceBundle.getBundle("recources.HomeFlix-Local", Locale.US); //default local + cbLocal.getSelectionModel().select(0); + break; } infoBtn.setText(bundle.getString("info")); settingsBtn.setText(bundle.getString("settings")); @@ -937,14 +932,15 @@ public class MainWindowController { } //saves the Settings - public void saveSettings(){ - OutputStream outputStream; //new outputstream + public void saveSettings(String a){ + System.out.println("saving, "+a); + OutputStream outputStream; //new output-stream try { props.setProperty("path", getPath()); //writes path into property props.setProperty("color", getColor()); props.setProperty("autoUpdate", getAutoUpdate()); props.setProperty("size", getSize().toString()); - props.setProperty("local", Integer.toString(getLocal())); + props.setProperty("local", getLocal()); props.setProperty("streamingPath", getStreamingPath()); props.setProperty("mode", getMode()); props.setProperty("ratingSortType", columnRating.getSortType().toString()); @@ -956,13 +952,16 @@ public class MainWindowController { props.storeToXML(outputStream, "Project HomeFlix settings"); //writes new .xml outputStream.close(); } catch (IOException e) { - showErrorMsg(errorSave, e); - e.printStackTrace(); + if(firststart == false){ + showErrorMsg(errorLoad, e); + e.printStackTrace(); + } } } //loads the Settings public void loadSettings(){ + System.out.println("loading settings ..."); InputStream inputStream; try { if(System.getProperty("os.name").equals("Linux")){ @@ -970,28 +969,31 @@ public class MainWindowController { }else{ inputStream = new FileInputStream(fileWin); } - props.loadFromXML(inputStream); //new inputstream from .xml + props.loadFromXML(inputStream); //new input-stream from .xml path = props.getProperty("path"); //reads path from property streamingPath = props.getProperty("streamingPath"); color = props.getProperty("color"); size = Double.parseDouble(props.getProperty("size")); autoUpdate = props.getProperty("autoUpdate"); - local = Integer.parseInt(props.getProperty("local")); + local = props.getProperty("local"); mode = props.getProperty("mode"); ratingSortType = props.getProperty("ratingSortType"); inputStream.close(); } catch (IOException e) { + if(firststart == false){ + showErrorMsg(errorSave, e); + e.printStackTrace(); + } // showErrorMsg(errorLoad, e); //TODO das soll beim ersten start nicht erscheinen - e.printStackTrace(); } } - //cuts 0x of the Colorpickers return value + //cuts 0x of the Color-pickers return value private void editColor(String input){ StringBuilder sb = new StringBuilder(input); sb.delete(0, 2); this.color = sb.toString(); - saveSettings(); + saveSettings("j"); } //getter and setter @@ -1035,11 +1037,11 @@ public class MainWindowController { return autoUpdate; } - public void setLocal(int input){ + public void setLocal(String input){ this.local = input; } - public int getLocal(){ + public String getLocal(){ return local; } diff --git a/src/application/apiQuery.java b/src/application/apiQuery.java index a78ea07..a6eb0b6 100644 --- a/src/application/apiQuery.java +++ b/src/application/apiQuery.java @@ -25,7 +25,7 @@ public class apiQuery{ private MainWindowController mainWindowController; private Image im; - @SuppressWarnings("deprecation") + @SuppressWarnings("deprecation") //TODO void startQuery(String input){ URL url = null; Scanner sc = null; diff --git a/src/application/streamUiData.java b/src/application/streamUiData.java index 8f801c5..c4c4d97 100644 --- a/src/application/streamUiData.java +++ b/src/application/streamUiData.java @@ -16,7 +16,7 @@ public class streamUiData { private final IntegerProperty episode = new SimpleIntegerProperty(); private final DoubleProperty rating = new SimpleDoubleProperty(); private final StringProperty resolution = new SimpleStringProperty(); - private final StringProperty titel = new SimpleStringProperty(); + final StringProperty titel = new SimpleStringProperty(); private final StringProperty streamUrl = new SimpleStringProperty(); private final SimpleObjectProperty image = new SimpleObjectProperty<>();