package io.github.xwz.sbs.content; import android.content.Context; import android.os.AsyncTask; import android.util.Log; import java.util.ArrayList; import java.util.Date; import java.util.List; import io.github.xwz.base.api.EpisodeBaseModel; import io.github.xwz.base.content.ContentManagerBase; import io.github.xwz.sbs.api.EpisodeModel; import io.github.xwz.sbs.api.SBSApi; import io.github.xwz.sbs.api.SBSAuthApi; import io.github.xwz.sbs.api.SBSRelatedApi; public class ContentManager extends ContentManagerBase { private static final String TAG = "ContentManager"; private SBSApi fetchShows; private long lastFetchList = 0; public ContentManager(Context context) { super(context); } @Override public void fetchShowList(boolean force) { long now = (new Date()).getTime(); boolean shouldFetch = force || now - lastFetchList > 1800000; Log.d(TAG, "diff:" + (now - lastFetchList)); if (shouldFetch && (fetchShows == null || fetchShows.getStatus() == AsyncTask.Status.FINISHED)) { cache().broadcastChange(CONTENT_SHOW_LIST_FETCHING); fetchShows = new SBSApi(getContext()); fetchShows.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); lastFetchList = now; } } @Override public void fetchEpisode(EpisodeBaseModel episode) { broadcastChange(CONTENT_EPISODE_FETCHING, episode.getHref()); EpisodeModel existing = (EpisodeModel) cache().getEpisode(episode.getHref()); if (existing != null && existing.hasExtras() && existing.hasOtherEpisodes()) { cache().broadcastChangeDelayed(100, CONTENT_EPISODE_DONE, episode.getHref(), null); } else { new SBSRelatedApi(getContext(), episode.getHref()).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, episode.getHref()); } } @Override public void fetchAuthToken(EpisodeBaseModel episode) { Log.d(TAG, "fetchAuthToken"); cache().broadcastChange(CONTENT_AUTH_FETCHING, episode.getHref()); new SBSAuthApi(getContext(), episode.getHref()).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, episode.getHref()); } @Override public List<EpisodeBaseModel> getRecommendations() { List<EpisodeBaseModel> all = getAllShows(); if (all.size() > 40) { return getAllShows().subList(30, 32); } return new ArrayList<>(); } @Override public Class getRecommendationServiceClass() { return RecommendationsService.class; } }