Search in sources :

Example 11 with CancelableTask

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");
        }
    }
}
Also used : ZipInputStream(java.util.zip.ZipInputStream) ZipEntry(java.util.zip.ZipEntry) FileOutputStream(java.io.FileOutputStream) ZipException(java.util.zip.ZipException) File(java.io.File) FileInputStream(java.io.FileInputStream) ZipException(java.util.zip.ZipException) CancelableTask(se.light.assembly64.model.CancelableTask)

Aggregations

CancelableTask (se.light.assembly64.model.CancelableTask)11 File (java.io.File)9 IOException (java.io.IOException)4 ArrayList (java.util.ArrayList)4 List (java.util.List)4 FileUtils (org.apache.commons.io.FileUtils)4 ReturningTask (se.light.assembly64.model.ReturningTask)4 SearchResultItem (se.light.assembly64.model.SearchResultItem)4 DateTimeFormatter (java.time.format.DateTimeFormatter)3 Arrays (java.util.Arrays)3 HashSet (java.util.HashSet)3 Set (java.util.Set)3 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)3 Collectors (java.util.stream.Collectors)3 Platform (javafx.application.Platform)3 Logger (org.slf4j.Logger)3 LoggerFactory (org.slf4j.LoggerFactory)3 Support (se.light.assembly64.Support)3 Support.getTodayDateAsBasicIsoString (se.light.assembly64.Support.getTodayDateAsBasicIsoString)3 ContentEntry (se.light.assembly64.model.ContentEntry)3