|
|
|
@ -21,6 +21,7 @@ import org.yuzu.yuzu_emu.model.TaskState |
|
|
|
import java.io.BufferedOutputStream |
|
|
|
import java.lang.NullPointerException |
|
|
|
import java.nio.charset.StandardCharsets |
|
|
|
import java.util.zip.Deflater |
|
|
|
import java.util.zip.ZipOutputStream |
|
|
|
import kotlin.IllegalStateException |
|
|
|
|
|
|
|
@ -312,15 +313,23 @@ object FileUtil { |
|
|
|
* @param inputFile File representation of the item that will be zipped |
|
|
|
* @param rootDir Directory containing the inputFile |
|
|
|
* @param outputStream Stream where the zip file will be output |
|
|
|
* @param cancelled [StateFlow] that reports whether this process has been cancelled |
|
|
|
* @param compression Disables compression if true |
|
|
|
*/ |
|
|
|
fun zipFromInternalStorage( |
|
|
|
inputFile: File, |
|
|
|
rootDir: String, |
|
|
|
outputStream: BufferedOutputStream, |
|
|
|
cancelled: StateFlow<Boolean>? = null |
|
|
|
cancelled: StateFlow<Boolean>? = null, |
|
|
|
compression: Boolean = true |
|
|
|
): TaskState { |
|
|
|
try { |
|
|
|
ZipOutputStream(outputStream).use { zos -> |
|
|
|
if (!compression) { |
|
|
|
zos.setMethod(ZipOutputStream.DEFLATED) |
|
|
|
zos.setLevel(Deflater.NO_COMPRESSION) |
|
|
|
} |
|
|
|
|
|
|
|
inputFile.walkTopDown().forEach { file -> |
|
|
|
if (cancelled?.value == true) { |
|
|
|
return TaskState.Cancelled |
|
|
|
@ -338,6 +347,7 @@ object FileUtil { |
|
|
|
} |
|
|
|
} |
|
|
|
} catch (e: Exception) { |
|
|
|
Log.error("[FileUtil] Failed creating zip file - ${e.message}") |
|
|
|
return TaskState.Failed |
|
|
|
} |
|
|
|
return TaskState.Completed |
|
|
|
|