/**
*
*/
package ma.car.tishadow.bundle.update.tasks;
import java.io.File;
import java.io.IOException;
import ma.car.tishadow.bundle.update.BundleUpdateState;
import ma.car.tishadow.bundle.update.RequestProxy;
import ma.car.tishadow.bundle.update.util.ZipUtil;
import org.apache.commons.io.FileUtils;
import org.appcelerator.kroll.common.Log;
/**
* Represents a single task to decompress latest bundle.
* @author wei.ding
*/
public class DecompressBundleTask implements Task {
private static final String TAG = "DecompressBundleTask";
/*
* Extract latest download bundle into decompression directory, and delete download file as well.
* @see ma.car.tishadow.bundle.update.tasks.Task#execute(ma.car.tishadow.bundle.update.tasks.TaskContext)
*/
@Override
public boolean execute(RequestProxy context) {
Log.v(TAG, "Start DecompressBundleTask...");
Boolean result = doExecute(context);
context.markedBundleUpdateStateTo(result ? BundleUpdateState.DECOMPRESSED : BundleUpdateState.INTERRUPTED);
return result;
}
private boolean doExecute(RequestProxy context) {
String filename = (String) context.getRequestProperties().get(RequestProxy.Key.DOWNLOAD_DESTINATION_FILENAME);
File compressionFile = new File(context.getExternalApplicationTemporaryDirectory(), filename);
File decompressDirectory = context.getPatchDirectory();
Log.i(TAG, "Extracting latest bundle '" + compressionFile + "' into '" + decompressDirectory + "'...");
if (!compressionFile.exists()) {
Log.i(TAG, "Latest bundle '" + compressionFile + " doesn't exist. ");
return false;
}
if (decompressDirectory.exists()) {
Log.d(TAG, "Clean up previous extraction mess...");
try {
FileUtils.cleanDirectory(decompressDirectory);
} catch (IOException e) {
Log.e(TAG, "Failed to clean directory '" + decompressDirectory + "', see more detail from exception stack.", e);
return false;
}
} else {
decompressDirectory.mkdir();
}
ZipUtil.decompress(decompressDirectory.getAbsolutePath(), compressionFile.getAbsolutePath(), true);
compressionFile.delete();
Log.d(TAG, "Extract latest bundle done.");
return true;
}
}