secant-android-wallet/crash-lib/src/jvmMain/kotlin/co/electriccoin/zcash/crash/ExceptionPath.kt

38 lines
1.3 KiB
Kotlin

package co.electriccoin.zcash.crash
import co.electriccoin.zcash.spackle.io.canWriteSuspend
import co.electriccoin.zcash.spackle.io.existsSuspend
import co.electriccoin.zcash.spackle.io.isDirectorySuspend
import co.electriccoin.zcash.spackle.io.mkdirsSuspend
import java.io.File
import java.util.UUID
object ExceptionPath {
const val LOG_DIRECTORY_NAME = "log" // $NON-NLS-1$
const val EXCEPTION_DIRECTORY_NAME = "exception" // $NON-NLS-1$
const val SEPARATOR = "|"
const val TYPE = "txt"
@Suppress("MaxLineLength")
fun newExceptionFileName(exception: ReportableException, uuid: UUID = UUID.randomUUID()) =
"${exception.time.epochSeconds}$SEPARATOR$uuid$SEPARATOR${exception.exceptionClass}$SEPARATOR${exception.isUncaught}.$TYPE"
// The exceptions are really just for debugging
@Suppress("ThrowsCount")
suspend fun validateDir(path: File) {
if (!path.existsSuspend()) {
if (!path.mkdirsSuspend()) {
throw IllegalArgumentException("Directories couldn't be created")
}
} else {
if (!path.isDirectorySuspend()) {
throw IllegalArgumentException("Path is a file when a directory was expected")
}
}
if (!path.canWriteSuspend()) {
throw IllegalArgumentException("Path is not writeable")
}
}
}