manager: save stderr of installation to log file. fix #723

This commit is contained in:
weishu
2023-07-11 20:10:12 +08:00
parent ec9babea76
commit 37abe48702
3 changed files with 18 additions and 8 deletions

View File

@@ -28,6 +28,7 @@ import me.weishu.kernelsu.ui.util.LocalSnackbarHost
import me.weishu.kernelsu.ui.util.installModule
import me.weishu.kernelsu.ui.util.reboot
import java.io.File
import java.lang.StringBuilder
import java.text.SimpleDateFormat
import java.util.*
@@ -40,6 +41,7 @@ import java.util.*
fun InstallScreen(navigator: DestinationsNavigator, uri: Uri) {
var text by rememberSaveable { mutableStateOf("") }
val logContent = StringBuilder()
var showFloatAction by rememberSaveable { mutableStateOf(false) }
val snackBarHost = LocalSnackbarHost.current
@@ -54,9 +56,12 @@ fun InstallScreen(navigator: DestinationsNavigator, uri: Uri) {
if (success) {
showFloatAction = true
}
}) {
}, onStdout = {
text += "$it\n"
}
logContent.append(it).append("\n")
}, onStderr = {
logContent.append(it).append("\n")
});
}
}
@@ -74,7 +79,7 @@ fun InstallScreen(navigator: DestinationsNavigator, uri: Uri) {
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),
"KernelSU_install_log_${date}.log"
)
file.writeText(text)
file.writeText(logContent.toString())
snackBarHost.showSnackbar("Log saved to ${file.absolutePath}")
}
}

View File

@@ -91,7 +91,7 @@ fun uninstallModule(id: String): Boolean {
return result
}
fun installModule(uri: Uri, onFinish: (Boolean) -> Unit, onOutput: (String) -> Unit): Boolean {
fun installModule(uri: Uri, onFinish: (Boolean) -> Unit, onStdout: (String) -> Unit, onStderr: (String) -> Unit): Boolean {
val resolver = ksuApp.contentResolver
with(resolver.openInputStream(uri)) {
val file = File(ksuApp.cacheDir, "module.zip")
@@ -102,14 +102,20 @@ fun installModule(uri: Uri, onFinish: (Boolean) -> Unit, onOutput: (String) -> U
val shell = getRootShell()
val callbackList: CallbackList<String?> = object : CallbackList<String?>() {
val stdoutCallback: CallbackList<String?> = object : CallbackList<String?>() {
override fun onAddElement(s: String?) {
onOutput(s ?: "")
onStdout(s ?: "")
}
}
val stderrCallback: CallbackList<String?> = object : CallbackList<String?>() {
override fun onAddElement(s: String?) {
onStderr(s ?: "")
}
}
val result =
shell.newJob().add("${getKsuDaemonPath()} $cmd").to(callbackList, callbackList).exec()
shell.newJob().add("${getKsuDaemonPath()} $cmd").to(stdoutCallback, stderrCallback).exec()
Log.i("KernelSU", "install module $uri result: $result")
file.delete()