package com.battlelancer.seriesguide.loaders; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.text.TextUtils; import com.battlelancer.seriesguide.SgApp; import com.battlelancer.seriesguide.settings.DisplaySettings; import com.battlelancer.seriesguide.tmdbapi.SgTmdb; import com.uwetrottmann.androidutils.GenericSimpleLoader; import com.uwetrottmann.tmdb2.entities.Videos; import com.uwetrottmann.tmdb2.services.MoviesService; import java.io.IOException; import javax.inject.Inject; import retrofit2.Response; import timber.log.Timber; /** * Loads a YouTube movie trailer from TMDb. Tries to get a local trailer, if not falls back to * English. */ public class MovieTrailersLoader extends GenericSimpleLoader<Videos.Video> { @Inject MoviesService moviesService; private int mTmdbId; public MovieTrailersLoader(SgApp app, int tmdbId) { super(app); app.getServicesComponent().inject(this); mTmdbId = tmdbId; } @Override public Videos.Video loadInBackground() { // try to get a local trailer Videos.Video trailer = getTrailer( DisplaySettings.getMoviesLanguage(getContext()), "get local movie trailer"); if (trailer != null) { return trailer; } Timber.d("Did not find a local movie trailer."); // fall back to default language trailer return getTrailer(null, "get default movie trailer"); } @Nullable private Videos.Video getTrailer(@Nullable String language, @NonNull String action) { try { Response<Videos> response = moviesService.videos(mTmdbId, language).execute(); if (response.isSuccessful()) { return extractTrailer(response.body()); } else { SgTmdb.trackFailedRequest(getContext(), action, response); } } catch (IOException e) { SgTmdb.trackFailedRequest(getContext(), action, e); } return null; } @Nullable private Videos.Video extractTrailer(@Nullable Videos videos) { if (videos == null || videos.results == null || videos.results.size() == 0) { return null; } // fish out the first YouTube trailer for (Videos.Video video : videos.results) { if ("Trailer".equals(video.type) && "YouTube".equals(video.site) && !TextUtils.isEmpty(video.key)) { return video; } } return null; } }