diff --git a/app/src/main/kotlin/com/simplemobiletools/filemanager/adapters/ItemsAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/filemanager/adapters/ItemsAdapter.kt index 590c1277..8ba980e3 100644 --- a/app/src/main/kotlin/com/simplemobiletools/filemanager/adapters/ItemsAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/filemanager/adapters/ItemsAdapter.kt @@ -31,9 +31,9 @@ import java.util.* import java.util.zip.ZipEntry import java.util.zip.ZipOutputStream - class ItemsAdapter(val activity: SimpleActivity, var mItems: MutableList, val listener: ItemOperationsListener?, val itemClick: (FileDirItem) -> Unit) : RecyclerView.Adapter() { + private val BUFFER = 2048 val multiSelector = MultiSelector() val config = activity.config @@ -213,9 +213,9 @@ class ItemsAdapter(val activity: SimpleActivity, var mItems: MutableList, targetPath: String): Boolean { - val BUFFER_SIZE = 8192 + private fun zipFileAtPath(sourcePaths: List, targetPath: String): Boolean { var out: ZipOutputStream? = null try { - out = ZipOutputStream(BufferedOutputStream(FileOutputStream(targetPath))) var origin: BufferedInputStream? - val data = ByteArray(BUFFER_SIZE) + val fos = FileOutputStream(targetPath) + out = ZipOutputStream(BufferedOutputStream(fos)) - for (i in paths.indices) { - val fi = FileInputStream(paths[i]) - origin = BufferedInputStream(fi, BUFFER_SIZE) - try { - val entry = ZipEntry(paths[i].substring(paths[i].lastIndexOf("/") + 1)) - out.putNextEntry(entry) - var count = origin.read(data, 0, BUFFER_SIZE) - while (count != -1) { - out.write(data, 0, count) - count = origin.read(data, 0, BUFFER_SIZE) + sourcePaths.forEach { + val sourceFile = File(it) + if (sourceFile.isDirectory) { + if (!zipSubFolder(out!!, sourceFile)) { + return false + } + } else { + val data = ByteArray(BUFFER) + val fis = FileInputStream(it) + origin = BufferedInputStream(fis, BUFFER) + val entry = ZipEntry(it.getFilenameFromPath()) + out!!.putNextEntry(entry) + var count = origin!!.read(data, 0, BUFFER) + while (count != -1) { + out!!.write(data, 0, count) + count = origin!!.read(data, 0, BUFFER) } - } finally { - origin.close() } } } catch (e: Exception) { @@ -258,6 +261,36 @@ class ItemsAdapter(val activity: SimpleActivity, var mItems: MutableList