diff --git a/app/src/main/java/io/legado/app/help/CrashHandler.kt b/app/src/main/java/io/legado/app/help/CrashHandler.kt index 684bac9d4..ea5d6fa47 100644 --- a/app/src/main/java/io/legado/app/help/CrashHandler.kt +++ b/app/src/main/java/io/legado/app/help/CrashHandler.kt @@ -2,14 +2,14 @@ package io.legado.app.help import android.annotation.SuppressLint import android.content.Context +import android.net.Uri import android.os.Build import android.webkit.WebSettings import io.legado.app.constant.AppConst +import io.legado.app.exception.NoStackTraceException +import io.legado.app.help.config.AppConfig import io.legado.app.model.ReadAloud -import io.legado.app.utils.FileUtils -import io.legado.app.utils.getFile -import io.legado.app.utils.longToastOnUi -import io.legado.app.utils.stackTraceStr +import io.legado.app.utils.* import splitties.init.appCtx import java.io.PrintWriter import java.io.StringWriter @@ -105,14 +105,25 @@ class CrashHandler(val context: Context) : Thread.UncaughtExceptionHandler { val timestamp = System.currentTimeMillis() val time = format.format(Date()) val fileName = "crash-$time-$timestamp.log" - appCtx.externalCacheDir?.let { rootFile -> - rootFile.getFile("crash").listFiles()?.forEach { - if (it.lastModified() < System.currentTimeMillis() - TimeUnit.DAYS.toMillis(7)) { - it.delete() - } - } - FileUtils.createFileIfNotExist(rootFile, "crash", fileName) + try { + val backupPath = AppConfig.backupPath ?: throw NoStackTraceException("备份路径未配置") + val uri = Uri.parse(backupPath) + val fileDoc = FileDoc.fromUri(uri, true) + fileDoc.createFileIfNotExist(fileName, "crash") .writeText(sb.toString()) + } catch (e: Exception) { + appCtx.externalCacheDir?.let { rootFile -> + rootFile.getFile("crash").listFiles()?.forEach { + if (it.lastModified() < System.currentTimeMillis() - TimeUnit.DAYS.toMillis( + 7 + ) + ) { + it.delete() + } + } + FileUtils.createFileIfNotExist(rootFile, "crash", fileName) + .writeText(sb.toString()) + } } } diff --git a/app/src/main/java/io/legado/app/utils/DocumentUtils.kt b/app/src/main/java/io/legado/app/utils/DocumentUtils.kt index c2b93c61c..827e6c5c2 100644 --- a/app/src/main/java/io/legado/app/utils/DocumentUtils.kt +++ b/app/src/main/java/io/legado/app/utils/DocumentUtils.kt @@ -18,11 +18,10 @@ object DocumentUtils { fun createFileIfNotExist( root: DocumentFile, fileName: String, - mimeType: String = "", vararg subDirs: String ): DocumentFile? { val parent: DocumentFile? = createFolderIfNotExist(root, *subDirs) - return parent?.findFile(fileName) ?: parent?.createFile(mimeType, fileName) + return parent?.findFile(fileName) ?: parent?.createFile("", fileName) } fun createFolderIfNotExist(root: DocumentFile, vararg subDirs: String): DocumentFile? { diff --git a/app/src/main/java/io/legado/app/utils/FileDocExtensions.kt b/app/src/main/java/io/legado/app/utils/FileDocExtensions.kt index 95f66f8a5..cb38903a3 100644 --- a/app/src/main/java/io/legado/app/utils/FileDocExtensions.kt +++ b/app/src/main/java/io/legado/app/utils/FileDocExtensions.kt @@ -183,12 +183,11 @@ fun FileDoc.find(name: String, depth: Int = 0): FileDoc? { fun FileDoc.createFileIfNotExist( fileName: String, - mimeType: String = "", vararg subDirs: String ): FileDoc { return if (uri.isContentScheme()) { val documentFile = DocumentFile.fromTreeUri(appCtx, uri)!! - val tmp = DocumentUtils.createFileIfNotExist(documentFile, fileName, mimeType, *subDirs)!! + val tmp = DocumentUtils.createFileIfNotExist(documentFile, fileName, *subDirs)!! FileDoc.fromDocumentFile(tmp) } else { val path = FileUtils.getPath(uri.path!!, *subDirs) + File.separator + fileName @@ -235,6 +234,14 @@ fun FileDoc.exists(): Boolean { } } +fun FileDoc.writeText(text: String) { + if (uri.isContentScheme()) { + uri.writeText(appCtx, text) + } else { + File(uri.path!!).writeText(text) + } +} + /** * DocumentFile 的 listFiles() 非常的慢,尽量不要使用 */