package com.florianmski.tracktoid.trakt;
import android.content.Context;
import com.florianmski.tracktoid.BuildConfig;
import com.florianmski.tracktoid.rx.observables.TraktObservable;
import com.florianmski.tracktoid.services.CheckinService;
import com.uwetrottmann.trakt.v2.entities.BaseCheckinResponse;
import com.uwetrottmann.trakt.v2.entities.EpisodeCheckin;
import com.uwetrottmann.trakt.v2.entities.EpisodeCheckinResponse;
import com.uwetrottmann.trakt.v2.entities.EpisodeIds;
import com.uwetrottmann.trakt.v2.entities.MovieCheckin;
import com.uwetrottmann.trakt.v2.entities.MovieCheckinResponse;
import com.uwetrottmann.trakt.v2.entities.MovieIds;
import com.uwetrottmann.trakt.v2.entities.SyncEpisode;
import com.uwetrottmann.trakt.v2.entities.SyncMovie;
import com.uwetrottmann.trakt.v2.exceptions.CheckinInProgressException;
import com.uwetrottmann.trakt.v2.exceptions.OAuthUnauthorizedException;
import rx.Observable;
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Action0;
import rx.schedulers.Schedulers;
public class CheckinManager
{
private final static String APP_VERSION = String.format("Traktoid %s", BuildConfig.VERSION_NAME);
private static CheckinManager manager;
public static synchronized CheckinManager getInstance()
{
if (manager == null)
return new CheckinManager();
return manager;
}
public Observable<MovieCheckinResponse> checkinMovie(final Context context, final int id, final String title, final int duration)
{
return checkin(new TraktObservable<MovieCheckinResponse>()
{
@Override
public MovieCheckinResponse fire() throws OAuthUnauthorizedException, CheckinInProgressException
{
MovieCheckin checkin = new MovieCheckin.Builder(new SyncMovie().id(MovieIds.trakt(id)), APP_VERSION, null).build();
return TraktManager.getInstance().checkin().checkin(checkin);
}
}, new Action0()
{
@Override
public void call()
{
CheckinService.checkinMovie(context, id, title, duration);
}
});
}
public Observable<EpisodeCheckinResponse> checkinEpisode(final Context context, final int id, final String title, final int duration)
{
return checkin(new TraktObservable<EpisodeCheckinResponse>()
{
@Override
public EpisodeCheckinResponse fire() throws OAuthUnauthorizedException, CheckinInProgressException
{
EpisodeCheckin checkin = new EpisodeCheckin.Builder(new SyncEpisode().id(EpisodeIds.trakt(id)), APP_VERSION, null).build();
return TraktManager.getInstance().checkin().checkin(checkin);
}
}, new Action0()
{
@Override
public void call()
{
CheckinService.checkinEpisode(context, id, title, duration);
}
});
}
private <T extends BaseCheckinResponse> Observable<T> checkin(TraktObservable<T> traktObservable, Action0 callServiceAction)
{
return Observable
.create(traktObservable)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.doOnCompleted(callServiceAction);
}
public void stop(Context context)
{
CheckinService.stopCheckin(context);
}
public boolean checkinInProgress()
{
return CheckinService.isCheckinInProgress();
}
}