/FileExtraction/Java_unseen/PowerExplorer_PowerFileExplorer/PowerFileExplorer/src/main/java/com/amaze/filemanager/services/asynctasks/ZipHelperTask.java
//package com.amaze.filemanager.services.asynctasks;
//
//import android.net.Uri;
//import android.os.AsyncTask;
//
//import com.amaze.filemanager.fragments.ZipViewer;
//import com.amaze.filemanager.ui.ZipObj;
//
//import java.io.File;
//import java.util.ArrayList;
//import java.util.Collections;
//import java.util.Comparator;
//import java.util.Enumeration;
//import java.util.zip.ZipEntry;
//import java.util.zip.ZipFile;
//import java.util.zip.ZipInputStream;
//
///**
// * Created by Vishal on 11/23/2014.
// */
//public class ZipHelperTask extends AsyncTask<String, Void, ArrayList<ZipObj>> {
//
//    ZipViewer zipViewer;
//    String dir;
//
//    /**
//     * AsyncTask to load ZIP file items.
//     * @param zipViewer the zipViewer fragment instance
//     * @param dir
//     */
//    public ZipHelperTask(ZipViewer zipViewer, String dir) {
//        this.zipViewer = zipViewer;
//        this.dir = dir;
//        zipViewer.swipeRefreshLayout.setRefreshing(true);
//    }
//
//    @Override
//    protected void onPreExecute() {
//        super.onPreExecute();
//        zipViewer.swipeRefreshLayout.setRefreshing(true);
//    }
//
//    @Override
//    protected ArrayList<ZipObj> doInBackground(String... params) {
//        ArrayList<ZipObj> elements = new ArrayList<>();
//        try {
//            if (zipViewer.wholelist.size() == 0) {
//                Uri uri = Uri.parse(params[0]);
//                if (new File(uri.getPath()).canRead()) {
//                    ZipFile zipfile = new ZipFile(uri.getPath());
//                    for (Enumeration e = zipfile.entries(); e.hasMoreElements(); ) {
//                        ZipEntry entry = (ZipEntry) e.nextElement();
//                        zipViewer.wholelist.add(new ZipObj(entry, entry.getTime(), entry.getSize(), entry.isDirectory()));
//                    }
//                } else {
//                    ZipEntry entry1;
//                    if (zipViewer.wholelist.size() == 0) {
//                        ZipInputStream zipfile1 = new ZipInputStream(zipViewer.getActivity().getContentResolver().openInputStream(uri));
//                        while ((entry1 = zipfile1.getNextEntry()) != null) {
//                            zipViewer.wholelist.add(new ZipObj(entry1, entry1.getTime(), entry1.getSize(), entry1.isDirectory()));
//                        }
//                    }
//                }
//            }
//            ArrayList<String> strings = new ArrayList<>();
//            //  int fileCount = zipfile.size();
//
//            for (ZipObj entry : zipViewer.wholelist) {
//
//                String s = entry.getName();
//                //  System.out.println(s);
//                File file = new File(entry.getName());
//                if (dir == null || dir.trim().length() == 0) {
//                    String y = entry.getName();
//                    if (y.startsWith("/"))
//                        y = y.substring(1, y.length());
//                    if (file.getParent() == null || file.getParent().length() == 0 || file.getParent().equals("/")) {
//                        if (!strings.contains(y)) {
//                            elements.add(new ZipObj(new ZipEntry(y), entry.getTime(), entry.getSize(), entry.isDirectory()));
//                            strings.add(y);
//                        }
//                    } else {
//                        String path = y.substring(0, y.indexOf("/") + 1);
//                        if (!strings.contains(path)) {
//                            ZipObj zipObj = new ZipObj(new ZipEntry(path), entry.getTime(), entry.getSize(), true);
//                            strings.add(path);
//                            elements.add(zipObj);
//                        }
//
//                    }
//                } else {
//                    String y = entry.getName();
//                    if (entry.getName().startsWith("/"))
//                        y = y.substring(1, y.length());
//
//                    if (file.getParent() != null && (file.getParent().equals(dir) || file.getParent().equals("/" + dir))) {
//                        if (!strings.contains(y)) {
//                            elements.add(new ZipObj(new ZipEntry(y), entry.getTime(), entry.getSize(), entry.isDirectory()));
//                            strings.add(y);
//                        }
//                    } else {
//                        if (y.startsWith(dir + "/") && y.length() > dir.length() + 1) {
//                            String path1 = y.substring(dir.length() + 1, y.length());
//
//                            int index = dir.length() + 1 + path1.indexOf("/");
//                            String path = y.substring(0, index + 1);
//                            if (!strings.contains(path)) {
//                                ZipObj zipObj = new ZipObj(new ZipEntry(y.substring(0, index + 1)), entry.getTime(), entry.getSize(), true);
//                                strings.add(path);
//                                //System.out.println(path);
//                                elements.add(zipObj);
//                            }
//                        }
//                    }
//
//                }
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//
//        Collections.sort(elements, new FileListSorter());
//        if (zipViewer.gobackitem && dir != null && dir.trim().length() != 0)
//            elements.add(0, new ZipObj(null, 0, 0, true));
//        zipViewer.elements = elements;
//        return elements;
//    }
//
//    @Override
//    protected void onPostExecute(ArrayList<ZipObj> zipEntries) {
//        super.onPostExecute(zipEntries);
//        zipViewer.swipeRefreshLayout.setRefreshing(false);
//        zipViewer.createviews(zipEntries, dir);
//    }
//
//    private class FileListSorter implements Comparator<ZipObj> {
//        @Override
//        public int compare(ZipObj file1, ZipObj file2) {
//            if (file1.isDirectory() && !file2.isDirectory()) {
//                return -1;
//
//
//            } else if (file2.isDirectory() && !(file1).isDirectory()) {
//                return 1;
//            }
//            return file1.getEntry().getName().compareToIgnoreCase(file2.getEntry().getName());
//        }
//
//    }
//
//}
