2018-03-10 14:16:37 +01:00
/ * *
* Project - HomeFlix
*
* Copyright 2018 < @Seil0 >
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 3 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 51 Franklin Street , Fifth Floor , Boston ,
* MA 02110 - 1301 , USA .
*
* /
2018-03-08 17:59:28 +01:00
package kellerkinder.HomeFlix.controller ;
import java.awt.image.BufferedImage ;
import java.io.BufferedReader ;
import java.io.File ;
import java.io.IOException ;
import java.io.InputStreamReader ;
import java.net.URL ;
import javax.imageio.ImageIO ;
import org.apache.logging.log4j.LogManager ;
import org.apache.logging.log4j.Logger ;
import com.eclipsesource.json.Json ;
import com.eclipsesource.json.JsonObject ;
import javafx.application.Platform ;
import kellerkinder.HomeFlix.application.Main ;
import kellerkinder.HomeFlix.application.MainWindowController ;
public class OMDbAPIController implements Runnable {
private MainWindowController mainWindowController ;
private DBController dbController ;
private Main main ;
private String [ ] responseString = new String [ 20 ] ;
private String URL = " https://www.omdbapi.com/?apikey= " ;
private static final Logger LOGGER = LogManager . getLogger ( MainWindowController . class . getName ( ) ) ;
public OMDbAPIController ( MainWindowController mainWindowController , DBController dbController , Main main ) {
this . mainWindowController = mainWindowController ;
this . dbController = dbController ;
this . main = main ;
}
@Override
public void run ( ) {
String output = null ;
String posterPath = null ;
2018-04-02 02:18:43 +02:00
// get by title, TODO implement search FIXME set correct info if film dosen't exist
2018-03-08 17:59:28 +01:00
try {
URL apiUrl = new URL ( URL + mainWindowController . getOmdbAPIKey ( ) + " &t= "
+ mainWindowController . getTitle ( ) . replace ( " " , " %20 " ) ) ;
BufferedReader ina = new BufferedReader ( new InputStreamReader ( apiUrl . openStream ( ) ) ) ;
output = ina . readLine ( ) ;
ina . close ( ) ;
LOGGER . info ( " response from " + URL + " was valid " ) ;
LOGGER . info ( output ) ;
} catch ( IOException e ) {
LOGGER . error ( " error while making api request or reading response " ) ;
LOGGER . error ( " response from " + URL + " was: \ n " + output , e ) ;
return ;
}
JsonObject object = Json . parse ( output ) . asObject ( ) ;
responseString [ 0 ] = object . getString ( " Title " , " " ) ;
responseString [ 1 ] = object . getString ( " Year " , " " ) ;
responseString [ 2 ] = object . getString ( " Rated " , " " ) ;
responseString [ 3 ] = object . getString ( " Released " , " " ) ;
responseString [ 4 ] = object . getString ( " Runtime " , " " ) ;
responseString [ 5 ] = object . getString ( " Genre " , " " ) ;
responseString [ 6 ] = object . getString ( " Director " , " " ) ;
responseString [ 7 ] = object . getString ( " Writer " , " " ) ;
responseString [ 8 ] = object . getString ( " Actors " , " " ) ;
responseString [ 9 ] = object . getString ( " Plot " , " " ) ;
responseString [ 10 ] = object . getString ( " Language " , " " ) ;
responseString [ 11 ] = object . getString ( " Country " , " " ) ;
responseString [ 12 ] = object . getString ( " Awards " , " " ) ;
responseString [ 13 ] = object . getString ( " Metascore " , " " ) ;
responseString [ 14 ] = object . getString ( " imdbRating " , " " ) ;
responseString [ 15 ] = object . getString ( " Type " , " " ) ;
responseString [ 16 ] = object . getString ( " imdbVotes " , " " ) ;
responseString [ 17 ] = object . getString ( " imdbID " , " " ) ;
responseString [ 18 ] = object . getString ( " Poster " , " " ) ;
responseString [ 19 ] = object . getString ( " Response " , " " ) ;
//resize the image to fit in the posterImageView and add it to the cache
try {
BufferedImage originalImage = ImageIO . read ( new URL ( responseString [ 18 ] ) ) ; //change path to where file is located
posterPath = main . getPosterCache ( ) + " / " + mainWindowController . getTitle ( ) + " .png " ;
2018-03-10 14:16:37 +01:00
ImageIO . write ( originalImage , " png " , new File ( posterPath ) ) ;
2018-03-08 17:59:28 +01:00
LOGGER . info ( " adding poster to cache: " + posterPath ) ;
} catch ( Exception e ) {
LOGGER . error ( e ) ;
}
// adding strings to the cache
dbController . addCache ( mainWindowController . getStreamUrl ( ) , responseString [ 0 ] , responseString [ 1 ] ,
responseString [ 2 ] , responseString [ 3 ] , responseString [ 4 ] , responseString [ 5 ] , responseString [ 6 ] ,
responseString [ 7 ] , responseString [ 8 ] , responseString [ 9 ] , responseString [ 10 ] , responseString [ 11 ] ,
responseString [ 12 ] , responseString [ 13 ] , responseString [ 14 ] , responseString [ 15 ] , responseString [ 16 ] ,
responseString [ 17 ] , posterPath , responseString [ 19 ] ) ;
dbController . setCached ( mainWindowController . getStreamUrl ( ) ) ;
// load data to the MainWindowController
Platform . runLater ( ( ) - > {
dbController . readCache ( mainWindowController . getStreamUrl ( ) ) ;
} ) ;
}
}