package io.codetail.client.mover; import javax.inject.Inject; import io.codetail.client.BaseNetworkJob; import io.codetail.client.State; import io.codetail.work.Params; import retrofit.RetrofitError; import retrofit.client.Response; import retrofit.mime.TypedByteArray; public class FetchCategoryPage extends BaseNetworkJob<Mover>{ String mCategory; int mPageNumber; @Inject MoverService mService; public FetchCategoryPage(String category, int pageNum){ this(category, pageNum, new Params(PRIORITY_LOW) .groupBy("categoryPages") .requireNetwork() ); } public FetchCategoryPage(String category, int pageNum, Params params) { super(params); mPageNumber = pageNum; mCategory = category; } @Override public void onPreRunning() { getEventBus().post(new State.OnStartLoadingPage(mPageNumber)); } @Override public Mover doBackgroundJob() { Response response; /** * NOTES * * if category page equals empty quotes("") it's means * that selected page is category_home page :) * */ if(mCategory.equals("") && mPageNumber < 2){ response = mService.home(); }else if(mCategory.equals("") && mPageNumber >= 2){ response = mService.home(mPageNumber); }else{ response = mService.category(mCategory, mPageNumber); } if(response.getStatus() >= 200 && response.getStatus() <= 300) { byte[] data = ((TypedByteArray) response.getBody()).getBytes(); String htmlSource = new String(data); if(mPageNumber > 1){ return new Mover.PaginatedPage(mCategory, mPageNumber).from(htmlSource); } return new Mover.CategoryPage(mCategory).from(htmlSource); } throw RetrofitError.httpError(response.getUrl(), response, null, Response.class); } @Override public void onJobPostResult(Mover result) { if(!isCancelled()) { result.postEvent(getEventBus()); } } @Override public void onAdded() {} @Override protected boolean shouldReRunOnThrowable(Throwable throwable) { android.util.Log.e("FetchCategoryPage", throwable.toString()); return false; } }