package com.papagiannis.tuberun.fetchers;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import org.apache.http.Header;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.StatusLine;
import org.apache.http.client.CookieStore;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.protocol.ClientContext;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext;
import android.os.AsyncTask;
import android.util.Log;
import com.papagiannis.tuberun.TubeRun;
public class RequestTask extends AsyncTask<String, String, String> {
protected String myUserAgent="Tuberun/"+TubeRun.VERSION+" Android";
private HttpCallback cb;
public RequestTask(HttpCallback cb) {
super();
this.cb = cb;
}
public RequestTask setDesktopUserAgent() {
myUserAgent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.12 Safari/535.11";
return this;
}
CookieStore cookieStore ;
HttpContext localContext ;
public void setCookies(CookieStore c) {
cookieStore = c;
localContext = new BasicHttpContext();
localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
}
@Override
protected String doInBackground(String... uri) {
HttpClient httpclient = new DefaultHttpClient();
HttpResponse response;
String responseString = "";
try {
HttpGet get=new HttpGet(uri[0]);
get.setHeader("User-Agent", myUserAgent);
if (localContext==null) response = httpclient.execute(get);
else response = httpclient.execute(get,localContext);
StatusLine statusLine = response.getStatusLine();
if (statusLine.getStatusCode() == HttpStatus.SC_OK) {
ByteArrayOutputStream out = new ByteArrayOutputStream();
response.getEntity().writeTo(out);
out.close();
String encoding="ISO-8859-1";
boolean isUTF=false;
Header[] headers=response.getAllHeaders();
for (Header header:headers) {
if (header.getName().equals("Content-Type") && header.getValue().contains("utf-8")) {
isUTF=true;
break;
}
}
if (isUTF) {
encoding="UTF-8";
}
responseString = out.toString(encoding);
} else {
// Closes the connection.
if (response!=null && response.getEntity()!=null) response.getEntity().getContent().close();
throw new IOException(statusLine.getReasonPhrase());
}
} catch (Exception e) {
Log.e("Fetcher","Fetching", e);
}
return responseString;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
if (!isCancelled()) {
cb.onReturn(result);
}
}
}