From c3a3398112b55952e18d525f747b18448d643fae Mon Sep 17 00:00:00 2001 From: Seil0 Date: Sun, 14 Aug 2016 15:17:14 +0200 Subject: [PATCH] initial release --- .classpath | 9 + .gitignore | 3 + .project | 23 + .settings/org.eclipse.jdt.core.prefs | 11 + bin/Homeflix_Icon_64x64.png | Bin 0 -> 24056 bytes bin/Homeflix_Poster.png | Bin 0 -> 30665 bytes bin/application/DBController$1.class | Bin 0 -> 1044 bytes bin/application/DBController.class | Bin 0 -> 6439 bytes .../HomeFlix-Local_de_DE.properties | 15 + .../HomeFlix-Local_en_US.properties | 15 + bin/application/Main.class | Bin 0 -> 5804 bytes bin/application/MainWindow.fxml | 37 + bin/application/MainWindowController$1.class | Bin 0 -> 1518 bytes .../MainWindowController$2$1.class | Bin 0 -> 1319 bytes .../MainWindowController$2$2.class | Bin 0 -> 2351 bytes .../MainWindowController$2$3.class | Bin 0 -> 1440 bytes .../MainWindowController$2$4.class | Bin 0 -> 2215 bytes .../MainWindowController$2$5.class | Bin 0 -> 1146 bytes .../MainWindowController$2$6.class | Bin 0 -> 1418 bytes bin/application/MainWindowController$2.class | Bin 0 -> 3218 bytes bin/application/MainWindowController$3.class | Bin 0 -> 940 bytes bin/application/MainWindowController$4.class | Bin 0 -> 2607 bytes bin/application/MainWindowController$5.class | Bin 0 -> 1591 bytes bin/application/MainWindowController$6.class | Bin 0 -> 2458 bytes bin/application/MainWindowController.class | Bin 0 -> 28268 bytes bin/application/application.css | 1 + bin/application/uiData.class | Bin 0 -> 2076 bytes bin/menu_icon_black.png | Bin 0 -> 14700 bytes build.fxbuild | 8 + config.xml | 10 + src/Homeflix_Icon_64x64.png | Bin 0 -> 24056 bytes src/Homeflix_Poster.png | Bin 0 -> 30665 bytes src/application/DBController.java | 216 +++++ .../HomeFlix-Local_de_DE.properties | 15 + .../HomeFlix-Local_en_US.properties | 15 + src/application/Main.java | 148 +++ src/application/MainWindow.fxml | 37 + src/application/MainWindowController.java | 854 ++++++++++++++++++ src/application/application.css | 1 + src/application/uiData.java | 57 ++ src/menu_icon_black.png | Bin 0 -> 14700 bytes 41 files changed, 1475 insertions(+) create mode 100644 .classpath create mode 100644 .project create mode 100644 .settings/org.eclipse.jdt.core.prefs create mode 100644 bin/Homeflix_Icon_64x64.png create mode 100644 bin/Homeflix_Poster.png create mode 100644 bin/application/DBController$1.class create mode 100644 bin/application/DBController.class create mode 100644 bin/application/HomeFlix-Local_de_DE.properties create mode 100644 bin/application/HomeFlix-Local_en_US.properties create mode 100644 bin/application/Main.class create mode 100644 bin/application/MainWindow.fxml create mode 100644 bin/application/MainWindowController$1.class create mode 100644 bin/application/MainWindowController$2$1.class create mode 100644 bin/application/MainWindowController$2$2.class create mode 100644 bin/application/MainWindowController$2$3.class create mode 100644 bin/application/MainWindowController$2$4.class create mode 100644 bin/application/MainWindowController$2$5.class create mode 100644 bin/application/MainWindowController$2$6.class create mode 100644 bin/application/MainWindowController$2.class create mode 100644 bin/application/MainWindowController$3.class create mode 100644 bin/application/MainWindowController$4.class create mode 100644 bin/application/MainWindowController$5.class create mode 100644 bin/application/MainWindowController$6.class create mode 100644 bin/application/MainWindowController.class create mode 100644 bin/application/application.css create mode 100644 bin/application/uiData.class create mode 100644 bin/menu_icon_black.png create mode 100644 build.fxbuild create mode 100644 config.xml create mode 100644 src/Homeflix_Icon_64x64.png create mode 100644 src/Homeflix_Poster.png create mode 100644 src/application/DBController.java create mode 100644 src/application/HomeFlix-Local_de_DE.properties create mode 100644 src/application/HomeFlix-Local_en_US.properties create mode 100644 src/application/Main.java create mode 100644 src/application/MainWindow.fxml create mode 100644 src/application/MainWindowController.java create mode 100644 src/application/application.css create mode 100644 src/application/uiData.java create mode 100644 src/menu_icon_black.png diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..0499fc0 --- /dev/null +++ b/.classpath @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/.gitignore b/.gitignore index cd2946a..3dd2f04 100644 --- a/.gitignore +++ b/.gitignore @@ -45,3 +45,6 @@ $RECYCLE.BIN/ Network Trash Folder Temporary Items .apdisk +ProjectHomeFlix.jar +jfoenix.jar +minimal-json-0.9.4.jar diff --git a/.project b/.project new file mode 100644 index 0000000..5457f9b --- /dev/null +++ b/.project @@ -0,0 +1,23 @@ + + + Project HomeFlix + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.xtext.ui.shared.xtextBuilder + + + + + + org.eclipse.xtext.ui.shared.xtextNature + org.eclipse.jdt.core.javanature + + diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..3a21537 --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/bin/Homeflix_Icon_64x64.png b/bin/Homeflix_Icon_64x64.png new file mode 100644 index 0000000000000000000000000000000000000000..64787d6596cf95c8c1edd64d0a66386159c7a408 GIT binary patch literal 24056 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 JLIv}H{{!&({3!qc literal 0 HcmV?d00001 diff --git a/bin/Homeflix_Poster.png b/bin/Homeflix_Poster.png new file mode 100644 index 0000000000000000000000000000000000000000..9f2aa98324adbcda5d666971a96114811a3b62e1 GIT binary patch literal 30665 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 n=5IaxAO0X|5#;pxJ^-dpTFx>*NT literal 0 HcmV?d00001 diff --git a/bin/application/DBController$1.class b/bin/application/DBController$1.class new file mode 100644 index 0000000000000000000000000000000000000000..692568660535943968f74ca2b12d1fff012bb113 GIT binary patch literal 1044 zcmZ`&T~8B16g@)=Tb6|u5DEy0TCoMB1*xJ%G`1xYi_w(y!MEvlQbv~9y1OO%M@;k& z_>778@!+Em{wU*}ZBa;UlkLvjk8{tx=kBlH-+utuz(WIl3^Tmda-_`z>8fn$anV(Q z=Q@t?QfmgH42f6#m}ecXn%VsWPw)oAKyV=aRE}~hy^;$QwI!7dwi)Kqy~8p!hG@}k zh(Rz6S?I@ri3o-*7#LxQq;){NB9(a7KB^0EpVuA1FjjGG?$o#^^}TD1YFZ4lJ*%bG zh*rdFD-#n)8kl65>eYaSDNHlOxNQqRY&MzBRKi*KubnK7NeNretT2Sjm@_cTF#aF6 zg?U^d9O)Mw*B3NB>glD?y=w2jzOfbXyC?$fmh%9fjF{o6KTqG+X2Hwhl6yp z&poMvYCw`46=GPT@-^YrrE0WQbD=57p;TaE1*-;bosqkkXCVuc(P(KXM-h6u10Tvw z*itnMnVN}pY#6vr{=XeoUsTF(Y|+vqu#ne{#6y^B!0p3*kJ}^@qbK=qXy=jxEb+9iFw zqQiY(_*kIjiqOupL_%*Eo%-l85F`5_oi^#NE#}hlXZrgB>m-bcYg_0cneYe+x?7Z^ zt)m#DH_a6zU6glSl>Ap*`i2>X4_Kk&Pb`Lp1%@-ndyId=^|8z;mOmm^Sw6+uNeH__ zf~*r&U3i`d0!1oR!ZgaXA3G%G6XdWrv@u}-Z literal 0 HcmV?d00001 diff --git a/bin/application/DBController.class b/bin/application/DBController.class new file mode 100644 index 0000000000000000000000000000000000000000..006445c83256531d9698f58204a0e71875ca2011 GIT binary patch literal 6439 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 CYxevA literal 0 HcmV?d00001 diff --git a/bin/application/HomeFlix-Local_de_DE.properties b/bin/application/HomeFlix-Local_de_DE.properties new file mode 100644 index 0000000..50ed795 --- /dev/null +++ b/bin/application/HomeFlix-Local_de_DE.properties @@ -0,0 +1,15 @@ +# HomeFlix-Local_de_DE.properties German Local +info = Info +settings = Einstellungen +play = play +openFolder = Ordner \u00F6ffnen +chooseFolder = Ordner auswählen +fontSize = Schriftgr\u00F6\u00DFe: +checkUpdates = Auf Update pr\u00FCfen +autoUpdate = beim Start nach Updates suchen: +version = Version: +columnName = Name +columnRating = Bewertung +columnDatName = Datei Name +errorUpdate = Es ist ein Fehler aufgetreten! \n Um Hilfe zu erhalten besuchen Sie \nwww.kellerkinder.xyz oder support@kellerkinder.xyz +infoText = \nMaintainer: seilo@kellerkinder.xyz und \nhendrik.schutter@coptersicht.de \n(c) 2016 Kellerkinder www.kellerkinder.xyz \ No newline at end of file diff --git a/bin/application/HomeFlix-Local_en_US.properties b/bin/application/HomeFlix-Local_en_US.properties new file mode 100644 index 0000000..25a9919 --- /dev/null +++ b/bin/application/HomeFlix-Local_en_US.properties @@ -0,0 +1,15 @@ +# HomeFlix-Local_en_US.properties US-English Local and default +info = Info +settings = Settings +play = play +openFolder = open Folder +chooseFolder = choose Directory +fontSize = font size: +checkUpdates = check for updates +autoUpdate = check at startup for updates: +version = Version: +columnName = Name +columnRating = Rating +columnDatName = File Name +errorUpdate = An error has occurred! \n To get help, visit \n nwww.kellerkinder.xyz or support@kellerkinder.xyz +infoText = \nMaintainer: seilo@kellerkinder.xyz and \nhendrik.schutter@coptersicht.de \n(c) 2016 Kellerkinder www.kellerkinder.xyz \ No newline at end of file diff --git a/bin/application/Main.class b/bin/application/Main.class new file mode 100644 index 0000000000000000000000000000000000000000..a83a96652574f01668b1214bf8d59670115eff93 GIT binary patch literal 5804 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bin/application/MainWindowController$1.class b/bin/application/MainWindowController$1.class new file mode 100644 index 0000000000000000000000000000000000000000..7f2237ab70b3b34f5be63fe3bbb46afd8837c43c GIT binary patch literal 1518 zcma)6YflqV5IvVyX<4CGc`915KwByciufoZ6+x;6j1Y()FWU=TT<((X7SMmC(P}hN z<1_I`8RzbnSAt@j?cT@CnKLtI`s?@mj{rtc2%(0dhi`4!(&C`Xe! za~<0jZelouI)>;5-{z*x)tWiKvLP%lga(FAeY(19ify4hb4vfta8)EXh6Zn4mJ&l0 zqHt1-ELo39CB1Qm-sH*VsU?QGNv9~nU^rzUgvJPJ(PAKsC_`;h8?+Rp5_9Fv72z)O z6LLhVEqHNbWgHSJ1COHnkK&2SZoYpkxUp zOe?6UnWN%(VRYeq2EiP(VW1lq7@G2P)ALVebBp=;IflMH0>|JVxMm}0 zM_d=?5<_aA^uK*lOO3cpCC;l=NBj30=tDn4V@Y_6($lqU4WI%=EO@R|Ym|2*QY4kf zuA>zapK&(Dv@Lfv#DIZ}hB!qKGlCbXDPq@)U=Twgm<;igG-6;FSBV0*EK%}xHTpkF z@r!hXrDii?;JRkhOl-8&Nw)!=cHA&<6St_?rFCZ~r;5v5dJJvJRDe|Wq;1Y`>1K1A z1X1rxpPIebjbIcG%YlrzZaTyHJ)>jFPgw2y?Fm2*)HK1+@i)0eXa?>XXhj=CWWg!B zmY9~hMV-fu^Pq-d2rtMr#l5micKJg!3T8XI$MX=6>RgWNt>5Sf~GILFLlHzomzV8!J<(;+4N^sOHUX& z(I#5mL=Am`NP6H6jPzSHzocCaPU|!OMtgrkjP?fk=+iSeOK*}b+Nvlo2vy@IKcM~T zD|Eia#o0`(r-DQ#maHJ1Nxz2i4p%C;mZ@NL`5;CY8p!VparsIyzmc52qX$3GkDq?b zcz|1tNfB@xSwCtw#&8EU(H!v@ukuJ$vk9jMKI3i$xr0CrWTHvyM0CP+nDkfoG3CFf Y@xVVF#0(zNDn?e?Lw~x6)}x8eKM=Tvb^rhX literal 0 HcmV?d00001 diff --git a/bin/application/MainWindowController$2$1.class b/bin/application/MainWindowController$2$1.class new file mode 100644 index 0000000000000000000000000000000000000000..f20a801bb77a77175aaa988240b0c3de22c41f39 GIT binary patch literal 1319 zcma)6-%k@k5dM}Hj@A<@@}r<2lnQN8&LSdOG$8~6rYK1X`ed?Px9yQ*kK8TDzh#2e z_+WhY%|!ikjI-A>P$MaOx!c{@*_m(Vo4IelKYszRh-U`67_$86$aQS498X%?+>x&x zS@qtnc~beF>k2=+kS!XBGo%jq3AbD>>(;CN17RxzJq)8-T06DGiIB=#*WXPpt8|f} zM>U)vTO=pt&R$BSzv4(oJ!hEBUFAZ4k0HM1RYd{}*G(AcO(KSV6A7dkVmYnQUv{K; zd3?Ap{9V593WkBQXLEOt`;Oj6!nlUYFmnaJ*`kKp2!mu8&z0LUuxjf}hIuIE_mW6s z%)lr^rgH{N+`?^!UT)hW2=lgiwLEkLT}ogAlLqcEOm@OyVhS0}U2Uhvs|?d++dH%l zYMzkJsb#n7BCuX;yxA3}YQqt3wUk5_GY0N5Om$Q?F^e37Q5Q-ZU>MBh!xXkktD<~I z*2&@o3MS@ok5mJpcDQOV47HNorm2%Wfq4^_CfyA9iKqyr$O!S-9hN1-*ySWKjQm64 zU-AqrGNdnKH%UdeWMT-z49SXj?Av0)(e*X@zb=~BW*8C`r!KiV_DOH+Le#B>Dz&4$ z*i0+!M;EK?IhAAoy0l#{prE&fYIsDOxh19W*IXV1BETepjnUf;mP+YHp+7*3-UM_Q z*J!njE_#4uVeSLW!bkMIr(G9rXjyooZ-2)C?M=F)r8hB1Gtq+K$jaNuN~UlI^Akp* z=?vpdOgE8__D$SBx84^b`GFDqq|*BpdKeBpW+D$j1`kjq?5pH!A@Y@vd?gBVU-7Vs qN9QJcLV(oj1WyMQ$K!Cdj3?pz6s1s_#u8R&H9%Tvn)T43(f9*(gHSdA literal 0 HcmV?d00001 diff --git a/bin/application/MainWindowController$2$2.class b/bin/application/MainWindowController$2$2.class new file mode 100644 index 0000000000000000000000000000000000000000..20a7145cb59cc5c0a3344ee502094a3ecfbf8690 GIT binary patch literal 2351 zcma)7TTdHD6#fR2EOv)L$c>~WbrMJngqV%m^K-gS4!V0x4K z(EgP?r%GMahpKOt`U@)cuHK~nfxcBeGhU3Tkif|7`ph}s`OY_I&V2jtmtO(6j*l!f zF?5Sk$#ra@9N$aN2*+D;yqv!=>U%2iT~`L(L)}9bni<;H#JWhk!po=UR@S7gEF5My zt*xt-v|N{-N{{RRlfuhUAj4r*aKi4Zlw^AUEE)12c05PjVYrk!NI>r*L-VMglW{P# za#(0dAci)MINBLvDecfU?RavwTwIaCf>?1SL&vml3wKcjj{Y4Pn>AI2iwDTtJ*24? zOpy#-sp(w`jM!R9qeG^5F@a8;v2dE<{Qe4XJc*|mT7+%O(C9XKFdg(a{_7*KiC{C_(D4=+VRs9jw?-xeH{I`yhHvb!?gpDH{9z$de_e43P&1) zJ5aY6h7JH#)1i(P#}KYtxVG!`WH&=4iySvV{9=AtF`TGVm=7FJWmOvAST>5{NAm%y_awm_YD%p6Nnp&^pvInXh(N*c`d2&5)q?er45!luEm5+Z4w=eGGXh)@4>I zMLEMbElhLFU{+6u)%jJCW4JJF`^EIysxLjKlD2D;Crsa)SYD77HQ`7%XLfg<<7G|E zB4V{HS-fIlf#KY~033_k1T|;^%XrPgs|-g?<))zfWluRpD*tu7K`lsGB8%3qvGT}F z`}0=R&&h!`5hUjWU(dx!zbGeMr*egCI?+2E0xLADWJTI$xb5WJ-izA)8ybY7&p(ws zgdB&&stI+dO`20vy^AfNt>}_r(g{^kI$m-@7HHfiMR}Dd2U1Bdfi<`m9yD~v)ZBQ* zmL)x$IEs2>+Dvz3m9QTy1j44tc*qQKhBJmueW*8%GzLbFJMG#4OTE}?&}Kv_nyRPj zC%55xpvJRMX6V!^?3E-z<9vhT1WwW}Wc_krOWl@q*X(sak;?0WA)a;eo>1k0{H7Yz ztX)-^-4!)nQ^UKL8jHO{CAE!vw(Ez~yfac2d}>!d<#{p~bwwD;5J@5%qwgWG_I7;* z(cK!OZydUeC+O`qn&=Nm^!0xZ-uDHLJfdGsII3-CMMr;!4*Jb0Mq7{JI6X;doUEZR zPN*99)4s>xTR0Uxw$R0@xUhxZx?$iO9Qh1aJ8o6+%tI{y-+!Qr=c^cx%vDTAZ;$a( z-8NUn{VgnYyjjKDOR+83579oOG4q6ZxeDhIu_~a93N>2HRB{uo#O`~#?|wiJe#8KN z!XSR8x$p~}+F!~0H@u7ADdrDs;!k{xzwinEHdQBUl|@xkjqu=8hE39=L{Uu$j4H9g ze{k2r8gCyVWx|>==%sb7Z@jPnYp5#LcjP@xE?Pz{t#)Z9!uo9!@0sWO_`p~@v4Ici Pt%KG&>8U?Dl0N?diDG`^ literal 0 HcmV?d00001 diff --git a/bin/application/MainWindowController$2$3.class b/bin/application/MainWindowController$2$3.class new file mode 100644 index 0000000000000000000000000000000000000000..7c34a8b437caeff08d81120470faf9aceba18606 GIT binary patch literal 1440 zcma)6ZBNrs6n-unl+6kg5e5n(4CsbZc~Q_!6c-4Xp(dE=*V0`^vD}ibL;P7LIEfz& zpZzT+>K`zkdsnkbAX}UE-g|oPd7ks!bNcn`Bg=FxQ8r)g>~lNN(8Vw$t-Hr2KjI=V*W`P{5+&Nm z&=u@CmDC)86k4NX$v@`^Cs<*aHrm;cE;2;(UWv!Ra8-wf?l>ao)e%F2A!0~}-hw0e z%j&@n_up7ME@$W~c(&yhE#Hyr&={3e8K&C6O)W^Odn!qW5u@;*0;{%EQt6OQ7vo4` zSi=y*cxwf8+{7)0Zp*fLMd`NDo(?TZXJZ(}n1 zgt_fieVea4vZRMDYTQ|=8Xe@eQx;ZG^~rCuDU*5+*K@nDe{+{7utFWsyC!VctB~MZ zJlOL}4Em-J+|RpKrNS#1BeD^CI>8bN*_-s!iO>^+Oydg8meD~s5YNnfhMxI?o=>#u zz%^-8U*zr|=%ckxd!+R``e|fRgD^@djACR?pr2we98NG&!^9cVHO!pC46QXRG%$J; zpPv}PFDl003THs!8X*o~;31YMgH=LY4iVEKVk|RrhDSAI8zH+CP5Q?WNts#{Pt04$o=UM_x%9o3L=ccuUU literal 0 HcmV?d00001 diff --git a/bin/application/MainWindowController$2$4.class b/bin/application/MainWindowController$2$4.class new file mode 100644 index 0000000000000000000000000000000000000000..b91a6438f389e7ef233caaa6d19596a4cb8432c0 GIT binary patch literal 2215 zcmbVNU31e$6g_LZQS5G;;F7dJp@tf;9fBH~Qc|U9T_-L9hd><+{e-o=Nt98fj3k@T zKh)>WP&dOvhv)vC&OrOp>0L<)4jAmIJsRzz ziokLmeMMN#9m{FC4=Sz`c&=?rFMlaNt0BcOz9l+Bw}rEzuQs=&8E6<`IIULKclD+e zj<0uw-IjV~lZ<4|@&oBek6|R(wEX-GIjar!W{~~7nL}CP{&x(SZu3H<92-+S2y+6#!^HVP$z0l|Im#vD8 z436V{4JR1R49*Y7Nt|LB6{acuFsoOG%hEtfjWlvNqv13|ZV(QR50R(b`ZkqSu4cO1 z`qsKD9cx!Nqtf;DYt_4T+iFSA$lx3b8qPDEdc7q_5hV(4Lk3~K!s=Pf-~ujcm_F14 zi*B2;%Aw;UDub}_SJxRP3X8=ajw34qki#X8k1Ib7!W z6jz?JJjYNS%(78@B@t_KHz<2j7^C=%8m#`1dUIQOn&`UkJKweiu*ms z1ST0Wb+_%AvT7-DJ=X6kxv1PQEcZ~>i|n7nHC2&Nog0A@8MYddV~+UIJ<|bE@tATJ$#a#I~W^#_@axYc;3Zz1tJ-O$c6_#B}IRR z%lMmm^q&w+DRLBpA(yy;)evAAH*qV3UdA^xN}^7uMc|dy8j(>Z@V8?MW@6AsN>fkJ zxbOsbr|Ie9yXQ=dga=b|gt3A){1A?QjHCYv_h_CXkoRHIC`;~-(_8%%XY~6Ig#=|7 literal 0 HcmV?d00001 diff --git a/bin/application/MainWindowController$2$5.class b/bin/application/MainWindowController$2$5.class new file mode 100644 index 0000000000000000000000000000000000000000..e670191cd547b555a36409405038e12359e1761f GIT binary patch literal 1146 zcma)5U2oGc6g{`?nl%fw6xiCqpp0zm2P`l#38~YhsT$g(4jzWevzwYWQ*fpv9sDgM zJ|-Rz&-^D4*P#>b#MC-UY+s*ye0+TK^Y^#!0G{EAffT_Or>DN>ir5R3b0j?V##6oE zeJfCL82G*n?JaxTK!#8_5of~jh3Y%6x+l_&4P*&r9ew-3k!MoH&c6O02-V|6LN*?F zk^Pi6X;0s!$@m>ldGRh`qdH4MtwYGPf}YHQaLs~&c@t^mE#y!jq^lZ`Z+l9<9KP$y z@U`grl2B|1uJAh|^z?ib%xI~E^%?fHx3$zka!A5TwLRg$o~xZqd}!7>CQ4W~P$sNS zcfi6O+$GEl*OgJ?+rex;OcmWUaSs&(_X(A0IxIZEDj|2FVvDdgT?U_(FqaeoVfkuH z2uqg?yRgc@2BCD7mnL6v&BARg63pXZ7`pO>r*E_Tznb0DG<=3*udhTr3>kNrXc{ly z=A_E;(%qR{8o$$BzWn^Ya{VCkRR2iEgP=#S4waH&%NJ23BUD&yn%_B4p`go>|F<;1 zIp||7@aQ>G`~YUX@flYAE3SX!Sqe9FELqXnzfk14#W^~96Suf0?ZJqp#l2=(sDFZW zj-_*~T%zGjlepv=wD=b~qTwVwgv|o?m~d@GSYwPP%+(t|u>J+re{@-f=-oAyhGbAr bMh!el`p4Kzq9xSe@TkbB68F04Om2Sw1V$g~ literal 0 HcmV?d00001 diff --git a/bin/application/MainWindowController$2$6.class b/bin/application/MainWindowController$2$6.class new file mode 100644 index 0000000000000000000000000000000000000000..8f4224d9ceb39b6ecd849029e3e058944e1dcadd GIT binary patch literal 1418 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 literal 0 HcmV?d00001 diff --git a/bin/application/MainWindowController$4.class b/bin/application/MainWindowController$4.class new file mode 100644 index 0000000000000000000000000000000000000000..91832b34897bcba1875c8e84aff2614a28eded91 GIT binary patch literal 2607 zcmb7F-BTM?6#w0PuqAAP)`HSnTQJoGTDB;q)F6uCqiF-Ep`jmsbhEj@(#F#~B}d^B<5u!_j)~?go+}3<$H?d(WQxJLmq+@1FbnzfYe7 z7{q-EA%-4xWyR1n)zvLinO1dkUN?)@dfGBw+cFGp#|I@u7}}TBHB~WGb5WTsEOX73 z(8SO!tP2}TfvcvYtf@wsE9oV2;#u8sxyfyYCU;49;uk4Y_MliP@*dGm-5q5(mpIrx znP-Tkts-v*!%-O$j>Hf~n~Y|(GlUbup)ISMe5PC~aC=TI7@XmF*3wiXuiCnp2gZm< zlOcX!)c7E!DQVs=iwxHj*#;!c794J`3HZDqCFS|}^yOSzHy0aNM6%5}ebH3ivQ25; zJq+?l-(Kj^2H<~tXR66N8Yx-P{3D^v*_>xwUP{F@89EXfAG7wDrX;*aim$D2SszzjHHJ})$@ly);hP-s>4N9uF1HLY>j4y533o?Dk;kg7B}^cD(jANZSv+E-*6{& zZWM|78GI;VmNavqvy6{KdJ=IY0K`UeGUjlD;fSay^*lQFrvhbo9gbRPbkRC_58(YEI`48bi$5 zIVqws9iq+9mMo*_wH(pr#EQBq(sz@u2j3;lDx0oo(JVuc&d^!k81JuCo8y&31aI7l zs4wSSRl7H>t^|$te>cp4k(%99Im%0*qttUSF)_LyR%CRblUU7JWn1HWZ>zg_KXT+N?ZtX z#-v*`ZK#gJ9nv8wke(=5d%L*q=q3--(+si078(sBME^jnx9@w%y-(2kh-M)i6E^P) zt!5P*r@2gPg!Ltypf}}!PV#t}#v!~S(Ad`$p^4_(y^kUPfUZrPVHk?|vva{~6NwP! z#pE&0S8y@BJM{cFF%(94DEb{{{1sgt(M`M)!WKp=c)x;i-<+vnnkE%|`~cm)DF{)s zU=w)?_GOfHL^~o6Up(?~FYQK*{Dgs9;b-&{Ane9^g4?-Gd|F)|eD_j(_+m@Y6!B>4 z_qP5Nt?U_k*pC=v&oRY*#wy#wS2TXWe!;iwSNuWmzu0dcl~<`4L{mVe7^x_D^ln2# z(Ib8voJL`^;!iAKk)n;`29{_P#W$D?Mmpj6g%KFbgmI57M-lypl3;&hDkKlIk5R1* z`XnkoKtK_CAM5SgLh1Y#CN9uZfwf!sCNC4}2;?Tj5y7fAvV&qfa6Riul(9i0AtoUW G`uh*m&&CJ< literal 0 HcmV?d00001 diff --git a/bin/application/MainWindowController$5.class b/bin/application/MainWindowController$5.class new file mode 100644 index 0000000000000000000000000000000000000000..1380ab2896abaaa504979e61f7493fdcbb910861 GIT binary patch literal 1591 zcmbVMZBG+H5Pr5T94)656cl`Gv1ng_f{KEzRcthAEb;-ZA9Z_O;mCPM?yg0DfxpK@ ztMP;3v&NTSWSrfep@haZw%K%cIy>{sJTvq4_vbGFZlJ6o#4yYE_AJxjzUkQc4Q|@c zOuOOimmS-89m^7KYDGhYA->C7Ja2J(JHJ`q6^5^2m?0^(FJI^Dg4K{mnBqhDh0Ih$t9N=+H0{Ll|Q^qKGqu z)6!t9YTDv)^Hp8APk7xD3=>ty;8u;hro0Erh=j?I>Kiq+LNGN$W!YeOl&$&#V~{O8qOVIw*ybd z1zcnpF>PNZpo&?EA%R&9Nrpr}Ds@~&iX3>tSJft>(iIspfh#($B2Bq+!w{aAT3#EF zZ52POBPTt_lxJ>OPnCK>$D-t1_jpTe3EwyEZK5;ev?QkkFvKvV`d7BcVXp^d5m;O7 zKMxG1j`q)+y}v!QHb9`>g#AY!b;hup>OhmJX;`Ik>z{Ot#^$z;NlZ~ax16SHh=-<} zkm+8VU{N|`sC1R58^b@>K(XslP}35P(bxmqupE!L+7SMZ)6j7b>oi@&twg{ud3*~L zM80^IzwRbxZDD?;KFpGkQt7Ww2BaYfmk;80ebc$PQIgC2;)+x z{-M|G8z$(k(;KNhh12v)7%)W^XGjj=tn&7jqzK)U+4s;F+L&(Rk`(3ngt;~{Qfgyf z1_`Sm6Y>H3j#2gl)9fb_?3W6b?Kld8kxS&UqyQwbjB5&764yxz)6V`2PFk%{vg-uy zW{~1Cd6J;Uv$+G@nm@qI0-ZM24l^BAj;X`ROjaX;f|80sc6U%x+63<6K1s5AvKI9D E1Ls$u%>V!Z literal 0 HcmV?d00001 diff --git a/bin/application/MainWindowController$6.class b/bin/application/MainWindowController$6.class new file mode 100644 index 0000000000000000000000000000000000000000..57aa192d12307d8b5a27db7299f38914c2fd7754 GIT binary patch literal 2458 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�D^{MKH1HIu@3Qu11!23>u7$EzlB= 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 Z`GDii;2B@=rY|_r44(4^Z`u8{{TDy)vqk^_ literal 0 HcmV?d00001 diff --git a/bin/menu_icon_black.png b/bin/menu_icon_black.png new file mode 100644 index 0000000000000000000000000000000000000000..19711de08f1d419001417529e33550c3d8eacb89 GIT binary patch literal 14700 zcmeI3e~c4F6vsz{Mo-}{6A)3>MGXYo-EP~XUD^_C58K3^=iL$R5+m&GPVd(1?v~v> z+B-=^B?iQZo<~B!KNK`38ZTnvA3}nOLBwD29}S5lCI%8C8c8t0pouuU?X|DHmI1?` zv)3Q*X1?#ena{kL?mxS`ulLb~T}!(VLJM=*Oh5U)&wJl?EBRb2&K@FPx0kZR4nm7g zc<-C`tzL8wLa~+l;E+3%e@s>_BdBQB2o6?^5>X?RSXU`2>Ns|}5j?7!N&dpIPkBz) zlKiGU?UR-6wnsAdm?`J?v9Dcn&k8K+-=8e7;RHKZqGJ?poX-qr!zQN!a_fG ztO;AiJ=@4sRBuBg#i~*FbF~|p=6FGghnG! z*6T`6TSdzz!@{X>LTJ|vy!={|bEe}eriyc!6lnH_6x+exo=fs`o34J0)lVtU$KSiMqI&09O7*q` z))GQfYhze-&zhV5e;2SCAGmkUQ69tQ)izW$l&|U>#IXu)S+Vi@QBo7vw%e<5n;lyd zBn0mlpr|)5MYXkgh30B@{)#5NgH0yYKt`tcs}M>E^V%AjtNI~tRf`k8KHe>oO9*+N zHCNc(>NU^+VI?H>TXJ^Wou~$Uf$_jJs1YajRH<}N2B3rLTGJn_2|Tz9wHYodA}C8Ps5ZkzMFa&57oQ4v7_!v$$jZH9}A2nrZ3NP}uKTvS9* zz;HntRGZj3(}z43>Os<6fj(n2GwS`sED9|;es@%Hp4|l1O*Hiq(QZ>imR*f z_#ZaOGk<0BaNkr~+C?4=y{`=%%_3*mW=a)Tm z;VoZL~kBA Vaq#u&;0&1w%JuYSW*^z|{C_2{|C9g# literal 0 HcmV?d00001 diff --git a/build.fxbuild b/build.fxbuild new file mode 100644 index 0000000..a7511ff --- /dev/null +++ b/build.fxbuild @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/config.xml b/config.xml new file mode 100644 index 0000000..ada16c4 --- /dev/null +++ b/config.xml @@ -0,0 +1,10 @@ + + + +Project HomeFlix settings +ee3523 +0 +12.0 +1 +C:\Users\Jannik\Videos\Beispielfilme + diff --git a/src/Homeflix_Icon_64x64.png b/src/Homeflix_Icon_64x64.png new file mode 100644 index 0000000000000000000000000000000000000000..64787d6596cf95c8c1edd64d0a66386159c7a408 GIT binary patch literal 24056 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 JLIv}H{{!&({3!qc literal 0 HcmV?d00001 diff --git a/src/Homeflix_Poster.png b/src/Homeflix_Poster.png new file mode 100644 index 0000000000000000000000000000000000000000..9f2aa98324adbcda5d666971a96114811a3b62e1 GIT binary patch literal 30665 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 n=5IaxAO0X|5#;pxJ^-dpTFx>*NT literal 0 HcmV?d00001 diff --git a/src/application/DBController.java b/src/application/DBController.java new file mode 100644 index 0000000..958eb0a --- /dev/null +++ b/src/application/DBController.java @@ -0,0 +1,216 @@ +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;//für Dateien einlesen + +class DBController { + + @SuppressWarnings("unused") + private MainWindowController mainWindowController; + private static final DBController dbcontroller = new DBController(); + private static Connection connection; + private static final String DB_PATH = System.getProperty("user.dir") + "/" + "Homeflix.db"; // der Pfad der Datenbank-Datei + private String path; + File f; + File file[]; //ArrayList für die Dateien + + static { + try { + Class.forName("org.sqlite.JDBC"); //Datenbanktreiber + } catch (ClassNotFoundException e) { + System.err.println("Fehler beim Laden des JDBC-Treibers"); + e.printStackTrace(); + } + } + + public static void main(String input) { + DBController datenbank = DBController.getInstance(); //neues Datenbank-Objekt wird erstellt + datenbank.setPath(input); // Pfad zuweisen + datenbank.f = new File(datenbank.getPath()); // für Datenbank-Datei einlesen + datenbank.file = datenbank.f.listFiles(); // für Datenbank-Datei einlesen + datenbank.verbindeDatenbank(); + datenbank.fuelleDatenbank(); + //datenbank.defavorisieren("Frozen"); + //datenbank.favorisieren("Frozen"); + //datenbank.ausgebenTitel(); + //System.out.println("Pfad: " + datenbank.getPfad("Frozen")); + //System.out.println("Bewertung: " + datenbank.getFavStatus("Frozen")); + } + + DBController(){ + } + + private static DBController getInstance(){ + return dbcontroller; + } +// Die Datenbak wird mit Hilfe des JDBC-Treibers eingebunden + public void verbindeDatenbank() { + try { + if (connection != null) + return; + System.out.println("Erstelle Verbindung zur Datenbank..."); + connection = DriverManager.getConnection("jdbc:sqlite:" + DB_PATH); + if (!connection.isClosed()) + System.out.println("...Verbindung hergestellt"); + } catch (SQLException e) { + throw new RuntimeException(e); + } + + Runtime.getRuntime().addShutdownHook(new Thread() { + public void run() { + try { + if (!connection.isClosed() && connection != null) { + connection.close(); + if (connection.isClosed()) + System.out.println("Verbindung getrennt"); + } + } catch (SQLException e) { + e.printStackTrace(); + } + } + }); + } +// Die Dateien werden in die Datenbank geschrieben + public void fuelleDatenbank() { + + try { + System.out.println("Erstelle Einträge"); + Statement stmt = connection.createStatement(); + stmt.executeUpdate("DROP TABLE IF EXISTS filme;"); + stmt.executeUpdate("CREATE TABLE filme (titel, pfad, bewertung);"); // Tabelle "filme" und die Spalten "titel", "pfad", "bewertung" erstellen + + PreparedStatement ps = connection.prepareStatement("INSERT INTO filme VALUES (?, ?, ?);"); // SQL Befehl + + //System.out.println(file.length); + + for(int i=0;i!=file.length;i++) // Geht alle Dateien im Verzeichniss durch + { + //System.out.println(file[i].getName()); + ps.setString(1, ohneEndung(file[i].getName())); // definiert Name als String in der ersten Spalte + ps.setString(2,file[i].getName()); // definiert Pfad als String in der zweiten Spalte + ps.setInt(3, 0); // definiert Bewertung als Integer in der dritten Spalte + ps.addBatch(); // fügt den Eintrag hinzu + } + + connection.setAutoCommit(false); + ps.executeBatch(); // scheibt alle Einträge in die Datenbank + connection.setAutoCommit(true); + //connection.close(); + } catch (SQLException e) { + System.err.println("Konnte nicht ausgeführt werden"); + e.printStackTrace(); + } + } + + public void ausgeben(){ + System.out.println("Einträge ausgeben"); + try { + Statement stmt = connection.createStatement(); + mainWindowController = new MainWindowController(); + ResultSet rs = stmt.executeQuery("SELECT * FROM filme;"); + while (rs.next()) { +// MainWindowController mainWindowController = new MainWindowController(); + } + //rs.close(); +// mainWindowController.initTabel(); + + + } catch (SQLException e) { + System.err.println("Konnte nicht ausgeführt werden"); + e.printStackTrace(); + } + + + } +// Kontroll Methode, ob ein Film wirklich in der Datenbank ist + public String getTitel(String name){ + try { + Statement stmt = connection.createStatement(); + ResultSet rs = stmt.executeQuery("SELECT titel, pfad FROM filme WHERE titel = '"+name+"';" ); + return rs.getString("titel"); + } catch (SQLException e) { + System.err.println("Konnte nicht ausgeführt werden"); + e.printStackTrace(); + } + return "Error 404"; + } +// gibt den Pfad eines bestimmten Films + public String getPfad(String name){ + try { + Statement stmt = connection.createStatement(); + ResultSet rs = stmt.executeQuery("SELECT titel, pfad FROM filme WHERE titel = '"+name+"';" ); //SQL Befehl + return rs.getString("pfad"); + } catch (SQLException e) { + System.err.println("Konnte nicht ausgeführt werden"); + e.printStackTrace(); + } + return "Error 404"; + } +// gibt die Favorisierung eines bestimmten Films + public boolean getFavStatus(String name){ + try { + Statement stmt = connection.createStatement(); + ResultSet rs = stmt.executeQuery("SELECT titel, bewertung FROM filme WHERE titel = '"+name+"';" ); //SQL Befehl + System.out.println(rs.getInt("bewertung")); + if((rs.getInt("bewertung")) == 1){ + return true; + } + else{ + return false; + } + } catch (SQLException e) { + System.err.println("Konnte nicht ausgeführt werden"); + e.printStackTrace(); + return false; + } + } +// setzt die Defavorisierung eines bestimmten Films + public void defavorisieren(String name){ + System.out.println("setze Bewertung"); + try { + Statement stmt = connection.createStatement(); + String sql = ("UPDATE filme SET bewertung=0 WHERE titel='"+name+"';"); //SQL Befehl + stmt.executeUpdate(sql); + connection.setAutoCommit(false); + connection.setAutoCommit(true); + } catch (SQLException e) { + System.err.println("Konnte nicht ausgeführt werden"); + e.printStackTrace(); + } + } +// setzt die Favorisierung eines bestimmten Films + public void favorisieren(String name){ + System.out.println("setze Bewertung"); + try { + Statement stmt = connection.createStatement(); + String sql = ("UPDATE filme SET bewertung=1 WHERE titel='"+name+"';"); //SQL Befehl + stmt.executeUpdate(sql); + connection.setAutoCommit(false); + connection.setAutoCommit(true); + } catch (SQLException e) { + System.err.println("Konnte nicht ausgeführt werden"); + e.printStackTrace(); + } + } +//entfernt die Endung + private static String ohneEndung (String str) { + + if (str == null) return null; + int pos = str.lastIndexOf("."); + if (pos == -1) return str; + return str.substring(0, pos); + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path.replace("\\", "\\\\"); + } +} diff --git a/src/application/HomeFlix-Local_de_DE.properties b/src/application/HomeFlix-Local_de_DE.properties new file mode 100644 index 0000000..50ed795 --- /dev/null +++ b/src/application/HomeFlix-Local_de_DE.properties @@ -0,0 +1,15 @@ +# HomeFlix-Local_de_DE.properties German Local +info = Info +settings = Einstellungen +play = play +openFolder = Ordner \u00F6ffnen +chooseFolder = Ordner auswählen +fontSize = Schriftgr\u00F6\u00DFe: +checkUpdates = Auf Update pr\u00FCfen +autoUpdate = beim Start nach Updates suchen: +version = Version: +columnName = Name +columnRating = Bewertung +columnDatName = Datei Name +errorUpdate = Es ist ein Fehler aufgetreten! \n Um Hilfe zu erhalten besuchen Sie \nwww.kellerkinder.xyz oder support@kellerkinder.xyz +infoText = \nMaintainer: seilo@kellerkinder.xyz und \nhendrik.schutter@coptersicht.de \n(c) 2016 Kellerkinder www.kellerkinder.xyz \ No newline at end of file diff --git a/src/application/HomeFlix-Local_en_US.properties b/src/application/HomeFlix-Local_en_US.properties new file mode 100644 index 0000000..25a9919 --- /dev/null +++ b/src/application/HomeFlix-Local_en_US.properties @@ -0,0 +1,15 @@ +# HomeFlix-Local_en_US.properties US-English Local and default +info = Info +settings = Settings +play = play +openFolder = open Folder +chooseFolder = choose Directory +fontSize = font size: +checkUpdates = check for updates +autoUpdate = check at startup for updates: +version = Version: +columnName = Name +columnRating = Rating +columnDatName = File Name +errorUpdate = An error has occurred! \n To get help, visit \n nwww.kellerkinder.xyz or support@kellerkinder.xyz +infoText = \nMaintainer: seilo@kellerkinder.xyz and \nhendrik.schutter@coptersicht.de \n(c) 2016 Kellerkinder www.kellerkinder.xyz \ No newline at end of file diff --git a/src/application/Main.java b/src/application/Main.java new file mode 100644 index 0000000..b7248c6 --- /dev/null +++ b/src/application/Main.java @@ -0,0 +1,148 @@ +/** + * Project HomeFlix + * + * Copyright 2016 + * + * 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 + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301, USA. + * + */ +package application; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.Optional; +import java.util.Properties; + +import javafx.application.Application; +import javafx.fxml.FXMLLoader; +import javafx.scene.Scene; +import javafx.scene.control.Alert; +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; + +public class Main extends Application { + + public Stage primaryStage; + private String path; + private String color = "ee3523"; + private String autoUpdate = "0"; + private double size = 12; + private int local = 0; + Properties props = new Properties(); + private MainWindowController mainWindowController; + + @Override + public void start(Stage primaryStage) { + this.primaryStage = primaryStage; + mainWindow(); + } + + public void mainWindow(){ + File file = new File("config.xml"); + try { + FXMLLoader loader = new FXMLLoader(Main.class.getResource("MainWindow.fxml")); + AnchorPane pane = loader.load(); + primaryStage.setMinHeight(600.00); + primaryStage.setMinWidth(900.00); + primaryStage.setResizable(false); + primaryStage.setTitle("Project HomeFlix"); + primaryStage.getIcons().add(new Image(Main.class.getResourceAsStream("/Homeflix_Icon_64x64.png"))); //fügt Anwendungsicon hinzu + + + mainWindowController = loader.getController(); //verknüpfung von FXMLController und Controller Klasse + mainWindowController.setAutoUpdate(autoUpdate); //setzt autoupdate + mainWindowController.setMain(this); //aufruf setMain + + //prüft ob config.xml vorhanden, wenn nicht hole Pfad und schreibe Daten in Controller + if (file.exists() != true) { + mainWindowController.setPath(firstStart()); + mainWindowController.setColor(color); + mainWindowController.setSize(size); + mainWindowController.setAutoUpdate(autoUpdate); + mainWindowController.setLoaclUI(local); + mainWindowController.saveSettings(); + Runtime.getRuntime().exec("java -jar ProjectHomeFlix.jar"); //starte neu um Bugs zu verhindern + System.exit(0); //beendet sich selbst + }else{ + loadSettings(); + } + + mainWindowController.applyColor(); //setzt die Theme Farbe + mainWindowController.cbLocal.getSelectionModel().select(mainWindowController.getLocal()); //setzt local + mainWindowController.mainColor.setValue(Color.valueOf(mainWindowController.getColor())); + mainWindowController.loadData(); //läd die Daten im Controller + + Scene scene = new Scene(pane); //neue Scen um inhalt der stage anzuzeigen + + primaryStage.setScene(scene); + primaryStage.show(); //zeige scene + } 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.setTitle("Project HomeFlix"); + alert.setHeaderText("Es ist kein Stammverzeichniss für Filme angegeben!"); + alert.setContentText("Stammverzeichniss angeben?"); + + Optional result = alert.showAndWait(); + if (result.get() == ButtonType.OK){ + DirectoryChooser directoryChooser = new DirectoryChooser(); + File selectedDirectory = + directoryChooser.showDialog(primaryStage); + path = selectedDirectory.getAbsolutePath(); + + } else { + path = ""; + } + return path; + } + + //lädt die einstellungen aus der XML + public void loadSettings(){ + File configFile = new File("config.xml"); + try { + InputStream inputStream = new FileInputStream(configFile); + props.loadFromXML(inputStream); + path = props.getProperty("path"); + color = props.getProperty("color"); + autoUpdate = props.getProperty("autoUpdate"); + size = Double.parseDouble(props.getProperty("size")); + local = Integer.parseInt(props.getProperty("local")); + + inputStream.close(); + } catch (IOException e) { + // Auto-generated catch block + e.printStackTrace(); + } + } + + + public static void main(String[] args) { + launch(args); + } +} \ No newline at end of file diff --git a/src/application/MainWindow.fxml b/src/application/MainWindow.fxml new file mode 100644 index 0000000..e44b558 --- /dev/null +++ b/src/application/MainWindow.fxml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/application/MainWindowController.java b/src/application/MainWindowController.java new file mode 100644 index 0000000..cc4e46c --- /dev/null +++ b/src/application/MainWindowController.java @@ -0,0 +1,854 @@ +/** + * Project HomeFlix + * + * Copyright 2016 + * + * 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 + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301, USA. + * + */ +package application; + +import java.awt.Desktop; +import java.io.BufferedReader; +import java.io.DataInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.math.BigInteger; +import java.net.URL; +import java.nio.channels.Channels; +import java.nio.channels.ReadableByteChannel; +import java.util.Locale; +import java.util.Properties; +import java.util.ResourceBundle; +import java.util.Scanner; + +import com.eclipsesource.json.Json; +import com.eclipsesource.json.JsonObject; +import com.jfoenix.controls.JFXButton; +import com.jfoenix.controls.JFXColorPicker; +import com.jfoenix.controls.JFXDialog; +import com.jfoenix.controls.JFXSlider; +import com.jfoenix.controls.JFXTextArea; +import com.jfoenix.controls.JFXTextField; +import com.jfoenix.controls.JFXToggleButton; + +import javafx.beans.property.ReadOnlyObjectWrapper; +import javafx.beans.property.ReadOnlyStringWrapper; +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.geometry.Insets; +import javafx.scene.control.Alert; +import javafx.scene.control.Alert.AlertType; +import javafx.scene.control.ChoiceBox; +import javafx.scene.control.Label; +import javafx.scene.control.TreeItem; +import javafx.scene.control.TreeTableColumn; +import javafx.scene.control.TreeTableColumn.CellDataFeatures; +import javafx.scene.control.TreeTableView; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.layout.AnchorPane; +import javafx.scene.layout.VBox; +import javafx.scene.paint.Color; +import javafx.scene.text.Font; +import javafx.scene.text.FontWeight; +import javafx.stage.DirectoryChooser; + +public class MainWindowController { + @FXML + private AnchorPane anpane; + @FXML + private AnchorPane settingsan = new AnchorPane(); + @FXML + private VBox topVBox; + @FXML + private VBox menuBox = new VBox(); + @FXML + private VBox settingsBox = new VBox(); + @FXML + private TreeTableView treeTableViewfilm; + @FXML + private JFXTextArea ta1; + @FXML + private JFXButton menubtn; + @FXML + private JFXButton playbtn; + @FXML + private JFXButton openfolderbtn; + @FXML + private JFXButton returnBtn; + @FXML + private JFXButton forwardBtn; + @FXML + private JFXButton infoBtn = new JFXButton("Info"); + @FXML + private JFXButton demoBtn = new JFXButton("Beheben"); + @FXML + private JFXButton settingsBtn = new JFXButton("Settings"); + @FXML + private JFXButton updateBtn = new JFXButton("Auf Update prüfen"); + @FXML + private JFXButton directoryBtn = new JFXButton("Ordner auswählen"); + @FXML + private JFXToggleButton autoupdateBtn = new JFXToggleButton(); + @FXML + public JFXTextField tfPfad = new JFXTextField(); + @FXML + private JFXTextField tfsearch; + @FXML + public JFXColorPicker mainColor = new JFXColorPicker(); + @FXML + public ChoiceBox cbLocal = new ChoiceBox(); + @FXML + public JFXSlider sl1 = new JFXSlider(); + @FXML + private JFXDialog dialog = new JFXDialog(); + @FXML + private Label versionlbl = new Label(); + @FXML + private Label sizelbl = new Label("Schriftgröße:"); + @FXML + private Label aulbl = new Label("beim starten nach Updates suchen:"); + @FXML + private ImageView image1; + + @FXML + TreeItem root = new TreeItem<>(new uiData(1.0, "filme","1")); + @FXML + TreeTableColumn columnRating = new TreeTableColumn<>("Bewertung"); + @FXML + TreeTableColumn columnName = new TreeTableColumn<>("Name"); + @FXML + TreeTableColumn columnDatName = new TreeTableColumn<>("Datei Name"); + + private boolean menutrue = false; //merker für menubtn (öffnen oder schließen) + private boolean settingstrue = false; + private String version = "0.3.5"; + private String versionURL = "https://raw.githubusercontent.com/Seil0/Project-HomeFlix/master/version"; + private String downloadLink = ""; + private String updateDataURL = "https://raw.githubusercontent.com/Seil0/Project-HomeFlix/master/ProjectHomeFlix.jar"; + + private String errorUpdate; + private String infoText; + private String aktVersion; + private String path; + private String color; + private String Name; + private String datPath; + private String autoUpdate; + private double size; + private int last; + private int selected; + private int next; + private int local; + private File selectedFolder; + private ResourceBundle bundle; + + private ObservableList newDaten = FXCollections.observableArrayList(); + private ObservableList filterData = FXCollections.observableArrayList(); + private ObservableList locals = FXCollections.observableArrayList("english", "deutsch"); + private Image imHF = new Image("Homeflix_Poster.png"); + private ImageView menu_icon_black = new ImageView(new Image("menu_icon_black.png")); +// private ImageView menu_icon_white = new ImageView(new Image("menu_icon_white.png")); + private DirectoryChooser directoryChooser = new DirectoryChooser(); + Properties props = new Properties(); + + //wenn menubtn clicked + /** + * TODO fix directory bug under linux + * TODO change value of Text-color change + * TODO menu icon white + */ + @FXML + private void menubtnclicked(){ + if(menutrue == false){ + anpane.getChildren().addAll(menuBox); + + //infobtn clicked + infoBtn.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent event) { + Alert alert = new Alert(AlertType.INFORMATION); + alert.setTitle("Info"); + alert.setHeaderText("Project HomeFlix"); + alert.setContentText(infoText); + alert.showAndWait(); + } + }); + + //setteingsbtn clicked, deklarieren der actions der Objekte die bei settingsbtn angezeigt werden + settingsBtn.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event){ + if(settingstrue == false){ + anpane.getChildren().addAll(settingsBox); + + tfPfad.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent event){ + setPath(tfPfad.getText()); + saveSettings(); + } + }); + directoryBtn.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event){ + selectedFolder = directoryChooser.showDialog(null); + if(selectedFolder == null){ + System.out.println("No Directory selected"); + }else{ + setPath(selectedFolder.getAbsolutePath()); + saveSettings(); + tfPfad.setText(getPath()); + try { + Runtime.getRuntime().exec("java -jar ProjectHomeFlix.jar"); //starte neu + System.exit(0); //beendet sich selbst + } catch (IOException e) { + System.out.println("es ist ein Fehler aufgetreten"); + e.printStackTrace(); + } + } + } + }); + mainColor.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent event){ + editColor(mainColor.getValue().toString()); + applyColor(); + } + }); + sl1.valueProperty().addListener(new ChangeListener() { + @Override + public void changed(ObservableValue ov,Number old_val, Number new_val) { + setSize(sl1.getValue()); + ta1.setFont(Font.font("System", size)); + saveSettings(); + } + }); + + //updater + updateBtn.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event){ + update(); + } + }); + autoupdateBtn.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent event) { + if(autoUpdate.equals("0")){ + setAutoUpdate("1"); + saveSettings(); + }else{ + setAutoUpdate("0"); + saveSettings(); + } + } + }); + + settingstrue = true; + }else{ + anpane.getChildren().removeAll(settingsBox); + setPath(tfPfad.getText()); + saveSettings(); + settingstrue = false; + } + } + }); + + //demoBtn clicked + demoBtn.setOnAction(new EventHandler(){ + @Override + public void handle(ActionEvent event) { + /** + * TODO DBController + */ +// loadData(); + } + }); + + menutrue = true; + }else{ + anpane.getChildren().removeAll(menuBox); + menutrue = false; + } + if(settingstrue == true){ + anpane.getChildren().removeAll(settingsBox); + setPath(tfPfad.getText()); + saveSettings(); + settingstrue = false; + } + } + + @FXML + private void playbtnclicked(){ + try { + Desktop.getDesktop().open(new File(getPath()+"\\"+ datPath)); //öffnt die aktuell ausgewählte Datei + } catch (IOException e) { + // Auto-generated catch block + e.printStackTrace(); + } + } + + @FXML + private void openfolderbtnclicked(){ + try { + Desktop.getDesktop().open(new File(getPath())); //öffnet den aktuellen Pfad + } catch (IOException e) { + // Auto-generated catch block + e.printStackTrace(); + } + } + + @FXML + private void returnBtnclicked(){ + treeTableViewfilm.getSelectionModel().select(last); + } + + @FXML + private void forwardBtnclicked(){ + treeTableViewfilm.getSelectionModel().select(next); + } + + //"Main" Methode die beim start von der Klasse Main aufgerufen wird, initialiesirung der einzellnen UI-Objekte + @SuppressWarnings({ "static-access"}) + public void setMain(Main main) { + + loadSettings(); + initTabel(); + + infoBtn.setPrefWidth(130); + infoBtn.setPrefHeight(32); + infoBtn.setFont(Font.font("System", FontWeight.BOLD, 15)); + + settingsBtn.setPrefWidth(130); + settingsBtn.setPrefHeight(32); + settingsBtn.setFont(Font.font("System", FontWeight.BOLD, 15)); + + demoBtn.setPrefWidth(130); + demoBtn.setPrefHeight(32); + demoBtn.setFont(Font.font("System", FontWeight.BOLD, 15)); + demoBtn.setDisable(false); + + menubtn.setText(""); + menubtn.setMaxSize(32, 32); + + tfPfad.setPrefWidth(250); + tfPfad.setPromptText("Pfad"); + tfPfad.setText(getPath()); + + sl1.setMaxWidth(250); + sl1.setMin(2); + sl1.setMax(48); + sl1.setValue(getSize()); + + cbLocal.setItems(locals); + + updateBtn.setFont(Font.font("System", 12)); + + directoryBtn.setFont(Font.font("System", 12)); + directoryBtn.setMaxSize(180, 25); + + if(autoUpdate.equals("1")){ + autoupdateBtn.setSelected(true); + update(); + }else{ + autoupdateBtn.setSelected(false); + } + + versionlbl.setText("Version: "+version); + + menuBox.setSpacing(2.5); //Zeilenabstand + menuBox.setPadding(new Insets(2.5,0,0,2.5)); // abstand zum Rand + menuBox.getChildren().addAll(infoBtn, settingsBtn,demoBtn); + menuBox.setFillWidth(true); + + AnchorPane.setTopAnchor(menuBox, 33d); + AnchorPane.setBottomAnchor(menuBox, 0d); + + settingsBox.setStyle("-fx-background-color: #FFFFFF;"); + settingsBox.getChildren().add(settingsan); + + settingsan.getChildren().addAll(tfPfad, directoryBtn, mainColor, sizelbl, sl1, cbLocal, updateBtn, aulbl, autoupdateBtn, versionlbl); + + settingsan.setTopAnchor(tfPfad, 5d); + settingsan.setLeftAnchor(tfPfad, 5d); + + settingsan.setTopAnchor(directoryBtn, 5d); + settingsan.setLeftAnchor(directoryBtn, 260d); + + settingsan.setTopAnchor(mainColor, 40d); + settingsan.setLeftAnchor(mainColor, 5d); + + settingsan.setTopAnchor(sizelbl, 75d); + settingsan.setLeftAnchor(sizelbl, 5d); + + settingsan.setTopAnchor(sl1, 110d); + settingsan.setLeftAnchor(sl1, 5d); + + settingsan.setTopAnchor(cbLocal, 145d); + settingsan.setLeftAnchor(cbLocal, 5d); + + settingsan.setTopAnchor(updateBtn, 180d); + settingsan.setLeftAnchor(updateBtn, 5d); + + settingsan.setTopAnchor(aulbl, 215d); + settingsan.setLeftAnchor(aulbl, 5d); + + settingsan.setTopAnchor(autoupdateBtn, 230d); + settingsan.setLeftAnchor(autoupdateBtn, 5d); + + settingsan.setTopAnchor(versionlbl, 280d); + settingsan.setLeftAnchor(versionlbl, 5d); + + AnchorPane.setTopAnchor(settingsBox, 34d); + AnchorPane.setRightAnchor(settingsBox, 0d); + AnchorPane.setBottomAnchor(settingsBox, 0d); + AnchorPane.setLeftAnchor(settingsBox, 130d); + + ta1.setWrapText(true); + ta1.setEditable(false); + ta1.setFont(Font.font("System", getSize())); + + image1.setImage(imHF); + + tfsearch.textProperty().addListener(new ChangeListener() { + @SuppressWarnings("unchecked") + @Override + public void changed(ObservableValue observable,String oldValue, String newValue) { + int counter = newDaten.size(); + filterData.removeAll(filterData); + root.getChildren().remove(0,root.getChildren().size()); + + for(int i = 0; i < counter; i++){ + if(newDaten.get(i).getFilmName().toLowerCase().contains(tfsearch.getText().toLowerCase())){ + filterData.add(newDaten.get(i)); + } + } + + for(int i = 0; i < filterData.size(); i++){ + root.getChildren().addAll(new TreeItem(filterData.get(i))); //fügt daten zur Rootnode hinzu + } + } + }); + + cbLocal.getSelectionModel().selectedIndexProperty() + .addListener(new ChangeListener() { + public void changed(ObservableValue ov, Number value, Number new_value) { + setLocal(new_value.intValue()); + setLoaclUI(local); + saveSettings(); + } + }); + } + + //initialisierung der TreeTabelView + @SuppressWarnings("unchecked") + private void initTabel(){ + + root.setExpanded(true); + + columnRating.setMaxWidth(120); + columnName.setMaxWidth(240); + columnDatName.setMaxWidth(0); + + treeTableViewfilm.setRoot(root); + treeTableViewfilm.setColumnResizePolicy( TreeTableView.CONSTRAINED_RESIZE_POLICY ); + treeTableViewfilm.setShowRoot(false); + + //inhalt in Zelle schreiben + columnName.setCellValueFactory((CellDataFeatures p) -> + new ReadOnlyStringWrapper(p.getValue().getValue().getFilmName())); + + columnRating.setCellValueFactory((CellDataFeatures p) -> + new ReadOnlyObjectWrapper(p.getValue().getValue().getFilmBewertung())); + + columnDatName.setCellValueFactory((CellDataFeatures p) -> + new ReadOnlyStringWrapper(p.getValue().getValue().getDataName())); + + treeTableViewfilm.getColumns().addAll(columnName, columnRating, columnDatName); + + //Changelistener für TreeTable + treeTableViewfilm.getSelectionModel().selectedItemProperty().addListener(new ChangeListener() { + + @Override + public void changed(ObservableValue observable, Object oldVal, Object newVal) { + // last = selected; //für autoplay + selected = treeTableViewfilm.getSelectionModel().getSelectedIndex(); // holt aktuelles Item + last = selected - 1; + next = selected + 1; + Name = columnName.getCellData(selected); // holt Namen des Aktuelle Items aus der ColumnName + datPath = columnDatName.getCellData(selected); // holt den aktuellen Datei Pfad aus der ColumnDatName + ta1.setText(""); // löscht Text in ta1 + apiAbfrage(Name); // startet die api abfrage + ta1.positionCaret(0); // setzt die startposition des Cursors in + // ta1 + } + }); + + treeTableViewfilm.getColumns().get(2).setVisible(false); //blendet die Column mit den Dateinamen aus (wichtig um sie abzuspielen) + } + + //prüft auf Update und füht es gegebenenfalls aus + private void update(){ + + System.out.println("check for updates ..."); + try { + URL url = new URL(versionURL); //URL der Datei mit aktueller Versionsnummer + BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); + aktVersion = in.readLine(); //schreibt inputstream in String + in.close(); + } catch (IOException e1) { + // Auto-generated catch block + e1.printStackTrace(); + } + System.out.println("Version: "+version+", Update: "+aktVersion); + + //vergleicht die Versionsnummern, bei aktversion > version wird ein Update durchgrführt + int iversion = Integer.parseInt(version.replace(".", "")); + int iaktVersion = Integer.parseInt(aktVersion.replace(".", "")); + + if(iversion >= iaktVersion){ + updateBtn.setText("kein Update verfügbar"); + System.out.println("kein Update verfügbar"); + }else{ + updateBtn.setText("Update verfügbar"); + System.out.println("Update verfügbar"); + try { + URL website; + URL downloadURL = new URL(downloadLink); + BufferedReader in = new BufferedReader(new InputStreamReader(downloadURL.openStream())); + //updateDataURL = in.readLine(); + website = new URL(updateDataURL); //Update URL + ReadableByteChannel rbc = Channels.newChannel(website.openStream()); //öffnet neuen Stream/Channel + FileOutputStream fos = new FileOutputStream("ProjectHomeFlix.jar"); //neuer fileoutputstram für ProjectHomeFLix.jar + fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); //holt datei von 0 bis max größe + fos.close(); //schließt den fos (extrem wichtig!) + Runtime.getRuntime().exec("java -jar ProjectHomeFlix.jar"); //starte neu + System.exit(0); //beendet sich selbst + } catch (IOException e) { + //Falls ein Fehler auftritt (ungetestet) + e.printStackTrace(); + Alert alert = new Alert(AlertType.ERROR); + alert.setTitle("Error"); + alert.setHeaderText(""); + alert.setContentText(errorUpdate); + alert.showAndWait(); + e.printStackTrace(); + } + } + } + + //lädt die Daten im angegeben Ordner in newDaten + public void loadData(){ + 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 uiData(5.0, titel ,data)); + } + for(int i = 0; i < newDaten.size(); i++){ + root.getChildren().add(new TreeItem(newDaten.get(i))); //fügt daten zur Rootnode hinzu + } + } + } + + //entfernt die Endung vom String + private String ohneEndung (String str) { + if (str == null) return null; + int pos = str.lastIndexOf("."); + if (pos == -1) return str; + return str.substring(0, pos); + } + + //setzt die Farben für die UI-Elemente + public void applyColor(){ + String style = "-fx-background-color: #"+getColor()+";"; + String btnStyle = "-fx-button-type: RAISED; -fx-background-color: #"+getColor()+"; -fx-text-fill: BLACK;"; + String btnStylewhite = "-fx-button-type: RAISED; -fx-background-color: #"+getColor()+"; -fx-text-fill: WHITE;"; + BigInteger icolor = new BigInteger(getColor(),16); + BigInteger ccolor = new BigInteger("78909cff",16); + + menuBox.setStyle(style); + topVBox.setStyle(style); + tfsearch.setFocusColor(Color.valueOf(getColor())); + tfPfad.setFocusColor(Color.valueOf(getColor())); + + if(icolor.compareTo(ccolor) == -1){ + settingsBtn.setStyle("-fx-text-fill: WHITE;"); + infoBtn.setStyle("-fx-text-fill: WHITE;"); + demoBtn.setStyle("-fx-text-fill: WHITE;"); + directoryBtn.setStyle(btnStylewhite); + updateBtn.setStyle(btnStylewhite); + playbtn.setStyle(btnStylewhite); + openfolderbtn.setStyle(btnStylewhite); + returnBtn.setStyle(btnStylewhite); + forwardBtn.setStyle(btnStylewhite); +//TODO menubtn.setGraphic(menu_icon_white); + menubtn.setGraphic(menu_icon_black); + }else{ + settingsBtn.setStyle("-fx-text-fill: BLACK;"); + infoBtn.setStyle("-fx-text-fill: BLACK;"); + demoBtn.setStyle("-fx-text-fill: BLACK;"); + directoryBtn.setStyle(btnStyle); + updateBtn.setStyle(btnStyle); + playbtn.setStyle(btnStyle); + openfolderbtn.setStyle(btnStyle); + returnBtn.setStyle(btnStyle); + forwardBtn.setStyle(btnStyle); + menubtn.setGraphic(menu_icon_black); + } + } + + + + public void setLoaclUI(int local){ + switch(local){ + case 0: bundle = ResourceBundle.getBundle("application.HomeFlix-Local", Locale.US); //us_english + break; + case 1: bundle = ResourceBundle.getBundle("application.HomeFlix-Local", Locale.GERMAN); //german + break; + default:bundle = ResourceBundle.getBundle("application.HomeFlix-Local", Locale.US); //default local + break; + } + settingsBtn.setText(bundle.getString("settings")); + infoBtn.setText(bundle.getString("info")); + playbtn.setText(bundle.getString("play")); + openfolderbtn.setText(bundle.getString("openFolder")); + sizelbl.setText(bundle.getString("fontSize")); + updateBtn.setText(bundle.getString("checkUpdates")); + aulbl.setText(bundle.getString("autoUpdate")); + versionlbl.setText(bundle.getString("version")+" "+version); + columnName.setText(bundle.getString("columnName")); + columnRating.setText(bundle.getString("columnRating")); + columnDatName.setText(bundle.getString("columnDatName")); + errorUpdate = bundle.getString("errorUpdate"); + infoText = bundle.getString("version")+" "+version+bundle.getString("infoText"); + } + + //speichert die Einstellungen + public void saveSettings(){ + File configFile = new File("config.xml"); //neue Datei "config.xml" + try { + props.setProperty("path", getPath()); //setzt pfad in propselement + props.setProperty("color", getColor()); + props.setProperty("autoUpdate", getAutoUpdate()); + props.setProperty("size", getSize().toString()); + props.setProperty("local", Integer.toString(getLocal())); + OutputStream outputStream = new FileOutputStream(configFile); //neuer outputstream + props.storeToXML(outputStream, "Project HomeFlix settings"); + outputStream.close(); + } catch (IOException e) { + System.out.println("An error has occurred!"); + e.printStackTrace(); + } + } + + //lädt die Einstellungen + public void loadSettings(){ + File configFile = new File("config.xml"); + try { + InputStream inputStream = new FileInputStream(configFile); + props.loadFromXML(inputStream); + path = props.getProperty("path"); //setzt Propselement in Pfad + color = props.getProperty("color"); + size = Double.parseDouble(props.getProperty("size")); + autoUpdate = props.getProperty("autoUpdate"); + local = Integer.parseInt(props.getProperty("local")); + inputStream.close(); + } catch (IOException e) { + System.out.println("An error has occurred!"); + e.printStackTrace(); + } + } + + //getter Und setter + public void setColor(String input){ + this.color = input; + } + + public String getColor(){ + return color; + } + + //entfernt 0x von dem rückgabe wert des Colorpickers + private void editColor(String input){ + StringBuilder sb = new StringBuilder(input); + sb.delete(0, 2); + this.color = sb.toString(); + saveSettings(); + } + + public void setPath(String input){ + this.path = input; + } + + public String getPath(){ + return path; + } + + public void setSize(Double input){ + this.size = input; + } + + public Double getSize(){ + return size; + } + + public void setAutoUpdate(String input){ + this.autoUpdate = input; + } + + public String getAutoUpdate(){ + return autoUpdate; + } + + public void setLocal(int input){ + this.local = input; + } + + public int getLocal(){ + return local; + } + + //methode der API-Abfrage + @SuppressWarnings("deprecation") + private void apiAbfrage(String input){ + URL url = null; + Scanner sc = null; + String apiurl = "https://www.omdbapi.com/?"; //API URL + String moviename = null; + String dataurl = null; + String retdata = null; + InputStream is = null; + DataInputStream dis = null; + + try { + + // hohlen des Filmtitels + sc = new Scanner(System.in); + moviename = input; + + // für keinen oder "" Filmtitel + if (moviename == null || moviename.equals("")) { + System.out.println("No movie found"); + } + + //entfernen ungewolter leerzeichen + moviename = moviename.trim(); + + // ersetzen der Leerzeichen durch + für api-abfrage + moviename = moviename.replace(" ", "+"); + + //URL wird zusammengestellt abfragetypen: http,json,xml (muss json sein um späteres trennen zu ermöglichen) + dataurl = apiurl + "t=" + moviename + "&plot=full&r=json"; + + url = new URL(dataurl); + is = url.openStream(); + dis = new DataInputStream(is); + + // lesen der Daten aus dem Antwort Stream + while ((retdata = dis.readLine()) != null) { + //retdata in json object parsen und anschließend das json Objekt "zerschneiden" + System.out.println(retdata); + JsonObject object = Json.parse(retdata).asObject(); + String titel = object.getString("Title", ""); + String year = object.getString("Year", ""); + String rated = object.getString("Rated", ""); + String released = object.getString("Released", ""); + String runtime = object.getString("Runtime", ""); + String genre = object.getString("Genre", ""); + String director = object.getString("Director", ""); + String writer = object.getString("Writer", ""); + String actors = object.getString("Actors", ""); + String plot = object.getString("Plot", ""); + String language = object.getString("Language", ""); + String country = object.getString("Country", ""); + String awards = object.getString("Awards", ""); + String posterURL = object.getString("Poster", ""); + String metascore = object.getString("Metascore", ""); + String imdbRating = object.getString("imdbRating", ""); + @SuppressWarnings("unused") + String imdbVotes = object.getString("imdbVotes", ""); + @SuppressWarnings("unused") + String imdbID = object.getString("imdbID", ""); + String type = object.getString("Type", ""); + String response = object.getString("Response", ""); + + if(response.equals("False")){ + ta1.appendText("Kein Film mit diesem Titel gefunden!"); + Image im2 = new Image("http://publicdomainvectors.org/photos/jean_victor_balin_cross.png"); + image1.setImage(im2); + }else{ + //ausgabe des Textes in ta1 in jeweils neuer Zeile + ta1.appendText("Titel: "+titel+"\n"); + ta1.appendText("Jahr: "+ year+"\n"); + ta1.appendText("Einstufung: "+rated+"\n"); + ta1.appendText("Veröffentlicht am: "+released+"\n"); + ta1.appendText("Laufzeit: "+runtime+"\n"); + ta1.appendText("Genre: "+genre+"\n"); + ta1.appendText("Regisseur: "+director+"\n"); + ta1.appendText("Autor: "+writer+"\n"); + ta1.appendText("Schauspieler: "+actors+"\n"); + ta1.appendText("Beschreibung: "+plot+"\n"); + ta1.appendText("Original Sprache: "+language+"\n"); + ta1.appendText("Produktionsland: "+country+"\n"); + ta1.appendText("Auszeichnungen: "+awards+"\n"); + ta1.appendText("Metascore: "+metascore+"\n"); + ta1.appendText("imdb Bewertung: "+imdbRating+"\n"); + ta1.appendText("Type: "+type+"\n"); + + Image im1 = new Image(posterURL); + image1.setImage(im1); + } + } + + } catch (Exception e) { + System.out.println(e); + } finally { + try { + //schließt datainputStream, InputStream,Scanner + if (dis != null) { + dis.close(); + } + + if (is != null) { + is.close(); + } + + if (sc != null) { + sc.close(); + } + } catch (Exception e2) { + ; + } + } + } + +} diff --git a/src/application/application.css b/src/application/application.css new file mode 100644 index 0000000..83d6f33 --- /dev/null +++ b/src/application/application.css @@ -0,0 +1 @@ +/* JavaFX CSS - Leave this comment until you have at least create one rule which uses -fx-Property */ \ No newline at end of file diff --git a/src/application/uiData.java b/src/application/uiData.java new file mode 100644 index 0000000..f78b8d7 --- /dev/null +++ b/src/application/uiData.java @@ -0,0 +1,57 @@ +package application; + +import javafx.beans.property.DoubleProperty; +import javafx.beans.property.SimpleDoubleProperty; +import javafx.beans.property.SimpleStringProperty; +import javafx.beans.property.StringProperty; + +public class uiData { + + private DoubleProperty filmBewertung = new SimpleDoubleProperty(); + private StringProperty filmName = new SimpleStringProperty(); + private StringProperty dataName = new SimpleStringProperty(); + + //uiData ist der Typ der Daten in der TreeTabelView + public uiData (final Double filmBewertung, final String filmName, final String dataName) { + this.filmBewertung.set(filmBewertung); + this.filmName.set(filmName); + this.dataName.set(dataName); + } + + public Double getFilmBewertung() { + return filmBewertung.get(); + } + + public String getFilmName() { + return filmName.get(); + } + + public String getDataName() { + return dataName.get(); + } + + + public void setFilmBewertung(Double filmBewertung) { + this.filmBewertung.set(filmBewertung); + } + + public void setFilmName(String filmName) { + this.filmName.set(filmName); + } + + public void setDataName(StringProperty dataName) { + this.dataName = dataName; + } + + public DoubleProperty FilmBewertungProperty(){ + return filmBewertung; + } + + public StringProperty FilmNameProperty(){ + return filmName; + } + + public StringProperty DataNameProperty(){ + return dataName; + } +} diff --git a/src/menu_icon_black.png b/src/menu_icon_black.png new file mode 100644 index 0000000000000000000000000000000000000000..19711de08f1d419001417529e33550c3d8eacb89 GIT binary patch literal 14700 zcmeI3e~c4F6vsz{Mo-}{6A)3>MGXYo-EP~XUD^_C58K3^=iL$R5+m&GPVd(1?v~v> z+B-=^B?iQZo<~B!KNK`38ZTnvA3}nOLBwD29}S5lCI%8C8c8t0pouuU?X|DHmI1?` zv)3Q*X1?#ena{kL?mxS`ulLb~T}!(VLJM=*Oh5U)&wJl?EBRb2&K@FPx0kZR4nm7g zc<-C`tzL8wLa~+l;E+3%e@s>_BdBQB2o6?^5>X?RSXU`2>Ns|}5j?7!N&dpIPkBz) zlKiGU?UR-6wnsAdm?`J?v9Dcn&k8K+-=8e7;RHKZqGJ?poX-qr!zQN!a_fG ztO;AiJ=@4sRBuBg#i~*FbF~|p=6FGghnG! z*6T`6TSdzz!@{X>LTJ|vy!={|bEe}eriyc!6lnH_6x+exo=fs`o34J0)lVtU$KSiMqI&09O7*q` z))GQfYhze-&zhV5e;2SCAGmkUQ69tQ)izW$l&|U>#IXu)S+Vi@QBo7vw%e<5n;lyd zBn0mlpr|)5MYXkgh30B@{)#5NgH0yYKt`tcs}M>E^V%AjtNI~tRf`k8KHe>oO9*+N zHCNc(>NU^+VI?H>TXJ^Wou~$Uf$_jJs1YajRH<}N2B3rLTGJn_2|Tz9wHYodA}C8Ps5ZkzMFa&57oQ4v7_!v$$jZH9}A2nrZ3NP}uKTvS9* zz;HntRGZj3(}z43>Os<6fj(n2GwS`sED9|;es@%Hp4|l1O*Hiq(QZ>imR*f z_#ZaOGk<0BaNkr~+C?4=y{`=%%_3*mW=a)Tm z;VoZL~kBA Vaq#u&;0&1w%JuYSW*^z|{C_2{|C9g# literal 0 HcmV?d00001