package com.android.ted.gank.network;
import com.android.ted.gank.GankApplication;
import com.android.ted.gank.config.Constants;
import com.android.ted.gank.model.DayGoodsResult;
import com.android.ted.gank.model.GoodsResult;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.squareup.okhttp.Cache;
import com.squareup.okhttp.OkHttpClient;
import java.io.File;
import retrofit.RequestInterceptor;
import retrofit.RestAdapter;
import retrofit.client.OkClient;
import retrofit.converter.GsonConverter;
import retrofit.http.GET;
import retrofit.http.Path;
import rx.Observable;
public class GankCloudApi {
public static GankCloudApi instance;
public static GankCloudApi getIns() {
if (null == instance) {
synchronized (GankCloudApi.class) {
if (null == instance) {
instance = new GankCloudApi();
}
}
}
return instance;
}
/**每次加载条目*/
public static final int LOAD_LIMIT = 20;
/**加载起始页面*/
public static final int LOAD_START = 1;
public static final String ENDPOINT = Constants.GANK_SERVER_IP;
private final GankCloudService mWebService;
public static Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
public GankCloudApi() {
Cache cache;
OkHttpClient okHttpClient = null;
try {
File cacheDir = new File(GankApplication.getContext().getCacheDir().getPath(), "gank_cache.json");
cache = new Cache(cacheDir, 10 * 1024 * 1024);
okHttpClient = new OkHttpClient();
okHttpClient.setCache(cache);
} catch (Exception e) {
}
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(ENDPOINT)
.setClient(new OkClient(okHttpClient))
.setConverter(new GsonConverter(gson))
.setRequestInterceptor(mRequestInterceptor)
.build();
mWebService = restAdapter.create(GankCloudService.class);
}
private RequestInterceptor mRequestInterceptor = new RequestInterceptor() {
@Override
public void intercept(RequestFacade request) {
request.addHeader("Cache-Control", "public, max-age=" + 60 * 60 * 4);
request.addHeader("Content-Type", "application/json");
}
};
public interface GankCloudService {
@GET("/data/Android/{limit}/{page}")
Observable<GoodsResult> getAndroidGoods(
@Path("limit") int limit,
@Path("page") int page
);
@GET("/data/iOS/{limit}/{page}")
Observable<GoodsResult> getIosGoods(
@Path("limit") int limit,
@Path("page") int page
);
@GET("/data/all/{limit}/{page}")
Observable<GoodsResult> getAllGoods(
@Path("limit") int limit,
@Path("page") int page
);
@GET("/data/福利/{limit}/{page}")
Observable<GoodsResult> getBenefitsGoods(
@Path("limit") int limit,
@Path("page") int page
);
@GET("/day/{year}/{month}/{day}")
Observable<DayGoodsResult> getGoodsByDay(
@Path("year") int year,
@Path("month") int month,
@Path("day") int day
);
}
public Observable<GoodsResult> getCommonGoods(String type,int limit, int page) {
if("Android".equalsIgnoreCase(type)){
return mWebService.getAndroidGoods(limit, page);
}
if("IOS".equalsIgnoreCase(type)){
return mWebService.getIosGoods(limit, page);
}
return mWebService.getAndroidGoods(limit, page);
}
public Observable<GoodsResult> getAndroidGoods(int limit, int page) {
return mWebService.getAndroidGoods(limit, page);
}
public Observable<GoodsResult> getIosGoods(int limit, int page) {
return mWebService.getIosGoods(limit, page);
}
public Observable<GoodsResult> getAllGoods(int limit, int page) {
return mWebService.getAllGoods(limit, page);
}
public Observable<GoodsResult> getBenefitsGoods(int limit, int page) {
return mWebService.getBenefitsGoods(limit, page);
}
public Observable<DayGoodsResult> getGoodsByDay(int year,int month,int day) {
return mWebService.getGoodsByDay(year, month,day);
}
}