/*
* This file is part of Popcorn Time.
*
* Popcorn Time 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.
*
* Popcorn Time 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 Popcorn Time. If not, see <http://www.gnu.org/licenses/>.
*/
package pct.droid.base.providers.meta;
import android.os.AsyncTask;
import com.uwetrottmann.trakt.v2.TraktV2;
import com.uwetrottmann.trakt.v2.entities.Episode;
import com.uwetrottmann.trakt.v2.entities.Movie;
import com.uwetrottmann.trakt.v2.enums.Extended;
import com.uwetrottmann.trakt.v2.services.Episodes;
import com.uwetrottmann.trakt.v2.services.Movies;
import retrofit.RetrofitError;
public class TraktProvider extends MetaProvider {
private static final String API_KEY = "c7e20abc718e46fc75399dd6688afca9ac83cd4519c9cb1fba862b37b8640e89";
private static TraktV2 TRAKT = new TraktV2();
private static Movies MOVIES;
private static Episodes EPISODES;
static {
TRAKT.setApiKey(API_KEY);
MOVIES = TRAKT.movies();
EPISODES = TRAKT.episodes();
}
/**
* Get metadata from Trakt for a movie
*
* @param imdbId IMDb id to get metadata for
* @return MetaData
*/
@Override
public void getMovieMeta(final String imdbId, Callback callback) {
new TraktTask(callback) {
@Override
protected MetaData doInBackground(Void... params) {
try {
Movie m = MOVIES.summary(imdbId, Extended.FULLIMAGES);
MetaData metaData = new MetaData();
metaData.certification = m.certification;
metaData.genres = m.genres.toArray(new String[m.genres.size()]);
metaData.imdb_id = imdbId;
metaData.overview = m.overview;
metaData.released = m.released;
metaData.year = m.year;
metaData.rating = m.rating;
metaData.runtime = m.runtime;
metaData.trailer = m.trailer;
metaData.tagline = m.tagline;
metaData.title = m.title;
metaData.images = new MetaData.Images(m.images.poster.full, m.images.fanart.full);
return metaData;
} catch (RetrofitError e) {
mException = e;
}
return null;
}
}.execute();
}
/**
* Get metadata from Trakt for episode
*
* @param imdbId IMDb id to get metadata for
* @return MetaData
*/
@Override
public void getEpisodeMeta(final String imdbId, final int season, final int episode, Callback callback) {
new TraktTask(callback) {
@Override
protected MetaData doInBackground(Void... params) {
try {
Episode e = EPISODES.summary(imdbId, season, episode, Extended.FULLIMAGES);
MetaData metaData = new MetaData();
metaData.overview = e.overview;
metaData.title = e.title;
metaData.images = new MetaData.Images(e.images.screenshot.medium);
metaData.rating = e.rating;
metaData.released = e.first_aired;
return metaData;
} catch (RetrofitError e) {
mException = e;
}
return null;
}
}.execute();
}
abstract class TraktTask extends AsyncTask<Void, Void, MetaData> {
protected Exception mException;
private Callback mCallback;
public TraktTask(Callback callback) {
mCallback = callback;
}
@Override
protected void onPostExecute(MetaData metaData) {
super.onPostExecute(metaData);
mCallback.onResult(metaData, mException);
}
}
}