Update unzip to support progress display

This commit is contained in:
Hannah Lindrob
2026-02-18 13:38:35 +01:00
parent d58d6f8eec
commit 5ab3075a61
3 changed files with 8 additions and 41 deletions

View File

@@ -31,7 +31,7 @@ class Linux {
subProgressBar.string = "Downloading SteamVR Driver"
downloadFile(LINUXSTEAMVRDRIVERURL, LINUXSTEAMVRDRIVERNAME)
subProgressBar.string = "Unzipping SteamVR Driver"
newAndCoolUnzip(LINUXSTEAMVRDRIVERNAME, LINUXSTEAMVRDRIVERDIRECTORY)
unzip(LINUXSTEAMVRDRIVERNAME, LINUXSTEAMVRDRIVERDIRECTORY)
println("Driver downloaded")
println("Registering driver with steamvr")
println("${Paths.get("").toAbsolutePath()}/$LINUXSTEAMVRDRIVERDIRECTORY/slimevr")
@@ -63,19 +63,15 @@ class Linux {
fun feeder() {
mainProgressBar.string = "Updating Feeder app"
subProgressBar.value = 25
subProgressBar.string = "Downloading Feeder App"
println("Downloading feeder")
downloadFile(LINUXFEEDERURL, LINUXFEEDERNAME)
subProgressBar.value = 50
subProgressBar.string = "Unzipping Feeder App"
newAndCoolUnzip(LINUXFEEDERNAME, LINUXFEEDERDIRECTORY)
subProgressBar.value = 75
unzip(LINUXFEEDERNAME, LINUXFEEDERDIRECTORY)
subProgressBar.string = "Registering Feeder App"
executeShellCommand("${path}/${LINUXFEEDERDIRECTORY}/SlimeVR-Feeder-App", "--install")
mainProgressBar.value = (100 / 3 * 3)
subProgressBar.string = "Feeder app done"
subProgressBar.value = 100
}
fun updateServer() {
@@ -86,15 +82,12 @@ class Linux {
//TODO: Find a way to do version checking on udev rules
fun updateUdev() {
mainProgressBar.string = "Setting udev"
subProgressBar.value = 25
subProgressBar.string = "Setting udev"
val file = Path("/etc/udev/rules.d/69-slimevr-devices.rules")
if (file.exists()) {
subProgressBar.value = 100
subProgressBar.string = "Udev rules already installed"
return
}
subProgressBar.value = 75
subProgressBar.string = "Asking for privileges"
val res = executeShellCommand("pkexec", "cp", "${path}/69-slimevr-devices.rules", "/etc/udev/rules.d/69-slimevr-devices.rules")
if (res.contains("Error")) {

View File

@@ -14,13 +14,11 @@ import io.ktor.utils.io.jvm.javaio.copyTo
import kotlinx.coroutines.runBlocking
import kotlinx.serialization.json.Json
import java.io.File
import java.io.FileInputStream
import java.io.FileOutputStream
import java.io.IOException
import java.lang.Exception
import java.util.zip.ZipEntry
import java.util.zip.ZipFile
import java.util.zip.ZipInputStream
import kotlin.time.Duration.Companion.minutes
fun executeShellCommand(vararg command: String): String = try {
@@ -34,28 +32,6 @@ fun executeShellCommand(vararg command: String): String = try {
"Error executing shell command: ${e.message}"
}
/*
// TODO: This function is really really slow, make it faster, also give feedback
fun downloadFile(fileUrl: String, filename: String) {
println("Downloading $filename from $fileUrl")
val url = URL(fileUrl)
try {
val bufferedInputStream = BufferedInputStream(url.openStream())
val fileOutputStream = FileOutputStream(filename)
val dataBuffer = ByteArray(1024)
var bytesRead = bufferedInputStream.read(dataBuffer, 0, 1024)
while (bytesRead != -1) {
fileOutputStream.write(dataBuffer, 0, bytesRead)
bytesRead = bufferedInputStream.read(dataBuffer, 0, 1024)
}
val inputStream = url.openStream()
Files.copy(inputStream, Paths.get(filename), StandardCopyOption.REPLACE_EXISTING)
} catch (e: IOException) {
println("Error downloading file, ${e.message}")
}
}
*/
val sendProgress: (Float) -> Unit = { progress -> subProgressBar.value = progress.toInt() }
fun downloadFile(
@@ -153,22 +129,21 @@ fun unzip(
*/
fun newAndCoolUnzip(
fun unzip(
file: String,
destDir: String,
onProgress: (Float) -> Unit = sendProgress) {
try {
val file = File(file)
val destFile = File(destDir)
val zipFile = ZipFile(file)
val dataBuffer = ByteArray(1024)
val zipEntries = zipFile.entries()
val zipSize = zipFile.size()
var currentEntryCount = 0
while (zipEntries.hasMoreElements()) {
println(currentEntryCount.toFloat() / zipSize.toFloat() * 100)
val currentEntry = zipEntries.nextElement()
val inputStream = zipFile.getInputStream(currentEntry)
val file = newFile(file, currentEntry)
val file = newFile(destFile, currentEntry)
if (currentEntry.isDirectory) {
if (!file.isDirectory && !file.mkdirs()) {
throw IOException("Failed to create directory: $file")
@@ -189,7 +164,6 @@ fun newAndCoolUnzip(
}
onProgress(currentEntryCount.toFloat() / zipSize.toFloat() * 100)
currentEntryCount++
println(currentEntryCount.toFloat() / zipSize.toFloat() * 100)
}
} catch (e: Exception) {
println("Error during unzip: ${e.message}")

View File

@@ -38,7 +38,7 @@ class Windows {
// downloading slime server
downloadFile(WINDOWSSERVERURL, WINDOWSSERVERNAME)
println("extracting")
newAndCoolUnzip(WINDOWSSERVERNAME, WINDOWSSERVERDIRECTORY)
unzip(WINDOWSSERVERNAME, WINDOWSSERVERDIRECTORY)
}
fun feeder() {
@@ -46,7 +46,7 @@ class Windows {
println("Downloading feeder")
downloadFile(WINDOWSFEEDERURL, WINDOWSFEEDERNAME)
println("Unzipping feeder")
newAndCoolUnzip(WINDOWSFEEDERNAME, WINDOWSFEEDERDIRECTORY)
unzip(WINDOWSFEEDERNAME, WINDOWSFEEDERDIRECTORY)
executeShellCommand("${path}\\${WINDOWSFEEDERDIRECTORY}\\SlimeVR-Feeder-App.exe", "--install")
mainProgressBar.value = (100 / 3 * 3)
}
@@ -69,7 +69,7 @@ class Windows {
println("Installing SteamVR Driver")
println("Downloading SteamVR driver")
downloadFile(WINDOWSSTEAMVRDRIVERURL, WINDOWSSTEAMVRDRIVERNAME)
newAndCoolUnzip(WINDOWSSTEAMVRDRIVERNAME, WINDOWSSTEAMVRDRIVERDIRECTORY)
unzip(WINDOWSSTEAMVRDRIVERNAME, WINDOWSSTEAMVRDRIVERDIRECTORY)
println("Driver downloaded")
println("Registering driver with steamvr")
executeShellCommand(