package com.electronapps.LJPro;
import java.io.File;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpVersion;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.params.CoreProtocolPNames;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.util.EntityUtils;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
public class ScrapBook extends PhotoAPIBase {
private String mUsername;
private String mP;
private static final int CONNECTION_TIMEOUT = 15000000;
Pattern challengeRE=Pattern.compile("(?<=<Challenge>)[^<]*");
Pattern photourlRE=Pattern.compile("(?<=<URL>)[^<]*");
Pattern errorRE=Pattern.compile("(?=</Error>)[^>]*");
private static final String SCRAPBOOK_ENDPOINT="http://pics.livejournal.com/interface/simple";
public ScrapBook(Context c,String username,String p) {
mUsername=username;
mContext=c;
mP=p;
HttpParams http_params = mClient.getParams();
http_params.setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
HttpConnectionParams.setConnectionTimeout(http_params, CONNECTION_TIMEOUT);
HttpConnectionParams.setSoTimeout(http_params, CONNECTION_TIMEOUT);
mClient.setParams(http_params);
}
public String getChallenge() {
String challenge=null;
try {
HttpResponse response = null;
HttpGet getchal=new HttpGet(SCRAPBOOK_ENDPOINT);
getchal.addHeader("X-FB-User",mUsername);
getchal.addHeader("X-FB-Mode","GetChallenge");
response=mClient.execute(getchal);
HttpEntity resp=response.getEntity();
String body=EntityUtils.toString(resp);
resp.consumeContent();
Matcher matcher=challengeRE.matcher(body);
if (matcher.find()) {
challenge=matcher.group();
}
}
catch(Throwable t) {
handleError(t);
}
return challenge;
}
public void uploadPhoto(String title, String file,String type) {
File photoFile=new File(file);
String challenge=getChallenge();
if (challenge!=null) {
String auth="crp:"+challenge+":"+Md5.MD5(challenge+Md5.MD5(mP));
HttpPut upload=new HttpPut(SCRAPBOOK_ENDPOINT);
//MultipartEntity mp_entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE );
//mp_entity.addPart(new FormBodyPart("",new FileBody(photoFile)));
//FileBody content=new FileBody(photoFile);
//String type=content.getMimeType();
upload.setEntity(new FileEntityMonitored(mContext,photoFile,title,type));
upload.addHeader("X-FB-User",mUsername);
upload.addHeader("X-FB-Mode","UploadPic");
if (!title.equals("")) {
upload.addHeader("X-FB-UploadPic.Meta.Filename",title);
}
upload.addHeader("X-FB-Auth",auth);
upload.addHeader("X-FB-UploadPic.Gallery._size","1");
upload.addHeader("X-FB-UploadPic.Gallery.0.GalName","Mobile Uploads");
try {
HttpResponse response=mClient.execute(upload);
String uploadResp=EntityUtils.toString(response.getEntity());
Matcher errorMatcher=errorRE.matcher(uploadResp);
if (errorMatcher.find()) {
String error=errorMatcher.group();
Intent intent=new Intent(PhotoAPIBase.UPLOAD_ERROR);
intent.putExtra("error", error);
intent.putExtra("tite", title);
intent.putExtra("file", file);
mContext.sendBroadcast(intent);
}
else {
Matcher urlMatcher=photourlRE.matcher(uploadResp);
if (urlMatcher.find()) {
String url=urlMatcher.group();
Intent intent=new Intent(PhotoAPIBase.UPLOAD_COMPLETED);
intent.putExtra("file",file);
intent.putExtra("title", title);
intent.putExtra("provider", "ScrapBook");
intent.putExtra("source",url);
mContext.sendBroadcast(intent);
//TODO broadcast error
}
}
Log.d("SCRAPBOOK",uploadResp);
}
catch(Throwable t){
handleError(t);
}
}
}
}