package com.koushikdutta.ion.loader;
import android.text.TextUtils;
import com.koushikdutta.async.DataEmitter;
import com.koushikdutta.async.future.Future;
import com.koushikdutta.async.future.FutureCallback;
import com.koushikdutta.async.http.AsyncHttpRequest;
import com.koushikdutta.async.http.AsyncHttpResponse;
import com.koushikdutta.async.http.HttpUtil;
import com.koushikdutta.async.http.cache.ResponseCacheMiddleware;
import com.koushikdutta.async.http.callback.HttpConnectCallback;
import com.koushikdutta.ion.HeadersResponse;
import com.koushikdutta.ion.Ion;
import com.koushikdutta.ion.ResponseServedFrom;
/**
* Created by koush on 5/22/13.
*/
public class HttpLoader extends SimpleLoader {
@SuppressWarnings("unchecked")
@Override
public Future<DataEmitter> load(Ion ion, AsyncHttpRequest request, final FutureCallback<LoaderEmitter> callback) {
if (!request.getUri().getScheme().startsWith("http"))
return null;
return (Future< DataEmitter >)(Future)ion.getHttpClient().execute(request, new HttpConnectCallback() {
@Override
public void onConnectCompleted(Exception ex, AsyncHttpResponse response) {
long length = -1;
ResponseServedFrom loadedFrom = ResponseServedFrom.LOADED_FROM_NETWORK;
HeadersResponse headers = null;
AsyncHttpRequest request = null;
if (response != null) {
request = response.getRequest();
headers = new HeadersResponse(response.code(), response.message(), response.headers());
length = HttpUtil.contentLength(headers.getHeaders());
String servedFrom = response.headers().get(ResponseCacheMiddleware.SERVED_FROM);
if (TextUtils.equals(servedFrom, ResponseCacheMiddleware.CACHE))
loadedFrom = ResponseServedFrom.LOADED_FROM_CACHE;
else if (TextUtils.equals(servedFrom, ResponseCacheMiddleware.CONDITIONAL_CACHE))
loadedFrom = ResponseServedFrom.LOADED_FROM_CONDITIONAL_CACHE;
}
callback.onCompleted(ex,
new LoaderEmitter(response, length, loadedFrom, headers, request));
}
});
}
}