package com.xda.one.loader; import com.xda.one.api.inteface.ForumClient; import com.xda.one.api.model.interfaces.Forum; import com.xda.one.api.model.response.ResponseForum; import com.xda.one.api.retrofit.RetrofitForumClient; import com.xda.one.db.ForumDbHelper; import com.xda.one.model.misc.ForumType; import com.xda.one.util.Utils; import android.content.Context; import java.util.List; public class ForumLoader extends AsyncLoader<List<ResponseForum>> { private final ForumClient mClient; private final ForumDbHelper mHelper; private final Forum mForum; private final boolean mForceReload; private final ForumType mForumType; public ForumLoader(final Context context, final ForumType forumType, final Forum forum, boolean forceReload) { super(context); mClient = RetrofitForumClient.getClient(getContext()); mHelper = ForumDbHelper.getInstance(getContext()); mForumType = forumType; mForum = forum; mForceReload = forceReload; } @Override public void releaseResources(final List<ResponseForum> data) { } @Override public List<ResponseForum> loadInBackground() { final List<ResponseForum> list; switch (mForumType) { case TOP: list = mClient.getTopForums(mForceReload); break; case NEWEST: list = mClient.getNewestForums(mForceReload); break; case GENERAL: list = mClient.getGeneralForums(mForceReload); break; case ALL: list = getAllForums(); break; case CHILD: list = getForumChildren(); break; default: list = null; } return list; } private List<ResponseForum> getForumChildren() { if (!mForceReload) { final List<ResponseForum> forums = mHelper.getForumChildren(mForum.getForumId()); if (forums.size() > 0) { return forums; } } final List<ResponseForum> list = mClient.getForumChildren(mForum); if (Utils.isCollectionEmpty(list)) { return null; } mHelper.updateForumCollection(list); return mHelper.getForumChildren(mForum.getForumId()); } private List<ResponseForum> getAllForums() { if (!mForceReload) { final List<ResponseForum> forums = mHelper.getTopLevelForums(); if (forums.size() > 0) { return forums; } } final List<ResponseForum> list = mClient.getForums(mForceReload); if (Utils.isCollectionEmpty(list)) { return null; } mHelper.replaceRawForumResponse(list); return mHelper.getTopLevelForums(); } }