package com.metis.base.manager;
import android.content.Context;
import android.graphics.Bitmap;
import android.util.Pair;
import com.google.gson.reflect.TypeToken;
import com.metis.base.framework.NetProxy;
import com.metis.base.module.Thumbnail;
import com.metis.base.utils.FileUtils;
import com.metis.base.utils.Log;
import com.metis.msnetworklib.contract.ReturnInfo;
import com.microsoft.windowsazure.mobileservices.ServiceFilterResponse;
import com.microsoft.windowsazure.mobileservices.ServiceFilterResponseCallback;
import org.apache.http.client.methods.HttpPost;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* Created by Beak on 2015/7/30.
*/
public class UploadManager extends AbsManager {
private static final String TAG = UploadManager.class.getSimpleName();
private static UploadManager sManager = null;
public synchronized static UploadManager getInstance (Context context) {
if (sManager == null) {
sManager = new UploadManager(context.getApplicationContext());
}
return sManager;
}
private UploadManager(Context context) {
super(context);
}
public void uploadBitmap (Bitmap bitmap, String session, final RequestCallback<List<Thumbnail>> callback) {
List<Bitmap> list = new ArrayList<Bitmap>();
list.add(bitmap);
uploadBitmap(list, session, callback);
}
public void uploadBitmap (List<Bitmap> bitmaps, String session, final RequestCallback<List<Thumbnail>> callback) {
//int totalLength = 0;
final int length = bitmaps.size();
/*for (int i = 0; i < length; i++) {
totalLength += bitmaps.get(0).getByteCount();
}*/
byte[][] totalData = new byte[length][];
for (int i = 0; i < length; i++) {
totalData[i] = FileUtils.bitmapToByteArray(Bitmap.CompressFormat.JPEG, bitmaps.get(i));
}
NetProxy.getInstance(getContext()).upload(NetProxy.TYPE_IMAGE, totalData, session, new NetProxy.OnResponseListener() {
@Override
public void onResponse(String result, String requestId) {
ReturnInfo<List<Thumbnail>> returnInfo = getGson().fromJson(result,
new TypeToken<ReturnInfo<List<Thumbnail>>>() {
}.getType());
if (callback != null) {
callback.callback(returnInfo, requestId);
}
}
});
}
public void uploadImage (File file, String session, final RequestCallback<List<Thumbnail>> callback) {
uploadFile(file, NetProxy.TYPE_IMAGE, session, new NetProxy.OnResponseListener() {
@Override
public void onResponse(String result, String requestId) {
ReturnInfo<List<Thumbnail>> returnInfo = getGson().fromJson(result, new TypeToken<ReturnInfo<List<Thumbnail>>>(){}.getType());
if (callback != null) {
callback.callback(returnInfo, requestId);
}
}
});
}
/**
* @param file
* @param type NetProxy.TYPE_IMAGE, TYPE_VOICE, TYPE_AMR;
* @param session
* @param listener
*/
public void uploadFile (File file, int type, String session, NetProxy.OnResponseListener listener) {
List<File> fileList = new ArrayList<File>();
fileList.add(file);
uploadFile(fileList, type, session, listener);
}
public void uploadFile (List<File> fileList, int type, String session, NetProxy.OnResponseListener listener) {
final int length = fileList.size();
byte[][] totalData = new byte[length][];
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
for (int i = 0; i < length; i++) {
File file = fileList.get(i);
try {
FileInputStream fis = new FileInputStream(file);
byte[] buffer = new byte[1024];
int result = 0;
while ((result = fis.read(buffer)) != -1) {
byteArrayOutputStream.write(buffer, 0, result);
}
fis.close();
byteArrayOutputStream.close();
totalData[i] = byteArrayOutputStream.toByteArray();
Log.v(TAG, "uploadFile[" + i + "]=" + totalData[i].length);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
NetProxy.getInstance(getContext()).upload(type, totalData, session, listener);
}
}