package com.battlelancer.seriesguide.util.tasks; import android.content.ContentValues; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import com.battlelancer.seriesguide.SgApp; import com.battlelancer.seriesguide.provider.SeriesGuideContract; import com.battlelancer.seriesguide.util.MovieTools; import com.uwetrottmann.trakt5.entities.MovieIds; import com.uwetrottmann.trakt5.entities.SyncItems; import com.uwetrottmann.trakt5.entities.SyncMovie; import com.uwetrottmann.trakt5.enums.Rating; import org.greenrobot.eventbus.EventBus; public class RateMovieTask extends BaseRateItemTask { private final int movieTmdbId; /** * Stores the rating for the given movie in the database (if it is in the database) and sends it * to trakt. */ public RateMovieTask(SgApp app, Rating rating, int movieTmdbId) { super(app, rating); this.movieTmdbId = movieTmdbId; } @NonNull @Override protected String getTraktAction() { return "rate movie"; } @Nullable @Override protected SyncItems buildTraktSyncItems() { return new SyncItems() .movies(new SyncMovie().id(MovieIds.tmdb(movieTmdbId)).rating(getRating())); } @Override protected boolean doDatabaseUpdate() { ContentValues values = new ContentValues(); values.put(SeriesGuideContract.Movies.RATING_USER, getRating().value); int rowsUpdated = getContext().getContentResolver() .update(SeriesGuideContract.Movies.buildMovieUri(movieTmdbId), values, null, null); return rowsUpdated > 0; } @Override protected void onPostExecute(Integer result) { super.onPostExecute(result); // post event so movie UI reloads (it is not listening to database changes) EventBus.getDefault().post(new MovieTools.MovieChangedEvent(movieTmdbId)); } }