@ -3,9 +3,10 @@
 | 
			
		||||
	<classpathentry kind="src" path="src"/>
 | 
			
		||||
	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 | 
			
		||||
	<classpathentry kind="con" path="org.eclipse.fx.ide.jdt.core.JAVAFX_CONTAINER"/>
 | 
			
		||||
	<classpathentry kind="lib" path="C:/Users/Jannik/workspace/Project HomeFlix/src/libraries/jfoenix.jar"/>
 | 
			
		||||
	<classpathentry kind="lib" path="C:/Users/Jannik/workspace/Project HomeFlix/src/libraries/minimal-json-0.9.4.jar"/>
 | 
			
		||||
	<classpathentry kind="lib" path="C:/Users/Jannik/workspace/Project HomeFlix/src/libraries/commons-lang3-3.5.jar"/>
 | 
			
		||||
	<classpathentry kind="lib" path="C:/Users/Jannik/workspace/Project HomeFlix/src/libraries/sqlite-jdbc-3.15.1.jar"/>
 | 
			
		||||
	<classpathentry kind="lib" path="src/libraries/minimal-json-0.9.4.jar"/>
 | 
			
		||||
	<classpathentry kind="lib" path="src/libraries/commons-lang3-3.5.jar"/>
 | 
			
		||||
	<classpathentry kind="lib" path="src/libraries/jfoenix-1.1.0.jar"/>
 | 
			
		||||
	<classpathentry kind="lib" path="src/libraries/sqlite-jdbc-3.16.1.jar"/>
 | 
			
		||||
	<classpathentry kind="lib" path="C:/Users/Jannik/Downloads/flow-8.0.7.jar"/>
 | 
			
		||||
	<classpathentry kind="output" path="bin"/>
 | 
			
		||||
</classpath>
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1
									
								
								.project
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								.project
									
									
									
									
									
								
							@ -19,5 +19,6 @@
 | 
			
		||||
	<natures>
 | 
			
		||||
		<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
 | 
			
		||||
		<nature>org.eclipse.jdt.core.javanature</nature>
 | 
			
		||||
		<nature>org.eclipse.fx.ide.css.nature</nature>
 | 
			
		||||
	</natures>
 | 
			
		||||
</projectDescription>
 | 
			
		||||
 | 
			
		||||
@ -1,5 +1,6 @@
 | 
			
		||||
# Project-HomeFlix
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Project HomeFlix is a Kellerkinder Project, that alowes you to sort all your local saved movies in clean UI.     
 | 
			
		||||
This is the master branch, it is **only merged** with dev if a **new release** is out.     
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							@ -16,11 +16,13 @@
 | 
			
		||||
<?import javafx.scene.layout.HBox?>
 | 
			
		||||
<?import javafx.scene.layout.VBox?>
 | 
			
		||||
<?import javafx.scene.text.Font?>
 | 
			
		||||
<?import javafx.scene.text.TextFlow?>
 | 
			
		||||
 | 
			
		||||
<AnchorPane fx:id="anpane" prefHeight="600.0" prefWidth="900.0" xmlns="http://javafx.com/javafx/8.0.60" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.MainWindowController">
 | 
			
		||||
<AnchorPane fx:id="anpane" prefHeight="600.0" prefWidth="950.0" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.MainWindowController">
 | 
			
		||||
	<children>
 | 
			
		||||
		<TreeTableView fx:id="treeTableViewfilm" layoutX="14.0" layoutY="88.0" prefHeight="400.0" prefWidth="360.0" AnchorPane.bottomAnchor="12.0" AnchorPane.leftAnchor="12.0" AnchorPane.topAnchor="88.0" />
 | 
			
		||||
		<JFXTextArea fx:id="ta1" layoutX="385.0" layoutY="42.0" maxWidth="503.0" minWidth="275.0" prefHeight="546.0" prefWidth="293.0" AnchorPane.bottomAnchor="12.0" AnchorPane.leftAnchor="385.0" AnchorPane.rightAnchor="222.0" AnchorPane.topAnchor="44.0" />
 | 
			
		||||
		<TreeTableView fx:id="treeTableViewfilm" layoutX="14.0" layoutY="88.0" prefHeight="400.0" prefWidth="360.0" AnchorPane.bottomAnchor="12.0" AnchorPane.leftAnchor="12.0" AnchorPane.rightAnchor="553.0" AnchorPane.topAnchor="88.0" />
 | 
			
		||||
		<JFXTextArea fx:id="ta1" layoutX="385.0" layoutY="42.0" maxWidth="503.0" minWidth="275.0" prefHeight="546.0" prefWidth="293.0" AnchorPane.bottomAnchor="12.0" AnchorPane.leftAnchor="410.0" AnchorPane.rightAnchor="222.0" AnchorPane.topAnchor="44.0" />
 | 
			
		||||
      <TextFlow fx:id="textFlow" layoutX="496.0" layoutY="131.0" prefHeight="200.0" prefWidth="200.0" visible="false" AnchorPane.bottomAnchor="15.0" AnchorPane.leftAnchor="410.0" AnchorPane.rightAnchor="220.0" AnchorPane.topAnchor="44.0" />
 | 
			
		||||
		<JFXButton fx:id="playbtn" contentDisplay="CENTER" layoutX="690.0" layoutY="363.0" onAction="#playbtnclicked" prefHeight="25.0" prefWidth="198.0" AnchorPane.bottomAnchor="212.0" AnchorPane.rightAnchor="12.0">
 | 
			
		||||
         <font>
 | 
			
		||||
            <Font name="System Bold" size="14.0" />
 | 
			
		||||
@ -29,7 +31,7 @@
 | 
			
		||||
         <font>
 | 
			
		||||
            <Font name="System Bold" size="14.0" />
 | 
			
		||||
         </font></JFXButton>
 | 
			
		||||
		<JFXTextField fx:id="tfsearch" layoutX="12.0" layoutY="44.0" maxWidth="477.0" minWidth="359.0" prefHeight="31.0" prefWidth="359.0" promptText="Suche ..." AnchorPane.leftAnchor="12.0" AnchorPane.topAnchor="44.0">
 | 
			
		||||
		<JFXTextField fx:id="tfsearch" layoutX="12.0" layoutY="44.0" maxWidth="477.0" minWidth="359.0" prefHeight="31.0" prefWidth="359.0" promptText="Suche ..." AnchorPane.leftAnchor="12.0" AnchorPane.rightAnchor="553.0" AnchorPane.topAnchor="44.0">
 | 
			
		||||
         <font>
 | 
			
		||||
            <Font name="Arial" size="12.0" />
 | 
			
		||||
         </font></JFXTextField>
 | 
			
		||||
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								bin/application/MainWindowController$5.class
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								bin/application/MainWindowController$5.class
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								bin/application/MainWindowController$6.class
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								bin/application/MainWindowController$6.class
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								bin/application/MainWindowController$7.class
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								bin/application/MainWindowController$7.class
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										202
									
								
								bin/libraries/Licenses/Apache_License.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										202
									
								
								bin/libraries/Licenses/Apache_License.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,202 @@
 | 
			
		||||
 | 
			
		||||
                                 Apache License
 | 
			
		||||
                           Version 2.0, January 2004
 | 
			
		||||
                        http://www.apache.org/licenses/
 | 
			
		||||
 | 
			
		||||
   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
 | 
			
		||||
 | 
			
		||||
   1. Definitions.
 | 
			
		||||
 | 
			
		||||
      "License" shall mean the terms and conditions for use, reproduction,
 | 
			
		||||
      and distribution as defined by Sections 1 through 9 of this document.
 | 
			
		||||
 | 
			
		||||
      "Licensor" shall mean the copyright owner or entity authorized by
 | 
			
		||||
      the copyright owner that is granting the License.
 | 
			
		||||
 | 
			
		||||
      "Legal Entity" shall mean the union of the acting entity and all
 | 
			
		||||
      other entities that control, are controlled by, or are under common
 | 
			
		||||
      control with that entity. For the purposes of this definition,
 | 
			
		||||
      "control" means (i) the power, direct or indirect, to cause the
 | 
			
		||||
      direction or management of such entity, whether by contract or
 | 
			
		||||
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
 | 
			
		||||
      outstanding shares, or (iii) beneficial ownership of such entity.
 | 
			
		||||
 | 
			
		||||
      "You" (or "Your") shall mean an individual or Legal Entity
 | 
			
		||||
      exercising permissions granted by this License.
 | 
			
		||||
 | 
			
		||||
      "Source" form shall mean the preferred form for making modifications,
 | 
			
		||||
      including but not limited to software source code, documentation
 | 
			
		||||
      source, and configuration files.
 | 
			
		||||
 | 
			
		||||
      "Object" form shall mean any form resulting from mechanical
 | 
			
		||||
      transformation or translation of a Source form, including but
 | 
			
		||||
      not limited to compiled object code, generated documentation,
 | 
			
		||||
      and conversions to other media types.
 | 
			
		||||
 | 
			
		||||
      "Work" shall mean the work of authorship, whether in Source or
 | 
			
		||||
      Object form, made available under the License, as indicated by a
 | 
			
		||||
      copyright notice that is included in or attached to the work
 | 
			
		||||
      (an example is provided in the Appendix below).
 | 
			
		||||
 | 
			
		||||
      "Derivative Works" shall mean any work, whether in Source or Object
 | 
			
		||||
      form, that is based on (or derived from) the Work and for which the
 | 
			
		||||
      editorial revisions, annotations, elaborations, or other modifications
 | 
			
		||||
      represent, as a whole, an original work of authorship. For the purposes
 | 
			
		||||
      of this License, Derivative Works shall not include works that remain
 | 
			
		||||
      separable from, or merely link (or bind by name) to the interfaces of,
 | 
			
		||||
      the Work and Derivative Works thereof.
 | 
			
		||||
 | 
			
		||||
      "Contribution" shall mean any work of authorship, including
 | 
			
		||||
      the original version of the Work and any modifications or additions
 | 
			
		||||
      to that Work or Derivative Works thereof, that is intentionally
 | 
			
		||||
      submitted to Licensor for inclusion in the Work by the copyright owner
 | 
			
		||||
      or by an individual or Legal Entity authorized to submit on behalf of
 | 
			
		||||
      the copyright owner. For the purposes of this definition, "submitted"
 | 
			
		||||
      means any form of electronic, verbal, or written communication sent
 | 
			
		||||
      to the Licensor or its representatives, including but not limited to
 | 
			
		||||
      communication on electronic mailing lists, source code control systems,
 | 
			
		||||
      and issue tracking systems that are managed by, or on behalf of, the
 | 
			
		||||
      Licensor for the purpose of discussing and improving the Work, but
 | 
			
		||||
      excluding communication that is conspicuously marked or otherwise
 | 
			
		||||
      designated in writing by the copyright owner as "Not a Contribution."
 | 
			
		||||
 | 
			
		||||
      "Contributor" shall mean Licensor and any individual or Legal Entity
 | 
			
		||||
      on behalf of whom a Contribution has been received by Licensor and
 | 
			
		||||
      subsequently incorporated within the Work.
 | 
			
		||||
 | 
			
		||||
   2. Grant of Copyright License. Subject to the terms and conditions of
 | 
			
		||||
      this License, each Contributor hereby grants to You a perpetual,
 | 
			
		||||
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
 | 
			
		||||
      copyright license to reproduce, prepare Derivative Works of,
 | 
			
		||||
      publicly display, publicly perform, sublicense, and distribute the
 | 
			
		||||
      Work and such Derivative Works in Source or Object form.
 | 
			
		||||
 | 
			
		||||
   3. Grant of Patent License. Subject to the terms and conditions of
 | 
			
		||||
      this License, each Contributor hereby grants to You a perpetual,
 | 
			
		||||
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
 | 
			
		||||
      (except as stated in this section) patent license to make, have made,
 | 
			
		||||
      use, offer to sell, sell, import, and otherwise transfer the Work,
 | 
			
		||||
      where such license applies only to those patent claims licensable
 | 
			
		||||
      by such Contributor that are necessarily infringed by their
 | 
			
		||||
      Contribution(s) alone or by combination of their Contribution(s)
 | 
			
		||||
      with the Work to which such Contribution(s) was submitted. If You
 | 
			
		||||
      institute patent litigation against any entity (including a
 | 
			
		||||
      cross-claim or counterclaim in a lawsuit) alleging that the Work
 | 
			
		||||
      or a Contribution incorporated within the Work constitutes direct
 | 
			
		||||
      or contributory patent infringement, then any patent licenses
 | 
			
		||||
      granted to You under this License for that Work shall terminate
 | 
			
		||||
      as of the date such litigation is filed.
 | 
			
		||||
 | 
			
		||||
   4. Redistribution. You may reproduce and distribute copies of the
 | 
			
		||||
      Work or Derivative Works thereof in any medium, with or without
 | 
			
		||||
      modifications, and in Source or Object form, provided that You
 | 
			
		||||
      meet the following conditions:
 | 
			
		||||
 | 
			
		||||
      (a) You must give any other recipients of the Work or
 | 
			
		||||
          Derivative Works a copy of this License; and
 | 
			
		||||
 | 
			
		||||
      (b) You must cause any modified files to carry prominent notices
 | 
			
		||||
          stating that You changed the files; and
 | 
			
		||||
 | 
			
		||||
      (c) You must retain, in the Source form of any Derivative Works
 | 
			
		||||
          that You distribute, all copyright, patent, trademark, and
 | 
			
		||||
          attribution notices from the Source form of the Work,
 | 
			
		||||
          excluding those notices that do not pertain to any part of
 | 
			
		||||
          the Derivative Works; and
 | 
			
		||||
 | 
			
		||||
      (d) If the Work includes a "NOTICE" text file as part of its
 | 
			
		||||
          distribution, then any Derivative Works that You distribute must
 | 
			
		||||
          include a readable copy of the attribution notices contained
 | 
			
		||||
          within such NOTICE file, excluding those notices that do not
 | 
			
		||||
          pertain to any part of the Derivative Works, in at least one
 | 
			
		||||
          of the following places: within a NOTICE text file distributed
 | 
			
		||||
          as part of the Derivative Works; within the Source form or
 | 
			
		||||
          documentation, if provided along with the Derivative Works; or,
 | 
			
		||||
          within a display generated by the Derivative Works, if and
 | 
			
		||||
          wherever such third-party notices normally appear. The contents
 | 
			
		||||
          of the NOTICE file are for informational purposes only and
 | 
			
		||||
          do not modify the License. You may add Your own attribution
 | 
			
		||||
          notices within Derivative Works that You distribute, alongside
 | 
			
		||||
          or as an addendum to the NOTICE text from the Work, provided
 | 
			
		||||
          that such additional attribution notices cannot be construed
 | 
			
		||||
          as modifying the License.
 | 
			
		||||
 | 
			
		||||
      You may add Your own copyright statement to Your modifications and
 | 
			
		||||
      may provide additional or different license terms and conditions
 | 
			
		||||
      for use, reproduction, or distribution of Your modifications, or
 | 
			
		||||
      for any such Derivative Works as a whole, provided Your use,
 | 
			
		||||
      reproduction, and distribution of the Work otherwise complies with
 | 
			
		||||
      the conditions stated in this License.
 | 
			
		||||
 | 
			
		||||
   5. Submission of Contributions. Unless You explicitly state otherwise,
 | 
			
		||||
      any Contribution intentionally submitted for inclusion in the Work
 | 
			
		||||
      by You to the Licensor shall be under the terms and conditions of
 | 
			
		||||
      this License, without any additional terms or conditions.
 | 
			
		||||
      Notwithstanding the above, nothing herein shall supersede or modify
 | 
			
		||||
      the terms of any separate license agreement you may have executed
 | 
			
		||||
      with Licensor regarding such Contributions.
 | 
			
		||||
 | 
			
		||||
   6. Trademarks. This License does not grant permission to use the trade
 | 
			
		||||
      names, trademarks, service marks, or product names of the Licensor,
 | 
			
		||||
      except as required for reasonable and customary use in describing the
 | 
			
		||||
      origin of the Work and reproducing the content of the NOTICE file.
 | 
			
		||||
 | 
			
		||||
   7. Disclaimer of Warranty. Unless required by applicable law or
 | 
			
		||||
      agreed to in writing, Licensor provides the Work (and each
 | 
			
		||||
      Contributor provides its Contributions) on an "AS IS" BASIS,
 | 
			
		||||
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
 | 
			
		||||
      implied, including, without limitation, any warranties or conditions
 | 
			
		||||
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
 | 
			
		||||
      PARTICULAR PURPOSE. You are solely responsible for determining the
 | 
			
		||||
      appropriateness of using or redistributing the Work and assume any
 | 
			
		||||
      risks associated with Your exercise of permissions under this License.
 | 
			
		||||
 | 
			
		||||
   8. Limitation of Liability. In no event and under no legal theory,
 | 
			
		||||
      whether in tort (including negligence), contract, or otherwise,
 | 
			
		||||
      unless required by applicable law (such as deliberate and grossly
 | 
			
		||||
      negligent acts) or agreed to in writing, shall any Contributor be
 | 
			
		||||
      liable to You for damages, including any direct, indirect, special,
 | 
			
		||||
      incidental, or consequential damages of any character arising as a
 | 
			
		||||
      result of this License or out of the use or inability to use the
 | 
			
		||||
      Work (including but not limited to damages for loss of goodwill,
 | 
			
		||||
      work stoppage, computer failure or malfunction, or any and all
 | 
			
		||||
      other commercial damages or losses), even if such Contributor
 | 
			
		||||
      has been advised of the possibility of such damages.
 | 
			
		||||
 | 
			
		||||
   9. Accepting Warranty or Additional Liability. While redistributing
 | 
			
		||||
      the Work or Derivative Works thereof, You may choose to offer,
 | 
			
		||||
      and charge a fee for, acceptance of support, warranty, indemnity,
 | 
			
		||||
      or other liability obligations and/or rights consistent with this
 | 
			
		||||
      License. However, in accepting such obligations, You may act only
 | 
			
		||||
      on Your own behalf and on Your sole responsibility, not on behalf
 | 
			
		||||
      of any other Contributor, and only if You agree to indemnify,
 | 
			
		||||
      defend, and hold each Contributor harmless for any liability
 | 
			
		||||
      incurred by, or claims asserted against, such Contributor by reason
 | 
			
		||||
      of your accepting any such warranty or additional liability.
 | 
			
		||||
 | 
			
		||||
   END OF TERMS AND CONDITIONS
 | 
			
		||||
 | 
			
		||||
   APPENDIX: How to apply the Apache License to your work.
 | 
			
		||||
 | 
			
		||||
      To apply the Apache License to your work, attach the following
 | 
			
		||||
      boilerplate notice, with the fields enclosed by brackets "[]"
 | 
			
		||||
      replaced with your own identifying information. (Don't include
 | 
			
		||||
      the brackets!)  The text should be enclosed in the appropriate
 | 
			
		||||
      comment syntax for the file format. We also recommend that a
 | 
			
		||||
      file or class name and description of purpose be included on the
 | 
			
		||||
      same "printed page" as the copyright notice for easier
 | 
			
		||||
      identification within third-party archives.
 | 
			
		||||
 | 
			
		||||
   Copyright [yyyy] [name of copyright owner]
 | 
			
		||||
 | 
			
		||||
   Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
   you may not use this file except in compliance with the License.
 | 
			
		||||
   You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
       http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
   Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
   distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
   See the License for the specific language governing permissions and
 | 
			
		||||
   limitations under the License.
 | 
			
		||||
							
								
								
									
										19
									
								
								bin/libraries/Licenses/MIT_License.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								bin/libraries/Licenses/MIT_License.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,19 @@
 | 
			
		||||
