use of se.light.assembly64.model.CancelableTask in project assembly64fx by freabemania.
the class UnzipService method extractZip.
public void extractZip(File source, File target, Artifact entry) throws Exception {
byte[] buffer = new byte[1024];
ZipInputStream zis = null;
CancelableTask cancelTask = CancelableTask.of();
int logCtr = 0;
try {
FileUtils.forceMkdir(target);
zis = new ZipInputStream(new FileInputStream(source));
ZipEntry ze = zis.getNextEntry();
if (ze == null) {
Analytics.sendEvent("invalid_zip", entry.getName());
throw new ZipException("Invalid zipentry");
}
int ctr = 0;
while (ze != null && cancelTask.isRunning()) {
String fileName = ze.getName();
File newFile = new File(target + File.separator + fileName);
ctr++;
try {
if (ze.isDirectory()) {
FileUtils.forceMkdir(newFile);
} else {
try {
FileUtils.forceMkdir(new File(newFile.getParent()));
FileOutputStream fos = new FileOutputStream(newFile);
int len;
while ((len = zis.read(buffer)) > 0 && cancelTask.isRunning()) {
fos.write(buffer, 0, len);
}
fos.close();
if (logCtr % 10 == 0) {
ProgressControlWrapper.getInstance().setProgressLabel("Installing " + newFile.getName());
double finished = (double) ((double) (((double) ctr / (double) entry.getEntries())));
ProgressControlWrapper.getInstance().increaseCurrentProgressStep(finished);
// lt 100k then give up
if (target.getFreeSpace() < 100000) {
GenericMessageDialogController.withErrorProps("Oopss...", "No space left on device!", true).showAndWait();
CancelTaskRegistry.getInstance().broadcastCancel();
}
}
} catch (Exception e) {
LOGGER.info("Unable to extract entry " + fileName);
}
}
} catch (Exception e) {
LOGGER.error("Unable to extract " + ze.getName());
}
ze = zis.getNextEntry();
}
if (cancelTask.isCancelled()) {
ProgressControlWrapper.getInstance().setProgressLabel("Cleaning out (may take a while), please wait...");
FileUtils.forceDelete(LocalStorageUtil.getSubdirOrFile(target, entry.getFolder()));
}
} finally {
try {
zis.closeEntry();
} catch (Exception e) {
LOGGER.error("Unable to close zip");
}
try {
zis.close();
} catch (Exception e) {
LOGGER.error("Unable to close zipstream");
}
}
}
Aggregations