mirror of
https://github.com/SimpleMobileTools/Simple-File-Manager.git
synced 2025-02-28 01:27:38 +01:00
adding an initial implementation of compressing
This commit is contained in:
parent
433d31385e
commit
3bacadac13
@ -28,8 +28,11 @@ import com.simplemobiletools.filemanager.R
|
|||||||
import com.simplemobiletools.filemanager.activities.SimpleActivity
|
import com.simplemobiletools.filemanager.activities.SimpleActivity
|
||||||
import com.simplemobiletools.filemanager.extensions.config
|
import com.simplemobiletools.filemanager.extensions.config
|
||||||
import kotlinx.android.synthetic.main.list_item.view.*
|
import kotlinx.android.synthetic.main.list_item.view.*
|
||||||
import java.io.File
|
import java.io.*
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
import java.util.zip.ZipEntry
|
||||||
|
import java.util.zip.ZipOutputStream
|
||||||
|
|
||||||
|
|
||||||
class ItemsAdapter(val activity: SimpleActivity, var mItems: MutableList<FileDirItem>, val listener: ItemOperationsListener?, val itemClick: (FileDirItem) -> Unit) :
|
class ItemsAdapter(val activity: SimpleActivity, var mItems: MutableList<FileDirItem>, val listener: ItemOperationsListener?, val itemClick: (FileDirItem) -> Unit) :
|
||||||
RecyclerView.Adapter<ItemsAdapter.ViewHolder>() {
|
RecyclerView.Adapter<ItemsAdapter.ViewHolder>() {
|
||||||
@ -88,6 +91,7 @@ class ItemsAdapter(val activity: SimpleActivity, var mItems: MutableList<FileDir
|
|||||||
R.id.cab_share -> shareFiles()
|
R.id.cab_share -> shareFiles()
|
||||||
R.id.cab_copy_to -> copyMoveTo(true)
|
R.id.cab_copy_to -> copyMoveTo(true)
|
||||||
R.id.cab_move_to -> copyMoveTo(false)
|
R.id.cab_move_to -> copyMoveTo(false)
|
||||||
|
R.id.cab_compress -> compressSelection()
|
||||||
R.id.cab_select_all -> selectAll()
|
R.id.cab_select_all -> selectAll()
|
||||||
R.id.cab_delete -> askConfirmDelete()
|
R.id.cab_delete -> askConfirmDelete()
|
||||||
else -> return false
|
else -> return false
|
||||||
@ -197,6 +201,44 @@ class ItemsAdapter(val activity: SimpleActivity, var mItems: MutableList<FileDir
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun compressSelection() {
|
||||||
|
if (selectedPositions.isEmpty())
|
||||||
|
return
|
||||||
|
|
||||||
|
val firstFile = File(mItems[selectedPositions.first()].path)
|
||||||
|
activity.handleSAFDialog(firstFile) {
|
||||||
|
val paths = selectedPositions.map { mItems[it].path }.toTypedArray()
|
||||||
|
compress(paths, "${firstFile.parentFile}/compressed.zip")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun compress(paths: Array<String>, targetPath: String) {
|
||||||
|
val BUFFER_SIZE = 8192
|
||||||
|
var origin: BufferedInputStream?
|
||||||
|
val out = ZipOutputStream(BufferedOutputStream(FileOutputStream(targetPath)))
|
||||||
|
try {
|
||||||
|
val data = ByteArray(BUFFER_SIZE)
|
||||||
|
|
||||||
|
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)
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
origin.close()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
out.close()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun selectAll() {
|
fun selectAll() {
|
||||||
val cnt = mItems.size
|
val cnt = mItems.size
|
||||||
for (i in 0 until cnt) {
|
for (i in 0 until cnt) {
|
||||||
|
@ -24,6 +24,10 @@
|
|||||||
android:id="@+id/cab_move_to"
|
android:id="@+id/cab_move_to"
|
||||||
android:title="@string/move_to"
|
android:title="@string/move_to"
|
||||||
app:showAsAction="never"/>
|
app:showAsAction="never"/>
|
||||||
|
<item
|
||||||
|
android:id="@+id/cab_compress"
|
||||||
|
android:title="@string/compress"
|
||||||
|
app:showAsAction="never"/>
|
||||||
<item
|
<item
|
||||||
android:id="@+id/cab_select_all"
|
android:id="@+id/cab_select_all"
|
||||||
android:icon="@drawable/ic_select_all"
|
android:icon="@drawable/ic_select_all"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user