Copyright (c) 2013, 2014 EclipseSource
 | 
			
		||||
 | 
			
		||||
Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
in the Software without restriction, including without limitation the rights
 | 
			
		||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
			
		||||
copies of the Software, and to permit persons to whom the Software is
 | 
			
		||||
furnished to do so, subject to the following conditions:
 | 
			
		||||
 | 
			
		||||
The above copyright notice and this permission notice shall be included in all
 | 
			
		||||
copies or substantial portions of the Software.
 | 
			
		||||
 | 
			
		||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
			
		||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 | 
			
		||||
SOFTWARE.
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								bin/libraries/sqlite-jdbc-3.16.1.jar
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								bin/libraries/sqlite-jdbc-3.16.1.jar
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							@ -1,4 +1,4 @@
 | 
			
		||||
# HomeFlix-Local_de_DE.properties German Local
 | 
			
		||||
# HomeFlix-Local_de_DE.properties German Local
 | 
			
		||||
info = Info
 | 
			
		||||
settings = Einstellungen
 | 
			
		||||
streamingSettings = Stream Einst.
 | 
			
		||||
@ -28,7 +28,7 @@ errorSave = Beim speichern der Einstellungen ist ein Fehler aufgetreten!
 | 
			
		||||
noFilmFound = Kein Film mit diesem Titel gefunden!
 | 
			
		||||
linuxBug = Zurzeit werden unter Linux leider keine Dateien mit Leerzeichen unterst\u00FCtzt!
 | 
			
		||||
vlcNotInstalled = Um einen Film abspielen wird der VLC Media Player ben\u00F6tigt!
 | 
			
		||||
infoText = \nMaintainer: seilo@kellerkinder.xyz und \nhendrik.schutter@coptersicht.de \n(c) 2016 Kellerkinder www.kellerkinder.xyz
 | 
			
		||||
infoText = \nMaintainer: seilo@kellerkinder.xyz und \nhendrik.schutter@coptersicht.de \n(c) 2016-2017 Kellerkinder www.kellerkinder.xyz
 | 
			
		||||
title = Titel
 | 
			
		||||
year = Jahr
 | 
			
		||||
rating = Einstufung
 | 
			
		||||
@ -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?
 | 
			
		||||
 | 
			
		||||
@ -28,7 +28,7 @@ errorSave = An error occurred while saving the settings!
 | 
			
		||||
noFilmFound = No film with this title found!
 | 
			
		||||
linuxBug = Currently no files are supported with additional space under Linux unfortunately!
 | 
			
		||||
vlcNotInstalled = VLC Media Player is required to play a movie!
 | 
			
		||||
infoText = \nMaintainer: seilo@kellerkinder.xyz and \nhendrik.schutter@coptersicht.de \n(c) 2016 Kellerkinder www.kellerkinder.xyz
 | 
			
		||||
infoText = \nMaintainer: seilo@kellerkinder.xyz and \nhendrik.schutter@coptersicht.de \n(c) 2016-2017 Kellerkinder www.kellerkinder.xyz
 | 
			
		||||
title = Title
 | 
			
		||||
year = Year
 | 
			
		||||
rating = Rating
 | 
			
		||||
@ -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?
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								bin/recources/icons/ic_favorite_black_18dp_1x.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								bin/recources/icons/ic_favorite_black_18dp_1x.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 214 B  | 
							
								
								
									
										
											BIN
										
									
								
								bin/recources/icons/ic_favorite_border_black_18dp_1x.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								bin/recources/icons/ic_favorite_border_black_18dp_1x.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 261 B  | 
@ -1,26 +1,31 @@
 | 
			
		||||
/**
 | 
			
		||||
 * DBController for Project HomeFlix
 | 
			
		||||
 * 
 | 
			
		||||
 * connection is in manual commit!
 | 
			
		||||
 * TODO arraylists not string -> streamUIData
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package application;
 | 
			
		||||
 | 
			
		||||
import java.sql.Connection; //f<>r Datenbank
 | 
			
		||||
import java.sql.DriverManager; //f<>r Datenbank
 | 
			
		||||
import java.sql.PreparedStatement; //f<>r Datenbank
 | 
			
		||||
import java.sql.ResultSet; //f<>r Datenbank
 | 
			
		||||
import java.sql.SQLException; //f<>r Datenbank
 | 
			
		||||
import java.sql.Statement; //f<>r Datenbank
 | 
			
		||||
import java.io.File;
 | 
			
		||||
import java.io.FileNotFoundException;
 | 
			
		||||
import java.io.FileReader;
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
import java.sql.Connection;
 | 
			
		||||
import java.sql.DriverManager;
 | 
			
		||||
import java.sql.PreparedStatement;
 | 
			
		||||
import java.sql.ResultSet;
 | 
			
		||||
import java.sql.SQLException;
 | 
			
		||||
import java.sql.Statement;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
import com.eclipsesource.json.Json;
 | 
			
		||||
import com.eclipsesource.json.JsonArray;
 | 
			
		||||
import com.eclipsesource.json.JsonObject;
 | 
			
		||||
import com.eclipsesource.json.JsonValue;
 | 
			
		||||
 | 
			
		||||
import java.io.File;
 | 
			
		||||
import java.io.FileReader;
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
import javafx.scene.image.Image;
 | 
			
		||||
import javafx.scene.image.ImageView;
 | 
			
		||||
 | 
			
		||||
public class DBController {
 | 
			
		||||
 | 
			
		||||
@ -29,18 +34,34 @@ public class DBController {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private MainWindowController mainWindowController;
 | 
			
		||||
	private String DB_PATH = System.getProperty("user.home") + "\\Documents\\HomeFlix" + "\\" + "Homeflix.db"; // der Pfad der Datenbank-Datei
 | 
			
		||||
	private String DB_PATH = System.getProperty("user.home") + "\\Documents\\HomeFlix" + "\\" + "Homeflix.db"; //path to database file
 | 
			
		||||
	private Image favorite_black = new Image("recources/icons/ic_favorite_black_18dp_1x.png");
 | 
			
		||||
	private Image favorite_border_black = new Image("recources/icons/ic_favorite_border_black_18dp_1x.png");
 | 
			
		||||
	private List<String> filmsdbAll = new ArrayList<String>();
 | 
			
		||||
	private List<String> filmsdbLocal = new ArrayList<String>();
 | 
			
		||||
	private List<String> filmsdbStream = new ArrayList<String>();
 | 
			
		||||
	private List<String> filmsdbStreamURL = new ArrayList<String>();
 | 
			
		||||
	private List<String> filmsAll = new ArrayList<String>();
 | 
			
		||||
	private List<String> filmsDir = new ArrayList<String>();
 | 
			
		||||
	private List<String> filmsStream = new ArrayList<String>();
 | 
			
		||||
	private List<String> filmsStreamURL = new ArrayList<String>();	
 | 
			
		||||
	private List<String> filmsStreamData = new ArrayList<String>();
 | 
			
		||||
	Connection connection = null;
 | 
			
		||||
 | 
			
		||||
	public void main() {
 | 
			
		||||
		if (System.getProperty("os.name").equals("Linux")) {
 | 
			
		||||
			DB_PATH = System.getProperty("user.home") + "/HomeFlix/Homeflix.db";
 | 
			
		||||
		}else{
 | 
			
		||||
			DB_PATH = System.getProperty("user.home") + "\\Documents\\HomeFlix" + "\\" + "Homeflix.db";
 | 
			
		||||
		}
 | 
			
		||||
		try {
 | 
			
		||||
			// create a database connection
 | 
			
		||||
			connection = DriverManager.getConnection("jdbc:sqlite:" + DB_PATH);
 | 
			
		||||
			// Statement statement = connection.createStatement();
 | 
			
		||||
			// statement.setQueryTimeout(30); // set timeout to 30 sec. TODO don't know wath to do with this
 | 
			
		||||
			// statement.setQueryTimeout(30); // set timeout to 30 sec. TODO don't know what to do with this
 | 
			
		||||
 | 
			
		||||
			connection.setAutoCommit(false);	//Autocommit to false -> manual commit is active!
 | 
			
		||||
			fuelleDatenbank();
 | 
			
		||||
			connection.setAutoCommit(false);	//AutoCommit to false -> manual commit is active
 | 
			
		||||
//			fuelleDatenbank();
 | 
			
		||||
		} catch (SQLException e) {
 | 
			
		||||
			// if the error message is "out of memory", it probably means no database file is found
 | 
			
		||||
			System.err.println(e.getMessage());
 | 
			
		||||
@ -56,177 +77,392 @@ public class DBController {
 | 
			
		||||
//		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public void fuelleDatenbank() { 
 | 
			
		||||
 | 
			
		||||
		try { 
 | 
			
		||||
			System.out.println("Erstelle Eintr<74>ge local");
 | 
			
		||||
	void createDatabase() { 
 | 
			
		||||
		System.out.println("<==========starting loading sql==========>");
 | 
			
		||||
		
 | 
			
		||||
		PreparedStatement ps;
 | 
			
		||||
		PreparedStatement psS;	
 | 
			
		||||
	
 | 
			
		||||
		try {
 | 
			
		||||
			Statement stmt = connection.createStatement();
 | 
			
		||||
			Statement stmtS = connection.createStatement(); 
 | 
			
		||||
			stmt.executeUpdate("drop table if exists film_local");
 | 
			
		||||
			stmtS.executeUpdate("drop table if exists film_streaming"); 
 | 
			
		||||
			stmt.executeUpdate("create table film_local (rating, titel, streamUrl)"); // Tabelle "filme" und die Spalten "titel", "pfad", "bewertung" erstellen
 | 
			
		||||
			stmtS.executeUpdate("create table film_streaming (year, season, episode, rating, resolution, titel, streamUrl)"); // Tabelle "filme" und die Spalten "titel", "pfad", "bewertung" erstellen
 | 
			
		||||
			stmt.executeUpdate("create table if not exists film_local (rating, titel, streamUrl, favIcon)");
 | 
			
		||||
			stmt.executeUpdate("create table if not exists film_streaming (year, season, episode, rating, resolution, titel, streamUrl, favIcon)");
 | 
			
		||||
			stmt.close();
 | 
			
		||||
		} catch (SQLException e1) {
 | 
			
		||||
			e1.printStackTrace();
 | 
			
		||||
		} 
 | 
			
		||||
			
 | 
			
		||||
			try { 
 | 
			
		||||
				Statement stmt = connection.createStatement(); 
 | 
			
		||||
				ResultSet rs = stmt.executeQuery("SELECT * FROM film_local"); 
 | 
			
		||||
				while (rs.next()) { 
 | 
			
		||||
					filmsdbLocal.add(rs.getString(2));
 | 
			
		||||
				}
 | 
			
		||||
				stmt.close();
 | 
			
		||||
				rs.close();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
			PreparedStatement ps = connection.prepareStatement("insert into film_local values (?, ?, ?)"); // SQL Befehl
 | 
			
		||||
			PreparedStatement psS = connection.prepareStatement("insert into film_streaming values (?, ?, ?, ?, ?, ?, ?)"); // SQL Befehl
 | 
			
		||||
 | 
			
		||||
			String[] entries = new File(mainWindowController.getPath()).list();
 | 
			
		||||
 | 
			
		||||
			for(int i=0;i!=entries.length;i++) // Geht alle Dateien im Verzeichniss durch
 | 
			
		||||
			{
 | 
			
		||||
				//System.out.println(file[i].getName());
 | 
			
		||||
				ps.setInt(1, 0); // definiert Bewertung als Integer in der dritten Spalte
 | 
			
		||||
				ps.setString(2, ohneEndung(entries[i])); // definiert Name als String in der ersten Spalte
 | 
			
		||||
				ps.setString(3,entries[i]); // definiert Pfad als String in der zweiten Spalte
 | 
			
		||||
				ps.addBatch(); // f<>gt den Eintrag hinzu
 | 
			
		||||
				rs = stmt.executeQuery("SELECT * FROM film_streaming;"); 
 | 
			
		||||
				while (rs.next()) { 
 | 
			
		||||
					filmsdbStream.add(rs.getString(6));
 | 
			
		||||
					filmsdbStreamURL.add(rs.getString(7));
 | 
			
		||||
				}
 | 
			
		||||
				stmt.close();
 | 
			
		||||
				rs.close();
 | 
			
		||||
			}catch (SQLException ea){
 | 
			
		||||
				System.err.println("Ups! an error occured!"); 
 | 
			
		||||
				ea.printStackTrace();
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
			
 | 
			
		||||
			System.out.println("Erstelle Eintr<74>ge streaming \n");
 | 
			
		||||
			if(mainWindowController.getStreamingPath().equals("")||mainWindowController.getStreamingPath().equals(null)){
 | 
			
		||||
				System.out.println("Kein Pfad angegeben");	//falls der Pfad null oder "" ist
 | 
			
		||||
			String[] entries = new File(mainWindowController.getPath()).list();
 | 
			
		||||
			if(mainWindowController.getPath().equals("") || mainWindowController.getPath() == null){
 | 
			
		||||
				System.out.println("Kein Pfad angegeben");	//if path == null or ""
 | 
			
		||||
			}else{
 | 
			
		||||
				for(int i=0; i< mainWindowController.streamingData.size(); i++){
 | 
			
		||||
				String fileName = mainWindowController.getStreamingPath()+"/"+mainWindowController.streamingData.get(i).getStreamUrl();
 | 
			
		||||
				System.out.println(entries.length);
 | 
			
		||||
				for(int i=0;i!=entries.length;i++){
 | 
			
		||||
					filmsDir.add(cutOffEnd(entries[i]));
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
				
 | 
			
		||||
			for(int v=0; v< mainWindowController.streamingData.size(); v++){
 | 
			
		||||
				String fileName = mainWindowController.getStreamingPath()+"/"+mainWindowController.streamingData.get(v).getStreamUrl();
 | 
			
		||||
				try {
 | 
			
		||||
					JsonObject object = Json.parse(new FileReader(fileName)).asObject();
 | 
			
		||||
					JsonArray items = object.get("entries").asArray();
 | 
			
		||||
					for (JsonValue item : items) {
 | 
			
		||||
						psS.setInt(1, item.asObject().getInt("year", 0));
 | 
			
		||||
						psS.setInt(2, item.asObject().getInt("season", 0));
 | 
			
		||||
						psS.setInt(3, item.asObject().getInt("episode", 0));
 | 
			
		||||
						psS.setInt(4, 0);
 | 
			
		||||
						psS.setString(5, item.asObject().getString("resolution", ""));
 | 
			
		||||
						psS.setString(6, item.asObject().getString("titel",""));
 | 
			
		||||
						psS.setString(7, item.asObject().getString("streamUrl", ""));
 | 
			
		||||
						psS.addBatch(); // f<>gt den Eintrag hinzu
 | 
			
		||||
						filmsStream.add(item.asObject().getString("titel",""));
 | 
			
		||||
						filmsStreamURL.add(item.asObject().getString("streamUrl",""));
 | 
			
		||||
						filmsStreamData.add(fileName);
 | 
			
		||||
					}
 | 
			
		||||
				} catch (IOException e) {
 | 
			
		||||
					//Auto-generated catch block
 | 
			
		||||
					e.printStackTrace();
 | 
			
		||||
				}
 | 
			
		||||
				}		
 | 
			
		||||
			filmsAll.addAll(filmsDir);
 | 
			
		||||
			filmsAll.addAll(filmsStream);
 | 
			
		||||
			filmsdbAll.addAll(filmsdbLocal);
 | 
			
		||||
			filmsdbAll.addAll(filmsdbStream);
 | 
			
		||||
			System.out.println("films in directory: "+filmsAll.size());
 | 
			
		||||
			System.out.println("filme in db: "+filmsdbAll.size());
 | 
			
		||||
 | 
			
		||||
				
 | 
			
		||||
				if(filmsdbAll.size() == 0){
 | 
			
		||||
					System.out.println("creating entries ...");
 | 
			
		||||
					
 | 
			
		||||
					try{
 | 
			
		||||
						ps = connection.prepareStatement("insert into film_local values (?, ?, ?, ?)");
 | 
			
		||||
						psS = connection.prepareStatement("insert into film_streaming values (?, ?, ?, ?, ?, ?, ?, ?)");
 | 
			
		||||
						
 | 
			
		||||
						if(mainWindowController.getPath().equals("") || mainWindowController.getPath() == null){
 | 
			
		||||
							System.out.println("Kein Pfad angegeben");	//if path == null or ""
 | 
			
		||||
						}else{
 | 
			
		||||
							for(int j=0;j!=entries.length;j++) //goes through all the files in the directory
 | 
			
		||||
							{
 | 
			
		||||
								ps.setInt(1, 0); //rating as integer 1. column
 | 
			
		||||
								ps.setString(2, cutOffEnd(entries[j])); //name as String without ending 2. column
 | 
			
		||||
								ps.setString(3,entries[j]); //path as String 3. column
 | 
			
		||||
								ps.setString(4, "favorite_border_black");
 | 
			
		||||
								ps.addBatch(); // add command to prepared statement
 | 
			
		||||
							}
 | 
			
		||||
						}
 | 
			
		||||
					
 | 
			
		||||
						if(mainWindowController.getStreamingPath().equals("")||mainWindowController.getStreamingPath().equals(null)){
 | 
			
		||||
							System.out.println("Kein Pfad angegeben");	//if path == null or ""
 | 
			
		||||
						}else{						
 | 
			
		||||
							for(int i=0; i< mainWindowController.streamingData.size(); i++){
 | 
			
		||||
							String fileNamea = mainWindowController.getStreamingPath()+"/"+mainWindowController.streamingData.get(i).getStreamUrl();
 | 
			
		||||
							try {
 | 
			
		||||
								JsonObject object = Json.parse(new FileReader(fileNamea)).asObject();
 | 
			
		||||
								JsonArray items = object.get("entries").asArray();
 | 
			
		||||
								for (JsonValue item : items) {
 | 
			
		||||
									psS.setInt(1, item.asObject().getInt("year", 0));
 | 
			
		||||
									psS.setInt(2, item.asObject().getInt("season", 0));
 | 
			
		||||
									psS.setInt(3, item.asObject().getInt("episode", 0));
 | 
			
		||||
									psS.setInt(4, 0);
 | 
			
		||||
									psS.setString(5, item.asObject().getString("resolution", ""));
 | 
			
		||||
									psS.setString(6, item.asObject().getString("titel",""));
 | 
			
		||||
									psS.setString(7, item.asObject().getString("streamUrl", ""));
 | 
			
		||||
									psS.setString(8, "favorite_border_black");
 | 
			
		||||
									psS.addBatch(); // add command to prepared statement
 | 
			
		||||
								}
 | 
			
		||||
							} catch (IOException e) {
 | 
			
		||||
								e.printStackTrace();
 | 
			
		||||
							}
 | 
			
		||||
						}
 | 
			
		||||
						}
 | 
			
		||||
						ps.executeBatch();  //execute statement to write entries into table
 | 
			
		||||
						psS.executeBatch();			
 | 
			
		||||
						connection.commit();
 | 
			
		||||
						ps.close();
 | 
			
		||||
						psS.close();
 | 
			
		||||
					}catch (SQLException ea) { 
 | 
			
		||||
						System.err.println("Konnte nicht ausgef<65>hrt werden"); 
 | 
			
		||||
						ea.printStackTrace(); 
 | 
			
		||||
					}
 | 
			
		||||
				}else {
 | 
			
		||||
 | 
			
		||||
					
 | 
			
		||||
					try {
 | 
			
		||||
						try {
 | 
			
		||||
							checkAddEntry();
 | 
			
		||||
						} catch (IOException e) {
 | 
			
		||||
							e.printStackTrace();
 | 
			
		||||
						}	//check if added a new file
 | 
			
		||||
						checkRemoveEntry();	//check if removed a file
 | 
			
		||||
					} catch (SQLException e) {
 | 
			
		||||
						e.printStackTrace();
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	//loading data from database to mainWindowController 
 | 
			
		||||
	void loadData(){
 | 
			
		||||
		System.out.println("loading data to mwc ..."); 
 | 
			
		||||
		try { 
 | 
			
		||||
			//load local Data
 | 
			
		||||
			Statement stmt = connection.createStatement(); 
 | 
			
		||||
			ResultSet rs = stmt.executeQuery("SELECT * FROM film_local"); 
 | 
			
		||||
			while (rs.next()) {
 | 
			
		||||
				if(rs.getString(4).equals("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.newData.add( new streamUiData(1, 1, 1, rs.getDouble(1), "1", rs.getString(2), rs.getString(3), new ImageView(favorite_border_black)));
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			stmt.close();
 | 
			
		||||
			rs.close();
 | 
			
		||||
			
 | 
			
		||||
			//load streaming Data TODO check if there are streaming data before loading -> maybe there is an issue now
 | 
			
		||||
			rs = stmt.executeQuery("SELECT * FROM film_streaming;"); 
 | 
			
		||||
			while (rs.next()) {
 | 
			
		||||
				if(rs.getString(8).equals("favorite_black")){
 | 
			
		||||
					mainWindowController.streamData.add(new streamUiData(rs.getInt(1), rs.getInt(2), rs.getInt(3), rs.getDouble(4), rs.getString(5), rs.getString(6), rs.getString(7),  new ImageView(favorite_black)));
 | 
			
		||||
				}else{
 | 
			
		||||
					mainWindowController.streamData.add(new streamUiData(rs.getInt(1), rs.getInt(2), rs.getInt(3), rs.getDouble(4), rs.getString(5), rs.getString(6), rs.getString(7), new ImageView(favorite_border_black)));
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
//			connection.setAutoCommit(false); 
 | 
			
		||||
			ps.executeBatch();  // scheibt alle Eintr<74>ge in die Datenbank
 | 
			
		||||
			psS.executeBatch();			
 | 
			
		||||
			connection.commit();
 | 
			
		||||
			ps.close();
 | 
			
		||||
			psS.close();
 | 
			
		||||
			//connection.close(); 
 | 
			
		||||
		} catch (SQLException ea) { 
 | 
			
		||||
			System.err.println("Konnte nicht ausgef<65>hrt werden"); 
 | 
			
		||||
			ea.printStackTrace(); 
 | 
			
		||||
			stmt.close();
 | 
			
		||||
			rs.close(); 		
 | 
			
		||||
		} catch (SQLException e) { 
 | 
			
		||||
			System.err.println("Ups! an error occured!"); 
 | 
			
		||||
			e.printStackTrace(); 
 | 
			
		||||
		}
 | 
			
		||||
		System.out.println("<==========finished loading sql==========>"); 
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	//Refreshes the data in mainWindowController.newDaten and mainWindowController.streamData
 | 
			
		||||
	//TODO it seems that there is an issue at the moment with streaming refreshing wrong entry if there is more than one with the same name
 | 
			
		||||
	void refresh(String name,int i) throws SQLException{
 | 
			
		||||
		System.out.println("refresh ...");
 | 
			
		||||
		Statement stmt;		
 | 
			
		||||
		
 | 
			
		||||
		try {
 | 
			
		||||
			stmt = connection.createStatement();
 | 
			
		||||
			ResultSet rs = stmt.executeQuery("SELECT * FROM film_local WHERE titel = '"+name+"';" );
 | 
			
		||||
			if(rs.getString(4).equals("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.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();
 | 
			
		||||
		} catch (SQLException e) {
 | 
			
		||||
			try {
 | 
			
		||||
				stmt = connection.createStatement();
 | 
			
		||||
				ResultSet rs = stmt.executeQuery("SELECT * FROM film_streaming WHERE titel = '"+name+"';" );
 | 
			
		||||
				if(rs.getString(8).equals("favorite_black")){
 | 
			
		||||
					mainWindowController.streamData.set(i,new streamUiData(rs.getInt(1), rs.getInt(2), rs.getInt(3), rs.getDouble(4), rs.getString(5), rs.getString(6), rs.getString(7),  new ImageView(favorite_black)));
 | 
			
		||||
				}else{
 | 
			
		||||
					mainWindowController.streamData.set(i,new streamUiData(rs.getInt(1), rs.getInt(2), rs.getInt(3), rs.getDouble(4), rs.getString(5), rs.getString(6), rs.getString(7), new ImageView(favorite_border_black)));
 | 
			
		||||
				}
 | 
			
		||||
				stmt.close();
 | 
			
		||||
				rs.close();
 | 
			
		||||
			} catch (SQLException e1) {
 | 
			
		||||
				System.err.println("Ups! an error occured!"); 
 | 
			
		||||
				e1.printStackTrace(); 
 | 
			
		||||
			} 
 | 
			
		||||
		} 
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public void ausgeben(){
 | 
			
		||||
	System.out.println("Eintr<EFBFBD>ge ausgeben ... \n"); 
 | 
			
		||||
	private void checkRemoveEntry() throws SQLException{
 | 
			
		||||
		System.out.println("checking for entrys to remove to DB ...");
 | 
			
		||||
		Statement stmt = connection.createStatement(); 
 | 
			
		||||
		
 | 
			
		||||
		for(int a=0; a<filmsdbLocal.size(); a++){
 | 
			
		||||
			if(filmsDir.contains(filmsdbLocal.get(a))){
 | 
			
		||||
			}else{
 | 
			
		||||
				stmt.executeUpdate("delete from film_local where titel = '"+filmsdbLocal.get(a)+"'");
 | 
			
		||||
				connection.commit();
 | 
			
		||||
				stmt.close();
 | 
			
		||||
				System.out.println("removed \""+filmsdbLocal.get(a)+"\" from databsae");
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		for(int b=0; b<filmsdbStreamURL.size(); b++){
 | 
			
		||||
			if(filmsStreamURL.contains(filmsdbStreamURL.get(b))){
 | 
			
		||||
			}else{
 | 
			
		||||
				stmt.executeUpdate("delete from film_streaming where titel = '"+filmsdbStream.get(b)+"'");
 | 
			
		||||
				connection.commit();
 | 
			
		||||
				stmt.close();
 | 
			
		||||
				System.out.println("removed \""+filmsdbStream.get(b)+"\" from databsae");
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	private void checkAddEntry() throws SQLException, FileNotFoundException, IOException{	//TODO sort alphabetical
 | 
			
		||||
		System.out.println("checking for entrys to add to DB ...");
 | 
			
		||||
		String[] entries = new File(mainWindowController.getPath()).list();
 | 
			
		||||
		Statement stmt = connection.createStatement();
 | 
			
		||||
		PreparedStatement ps = connection.prepareStatement("insert into film_streaming values (?, ?, ?, ?, ?, ?, ?, ?)");;
 | 
			
		||||
		int i=0;
 | 
			
		||||
		
 | 
			
		||||
		for(int a=0; a<filmsDir.size(); a++){
 | 
			
		||||
			if(filmsdbLocal.contains(filmsDir.get(a))){
 | 
			
		||||
			}else{			
 | 
			
		||||
				stmt.executeUpdate("insert into film_local values (0, '"+cutOffEnd(entries[a])+"', '"+entries[a]+"','favorite_border_black')");
 | 
			
		||||
				connection.commit();
 | 
			
		||||
				stmt.close();
 | 
			
		||||
				System.out.println("added \""+filmsDir.get(a)+"\" to databsae");
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		for(int b=0; b<filmsStreamURL.size(); b++){
 | 
			
		||||
			if(filmsdbStreamURL.contains(filmsStreamURL.get(b))){
 | 
			
		||||
			}else{
 | 
			
		||||
				JsonObject object = Json.parse(new FileReader(filmsStreamData.get(b))).asObject();
 | 
			
		||||
				JsonArray items = object.get("entries").asArray();
 | 
			
		||||
				System.out.println(items.size()+", "+i);
 | 
			
		||||
					String streamURL = items.get(i).asObject().getString("streamUrl","");
 | 
			
		||||
					String titel = items.get(i).asObject().getString("titel","");
 | 
			
		||||
					
 | 
			
		||||
					if(streamURL.equals(filmsStreamURL.get(b))){
 | 
			
		||||
						System.out.println("hinzuf<EFBFBD>gen \""+titel+"\"");
 | 
			
		||||
						
 | 
			
		||||
						ps.setInt(1, items.get(i).asObject().getInt("year", 0));
 | 
			
		||||
						ps.setInt(2, items.get(i).asObject().getInt("season", 0));
 | 
			
		||||
						ps.setInt(3, items.get(i).asObject().getInt("episode", 0));
 | 
			
		||||
						ps.setInt(4, 0);
 | 
			
		||||
						ps.setString(5, items.get(i).asObject().getString("resolution", ""));
 | 
			
		||||
						ps.setString(6, items.get(i).asObject().getString("titel",""));
 | 
			
		||||
						ps.setString(7, items.get(i).asObject().getString("streamUrl", ""));
 | 
			
		||||
						ps.setString(8, "favorite_border_black");
 | 
			
		||||
						ps.addBatch(); // adds the entry
 | 
			
		||||
						
 | 
			
		||||
//						stmt.executeUpdate("insert into film_streaming values ("+items.get(i).asObject().getInt("year", 0)+", "+items.get(i).asObject().getInt("season", 0)+", "+items.get(i).asObject().getInt("episode", 0)+", 0, '"+items.get(i).asObject().getString("resolution", ""+"', '"+items.get(i).asObject().getString("titel","")+"', '"+items.get(i).asObject().getString("streamUrl", "")+"')"));
 | 
			
		||||
					}
 | 
			
		||||
				i++;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		ps.executeBatch();			
 | 
			
		||||
		connection.commit();
 | 
			
		||||
		ps.close();
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	void ausgeben(){
 | 
			
		||||
	System.out.println("Eintraege ausgeben ... \n"); 
 | 
			
		||||
	try { 
 | 
			
		||||
		Statement stmt = connection.createStatement(); 
 | 
			
		||||
		ResultSet rs = stmt.executeQuery("SELECT * FROM film_local"); 
 | 
			
		||||
		while (rs.next()) { 
 | 
			
		||||
			System.out.println(rs.getString(1));
 | 
			
		||||
			System.out.println(rs.getString(2));
 | 
			
		||||
			System.out.println(rs.getString(3)+"\n");
 | 
			
		||||
			System.out.println(rs.getString(3));
 | 
			
		||||
			System.out.println(rs.getString(4)+"\n");
 | 
			
		||||
		}
 | 
			
		||||
		stmt.close();
 | 
			
		||||
		rs.close();
 | 
			
		||||
		
 | 
			
		||||
		System.out.println("Streaming Entries: \n");
 | 
			
		||||
		
 | 
			
		||||
		ResultSet rsS = stmt.executeQuery("SELECT * FROM film_streaming;"); 
 | 
			
		||||
		while (rsS.next()) { 
 | 
			
		||||
			System.out.println(rsS.getString(1));
 | 
			
		||||
			System.out.println(rsS.getString(2));
 | 
			
		||||
			System.out.println(rsS.getString(3));
 | 
			
		||||
			System.out.println(rsS.getString(4));
 | 
			
		||||
			System.out.println(rsS.getString(5));
 | 
			
		||||
			System.out.println(rsS.getString(6));
 | 
			
		||||
			System.out.println(rsS.getString(7)+"\n");
 | 
			
		||||
		rs = stmt.executeQuery("SELECT * FROM film_streaming;"); 
 | 
			
		||||
		while (rs.next()) { 
 | 
			
		||||
			System.out.println(rs.getString(1));
 | 
			
		||||
			System.out.println(rs.getString(2));
 | 
			
		||||
			System.out.println(rs.getString(3));
 | 
			
		||||
			System.out.println(rs.getString(4));
 | 
			
		||||
			System.out.println(rs.getString(5));
 | 
			
		||||
			System.out.println(rs.getString(6));
 | 
			
		||||
			System.out.println(rs.getString(7));
 | 
			
		||||
			System.out.println(rs.getString(8)+"\n");
 | 
			
		||||
		}
 | 
			
		||||
		stmt.close();
 | 
			
		||||
		rsS.close(); 
 | 
			
		||||
		rs.close(); 
 | 
			
		||||
 | 
			
		||||
	} catch (SQLException e) { 
 | 
			
		||||
		System.err.println("Konnte nicht ausgef<65>hrt werden"); 
 | 
			
		||||
		System.err.println("Ups! an error occured!"); 
 | 
			
		||||
		e.printStackTrace(); 
 | 
			
		||||
	}
 | 
			
		||||
    mainWindowController.ta1.setText("Hallo");
 | 
			
		||||
}
 | 
			
		||||
	
 | 
			
		||||
//gibt die Favorisierung eines bestimmten Films
 | 
			
		||||
	public void getFavStatus(String name){
 | 
			
		||||
	//gibt die Favorisierung eines bestimmten Films
 | 
			
		||||
	void getFavStatus(String name){
 | 
			
		||||
		try{
 | 
			
		||||
			Statement stmta = connection.createStatement(); 
 | 
			
		||||
			ResultSet rs = stmta.executeQuery("SELECT titel, rating FROM film_local WHERE titel = '"+name+"';" ); //SQL Befehl
 | 
			
		||||
			System.out.println("local:"+rs.getString("rating"));
 | 
			
		||||
			stmta.close();
 | 
			
		||||
			Statement stmt = connection.createStatement(); 
 | 
			
		||||
			ResultSet rs = stmt.executeQuery("SELECT titel, rating, favIcon FROM film_local WHERE titel = '"+name+"';" ); //SQL Befehl
 | 
			
		||||
			System.out.println("local:"+rs.getString("rating")+", "+rs.getString("titel")+", "+rs.getString("favIcon"));
 | 
			
		||||
			stmt.close();
 | 
			
		||||
			rs.close();
 | 
			
		||||
		}catch(SQLException e){
 | 
			
		||||
			
 | 
			
		||||
			try {
 | 
			
		||||
				System.out.println("streaming");
 | 
			
		||||
				Statement stmtSa = connection.createStatement(); 
 | 
			
		||||
				ResultSet rsS = stmtSa.executeQuery("SELECT titel, rating FROM film_streaming WHERE titel = '"+name+"';" );
 | 
			
		||||
				System.out.println("streaming:"+rsS.getString("rating"));
 | 
			
		||||
				stmtSa.close();
 | 
			
		||||
				Statement stmtS = connection.createStatement(); 
 | 
			
		||||
				ResultSet rsS = stmtS.executeQuery("SELECT titel, rating, favIcon FROM film_streaming WHERE titel = '"+name+"';" );
 | 
			
		||||
				System.out.println("streaming:"+rsS.getString("rating")+", "+rsS.getString("titel")+", "+rsS.getString("favIcon"));
 | 
			
		||||
				stmtS.close();
 | 
			
		||||
				rsS.close();
 | 
			
		||||
			} catch (SQLException e1) {
 | 
			
		||||
//				System.out.println("Ups! an error occured!");
 | 
			
		||||
				System.out.println("Ups! an error occured!");
 | 
			
		||||
				e1.printStackTrace();
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
			
 | 
			
		||||
//			System.out.println("Ups! an error occured!");
 | 
			
		||||
//			e.printStackTrace();
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
	}
 | 
			
		||||
//setzt die Defavorisierung eines bestimmten Films
 | 
			
		||||
	public void defavorisieren(String name){
 | 
			
		||||
	//setzt die Defavorisierung eines bestimmten Films
 | 
			
		||||
	void dislike(String name,String streamUrl){
 | 
			
		||||
		System.out.println("defavorisieren ...");		
 | 
			
		||||
		try{
 | 
			
		||||
			Statement stmt = connection.createStatement(); 
 | 
			
		||||
			stmt.executeUpdate("UPDATE film_local SET rating=0 WHERE titel='"+name+"';");
 | 
			
		||||
			stmt.executeUpdate("UPDATE film_local SET rating=0,favIcon='favorite_border_black' WHERE titel='"+name+"';");
 | 
			
		||||
			connection.commit();
 | 
			
		||||
			stmt.close();
 | 
			
		||||
		}catch(SQLException e){
 | 
			
		||||
			System.out.println("Ups! an error occured!");
 | 
			
		||||
			e.printStackTrace();
 | 
			
		||||
		}
 | 
			
		||||
		try {
 | 
			
		||||
			Statement stmtS = connection.createStatement(); 
 | 
			
		||||
			stmtS.executeUpdate("UPDATE film_streaming SET rating=0 WHERE titel='"+name+"';");
 | 
			
		||||
			Statement stmt = connection.createStatement(); 
 | 
			
		||||
			stmt.executeUpdate("UPDATE film_streaming SET rating=0,favIcon='favorite_border_black' WHERE streamUrl='"+streamUrl+"';");
 | 
			
		||||
			connection.commit();
 | 
			
		||||
			stmt.close();
 | 
			
		||||
		} catch (SQLException e1) {
 | 
			
		||||
			System.out.println("Ups! an error occured!");
 | 
			
		||||
			e1.printStackTrace();
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
//setzt die Favorisierung eines bestimmten Films
 | 
			
		||||
	public void favorisieren(String name){
 | 
			
		||||
	//setzt die Favorisierung eines bestimmten Films
 | 
			
		||||
	void like(String name,String streamUrl){
 | 
			
		||||
		System.out.println("favorisieren ...");
 | 
			
		||||
		try{
 | 
			
		||||
			Statement stmt = connection.createStatement(); 
 | 
			
		||||
			stmt.executeUpdate("UPDATE film_local SET rating=1 WHERE titel='"+name+"';");
 | 
			
		||||
			stmt.executeUpdate("UPDATE film_local SET rating=1,favIcon='favorite_black' WHERE titel='"+name+"';");
 | 
			
		||||
			connection.commit();
 | 
			
		||||
			stmt.close();
 | 
			
		||||
		}catch(SQLException e){
 | 
			
		||||
			System.out.println("Ups! an error occured!");
 | 
			
		||||
			e.printStackTrace();
 | 
			
		||||
		}
 | 
			
		||||
		try {
 | 
			
		||||
			Statement stmtS = connection.createStatement(); 
 | 
			
		||||
			stmtS.executeUpdate("UPDATE film_streaming SET rating=1 WHERE titel='"+name+"';");
 | 
			
		||||
			Statement stmt = connection.createStatement(); 
 | 
			
		||||
			stmt.executeUpdate("UPDATE film_streaming SET rating=1,favIcon='favorite_black' WHERE streamUrl='"+streamUrl+"';");
 | 
			
		||||
			connection.commit();
 | 
			
		||||
			stmt.close();
 | 
			
		||||
		} catch (SQLException e1) {
 | 
			
		||||
			System.out.println("Ups! an error occured!");
 | 
			
		||||
			e1.printStackTrace();
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
//entfernt die Endung
 | 
			
		||||
	private String ohneEndung (String str) {
 | 
			
		||||
//removes the ending
 | 
			
		||||
	private String cutOffEnd (String str) {
 | 
			
		||||
 | 
			
		||||
		if (str == null) return null;
 | 
			
		||||
		int pos = str.lastIndexOf(".");
 | 
			
		||||
@ -236,254 +472,3 @@ public class DBController {
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//	private static final DBController dbcontroller = new DBController(); 
 | 
			
		||||
//	private static Connection connection; 
 | 
			
		||||
//	private static final String DB_PATH = System.getProperty("user.home") + "\\Documents\\HomeFlix" + "\\" + "Homeflix.db"; // der Pfad der Datenbank-Datei
 | 
			
		||||
//	private String path;
 | 
			
		||||
//	File f; 
 | 
			
		||||
//	File file[]; //ArrayList f<>r die Dateien
 | 
			
		||||
//	
 | 
			
		||||
//	public DBController(MainWindowController m){
 | 
			
		||||
//		mainWindowController=m;
 | 
			
		||||
//	}
 | 
			
		||||
//
 | 
			
		||||
//	private MainWindowController mainWindowController;
 | 
			
		||||
//	
 | 
			
		||||
//	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<74>ge local");
 | 
			
		||||
//			Statement stmt = connection.createStatement(); 
 | 
			
		||||
//			stmt.executeUpdate("DROP TABLE IF EXISTS film_local;"); 
 | 
			
		||||
//			stmt.executeUpdate("CREATE TABLE film_local (rating, titel, streamUrl);"); // Tabelle "filme" und die Spalten "titel", "pfad", "bewertung" erstellen
 | 
			
		||||
//
 | 
			
		||||
//			PreparedStatement ps = connection.prepareStatement("INSERT INTO film_local VALUES (?, ?, ?);"); // SQL Befehl
 | 
			
		||||
//			PreparedStatement psS = connection.prepareStatement("INSERT INTO film_streaming VALUES (?, ?, ?, ?, ?, ?, ?);"); // SQL Befehl
 | 
			
		||||
//
 | 
			
		||||
//			System.out.println("Size: "+file.length);
 | 
			
		||||
//
 | 
			
		||||
//			for(int i=0;i!=file.length;i++) // Geht alle Dateien im Verzeichniss durch
 | 
			
		||||
//			{
 | 
			
		||||
//				//System.out.println(file[i].getName());
 | 
			
		||||
//				ps.setInt(1, 0); // definiert Bewertung als Integer in der dritten Spalte
 | 
			
		||||
//				ps.setString(2, ohneEndung(file[i].getName())); // definiert Name als String in der ersten Spalte
 | 
			
		||||
//				ps.setString(3,file[i].getName()); // definiert Pfad als String in der zweiten Spalte
 | 
			
		||||
//				ps.addBatch(); // f<>gt den Eintrag hinzu
 | 
			
		||||
//			}
 | 
			
		||||
//			
 | 
			
		||||
//			
 | 
			
		||||
//			System.out.println("Erstelle Eintr<74>ge streaming");
 | 
			
		||||
//			Statement stmtS = connection.createStatement(); 
 | 
			
		||||
//			stmtS.executeUpdate("DROP TABLE IF EXISTS film_streaming;"); 
 | 
			
		||||
//			stmtS.executeUpdate("CREATE TABLE film_streaming (year, season, episode, rating, resolution, titel, streamUrl);"); // Tabelle "filme" und die Spalten "titel", "pfad", "bewertung" erstellen
 | 
			
		||||
//
 | 
			
		||||
//			System.out.println(mainWindowController.getStreamingPath());
 | 
			
		||||
//			if(mainWindowController.getStreamingPath().equals("")||mainWindowController.getStreamingPath().equals(null)){
 | 
			
		||||
//				System.out.println("Kein Pfad angegeben");	//falls der Pfad null oder "" ist
 | 
			
		||||
//			}else{
 | 
			
		||||
//				for(int i=0; i< mainWindowController.streamingData.size(); i++){
 | 
			
		||||
//				String fileName = mainWindowController.getStreamingPath()+"/"+mainWindowController.streamingData.get(i).getStreamUrl();
 | 
			
		||||
//				try {
 | 
			
		||||
//					JsonObject object = Json.parse(new FileReader(fileName)).asObject();
 | 
			
		||||
//					JsonArray items = object.get("entries").asArray();
 | 
			
		||||
//					for (JsonValue item : items) {
 | 
			
		||||
//						psS.setInt(1, item.asObject().getInt("year", 0));
 | 
			
		||||
//						psS.setInt(2, item.asObject().getInt("season", 0));
 | 
			
		||||
//						psS.setInt(3, item.asObject().getInt("episode", 0));
 | 
			
		||||
//						psS.setInt(4, 0);
 | 
			
		||||
//						psS.setString(5, item.asObject().getString("resolution", ""));
 | 
			
		||||
//						psS.setString(6, item.asObject().getString("titel",""));
 | 
			
		||||
//						psS.setString(7, item.asObject().getString("streamUrl", ""));
 | 
			
		||||
//						psS.addBatch(); // f<>gt den Eintrag hinzu
 | 
			
		||||
//					}
 | 
			
		||||
//				} catch (IOException e) {
 | 
			
		||||
//					//Auto-generated catch block
 | 
			
		||||
//					e.printStackTrace();
 | 
			
		||||
//				}
 | 
			
		||||
//			}
 | 
			
		||||
//			}
 | 
			
		||||
//			connection.setAutoCommit(false); 
 | 
			
		||||
//			ps.executeBatch();  // scheibt alle Eintr<74>ge in die Datenbank
 | 
			
		||||
//			psS.executeBatch();
 | 
			
		||||
//			connection.setAutoCommit(true); 
 | 
			
		||||
//			//connection.close(); 
 | 
			
		||||
//		} catch (SQLException e) { 
 | 
			
		||||
//			System.err.println("Konnte nicht ausgef<65>hrt werden"); 
 | 
			
		||||
//			e.printStackTrace(); 
 | 
			
		||||
//		} 
 | 
			
		||||
//	} 
 | 
			
		||||
//	
 | 
			
		||||
//	public void ausgeben(){
 | 
			
		||||
//		System.out.println("Eintr<74>ge ausgeben ... \n"); 
 | 
			
		||||
//		try { 
 | 
			
		||||
//			Statement stmt = connection.createStatement(); 
 | 
			
		||||
//		mainWindowController = new MainWindowController();
 | 
			
		||||
//			ResultSet rs = stmt.executeQuery("SELECT * FROM film_local;"); 
 | 
			
		||||
//			while (rs.next()) { 
 | 
			
		||||
//				System.out.println(rs.getString(1));
 | 
			
		||||
//				System.out.println(rs.getString(2));
 | 
			
		||||
//				System.out.println(rs.getString(3)+"\n");
 | 
			
		||||
//			} 
 | 
			
		||||
//			rs.close(); 
 | 
			
		||||
//			
 | 
			
		||||
//			ResultSet rsS = stmt.executeQuery("SELECT * FROM film_streaming;"); 
 | 
			
		||||
//			while (rsS.next()) { 
 | 
			
		||||
//				System.out.println(rsS.getString(1));
 | 
			
		||||
//				System.out.println(rsS.getString(2));
 | 
			
		||||
//				System.out.println(rsS.getString(3)+"\n");
 | 
			
		||||
//			} 
 | 
			
		||||
//			rsS.close(); 
 | 
			
		||||
////			mainWindowController.initTabel();
 | 
			
		||||
//
 | 
			
		||||
//
 | 
			
		||||
//		} catch (SQLException e) { 
 | 
			
		||||
//			System.err.println("Konnte nicht ausgef<65>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<65>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<65>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<65>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<65>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<65>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("\\", "\\\\");
 | 
			
		||||
//	}
 | 
			
		||||
//}
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,7 @@
 | 
			
		||||
/**
 | 
			
		||||
 * Project HomeFlix
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright 2016  <admin@kellerkinder>
 | 
			
		||||
 * Copyright 2016-2017  <admin@kellerkinder>
 | 
			
		||||
 * 
 | 
			
		||||
 * 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
 | 
			
		||||
@ -20,13 +20,12 @@
 | 
			
		||||
 * 
 | 
			
		||||
 */
 | 
			
		||||
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;
 | 
			
		||||
import java.util.ResourceBundle;
 | 
			
		||||
 | 
			
		||||
import javafx.application.Application;
 | 
			
		||||
import javafx.fxml.FXMLLoader;
 | 
			
		||||
@ -36,24 +35,26 @@ 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 Stage primaryStage;
 | 
			
		||||
	private String path;
 | 
			
		||||
	private String streamingPath = System.getProperty("user.home") + "\\Documents\\HomeFlix";
 | 
			
		||||
	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 dir = new File(System.getProperty("user.home") + "/Documents/HomeFlix");	//Windows: C:/Users/"User"/Documents/HomeFlix	OSX: has to be tested	Linux: has to be tested(shalt not work!)
 | 
			
		||||
	private File file = new File(dir + "/config.xml");	//Windows: C:/Users/"User"/Documents/HomeFlix/config.xml	OSX: has to be tested	Linux: has to be tested(shalt not work!)
 | 
			
		||||
	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
 | 
			
		||||
	
 | 
			
		||||
	@Override
 | 
			
		||||
	public void start(Stage primaryStage) {
 | 
			
		||||
@ -61,7 +62,7 @@ public class Main extends Application {
 | 
			
		||||
		mainWindow();
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public void mainWindow(){
 | 
			
		||||
	private void mainWindow(){
 | 
			
		||||
	
 | 
			
		||||
		try {
 | 
			
		||||
		FXMLLoader loader = new FXMLLoader(Main.class.getResource("MainWindow.fxml"));
 | 
			
		||||
@ -70,64 +71,84 @@ public class Main extends Application {
 | 
			
		||||
		primaryStage.setMinWidth(900.00);
 | 
			
		||||
		primaryStage.setResizable(false);
 | 
			
		||||
		primaryStage.setTitle("Project HomeFlix");
 | 
			
		||||
		primaryStage.getIcons().add(new Image(Main.class.getResourceAsStream("/recources/Homeflix_Icon_64x64.png"))); //f<EFBFBD>gt Anwendungsicon hinzu
 | 
			
		||||
		primaryStage.getIcons().add(new Image(Main.class.getResourceAsStream("/recources/Homeflix_Icon_64x64.png"))); //adds application icon
 | 
			
		||||
 | 
			
		||||
		mainWindowController = loader.getController();	//verkn<EFBFBD>pfung von FXMLController und Controller Klasse
 | 
			
		||||
		mainWindowController.setAutoUpdate(autoUpdate);	//setzt autoupdate
 | 
			
		||||
		mainWindowController.setMain(this);	//aufruf setMain
 | 
			
		||||
		mainWindowController = loader.getController();	//Link of FXMLController and controller class
 | 
			
		||||
		mainWindowController.setAutoUpdate(autoUpdate);	//set auto-update
 | 
			
		||||
		mainWindowController.setMain(this);	//call setMain
 | 
			
		||||
		
 | 
			
		||||
		//dir exists -> check config.xml 	TODO nur Windows getestet siehe dir und file
 | 
			
		||||
		if(dir.exists() == true){
 | 
			
		||||
			if (file.exists() != true) {
 | 
			
		||||
		//Linux					if directory exists -> check config.xml
 | 
			
		||||
		if(System.getProperty("os.name").equals("Linux")){
 | 
			
		||||
			if(dirLinux.exists() != true){
 | 
			
		||||
				dirLinux.mkdir();
 | 
			
		||||
			}else if(fileLinux.exists() != true){
 | 
			
		||||
				mainWindowController.setPath(firstStart());
 | 
			
		||||
				mainWindowController.setStreamingPath(streamingPath);
 | 
			
		||||
				mainWindowController.setStreamingPath(streamingPathLinux);
 | 
			
		||||
				mainWindowController.setColor(color);
 | 
			
		||||
				mainWindowController.setSize(size);
 | 
			
		||||
				mainWindowController.setAutoUpdate(autoUpdate);
 | 
			
		||||
				mainWindowController.setLoaclUI(local);
 | 
			
		||||
				mainWindowController.setLocal(local);
 | 
			
		||||
				mainWindowController.setMode(mode);
 | 
			
		||||
				mainWindowController.saveSettings();
 | 
			
		||||
				Runtime.getRuntime().exec("java -jar ProjectHomeFlix.jar");	//start again (preventing Bugs)
 | 
			
		||||
				System.exit(0);	//finishes itself
 | 
			
		||||
			}else{
 | 
			
		||||
				loadSettings();
 | 
			
		||||
			}	
 | 
			
		||||
			}
 | 
			
		||||
		//windows
 | 
			
		||||
		}else{
 | 
			
		||||
		dir.mkdir();
 | 
			
		||||
		mainWindowController.setPath(firstStart());
 | 
			
		||||
		mainWindowController.setStreamingPath(streamingPath);
 | 
			
		||||
		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();
 | 
			
		||||
				Runtime.getRuntime().exec("java -jar ProjectHomeFlix.jar");	//start again (preventing Bugs)
 | 
			
		||||
				System.exit(0);	//finishes itself
 | 
			
		||||
			}	
 | 
			
		||||
		}
 | 
			
		||||
//		mainWindowController.loadStreamingSettings();
 | 
			
		||||
		mainWindowController.applyColor();	//setzt die Theme Farbe
 | 
			
		||||
		mainWindowController.cbLocal.getSelectionModel().select(mainWindowController.getLocal()); //setzt local
 | 
			
		||||
		mainWindowController.mainColor.setValue(Color.valueOf(mainWindowController.getColor()));
 | 
			
		||||
		mainWindowController.loadData();	//l<>d die Daten im Controller
 | 
			
		||||
		
 | 
			
		||||
		mainWindowController.loadSettings();
 | 
			
		||||
		mainWindowController.loadStreamingSettings();
 | 
			
		||||
		mainWindowController.initUI();
 | 
			
		||||
		mainWindowController.initActions();
 | 
			
		||||
		mainWindowController.initTabel();
 | 
			
		||||
		mainWindowController.setLocalUI();
 | 
			
		||||
		mainWindowController.applyColor();	//set theme color
 | 
			
		||||
		
 | 
			
		||||
		mainWindowController.dbController.main(); //initialize database controller
 | 
			
		||||
		mainWindowController.dbController.createDatabase(); //creating the database
 | 
			
		||||
		mainWindowController.dbController.loadData(); 	//loading data from database to mainWindowController 
 | 
			
		||||
		mainWindowController.addDataUI();
 | 
			
		||||
		
 | 
			
		||||
		Scene scene = new Scene(pane);	//neue Scen um inhalt der stage anzuzeigen
 | 
			
		||||
		Scene scene = new Scene(pane);	//create new scene, append pane to scene
 | 
			
		||||
		
 | 
			
		||||
		primaryStage.setScene(scene);
 | 
			
		||||
		primaryStage.show();	//zeige scene
 | 
			
		||||
		primaryStage.setScene(scene);	//append scene to stage
 | 
			
		||||
		primaryStage.show();	//show stage
 | 
			
		||||
		} catch (IOException e) {
 | 
			
		||||
			// Auto-generated catch block
 | 
			
		||||
			e.printStackTrace();
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	//methode f<EFBFBD>r den erstmaligen Start
 | 
			
		||||
	//Method for first Start
 | 
			
		||||
	private String firstStart(){
 | 
			
		||||
		Alert alert = new Alert(AlertType.CONFIRMATION);	//neuer alert mit filechooser
 | 
			
		||||
		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;
 | 
			
		||||
     	case "de_DE":	bundle = ResourceBundle.getBundle("recources.HomeFlix-Local", Locale.GERMAN);	//German
 | 
			
		||||
     			break;
 | 
			
		||||
     	default:		bundle = ResourceBundle.getBundle("recources.HomeFlix-Local", Locale.US);	//default local
 | 
			
		||||
     			break;
 | 
			
		||||
		 }
 | 
			
		||||
		
 | 
			
		||||
		Alert alert = new Alert(AlertType.CONFIRMATION);	//new alert with file-chooser
 | 
			
		||||
		alert.setTitle("Project HomeFlix");
 | 
			
		||||
		alert.setHeaderText("Es ist kein Stammverzeichniss f<>r Filme angegeben!");	//TODO translate
 | 
			
		||||
		alert.setContentText("Stammverzeichniss angeben?");
 | 
			
		||||
		alert.setHeaderText(bundle.getString("firstStartHeader"));
 | 
			
		||||
		alert.setContentText(bundle.getString("firstStartContent"));
 | 
			
		||||
 | 
			
		||||
		Optional<ButtonType> result = alert.showAndWait();
 | 
			
		||||
		if (result.get() == ButtonType.OK){
 | 
			
		||||
@ -141,26 +162,7 @@ public class Main extends Application {
 | 
			
		||||
		}
 | 
			
		||||
		return path;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	//l<>dt die einstellungen aus der XML
 | 
			
		||||
	public void loadSettings(){
 | 
			
		||||
		try {
 | 
			
		||||
			InputStream inputStream = new FileInputStream(file);
 | 
			
		||||
			props.loadFromXML(inputStream);
 | 
			
		||||
			path = props.getProperty("path");	//setzt Propselement in Pfad
 | 
			
		||||
			streamingPath = 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);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@ -16,11 +16,13 @@
 | 
			
		||||
<?import javafx.scene.layout.HBox?>
 | 
			
		||||
<?import javafx.scene.layout.VBox?>
 | 
			
		||||
<?import javafx.scene.text.Font?>
 | 
			
		||||
<?import javafx.scene.text.TextFlow?>
 | 
			
		||||
 | 
			
		||||
<AnchorPane fx:id="anpane" prefHeight="600.0" prefWidth="900.0" xmlns="http://javafx.com/javafx/8.0.60" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.MainWindowController">
 | 
			
		||||
<AnchorPane fx:id="anpane" prefHeight="600.0" prefWidth="950.0" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.MainWindowController">
 | 
			
		||||
	<children>
 | 
			
		||||
		<TreeTableView fx:id="treeTableViewfilm" layoutX="14.0" layoutY="88.0" prefHeight="400.0" prefWidth="360.0" AnchorPane.bottomAnchor="12.0" AnchorPane.leftAnchor="12.0" AnchorPane.topAnchor="88.0" />
 | 
			
		||||
		<JFXTextArea fx:id="ta1" layoutX="385.0" layoutY="42.0" maxWidth="503.0" minWidth="275.0" prefHeight="546.0" prefWidth="293.0" AnchorPane.bottomAnchor="12.0" AnchorPane.leftAnchor="385.0" AnchorPane.rightAnchor="222.0" AnchorPane.topAnchor="44.0" />
 | 
			
		||||
		<TreeTableView fx:id="treeTableViewfilm" layoutX="14.0" layoutY="88.0" prefHeight="400.0" prefWidth="360.0" AnchorPane.bottomAnchor="12.0" AnchorPane.leftAnchor="12.0" AnchorPane.rightAnchor="553.0" AnchorPane.topAnchor="88.0" />
 | 
			
		||||
		<JFXTextArea fx:id="ta1" layoutX="385.0" layoutY="42.0" maxWidth="503.0" minWidth="275.0" prefHeight="546.0" prefWidth="293.0" AnchorPane.bottomAnchor="12.0" AnchorPane.leftAnchor="410.0" AnchorPane.rightAnchor="222.0" AnchorPane.topAnchor="44.0" />
 | 
			
		||||
      <TextFlow fx:id="textFlow" layoutX="496.0" layoutY="131.0" prefHeight="200.0" prefWidth="200.0" visible="false" AnchorPane.bottomAnchor="15.0" AnchorPane.leftAnchor="410.0" AnchorPane.rightAnchor="220.0" AnchorPane.topAnchor="44.0" />
 | 
			
		||||
		<JFXButton fx:id="playbtn" contentDisplay="CENTER" layoutX="690.0" layoutY="363.0" onAction="#playbtnclicked" prefHeight="25.0" prefWidth="198.0" AnchorPane.bottomAnchor="212.0" AnchorPane.rightAnchor="12.0">
 | 
			
		||||
         <font>
 | 
			
		||||
            <Font name="System Bold" size="14.0" />
 | 
			
		||||
@ -29,7 +31,7 @@
 | 
			
		||||
         <font>
 | 
			
		||||
            <Font name="System Bold" size="14.0" />
 | 
			
		||||
         </font></JFXButton>
 | 
			
		||||
		<JFXTextField fx:id="tfsearch" layoutX="12.0" layoutY="44.0" maxWidth="477.0" minWidth="359.0" prefHeight="31.0" prefWidth="359.0" promptText="Suche ..." AnchorPane.leftAnchor="12.0" AnchorPane.topAnchor="44.0">
 | 
			
		||||
		<JFXTextField fx:id="tfsearch" layoutX="12.0" layoutY="44.0" maxWidth="477.0" minWidth="359.0" prefHeight="31.0" prefWidth="359.0" promptText="Suche ..." AnchorPane.leftAnchor="12.0" AnchorPane.rightAnchor="553.0" AnchorPane.topAnchor="44.0">
 | 
			
		||||
         <font>
 | 
			
		||||
            <Font name="Arial" size="12.0" />
 | 
			
		||||
         </font></JFXTextField>
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,7 @@
 | 
			
		||||
/**
 | 
			
		||||
 * Project HomeFlix
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright 2016  <admin@kellerkinder>
 | 
			
		||||
 * Copyright 2016-2017  <admin@kellerkinder>
 | 
			
		||||
 * 
 | 
			
		||||
 * 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
 | 
			
		||||
@ -26,29 +26,25 @@ import java.io.BufferedReader;
 | 
			
		||||
import java.io.File;
 | 
			
		||||
import java.io.FileInputStream;
 | 
			
		||||
import java.io.FileOutputStream;
 | 
			
		||||
import java.io.FileReader;
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
import java.io.InputStream;
 | 
			
		||||
import java.io.InputStreamReader;
 | 
			
		||||
import java.io.OutputStream;
 | 
			
		||||
import java.io.PrintWriter;
 | 
			
		||||
import java.io.StringWriter;
 | 
			
		||||
import java.lang.Thread.State;
 | 
			
		||||
import java.math.BigInteger;
 | 
			
		||||
import java.net.URI;
 | 
			
		||||
import java.net.URISyntaxException;
 | 
			
		||||
import java.sql.SQLException;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.Locale;
 | 
			
		||||
import java.util.Properties;
 | 
			
		||||
import java.util.ResourceBundle;
 | 
			
		||||
 | 
			
		||||
import org.apache.commons.lang3.SystemUtils;
 | 
			
		||||
 | 
			
		||||
import com.eclipsesource.json.Json;
 | 
			
		||||
import com.eclipsesource.json.JsonArray;
 | 
			
		||||
import com.eclipsesource.json.JsonObject;
 | 
			
		||||
import com.eclipsesource.json.JsonValue;
 | 
			
		||||
import com.jfoenix.controls.JFXButton;
 | 
			
		||||
import com.jfoenix.controls.JFXColorPicker;
 | 
			
		||||
import com.jfoenix.controls.JFXDialog;
 | 
			
		||||
import com.jfoenix.controls.JFXSlider;
 | 
			
		||||
import com.jfoenix.controls.JFXTextArea;
 | 
			
		||||
import com.jfoenix.controls.JFXTextField;
 | 
			
		||||
@ -57,23 +53,26 @@ import com.jfoenix.controls.JFXToggleButton;
 | 
			
		||||
import javafx.animation.FadeTransition;
 | 
			
		||||
import javafx.animation.ParallelTransition;
 | 
			
		||||
import javafx.animation.TranslateTransition;
 | 
			
		||||
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.scene.control.Alert;
 | 
			
		||||
import javafx.scene.control.Alert.AlertType;
 | 
			
		||||
import javafx.scene.control.ChoiceBox;
 | 
			
		||||
import javafx.scene.control.ContextMenu;
 | 
			
		||||
import javafx.scene.control.Label;
 | 
			
		||||
import javafx.scene.control.MenuItem;
 | 
			
		||||
import javafx.scene.control.ScrollPane;
 | 
			
		||||
import javafx.scene.control.TableColumn;
 | 
			
		||||
import javafx.scene.control.TableView;
 | 
			
		||||
import javafx.scene.control.TextArea;
 | 
			
		||||
import javafx.scene.control.TreeItem;
 | 
			
		||||
import javafx.scene.control.TreeTableColumn;
 | 
			
		||||
import javafx.scene.control.TreeTableColumn.CellDataFeatures;
 | 
			
		||||
import javafx.scene.control.TreeTableColumn.SortType;
 | 
			
		||||
import javafx.scene.control.TreeTableView;
 | 
			
		||||
import javafx.scene.image.Image;
 | 
			
		||||
import javafx.scene.image.ImageView;
 | 
			
		||||
@ -84,10 +83,11 @@ import javafx.scene.layout.Priority;
 | 
			
		||||
import javafx.scene.layout.VBox;
 | 
			
		||||
import javafx.scene.paint.Color;
 | 
			
		||||
import javafx.scene.text.Font;
 | 
			
		||||
import javafx.scene.text.TextFlow;
 | 
			
		||||
import javafx.stage.DirectoryChooser;
 | 
			
		||||
import javafx.util.Duration;
 | 
			
		||||
 | 
			
		||||
public class MainWindowController {
 | 
			
		||||
public class MainWindowController {	
 | 
			
		||||
	@FXML
 | 
			
		||||
	private AnchorPane anpane;
 | 
			
		||||
	@FXML
 | 
			
		||||
@ -105,6 +105,10 @@ public class MainWindowController {
 | 
			
		||||
	@FXML
 | 
			
		||||
	JFXTextArea ta1;
 | 
			
		||||
	@FXML
 | 
			
		||||
	TextFlow textFlow;
 | 
			
		||||
	@FXML
 | 
			
		||||
	ScrollPane scrollPane;
 | 
			
		||||
	@FXML
 | 
			
		||||
	private JFXButton menubtn;
 | 
			
		||||
	@FXML
 | 
			
		||||
	private JFXButton playbtn;
 | 
			
		||||
@ -141,12 +145,10 @@ public class MainWindowController {
 | 
			
		||||
    @FXML
 | 
			
		||||
    public JFXColorPicker mainColor;
 | 
			
		||||
    @FXML
 | 
			
		||||
    public	ChoiceBox<String> cbLocal;
 | 
			
		||||
    public	ChoiceBox<String> cbLocal = new ChoiceBox<>();
 | 
			
		||||
    @FXML
 | 
			
		||||
    public JFXSlider sliderFontSize;
 | 
			
		||||
    @FXML
 | 
			
		||||
    private JFXDialog dialog = new JFXDialog();
 | 
			
		||||
    @FXML
 | 
			
		||||
    private Label versionlbl;
 | 
			
		||||
    @FXML
 | 
			
		||||
    private Label sizelbl;
 | 
			
		||||
@ -154,27 +156,27 @@ public class MainWindowController {
 | 
			
		||||
    private Label aulbl;
 | 
			
		||||
    @FXML 
 | 
			
		||||
    ImageView image1;
 | 
			
		||||
    
 | 
			
		||||
    private ImageView imv1;
 | 
			
		||||
    
 | 
			
		||||
    @FXML
 | 
			
		||||
    TreeItem<streamUiData> root = new TreeItem<>(new streamUiData(1, 1, 1, 5.0,"1", "filme","1"));
 | 
			
		||||
    TreeItem<streamUiData> root = new TreeItem<>(new streamUiData(1, 1, 1, 5.0,"1", "filme","1", imv1));
 | 
			
		||||
    @FXML
 | 
			
		||||
    TreeTableColumn<streamUiData, Double> columnRating = new TreeTableColumn<>("Bewertung");
 | 
			
		||||
    TreeTableColumn<streamUiData, ImageView> columnRating = new TreeTableColumn<>("Rating");
 | 
			
		||||
    @FXML
 | 
			
		||||
    TreeTableColumn<streamUiData, String> columnTitel = new TreeTableColumn<>("Name");
 | 
			
		||||
    TreeTableColumn<streamUiData, String> columnTitel = new TreeTableColumn<>("Titel");
 | 
			
		||||
    @FXML
 | 
			
		||||
    TreeTableColumn<streamUiData, String> columnStreamUrl = new TreeTableColumn<>("Datei Name");
 | 
			
		||||
    TreeTableColumn<streamUiData, String> columnStreamUrl = new TreeTableColumn<>("File Name");
 | 
			
		||||
    @FXML
 | 
			
		||||
    TreeTableColumn<streamUiData, String> columnResolution = new TreeTableColumn<>("Aufl<EFBFBD>sung");
 | 
			
		||||
    TreeTableColumn<streamUiData, String> columnResolution = new TreeTableColumn<>("Resolution");
 | 
			
		||||
    @FXML
 | 
			
		||||
    TreeTableColumn<streamUiData, Integer> columnYear = new TreeTableColumn<>("Jahr");
 | 
			
		||||
    TreeTableColumn<streamUiData, Integer> columnYear = new TreeTableColumn<>("Year");
 | 
			
		||||
    @FXML
 | 
			
		||||
    TreeTableColumn<streamUiData, Integer> columnSeason = new TreeTableColumn<>("Staffel");
 | 
			
		||||
    TreeTableColumn<streamUiData, Integer> columnSeason = new TreeTableColumn<>("Season");
 | 
			
		||||
    @FXML
 | 
			
		||||
    TreeTableColumn<streamUiData, Integer> columnEpisode = new TreeTableColumn<>("Episode");
 | 
			
		||||
    
 | 
			
		||||
    @FXML
 | 
			
		||||
    private TreeItem<streamUiData> streamingRoot =new TreeItem<>(new streamUiData(1 ,1 ,1 ,1.0 ,"1" ,"filme" ,"1"));
 | 
			
		||||
    private TreeItem<streamUiData> streamingRoot =new TreeItem<>(new streamUiData(1 ,1 ,1 ,1.0 ,"1" ,"filme" ,"1", imv1));
 | 
			
		||||
    @FXML
 | 
			
		||||
    private TableColumn<streamUiData, String> dataNameColumn = new TableColumn<>("Datei Name");
 | 
			
		||||
    @FXML
 | 
			
		||||
@ -184,20 +186,23 @@ public class MainWindowController {
 | 
			
		||||
	private boolean menutrue = false;	//saves the position of menubtn (opened or closed)
 | 
			
		||||
	private boolean settingstrue = false;
 | 
			
		||||
	private boolean streamingSettingsTrue = false;
 | 
			
		||||
	private String version = "0.4.0";
 | 
			
		||||
	private String buildNumber = "104";
 | 
			
		||||
	private String versionName = "glowing bucket";
 | 
			
		||||
	static boolean firststart = false;
 | 
			
		||||
	private int hashA = -2055934614;
 | 
			
		||||
	private String version = "0.5.0";
 | 
			
		||||
	private String buildNumber = "117";
 | 
			
		||||
	private String versionName = "plasma cow";
 | 
			
		||||
	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";
 | 
			
		||||
	private File dir = new File(System.getProperty("user.home") + "/Documents/HomeFlix");	
 | 
			
		||||
	private File file = new File(dir + "/config.xml");	
 | 
			
		||||
	private File dirWin = new File(System.getProperty("user.home") + "/Documents/HomeFlix");
 | 
			
		||||
	private File dirLinux = new File(System.getProperty("user.home") + "/HomeFlix");
 | 
			
		||||
	private File fileWin = new File(dirWin + "/config.xml");
 | 
			
		||||
	private File fileLinux = new File(dirLinux + "/config.xml");	
 | 
			
		||||
	
 | 
			
		||||
	String errorUpdateD;
 | 
			
		||||
	String errorUpdateV;
 | 
			
		||||
	private String errorPlay;
 | 
			
		||||
	private String errorOpenStream;
 | 
			
		||||
	private String errorMode;
 | 
			
		||||
	@SuppressWarnings("unused")
 | 
			
		||||
	private String errorLoad;
 | 
			
		||||
	private String errorSave;
 | 
			
		||||
	String noFilmFound;
 | 
			
		||||
@ -211,7 +216,10 @@ public class MainWindowController {
 | 
			
		||||
	private String Name;
 | 
			
		||||
	private String datPath;
 | 
			
		||||
	private String autoUpdate;
 | 
			
		||||
	private String mode;	
 | 
			
		||||
	private String mode;
 | 
			
		||||
	@SuppressWarnings("unused")
 | 
			
		||||
	private String ratingSortType;
 | 
			
		||||
	private String local;
 | 
			
		||||
	String title;
 | 
			
		||||
	String year;
 | 
			
		||||
	String rating;
 | 
			
		||||
@ -232,15 +240,14 @@ 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<streamUiData> newDaten = FXCollections.observableArrayList();
 | 
			
		||||
	private ObservableList<streamUiData> filterData = FXCollections.observableArrayList();
 | 
			
		||||
	private ObservableList<streamUiData> streamData = FXCollections.observableArrayList();
 | 
			
		||||
	private ObservableList<String> locals = FXCollections.observableArrayList("english", "deutsch");
 | 
			
		||||
	private ObservableList<String> locals = FXCollections.observableArrayList("english (en_US)", "deutsch (de_DE)");
 | 
			
		||||
	ObservableList<streamUiData> newData = FXCollections.observableArrayList();		//TODO rename to localFilms
 | 
			
		||||
	ObservableList<streamUiData> streamData = FXCollections.observableArrayList();	//TODO rename to streamingFilms
 | 
			
		||||
	ObservableList<streamUiData> streamingData = FXCollections.observableArrayList();
 | 
			
		||||
	private ImageView menu_icon_black = new ImageView(new Image("recources/icons/menu_icon_black.png"));
 | 
			
		||||
	private ImageView menu_icon_white = new ImageView(new Image("recources/icons/menu_icon_white.png"));
 | 
			
		||||
@ -251,13 +258,15 @@ 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 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;
 | 
			
		||||
	private apiQuery ApiQuery;
 | 
			
		||||
	private DBController dbController;
 | 
			
		||||
	DBController dbController;
 | 
			
		||||
	
 | 
			
		||||
	//wenn menubtn clicked
 | 
			
		||||
	/**
 | 
			
		||||
	 * TODO change value of Text-color change
 | 
			
		||||
	 */
 | 
			
		||||
@ -298,7 +307,6 @@ public class MainWindowController {
 | 
			
		||||
				System.out.println(output);
 | 
			
		||||
				input.close();
 | 
			
		||||
			} catch (IOException e1) {
 | 
			
		||||
				// Auto-generated catch block
 | 
			
		||||
				e1.printStackTrace();
 | 
			
		||||
			}
 | 
			
		||||
			if(output.contains("which: no vlc")||output == ""){
 | 
			
		||||
@ -330,7 +338,7 @@ public class MainWindowController {
 | 
			
		||||
				}
 | 
			
		||||
			}else if(mode.equals("streaming")){
 | 
			
		||||
				try {
 | 
			
		||||
					Desktop.getDesktop().browse(new URI(datPath));	//opens the streaming url in browser (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);
 | 
			
		||||
				}
 | 
			
		||||
@ -345,7 +353,7 @@ public class MainWindowController {
 | 
			
		||||
	@FXML
 | 
			
		||||
	private void openfolderbtnclicked(){
 | 
			
		||||
		try {
 | 
			
		||||
			Desktop.getDesktop().open(new File(getPath()));	//<EFBFBD>ffnet den aktuellen Pfad
 | 
			
		||||
			Desktop.getDesktop().open(new File(getPath()));	//open path when button is clicked
 | 
			
		||||
		} catch (IOException e) {
 | 
			
		||||
			e.printStackTrace();
 | 
			
		||||
		}
 | 
			
		||||
@ -388,7 +396,7 @@ public class MainWindowController {
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	/**
 | 
			
		||||
	 * TODO zus<EFBFBD>tzliche infos <20>ber die dateien
 | 
			
		||||
	 * TODO additional info about the "streaming.json"
 | 
			
		||||
	 */
 | 
			
		||||
	@FXML
 | 
			
		||||
	private void streamingSettingsBtnclicked(){
 | 
			
		||||
@ -419,7 +427,7 @@ public class MainWindowController {
 | 
			
		||||
		addDataUI();
 | 
			
		||||
		settingsAnchor.setVisible(false);
 | 
			
		||||
		streamingSettingsAnchor.setVisible(false);
 | 
			
		||||
		sideMenuSlideOut();		//disables sidemenu
 | 
			
		||||
		sideMenuSlideOut();		//disables side-menu
 | 
			
		||||
		menutrue = false;
 | 
			
		||||
		settingstrue = false;
 | 
			
		||||
		streamingSettingsTrue = false;
 | 
			
		||||
@ -427,12 +435,6 @@ public class MainWindowController {
 | 
			
		||||
	
 | 
			
		||||
	@FXML
 | 
			
		||||
	private void debugBtnclicked(){
 | 
			
		||||
//		dbController.ausgeben();
 | 
			
		||||
		dbController.getFavStatus("Zootopia");
 | 
			
		||||
		dbController.favorisieren("Zootopia");
 | 
			
		||||
		dbController.getFavStatus("Zootopia");
 | 
			
		||||
		dbController.defavorisieren("Zootopia");
 | 
			
		||||
		dbController.getFavStatus("Zootopia");
 | 
			
		||||
		//for testing
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@ -470,7 +472,13 @@ public class MainWindowController {
 | 
			
		||||
	
 | 
			
		||||
	@FXML
 | 
			
		||||
	private void updateBtnAction(){
 | 
			
		||||
		Updater.update(buildURL, downloadLink, aktBuildNumber, buildNumber);
 | 
			
		||||
//		Updater.update(buildURL, downloadLink, aktBuildNumber, buildNumber);
 | 
			
		||||
		System.out.println(Updater.getState());
 | 
			
		||||
		if(Updater.getState() == State.NEW){
 | 
			
		||||
			Updater.start();
 | 
			
		||||
		}else{
 | 
			
		||||
			Updater.run();
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	@FXML
 | 
			
		||||
@ -508,138 +516,106 @@ public class MainWindowController {
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
	//"Main" Methode die beim start von der Klasse Main aufgerufen wird, initialiesirung der einzellnen UI-Objekte 
 | 
			
		||||
	public void setMain(Main main) {
 | 
			
		||||
		
 | 
			
		||||
		loadSettings();
 | 
			
		||||
		initTabel();
 | 
			
		||||
		initActions();
 | 
			
		||||
		
 | 
			
		||||
		Updater = new updater(this);
 | 
			
		||||
	//"Main" Method called in Main.java main() when starting 
 | 
			
		||||
	void setMain(Main main) {
 | 
			
		||||
		Updater = new updater(this,buildURL, downloadLink, aktBuildNumber, buildNumber);
 | 
			
		||||
		ApiQuery = new apiQuery(this);
 | 
			
		||||
		dbController = new DBController(this);
 | 
			
		||||
		
 | 
			
		||||
		System.out.println("Mode: "+mode);	//TODO debugging
 | 
			
		||||
		
 | 
			
		||||
		loadStreamingSettings();
 | 
			
		||||
		dbController.main();
 | 
			
		||||
		
 | 
			
		||||
		debugBtn.setDisable(false); 	//debugging btn for tests
 | 
			
		||||
		debugBtn.setVisible(true);
 | 
			
		||||
        
 | 
			
		||||
        tfPath.setText(getPath());
 | 
			
		||||
 | 
			
		||||
        sliderFontSize.setValue(getSize());
 | 
			
		||||
        
 | 
			
		||||
        cbLocal.setItems(locals);
 | 
			
		||||
        
 | 
			
		||||
        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);	
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	//initialisierung der Tabellen f<>r filme(beide Modi) und Streaming-Settings
 | 
			
		||||
	@SuppressWarnings({ "unchecked", "rawtypes" })
 | 
			
		||||
	private void initTabel(){
 | 
			
		||||
	//Initialize the tables (treeTableViewfilm and tableViewStreamingdata)
 | 
			
		||||
	@SuppressWarnings({ "unchecked"})	//TODO
 | 
			
		||||
	void initTabel(){
 | 
			
		||||
 | 
			
		||||
		//filmtabelle 
 | 
			
		||||
	    columnRating.setMaxWidth(120);
 | 
			
		||||
	    columnTitel.setMaxWidth(240);
 | 
			
		||||
		//film Table 
 | 
			
		||||
	    columnRating.setMaxWidth(80);
 | 
			
		||||
	    columnTitel.setMaxWidth(260);
 | 
			
		||||
	    columnStreamUrl.setMaxWidth(0);
 | 
			
		||||
	    dataNameColumn.setPrefWidth(130);
 | 
			
		||||
	    dataNameColumn.setPrefWidth(150);
 | 
			
		||||
	    dataNameEndColumn.setPrefWidth(170);
 | 
			
		||||
	    columnRating.setStyle("-fx-alignment: CENTER;");
 | 
			
		||||
		
 | 
			
		||||
        treeTableViewfilm.setRoot(root);
 | 
			
		||||
        treeTableViewfilm.setColumnResizePolicy( TreeTableView.CONSTRAINED_RESIZE_POLICY );
 | 
			
		||||
        treeTableViewfilm.setShowRoot(false);
 | 
			
		||||
		
 | 
			
		||||
        //inhalt in Zelle schreiben
 | 
			
		||||
        columnTitel.setCellValueFactory((CellDataFeatures<streamUiData, String> p) -> 
 | 
			
		||||
        new ReadOnlyStringWrapper(p.getValue().getValue().getTitel())); 
 | 
			
		||||
       
 | 
			
		||||
        columnRating.setCellValueFactory((CellDataFeatures<streamUiData, Double> p) -> 
 | 
			
		||||
        new ReadOnlyObjectWrapper<Double>(p.getValue().getValue().getRating()));
 | 
			
		||||
        
 | 
			
		||||
        columnStreamUrl.setCellValueFactory((CellDataFeatures<streamUiData, String> p) -> 
 | 
			
		||||
        new ReadOnlyStringWrapper(p.getValue().getValue().getStreamUrl()));
 | 
			
		||||
        
 | 
			
		||||
        columnResolution.setCellValueFactory((CellDataFeatures<streamUiData, String> p) -> 
 | 
			
		||||
        new ReadOnlyStringWrapper(p.getValue().getValue().getResolution()));
 | 
			
		||||
        
 | 
			
		||||
        columnYear.setCellValueFactory((CellDataFeatures<streamUiData, Integer> p) -> 
 | 
			
		||||
        new ReadOnlyObjectWrapper(p.getValue().getValue().getYear()));
 | 
			
		||||
        
 | 
			
		||||
        columnSeason.setCellValueFactory((CellDataFeatures<streamUiData, Integer> p) -> 
 | 
			
		||||
        new ReadOnlyObjectWrapper(p.getValue().getValue().getSeason()));
 | 
			
		||||
        
 | 
			
		||||
        columnEpisode.setCellValueFactory((CellDataFeatures<streamUiData, Integer> p) -> 
 | 
			
		||||
        new ReadOnlyObjectWrapper(p.getValue().getValue().getEpisode()));
 | 
			
		||||
        //write content into cell
 | 
			
		||||
        columnTitel.setCellValueFactory(cellData -> cellData.getValue().getValue().titelProperty());
 | 
			
		||||
        columnRating.setCellValueFactory(cellData -> cellData.getValue().getValue().imageProperty());
 | 
			
		||||
        columnStreamUrl.setCellValueFactory(cellData -> cellData.getValue().getValue().streamUrlProperty());
 | 
			
		||||
        columnResolution.setCellValueFactory(cellData -> cellData.getValue().getValue().resolutionProperty());
 | 
			
		||||
        columnYear.setCellValueFactory(cellData -> cellData.getValue().getValue().yearProperty().asObject());
 | 
			
		||||
        columnSeason.setCellValueFactory(cellData -> cellData.getValue().getValue().seasonProperty().asObject());
 | 
			
		||||
        columnEpisode.setCellValueFactory(cellData -> cellData.getValue().getValue().episodeProperty().asObject());
 | 
			
		||||
 | 
			
		||||
        treeTableViewfilm.getColumns().addAll(columnTitel, columnRating, columnStreamUrl, columnResolution, columnYear, columnSeason, columnEpisode);
 | 
			
		||||
	    treeTableViewfilm.getColumns().get(2).setVisible(false); //blendet die Column mit den Dateinamen aus (wichtig um sie abzuspielen)
 | 
			
		||||
	    treeTableViewfilm.getColumns().get(2).setVisible(false); //hide columnStreamUrl (column with file path important for the player)
 | 
			
		||||
	
 | 
			
		||||
	    //Changelistener f<EFBFBD>r TreeTable
 | 
			
		||||
	    //Change-listener for TreeTable
 | 
			
		||||
	    treeTableViewfilm.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<Object>() {	
 | 
			
		||||
			@Override
 | 
			
		||||
			public void changed(ObservableValue<?> observable, Object oldVal, Object newVal) {
 | 
			
		||||
				// last = selected; //f<EFBFBD>r autoplay
 | 
			
		||||
				selected = treeTableViewfilm.getSelectionModel().getSelectedIndex(); // holt aktuelles Item
 | 
			
		||||
				// last = selected; //for auto-play
 | 
			
		||||
				selected = treeTableViewfilm.getSelectionModel().getSelectedIndex(); //get selected item
 | 
			
		||||
				last = selected - 1;
 | 
			
		||||
				next = selected + 1;
 | 
			
		||||
				Name = columnTitel.getCellData(selected); // holt Namen des Aktuelle Items aus der ColumnName
 | 
			
		||||
				datPath = columnStreamUrl.getCellData(selected); // holt den aktuellen Datei Pfad aus der ColumnDatName
 | 
			
		||||
				ta1.setText(""); // l<>scht Text in ta1
 | 
			
		||||
				ApiQuery.startQuery(Name); // startet die api abfrage
 | 
			
		||||
				ta1.positionCaret(0); // setzt die startposition des Cursors in ta1
 | 
			
		||||
				Name = columnTitel.getCellData(selected); //get name of selected item
 | 
			
		||||
				datPath = columnStreamUrl.getCellData(selected); //get file path of selected item
 | 
			
		||||
				ta1.setText(""); //delete text in ta1
 | 
			
		||||
				ApiQuery.startQuery(Name); // start api query
 | 
			
		||||
				ta1.positionCaret(0); 	//set cursor position in ta1
 | 
			
		||||
			}
 | 
			
		||||
		});
 | 
			
		||||
	    
 | 
			
		||||
	    //Streaming-Settings Tabelle
 | 
			
		||||
	    //context menu for treetableview  
 | 
			
		||||
	    treeTableViewfilm.setContextMenu(menu);
 | 
			
		||||
 | 
			
		||||
	    //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); 
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	//initialisierung der Button Actions
 | 
			
		||||
	private void initActions(){
 | 
			
		||||
	//Initializing the actions
 | 
			
		||||
	void initActions(){
 | 
			
		||||
		
 | 
			
		||||
		//TODO unterscheiden zwischen streaming und local
 | 
			
		||||
        tfsearch.textProperty().addListener(new ChangeListener<String>() {
 | 
			
		||||
    	    @SuppressWarnings("unchecked")
 | 
			
		||||
			@Override
 | 
			
		||||
    	    @Override
 | 
			
		||||
    	    public void changed(ObservableValue<? extends String> observable,String oldValue, String newValue) {
 | 
			
		||||
    	    	int counter = newDaten.size();
 | 
			
		||||
            	ObservableList<streamUiData> helpData;
 | 
			
		||||
    	    	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(mode.equals("local")){
 | 
			
		||||
  	            	helpData = newData;
 | 
			
		||||
  	    		}else{
 | 
			
		||||
  	    			helpData = streamData;
 | 
			
		||||
  	    		}
 | 
			
		||||
    	    	
 | 
			
		||||
    	    	for(int i = 0; i < helpData.size(); i++){
 | 
			
		||||
    	    		if(helpData.get(i).getTitel().toLowerCase().contains(tfsearch.getText().toLowerCase())){
 | 
			
		||||
    	    			filterData.add(helpData.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<streamUiData>(filterData.get(i)));	//f<EFBFBD>gt daten zur Rootnode hinzu
 | 
			
		||||
    				root.getChildren().add(new TreeItem<streamUiData>(filterData.get(i)));	//add filtered data to root node after search
 | 
			
		||||
    			}
 | 
			
		||||
    	    	if(tfsearch.getText().hashCode() == hashA){
 | 
			
		||||
    	    		setColor("000000");
 | 
			
		||||
    	    		applyColor();
 | 
			
		||||
    	    	}
 | 
			
		||||
    	    }
 | 
			
		||||
    	});
 | 
			
		||||
        
 | 
			
		||||
        cbLocal.getSelectionModel().selectedIndexProperty()
 | 
			
		||||
        .addListener(new ChangeListener<Number>() {
 | 
			
		||||
          public void changed(ObservableValue<? extends Number> ov, Number value, Number new_value) { 
 | 
			
		||||
        	  setLocal(new_value.intValue());
 | 
			
		||||
        	  setLoaclUI(local);
 | 
			
		||||
        cbLocal.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener<Number>() {
 | 
			
		||||
          public void changed(ObservableValue<? extends Number> 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();
 | 
			
		||||
          }
 | 
			
		||||
        });
 | 
			
		||||
@ -652,78 +628,159 @@ public class MainWindowController {
 | 
			
		||||
				saveSettings();
 | 
			
		||||
			 }
 | 
			
		||||
        });
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	//l<>dt die Daten im angegeben Ordner in newDaten
 | 
			
		||||
	void loadData(){
 | 
			
		||||
			//load local Data
 | 
			
		||||
			if(getPath().equals("")||getPath().equals(null)){
 | 
			
		||||
				System.out.println("Kein Pfad angegeben");	//falls der Pfad null oder "" ist
 | 
			
		||||
			}else{
 | 
			
		||||
			String[] entries = new File(getPath()).list();
 | 
			
		||||
				for(int i = 0; i < entries.length; i++){
 | 
			
		||||
					String titel = ohneEndung(entries[i]);
 | 
			
		||||
					String data = entries[i];
 | 
			
		||||
					newDaten.add(new streamUiData(1, 1, 1, 5.0, "1", titel, data));
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			//load streaming Data TODO pr<70>fen ob streaming daten vorhanden -> momentan evtl. fehler
 | 
			
		||||
			String titel = null;
 | 
			
		||||
        	String resolution = null;
 | 
			
		||||
        	String streamUrl = null;  
 | 
			
		||||
        	int season;
 | 
			
		||||
        	int episode;
 | 
			
		||||
        	int year;
 | 
			
		||||
        	double rating = 5.0;
 | 
			
		||||
        	if(getStreamingPath().equals("")||getStreamingPath().equals(null)){
 | 
			
		||||
				System.out.println("Kein Pfad angegeben");	//falls der Pfad null oder "" ist
 | 
			
		||||
			}else{
 | 
			
		||||
			for(int i=0; i< streamingData.size(); i++){
 | 
			
		||||
				String fileName = streamingPath+"/"+streamingData.get(i).getStreamUrl();
 | 
			
		||||
        
 | 
			
		||||
        like.setOnAction(new EventHandler<ActionEvent>() {
 | 
			
		||||
            @Override
 | 
			
		||||
            public void handle(ActionEvent event) {
 | 
			
		||||
            	if(mode.equals("streaming")){
 | 
			
		||||
            		dbController.like(Name,streamData.get(selected).getStreamUrl());
 | 
			
		||||
            	}else{
 | 
			
		||||
				dbController.like(Name,newData.get(selected).getStreamUrl());
 | 
			
		||||
            	}
 | 
			
		||||
				dbController.getFavStatus(Name);
 | 
			
		||||
				try {
 | 
			
		||||
					JsonObject object = Json.parse(new FileReader(fileName)).asObject();
 | 
			
		||||
					JsonArray items = object.get("entries").asArray();
 | 
			
		||||
					
 | 
			
		||||
	            	for (JsonValue item : items) {
 | 
			
		||||
	            	  titel = item.asObject().getString("titel","");
 | 
			
		||||
	            	  season = item.asObject().getInt("season", 0);
 | 
			
		||||
	            	  episode = item.asObject().getInt("episode", 0);
 | 
			
		||||
	            	  year = item.asObject().getInt("year", 0);
 | 
			
		||||
	            	  resolution = item.asObject().getString("resolution", "");
 | 
			
		||||
	            	  streamUrl = item.asObject().getString("streamUrl", "");
 | 
			
		||||
	            	  streamData.add(new streamUiData(year, season, episode, rating, resolution, titel, streamUrl));
 | 
			
		||||
	            	}
 | 
			
		||||
					
 | 
			
		||||
				} catch (IOException e) {
 | 
			
		||||
					//Auto-generated catch block
 | 
			
		||||
					dbController.refresh(Name, selected);
 | 
			
		||||
				} catch (SQLException e) {
 | 
			
		||||
					Alert alert = new Alert(AlertType.ERROR);
 | 
			
		||||
			    	alert.setTitle("Error");
 | 
			
		||||
			    	alert.setHeaderText("");
 | 
			
		||||
			    	alert.setContentText("There should be an error message in the future (like problem)\nIt seems as a cat has stolen the like-methode");
 | 
			
		||||
					e.printStackTrace();
 | 
			
		||||
				}
 | 
			
		||||
				refreshTable();
 | 
			
		||||
			}
 | 
			
		||||
			}	
 | 
			
		||||
	    	});
 | 
			
		||||
        
 | 
			
		||||
        dislike.setOnAction(new EventHandler<ActionEvent>() {
 | 
			
		||||
            @Override
 | 
			
		||||
            public void handle(ActionEvent event) {
 | 
			
		||||
            	if(mode.equals("streaming")){
 | 
			
		||||
            		dbController.dislike(Name,streamData.get(selected).getStreamUrl());
 | 
			
		||||
            	}else{
 | 
			
		||||
				dbController.dislike(Name,newData.get(selected).getStreamUrl());
 | 
			
		||||
            	}
 | 
			
		||||
				dbController.getFavStatus(Name);
 | 
			
		||||
				try {
 | 
			
		||||
					dbController.refresh(Name, selected);
 | 
			
		||||
				} catch (SQLException e) {
 | 
			
		||||
					Alert alert = new Alert(AlertType.ERROR);
 | 
			
		||||
			    	alert.setTitle("Error");
 | 
			
		||||
			    	alert.setHeaderText("");
 | 
			
		||||
			    	alert.setContentText("There should be an error message in the future (dislike problem)");
 | 
			
		||||
					e.printStackTrace();
 | 
			
		||||
				}
 | 
			
		||||
				refreshTable();
 | 
			
		||||
			}
 | 
			
		||||
	    	});
 | 
			
		||||
        
 | 
			
		||||
        /**
 | 
			
		||||
         * TODO fix bug when sort by ASCENDING, wrong order
 | 
			
		||||
         */
 | 
			
		||||
        columnRating.sortTypeProperty().addListener(new ChangeListener<SortType>() {
 | 
			
		||||
            @Override
 | 
			
		||||
            public void changed(ObservableValue<? extends SortType> paramObservableValue, SortType paramT1, SortType paramT2) {
 | 
			
		||||
            	System.out.println("NAME Clicked -- sortType = " + paramT1 + ", SortType=" + paramT2);
 | 
			
		||||
            	ArrayList<Integer> fav_true = new ArrayList<Integer>();
 | 
			
		||||
            	ArrayList<Integer> fav_false = new ArrayList<Integer>();
 | 
			
		||||
            	ObservableList<streamUiData> helpData;
 | 
			
		||||
  	    		filterData.removeAll(filterData);
 | 
			
		||||
  	    		root.getChildren().remove(0,root.getChildren().size());
 | 
			
		||||
  	    		
 | 
			
		||||
  	    		if(mode.equals("local")){
 | 
			
		||||
  	            	helpData = newData;
 | 
			
		||||
  	    		}else{
 | 
			
		||||
  	    			helpData = streamData;
 | 
			
		||||
  	    		}
 | 
			
		||||
              
 | 
			
		||||
  	    		
 | 
			
		||||
  	    		for(int i = 0;i<helpData.size();i++){
 | 
			
		||||
  	    			if(helpData.get(i).getRating()==1.0){
 | 
			
		||||
  	    				fav_true.add(i);
 | 
			
		||||
  	    			}else{
 | 
			
		||||
  	    				fav_false.add(i);
 | 
			
		||||
  	    			}
 | 
			
		||||
  	    		}
 | 
			
		||||
  	    		if(paramT2.toString().equals("DESCENDING")){
 | 
			
		||||
  	    			System.out.println("Absteigend");
 | 
			
		||||
  	  	    		for(int i = 0;i<fav_true.size();i++){
 | 
			
		||||
  	  	    			filterData.add(helpData.get(fav_true.get(i)));
 | 
			
		||||
  	  	    		}
 | 
			
		||||
  	  	    		for(int i = 0;i<fav_false.size();i++){
 | 
			
		||||
  	  	    			filterData.add(helpData.get(fav_false.get(i)));
 | 
			
		||||
  	  	    		}
 | 
			
		||||
  	    		}else{
 | 
			
		||||
  	  	    		for(int i = 0;i<fav_false.size();i++){
 | 
			
		||||
  	  	    			filterData.add(helpData.get(fav_false.get(i)));
 | 
			
		||||
  	  	    		}
 | 
			
		||||
  	  	    		for(int i = 0;i<fav_true.size();i++){
 | 
			
		||||
  	  	    			filterData.add(helpData.get(fav_true.get(i)));
 | 
			
		||||
  	  	    		}
 | 
			
		||||
  	    		}
 | 
			
		||||
  	    		
 | 
			
		||||
  	    		System.out.println(filterData.size());
 | 
			
		||||
    	    	for(int i = 0; i < filterData.size(); i++){
 | 
			
		||||
//    	    		System.out.println(filterData.get(i).getTitel()+"; "+filterData.get(i).getRating());
 | 
			
		||||
    				root.getChildren().add(new TreeItem<streamUiData>(filterData.get(i)));	//add filtered data to root node after search
 | 
			
		||||
    			}
 | 
			
		||||
            }
 | 
			
		||||
      });
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	//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));
 | 
			
		||||
        cbLocal.setItems(locals);
 | 
			
		||||
        
 | 
			
		||||
        //TODO rework!
 | 
			
		||||
        if(autoUpdate.equals("1")){
 | 
			
		||||
    		autoupdateBtn.setSelected(true);
 | 
			
		||||
    		Updater.start();
 | 
			
		||||
    	}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<streamUiData>(newData.get(selected)));
 | 
			
		||||
		}else if(mode.equals("streaming")){
 | 
			
		||||
			root.getChildren().set(selected, new TreeItem<streamUiData>(streamData.get(selected)));
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	void addDataUI(){
 | 
			
		||||
		if(mode.equals("local")){
 | 
			
		||||
			for(int i = 0; i < newDaten.size(); i++){
 | 
			
		||||
				root.getChildren().add(new TreeItem<streamUiData>(newDaten.get(i)));	//f<EFBFBD>gt daten zur Rootnode hinzu
 | 
			
		||||
			for(int i = 0; i < newData.size(); i++){
 | 
			
		||||
				root.getChildren().add(new TreeItem<streamUiData>(newData.get(i)));	//add data to root-node
 | 
			
		||||
			}
 | 
			
		||||
			columnRating.setMaxWidth(120);
 | 
			
		||||
		    columnTitel.setMaxWidth(240);
 | 
			
		||||
			columnRating.setMaxWidth(90);
 | 
			
		||||
		    columnTitel.setMaxWidth(290);
 | 
			
		||||
			treeTableViewfilm.getColumns().get(3).setVisible(false);
 | 
			
		||||
			treeTableViewfilm.getColumns().get(4).setVisible(false);
 | 
			
		||||
			treeTableViewfilm.getColumns().get(5).setVisible(false);
 | 
			
		||||
			treeTableViewfilm.getColumns().get(6).setVisible(false);
 | 
			
		||||
		}else if(mode.equals("streaming")){
 | 
			
		||||
			for(int i = 0; i < streamData.size(); i++){
 | 
			
		||||
				root.getChildren().add(new TreeItem<streamUiData>(streamData.get(i)));	//f<EFBFBD>gt daten zur Rootnode hinzu
 | 
			
		||||
				root.getChildren().add(new TreeItem<streamUiData>(streamData.get(i)));	//add data to root-node
 | 
			
		||||
			}
 | 
			
		||||
			columnTitel.setMaxWidth(150);
 | 
			
		||||
			columnResolution.setMaxWidth(65);
 | 
			
		||||
			columnRating.setMaxWidth(52.5);
 | 
			
		||||
			columnYear.setMaxWidth(40);
 | 
			
		||||
			columnSeason.setMaxWidth(52.5);
 | 
			
		||||
			columnEpisode.setMaxWidth(0);	//disabled for ui size reasons
 | 
			
		||||
			columnRating.setMaxWidth(50);
 | 
			
		||||
			columnYear.setMaxWidth(43);
 | 
			
		||||
			columnSeason.setMaxWidth(42);
 | 
			
		||||
			columnEpisode.setMaxWidth(44);
 | 
			
		||||
			treeTableViewfilm.getColumns().get(3).setVisible(true);
 | 
			
		||||
			treeTableViewfilm.getColumns().get(4).setVisible(true);
 | 
			
		||||
			treeTableViewfilm.getColumns().get(5).setVisible(true);
 | 
			
		||||
@ -731,7 +788,7 @@ public class MainWindowController {
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	private void loadStreamingSettings(){
 | 
			
		||||
	void loadStreamingSettings(){
 | 
			
		||||
		if(getStreamingPath().equals("")||getStreamingPath().equals(null)){
 | 
			
		||||
			System.out.println("Kein Pfad angegeben");	//falls der Pfad null oder "" ist
 | 
			
		||||
		}else{
 | 
			
		||||
@ -740,15 +797,15 @@ public class MainWindowController {
 | 
			
		||||
				if(entries[i].endsWith(".json")){
 | 
			
		||||
					String titel = ohneEndung(entries[i]);
 | 
			
		||||
					String data = entries[i];
 | 
			
		||||
					streamingData.add(new streamUiData(1,1,1,5.0,"1",titel ,data));
 | 
			
		||||
					streamingData.add(new streamUiData(1,1,1,5.0,"1",titel ,data, imv1));
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			for(int i = 0; i < streamingData.size(); i++){
 | 
			
		||||
				streamingRoot.getChildren().add( new TreeItem<streamUiData>(streamingData.get(i)));	//f<EFBFBD>gt daten zur Rootnode hinzu
 | 
			
		||||
				streamingRoot.getChildren().add( new TreeItem<streamUiData>(streamingData.get(i)));	//fügt daten zur Rootnode hinzu
 | 
			
		||||
			}
 | 
			
		||||
		}	
 | 
			
		||||
	}
 | 
			
		||||
	//entfernt die Endung vom String
 | 
			
		||||
	//removes the ending
 | 
			
		||||
	private String ohneEndung (String str) {
 | 
			
		||||
		if (str == null) return null;
 | 
			
		||||
		int pos = str.lastIndexOf(".");
 | 
			
		||||
@ -756,7 +813,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,9 +862,8 @@ 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<65>hrt wird
 | 
			
		||||
		if(mode.equals("local")){
 | 
			
		||||
			switchBtn.setText("streaming");	//TODO translate
 | 
			
		||||
			switchBtn.setText("streaming");
 | 
			
		||||
		}else if(mode.equals("streaming")){
 | 
			
		||||
			switchBtn.setText("local");
 | 
			
		||||
		}
 | 
			
		||||
@ -845,14 +901,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;
 | 
			
		||||
	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"));
 | 
			
		||||
@ -903,7 +965,7 @@ public class MainWindowController {
 | 
			
		||||
		type = bundle.getString("type");
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public void showErrorMsg(String msg, IOException exception){
 | 
			
		||||
	void showErrorMsg(String msg, IOException exception){
 | 
			
		||||
		Alert alert = new Alert(AlertType.ERROR);
 | 
			
		||||
    	alert.setTitle("Error");
 | 
			
		||||
    	alert.setHeaderText("");
 | 
			
		||||
@ -938,43 +1000,61 @@ public class MainWindowController {
 | 
			
		||||
	
 | 
			
		||||
	//saves the Settings
 | 
			
		||||
	public void saveSettings(){
 | 
			
		||||
		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());
 | 
			
		||||
			OutputStream outputStream = new FileOutputStream(file);	//new outputstream
 | 
			
		||||
			props.setProperty("ratingSortType", columnRating.getSortType().toString());
 | 
			
		||||
			if(System.getProperty("os.name").equals("Linux")){
 | 
			
		||||
				outputStream = new FileOutputStream(fileLinux);
 | 
			
		||||
			}else{
 | 
			
		||||
				outputStream = new FileOutputStream(fileWin);
 | 
			
		||||
			}
 | 
			
		||||
			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 {
 | 
			
		||||
			InputStream inputStream = new FileInputStream(file);
 | 
			
		||||
			props.loadFromXML(inputStream);	//new inputstream from .xml
 | 
			
		||||
			if(System.getProperty("os.name").equals("Linux")){
 | 
			
		||||
				inputStream = new FileInputStream(fileLinux);
 | 
			
		||||
			}else{
 | 
			
		||||
				inputStream = new FileInputStream(fileWin);
 | 
			
		||||
			}
 | 
			
		||||
			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);
 | 
			
		||||
@ -1023,11 +1103,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;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
@ -1038,4 +1118,4 @@ public class MainWindowController {
 | 
			
		||||
	public String getMode(){
 | 
			
		||||
		return mode;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -14,17 +14,26 @@ import java.util.Scanner;
 | 
			
		||||
import com.eclipsesource.json.Json;
 | 
			
		||||
import com.eclipsesource.json.JsonObject;
 | 
			
		||||
 | 
			
		||||
import javafx.collections.ObservableList;
 | 
			
		||||
import javafx.scene.Node;
 | 
			
		||||
import javafx.scene.image.Image;
 | 
			
		||||
import javafx.scene.paint.Color;
 | 
			
		||||
import javafx.scene.text.Font;
 | 
			
		||||
import javafx.scene.text.FontWeight;
 | 
			
		||||
import javafx.scene.text.Text;
 | 
			
		||||
 | 
			
		||||
public class apiQuery {
 | 
			
		||||
public class apiQuery{
 | 
			
		||||
	
 | 
			
		||||
	public apiQuery(MainWindowController m){
 | 
			
		||||
		mainWindowController=m;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	private MainWindowController mainWindowController;
 | 
			
		||||
	private Image im;
 | 
			
		||||
	private int fontSize = 20;
 | 
			
		||||
	private String fontFamily = "System";
 | 
			
		||||
	
 | 
			
		||||
	@SuppressWarnings("deprecation")
 | 
			
		||||
	@SuppressWarnings("deprecation") //TODO
 | 
			
		||||
	void startQuery(String input){
 | 
			
		||||
		URL url = null;
 | 
			
		||||
		Scanner sc = null;
 | 
			
		||||
@ -52,7 +61,7 @@ public class apiQuery {
 | 
			
		||||
			//replace blank with + for api-query
 | 
			
		||||
			moviename = moviename.replace(" ", "+");
 | 
			
		||||
 | 
			
		||||
			//URL wird zusammengestellt abfragetypen: http,json,xml (muss json sein um sp<EFBFBD>teres trennen zu erm<EFBFBD>glichen)
 | 
			
		||||
			//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);
 | 
			
		||||
@ -61,7 +70,7 @@ public class apiQuery {
 | 
			
		||||
 | 
			
		||||
			// lesen der Daten aus dem Antwort Stream
 | 
			
		||||
			while ((retdata = dis.readLine()) != null) {
 | 
			
		||||
				//retdata in json object parsen und anschlie<EFBFBD>end das json Objekt "zerschneiden"
 | 
			
		||||
				//retdata in json object parsen und anschließend das json Objekt "zerschneiden"
 | 
			
		||||
				System.out.println(retdata);
 | 
			
		||||
				JsonObject object = Json.parse(retdata).asObject();
 | 
			
		||||
				String titelV = object.getString("Title", "");
 | 
			
		||||
@ -77,7 +86,7 @@ public class apiQuery {
 | 
			
		||||
				String languageV = object.getString("Language", "");
 | 
			
		||||
				String countryV = object.getString("Country", "");
 | 
			
		||||
				String awardsV = object.getString("Awards", "");
 | 
			
		||||
				String posterURL = object.getString("Poster", "");
 | 
			
		||||
 | 
			
		||||
				String metascoreV = object.getString("Metascore", "");
 | 
			
		||||
				String imdbRatingV = object.getString("imdbRating", "");
 | 
			
		||||
				@SuppressWarnings("unused")
 | 
			
		||||
@ -85,15 +94,56 @@ public class apiQuery {
 | 
			
		||||
				@SuppressWarnings("unused")
 | 
			
		||||
				String imdbIDV = object.getString("imdbID", "");
 | 
			
		||||
				String typeV = object.getString("Type", "");
 | 
			
		||||
				
 | 
			
		||||
				String posterURL = object.getString("Poster", "");
 | 
			
		||||
				String response = object.getString("Response", "");
 | 
			
		||||
				
 | 
			
		||||
//				Text titelR = new Text (object.getString("Title", "")+"\n");
 | 
			
		||||
//				titelR.setFont(Font.font (fontFamily, fontSize));
 | 
			
		||||
//				Text yearR = new Text (object.getString("Year", "")+"\n");
 | 
			
		||||
//				yearR.setFont(Font.font (fontFamily, fontSize));
 | 
			
		||||
//				Text ratedR = new Text (object.getString("Rated", "")+"\n");
 | 
			
		||||
//				ratedR.setFont(Font.font (fontFamily, fontSize));
 | 
			
		||||
//				Text releasedR = new Text (object.getString("Released", "")+"\n");
 | 
			
		||||
//				releasedR.setFont(Font.font (fontFamily, fontSize));
 | 
			
		||||
//				Text runtimeR = new Text (object.getString("Runtime", "")+"\n");
 | 
			
		||||
//				runtimeR.setFont(Font.font (fontFamily, fontSize));
 | 
			
		||||
//				Text genreR = new Text (object.getString("Genre", ""));
 | 
			
		||||
//				genreR.setFont(Font.font (fontFamily, fontSize));
 | 
			
		||||
//				Text directorR = new Text (object.getString("Director", "")+"\n");
 | 
			
		||||
//				directorR.setFont(Font.font (fontFamily, fontSize));
 | 
			
		||||
//				Text writerR = new Text (object.getString("Writer", "")+"\n");
 | 
			
		||||
//				writerR.setFont(Font.font (fontFamily, fontSize));
 | 
			
		||||
//				Text actorsR  = new Text (object.getString("Actors", "")+"\n");
 | 
			
		||||
//				actorsR.setFont(Font.font (fontFamily, fontSize));
 | 
			
		||||
//				Text plotR = new Text (object.getString("Plot", "")+"\n");
 | 
			
		||||
//				plotR.setFont(Font.font (fontFamily, fontSize));
 | 
			
		||||
//				Text languageR = new Text (object.getString("Language", "")+"\n");
 | 
			
		||||
//				languageR.setFont(Font.font (fontFamily, fontSize));
 | 
			
		||||
//				Text countryR = new Text (object.getString("Country", "")+"\n");
 | 
			
		||||
//				countryR.setFont(Font.font (fontFamily, fontSize));
 | 
			
		||||
//				Text awardsR = new Text (object.getString("Awards", "")+"\n");
 | 
			
		||||
//				awardsR.setFont(Font.font (fontFamily, fontSize));
 | 
			
		||||
//				Text metascoreR = new Text (object.getString("Metascore", "")+"\n");
 | 
			
		||||
//				metascoreR.setFont(Font.font (fontFamily, fontSize));
 | 
			
		||||
//				Text imdbRatingR = new Text (object.getString("imdbRating", "")+"\n");
 | 
			
		||||
//				imdbRatingR.setFont(Font.font (fontFamily, fontSize));
 | 
			
		||||
//				@SuppressWarnings("unused")
 | 
			
		||||
//				Text imdbVotesR = new Text (object.getString("imdbVotes", "")+"\n");
 | 
			
		||||
//				imdbVotesR.setFont(Font.font (fontFamily, fontSize));
 | 
			
		||||
//				@SuppressWarnings("unused")
 | 
			
		||||
//				Text imdbIDR = new Text (object.getString("imdbID", "")+"\n");
 | 
			
		||||
//				imdbIDR.setFont(Font.font (fontFamily, fontSize));
 | 
			
		||||
//				Text typeR = new Text (object.getString("Type", "")+"\n");
 | 
			
		||||
//				typeR.setFont(Font.font (fontFamily, fontSize));
 | 
			
		||||
				
 | 
			
		||||
				
 | 
			
		||||
				if(response.equals("False")){
 | 
			
		||||
					mainWindowController.ta1.appendText(mainWindowController.noFilmFound);
 | 
			
		||||
					Image im2 = new Image("recources/icons/close_black_2048x2048.png");
 | 
			
		||||
					mainWindowController.image1.setImage(im2);
 | 
			
		||||
					im = new Image("recources/icons/close_black_2048x2048.png");
 | 
			
		||||
					mainWindowController.image1.setImage(im);
 | 
			
		||||
				}else{
 | 
			
		||||
				//ausgabe des Textes in ta1 in jeweils neuer Zeile //TODOformatting
 | 
			
		||||
				//ausgabe des Textes in ta1 in jeweils neuer Zeile 
 | 
			
		||||
					mainWindowController.ta1.appendText(mainWindowController.title+": "+titelV+"\n");
 | 
			
		||||
					mainWindowController.ta1.appendText(mainWindowController.year+": "+ yearV+"\n");
 | 
			
		||||
					mainWindowController.ta1.appendText(mainWindowController.rating+": "+ratedV+"\n");
 | 
			
		||||
@ -110,13 +160,63 @@ public class apiQuery {
 | 
			
		||||
					mainWindowController.ta1.appendText(mainWindowController.metascore+": "+metascoreV+"\n");
 | 
			
		||||
					mainWindowController.ta1.appendText(mainWindowController.imdbRating+": "+imdbRatingV+"\n");
 | 
			
		||||
					mainWindowController.ta1.appendText(mainWindowController.type+": "+typeV+"\n");
 | 
			
		||||
					
 | 
			
		||||
//					mainWindowController.ta1.setVisible(false);
 | 
			
		||||
					
 | 
			
		||||
//					Text title = new Text(15, 20, mainWindowController.title+": ");
 | 
			
		||||
//					title.setFont(Font.font (fontFamily, FontWeight.BOLD, fontSize));		
 | 
			
		||||
//					Text year = new Text(15, 20, mainWindowController.year+": ");
 | 
			
		||||
//					year.setFont(Font.font (fontFamily, FontWeight.BOLD, fontSize));	
 | 
			
		||||
//					Text rating = new Text(15, 20, mainWindowController.rating+": ");
 | 
			
		||||
//					rating.setFont(Font.font (fontFamily, FontWeight.BOLD, fontSize));		
 | 
			
		||||
//					Text publishedOn = new Text(15, 20, mainWindowController.publishedOn+": ");
 | 
			
		||||
//					publishedOn.setFont(Font.font (fontFamily, FontWeight.BOLD, fontSize));		
 | 
			
		||||
//					Text duration = new Text(15, 20, mainWindowController.duration+": ");
 | 
			
		||||
//					duration.setFont(Font.font (fontFamily, FontWeight.BOLD, fontSize));			
 | 
			
		||||
//					Text genre = new Text(15, 20, mainWindowController.genre+": ");
 | 
			
		||||
//					genre.setFont(Font.font (fontFamily, FontWeight.BOLD, fontSize));
 | 
			
		||||
//					Text director = new Text(15, 20, mainWindowController.director+": ");
 | 
			
		||||
//					director.setFont(Font.font (fontFamily, FontWeight.BOLD, fontSize));			
 | 
			
		||||
//					Text writer = new Text(15, 20, mainWindowController.writer+": ");
 | 
			
		||||
//					writer.setFont(Font.font (fontFamily, FontWeight.BOLD, fontSize));			
 | 
			
		||||
//					Text actors = new Text(15, 20, mainWindowController.actors+": ");
 | 
			
		||||
//					actors.setFont(Font.font (fontFamily, FontWeight.BOLD, fontSize));			
 | 
			
		||||
//					Text plot = new Text(15, 20, mainWindowController.plot+": ");
 | 
			
		||||
//					plot.setFont(Font.font (fontFamily, FontWeight.BOLD, fontSize));			
 | 
			
		||||
//					Text language = new Text(15, 20, mainWindowController.language+": ");
 | 
			
		||||
//					language.setFont(Font.font (fontFamily, FontWeight.BOLD, fontSize));				
 | 
			
		||||
//					Text country = new Text(15, 20, mainWindowController.country+": ");
 | 
			
		||||
//					country.setFont(Font.font (fontFamily, FontWeight.BOLD, fontSize));				
 | 
			
		||||
//					Text awards = new Text(15, 20, mainWindowController.awards+": ");
 | 
			
		||||
//					awards.setFont(Font.font (fontFamily, FontWeight.BOLD, fontSize));		
 | 
			
		||||
//					Text metascore = new Text(15, 20, mainWindowController.metascore+": ");
 | 
			
		||||
//					metascore.setFont(Font.font (fontFamily, FontWeight.BOLD, fontSize));
 | 
			
		||||
//					Text imdbRating = new Text(15, 20, mainWindowController.imdbRating+": ");
 | 
			
		||||
//					imdbRating.setFont(Font.font (fontFamily, FontWeight.BOLD, fontSize));					
 | 
			
		||||
//					Text type = new Text(15, 20, mainWindowController.type+": ");
 | 
			
		||||
//					type.setFont(Font.font (fontFamily, FontWeight.BOLD, fontSize));
 | 
			
		||||
//				
 | 
			
		||||
//					mainWindowController.textFlow.getChildren().remove(0, mainWindowController.textFlow.getChildren().size());
 | 
			
		||||
//					
 | 
			
		||||
//					ObservableList<Node> list = mainWindowController.textFlow.getChildren();
 | 
			
		||||
//					
 | 
			
		||||
//					list.addAll(title,titelR,year,yearR,rating,ratedR,
 | 
			
		||||
//						   publishedOn,releasedR,duration,runtimeR,genre,genreR,director,directorR,writer,writerR,
 | 
			
		||||
//						   actors,actorsR,plot,plotR,language,languageR,country,countryR,awards,awardsR,metascore,
 | 
			
		||||
//						   metascoreR,imdbRating,imdbRatingR,type,typeR);
 | 
			
		||||
//					
 | 
			
		||||
				
 | 
			
		||||
					Image im1 = new Image(posterURL);
 | 
			
		||||
					mainWindowController.image1.setImage(im1);
 | 
			
		||||
					if(posterURL.equals("N/A")){
 | 
			
		||||
						im = new Image("recources/icons/close_black_2048x2048.png");
 | 
			
		||||
					}else{
 | 
			
		||||
						im = new Image(posterURL);
 | 
			
		||||
					}
 | 
			
		||||
					mainWindowController.image1.setImage(im);
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		} catch (Exception e) {
 | 
			
		||||
			mainWindowController.ta1.setText(e.toString());
 | 
			
		||||
			System.out.println(e);
 | 
			
		||||
		} finally {
 | 
			
		||||
			//closes datainputStream, InputStream,Scanner if not already done
 | 
			
		||||
 | 
			
		||||
@ -4,21 +4,24 @@ import javafx.beans.property.DoubleProperty;
 | 
			
		||||
import javafx.beans.property.IntegerProperty;
 | 
			
		||||
import javafx.beans.property.SimpleDoubleProperty;
 | 
			
		||||
import javafx.beans.property.SimpleIntegerProperty;
 | 
			
		||||
import javafx.beans.property.SimpleObjectProperty;
 | 
			
		||||
import javafx.beans.property.SimpleStringProperty;
 | 
			
		||||
import javafx.beans.property.StringProperty;
 | 
			
		||||
import javafx.scene.image.ImageView;
 | 
			
		||||
 | 
			
		||||
public class streamUiData {
 | 
			
		||||
	
 | 
			
		||||
	private IntegerProperty year = new SimpleIntegerProperty();
 | 
			
		||||
	private IntegerProperty season = new SimpleIntegerProperty();
 | 
			
		||||
	private IntegerProperty episode = new SimpleIntegerProperty();
 | 
			
		||||
	private DoubleProperty rating = new SimpleDoubleProperty();
 | 
			
		||||
	private StringProperty resolution = new SimpleStringProperty();
 | 
			
		||||
	private StringProperty titel = new SimpleStringProperty();
 | 
			
		||||
	private StringProperty streamUrl = new SimpleStringProperty();
 | 
			
		||||
	private final IntegerProperty year = new SimpleIntegerProperty();
 | 
			
		||||
	private final IntegerProperty season = new SimpleIntegerProperty();
 | 
			
		||||
	private final IntegerProperty episode = new SimpleIntegerProperty();
 | 
			
		||||
	private final DoubleProperty rating = new SimpleDoubleProperty();
 | 
			
		||||
	private final StringProperty resolution = new SimpleStringProperty();
 | 
			
		||||
	private final StringProperty titel = new SimpleStringProperty();
 | 
			
		||||
	private final StringProperty streamUrl = new SimpleStringProperty();
 | 
			
		||||
	private final SimpleObjectProperty<ImageView> image = new SimpleObjectProperty<>();
 | 
			
		||||
	
 | 
			
		||||
	//uiData ist der Typ der Daten in der TreeTabelView
 | 
			
		||||
	public streamUiData (final int year, final int season, final int episode, final double rating, final String resolution, final String titel, final String streamUrl) {
 | 
			
		||||
	public streamUiData (final int year, final int season, final int episode, final double rating, final String resolution, final String titel, final String streamUrl, final ImageView image) {
 | 
			
		||||
		this.year.set(year);
 | 
			
		||||
		this.season.set(season);
 | 
			
		||||
		this.episode.set(episode);
 | 
			
		||||
@ -26,63 +29,7 @@ public class streamUiData {
 | 
			
		||||
		this.resolution.set(resolution);
 | 
			
		||||
		this.titel.set(titel);
 | 
			
		||||
		this.streamUrl.set(streamUrl);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public int getYear() {
 | 
			
		||||
		return year.get();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public int getSeason() {
 | 
			
		||||
		return season.get();
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public int getEpisode() {
 | 
			
		||||
		return episode.get();
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public double getRating() {
 | 
			
		||||
		return rating.get();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public String getResolution() {
 | 
			
		||||
		return resolution.get();
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public String getTitel() {
 | 
			
		||||
		return titel.get();
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public String getStreamUrl() {
 | 
			
		||||
		return streamUrl.get();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	public void setYear(int year) {
 | 
			
		||||
		this.year.set(year);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public void setSeason(int season) {
 | 
			
		||||
		this.season.set(season);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public void setEpisode(int season) {
 | 
			
		||||
		this.episode.set(season);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public void setRating(int rating) {
 | 
			
		||||
		this.rating.set(rating);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public void setResolution(String resolution) {
 | 
			
		||||
		this.resolution.set(resolution);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public void setTitel(String titel) {
 | 
			
		||||
		this.titel.set(titel);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public void setStreamUrl(StringProperty streamUrl) {
 | 
			
		||||
		this.streamUrl = streamUrl;
 | 
			
		||||
		this.image.set(image);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public IntegerProperty yearProperty(){
 | 
			
		||||
@ -112,4 +59,74 @@ public class streamUiData {
 | 
			
		||||
	public StringProperty streamUrlProperty(){
 | 
			
		||||
		return streamUrl;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public SimpleObjectProperty<ImageView> imageProperty(){
 | 
			
		||||
		return image;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
	public final int getYear() {
 | 
			
		||||
		return yearProperty().get();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public final int getSeason() {
 | 
			
		||||
		return seasonProperty().get();
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public final int getEpisode() {
 | 
			
		||||
		return episodeProperty().get();
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public final double getRating() {
 | 
			
		||||
		return ratingProperty().get();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public final String getResolution() {
 | 
			
		||||
		return resolutionProperty().get();
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public final String getTitel() {
 | 
			
		||||
		return titelProperty().get();
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public final String getStreamUrl() {
 | 
			
		||||
		return streamUrlProperty().get();
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public final ImageView getImage() {
 | 
			
		||||
		return imageProperty().get();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	public final void setYear(int year) {
 | 
			
		||||
		yearProperty().set(year);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public final void setSeason(int season) {
 | 
			
		||||
		seasonProperty().set(season);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public final void setEpisode(int season) {
 | 
			
		||||
		episodeProperty().set(season);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public final void setRating(int rating) {
 | 
			
		||||
		ratingProperty().set(rating);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public final void setResolution(String resolution) {
 | 
			
		||||
		resolutionProperty().set(resolution);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public final void setTitel(String titel) {
 | 
			
		||||
		titelProperty().set(titel);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public final void setStreamUrl(String streamUrl) {
 | 
			
		||||
		streamUrlProperty().set(streamUrl);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public final void setImage(ImageView image) {
 | 
			
		||||
		imageProperty().set(image);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -12,15 +12,23 @@ import java.net.URL;
 | 
			
		||||
import java.nio.channels.Channels;
 | 
			
		||||
import java.nio.channels.ReadableByteChannel;
 | 
			
		||||
 | 
			
		||||
public class updater {
 | 
			
		||||
public class updater extends Thread{
 | 
			
		||||
	
 | 
			
		||||
	public updater(MainWindowController m){
 | 
			
		||||
		mainWindowController=m;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private MainWindowController mainWindowController;
 | 
			
		||||
	private String buildURL;
 | 
			
		||||
	private String downloadLink;
 | 
			
		||||
	private String aktBuildNumber;
 | 
			
		||||
	private String buildNumber;
 | 
			
		||||
	
 | 
			
		||||
	void update(String buildURL,String downloadLink,String aktBuildNumber,String buildNumber){
 | 
			
		||||
	public updater(MainWindowController m, String buildURL,String downloadLink,String aktBuildNumber,String buildNumber){
 | 
			
		||||
		mainWindowController=m;
 | 
			
		||||
		this.buildURL=buildURL;
 | 
			
		||||
		this.downloadLink=downloadLink;
 | 
			
		||||
		this.aktBuildNumber=aktBuildNumber;
 | 
			
		||||
		this.buildNumber=buildNumber;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public void run(){
 | 
			
		||||
		System.out.println("check for updates ...");
 | 
			
		||||
		try {
 | 
			
		||||
			URL url = new URL(buildURL); //URL der Datei mit aktueller Versionsnummer
 | 
			
		||||
@ -37,27 +45,27 @@ public class updater {
 | 
			
		||||
		int iaktVersion = Integer.parseInt(aktBuildNumber.replace(".", ""));
 | 
			
		||||
		
 | 
			
		||||
		if(iversion >= iaktVersion){
 | 
			
		||||
			mainWindowController.updateBtn.setText(mainWindowController.bundle.getString("updateBtnNotavail"));
 | 
			
		||||
//			mainWindowController.updateBtn.setText(mainWindowController.bundle.getString("updateBtnNotavail"));
 | 
			
		||||
			System.out.println("no update available");
 | 
			
		||||
		}else{
 | 
			
		||||
			mainWindowController.updateBtn.setText(mainWindowController.bundle.getString("updateBtnavail"));
 | 
			
		||||
//			mainWindowController.updateBtn.setText(mainWindowController.bundle.getString("updateBtnavail"));
 | 
			
		||||
			System.out.println("update available");
 | 
			
		||||
		try {
 | 
			
		||||
			URL website;
 | 
			
		||||
			URL downloadURL = new URL(downloadLink);
 | 
			
		||||
			BufferedReader in = new BufferedReader(new InputStreamReader(downloadURL.openStream()));
 | 
			
		||||
			String updateDataURL = in.readLine();
 | 
			
		||||
			website = new URL(updateDataURL);	//Update URL
 | 
			
		||||
			ReadableByteChannel rbc = Channels.newChannel(website.openStream());	//open new Stream/Channel
 | 
			
		||||
			FileOutputStream fos = new FileOutputStream("ProjectHomeFlix.jar");	//nea fileoutputstram for ProjectHomeFLix.jar
 | 
			
		||||
			fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);	//gets file from 0 to max size
 | 
			
		||||
			fos.close();	//close fos (extrem wichtig!)
 | 
			
		||||
			Runtime.getRuntime().exec("java -jar ProjectHomeFlix.jar");	//start again
 | 
			
		||||
			System.exit(0);	//finishes itself
 | 
			
		||||
		} catch (IOException e) {
 | 
			
		||||
			//in case there is an error
 | 
			
		||||
			mainWindowController.showErrorMsg(mainWindowController.errorUpdateD, e);
 | 
			
		||||
		}
 | 
			
		||||
			try {
 | 
			
		||||
				URL website;
 | 
			
		||||
				URL downloadURL = new URL(downloadLink);
 | 
			
		||||
				BufferedReader in = new BufferedReader(new InputStreamReader(downloadURL.openStream()));
 | 
			
		||||
				String updateDataURL = in.readLine();
 | 
			
		||||
				website = new URL(updateDataURL);	//Update URL
 | 
			
		||||
				ReadableByteChannel rbc = Channels.newChannel(website.openStream());	//open new Stream/Channel
 | 
			
		||||
				FileOutputStream fos = new FileOutputStream("ProjectHomeFlix.jar");	//nea fileoutputstram for ProjectHomeFLix.jar
 | 
			
		||||
				fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);	//gets file from 0 to max size
 | 
			
		||||
				fos.close();	//close fos (extrem wichtig!)
 | 
			
		||||
				Runtime.getRuntime().exec("java -jar ProjectHomeFlix.jar");	//start again
 | 
			
		||||
				System.exit(0);	//finishes itself
 | 
			
		||||
			} catch (IOException e) {
 | 
			
		||||
				//in case there is an error
 | 
			
		||||
				mainWindowController.showErrorMsg(mainWindowController.errorUpdateD, e);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								src/libraries/sqlite-jdbc-3.16.1.jar
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/libraries/sqlite-jdbc-3.16.1.jar
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							@ -1,4 +1,4 @@
 | 
			
		||||
# HomeFlix-Local_de_DE.properties German Local
 | 
			
		||||
# HomeFlix-Local_de_DE.properties German Local
 | 
			
		||||
info = Info
 | 
			
		||||
settings = Einstellungen
 | 
			
		||||
streamingSettings = Stream Einst.
 | 
			
		||||
@ -28,7 +28,7 @@ errorSave = Beim speichern der Einstellungen ist ein Fehler aufgetreten!
 | 
			
		||||
noFilmFound = Kein Film mit diesem Titel gefunden!
 | 
			
		||||
linuxBug = Zurzeit werden unter Linux leider keine Dateien mit Leerzeichen unterst\u00FCtzt!
 | 
			
		||||
vlcNotInstalled = Um einen Film abspielen wird der VLC Media Player ben\u00F6tigt!
 | 
			
		||||
infoText = \nMaintainer: seilo@kellerkinder.xyz und \nhendrik.schutter@coptersicht.de \n(c) 2016 Kellerkinder www.kellerkinder.xyz
 | 
			
		||||
infoText = \nMaintainer: seilo@kellerkinder.xyz und \nhendrik.schutter@coptersicht.de \n(c) 2016-2017 Kellerkinder www.kellerkinder.xyz
 | 
			
		||||
title = Titel
 | 
			
		||||
year = Jahr
 | 
			
		||||
rating = Einstufung
 | 
			
		||||
@ -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?
 | 
			
		||||
 | 
			
		||||
@ -28,7 +28,7 @@ errorSave = An error occurred while saving the settings!
 | 
			
		||||
noFilmFound = No film with this title found!
 | 
			
		||||
linuxBug = Currently no files are supported with additional space under Linux unfortunately!
 | 
			
		||||
vlcNotInstalled = VLC Media Player is required to play a movie!
 | 
			
		||||
infoText = \nMaintainer: seilo@kellerkinder.xyz and \nhendrik.schutter@coptersicht.de \n(c) 2016 Kellerkinder www.kellerkinder.xyz
 | 
			
		||||
infoText = \nMaintainer: seilo@kellerkinder.xyz and \nhendrik.schutter@coptersicht.de \n(c) 2016-2017 Kellerkinder www.kellerkinder.xyz
 | 
			
		||||
title = Title
 | 
			
		||||
year = Year
 | 
			
		||||
rating = Rating
 | 
			
		||||
@ -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?
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							@ -1 +1 @@
 | 
			
		||||
104
 | 
			
		||||
117
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user