From 4ecec3456386d64ba07c4a04a8f42ec615ad1c95 Mon Sep 17 00:00:00 2001 From: Horis <8674809+821938089@users.noreply.github.com> Date: Sun, 23 Feb 2025 14:47:47 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../legado/app/ui/book/cache/CacheActivity.kt | 6 ++---- .../io/legado/app/utils/FileDocExtensions.kt | 19 ++++++++++++------- .../io/legado/app/utils/FileExtensions.kt | 10 ++++++---- 3 files changed, 20 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/book/cache/CacheActivity.kt b/app/src/main/java/io/legado/app/ui/book/cache/CacheActivity.kt index 0ecf38968..7a09a1cc5 100644 --- a/app/src/main/java/io/legado/app/ui/book/cache/CacheActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/cache/CacheActivity.kt @@ -48,7 +48,6 @@ import io.legado.app.utils.flowWithLifecycleAndDatabaseChange import io.legado.app.utils.iconItemOnLongClick import io.legado.app.utils.isContentScheme import io.legado.app.utils.observeEvent -import io.legado.app.utils.parseToUri import io.legado.app.utils.showDialogFragment import io.legado.app.utils.startService import io.legado.app.utils.toastOnUi @@ -184,6 +183,7 @@ class CacheActivity : VMBaseActivity() CacheBook.stop(this@CacheActivity) } } + R.id.menu_download_all -> { if (!CacheBook.isRun) { adapter.getItems().forEach { book -> @@ -321,9 +321,7 @@ class CacheActivity : VMBaseActivity() override fun export(position: Int) { val path = ACache.get().getAsString(exportBookPathKey) - if (path.isNullOrEmpty()) { - selectExportFolder(position) - } else if (FileDoc.fromUri(path.parseToUri(), true).checkWrite() != true) { + if (path.isNullOrEmpty() || !FileDoc.fromDir(path).checkWrite()) { selectExportFolder(position) } else if (enableCustomExport()) {// 启用自定义导出 and 导出类型为Epub configExportSection(path, position) 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 5cf97ac70..3f1e93fd0 100644 --- a/app/src/main/java/io/legado/app/utils/FileDocExtensions.kt +++ b/app/src/main/java/io/legado/app/utils/FileDocExtensions.kt @@ -304,14 +304,14 @@ fun FileDoc.delete() { asDocumentFile()?.delete() } -fun FileDoc.checkWrite(): Boolean? { +fun FileDoc.checkWrite(): Boolean { if (!isDir) { throw NoStackTraceException("只能检查目录") } asFile()?.let { return it.checkWrite() } - return asDocumentFile()?.checkWrite() + return asDocumentFile()!!.checkWrite() } /** @@ -358,17 +358,22 @@ fun DocumentFile.readBytes(context: Context): ByteArray { } fun DocumentFile.checkWrite(): Boolean { + var file: DocumentFile? = null return try { val filename = System.currentTimeMillis().toString() - createFile(FileUtils.getMimeType(filename), filename)?.let { - it.openOutputStream()?.let { out -> - out.use { } - it.delete() - return true + file = createFile(FileUtils.getMimeType(filename), filename) + file?.openOutputStream()?.let { out -> + out.bufferedWriter().use { it.write(filename) } + file.openInputStream()?.let { input -> + input.bufferedReader().use { + return it.readText() == filename + } } } false } catch (e: Exception) { false + } finally { + file?.delete() } } diff --git a/app/src/main/java/io/legado/app/utils/FileExtensions.kt b/app/src/main/java/io/legado/app/utils/FileExtensions.kt index 6bc60568a..1bdf2d7d7 100644 --- a/app/src/main/java/io/legado/app/utils/FileExtensions.kt +++ b/app/src/main/java/io/legado/app/utils/FileExtensions.kt @@ -70,14 +70,16 @@ fun File.createFolderReplace(): File { } fun File.checkWrite(): Boolean { + var file: File? = null return try { val filename = System.currentTimeMillis().toString() - val file = FileUtils.createFileIfNotExist(this, filename) - file.outputStream().use { } - file.delete() - true + file = FileUtils.createFileIfNotExist(this, filename) + file.outputStream().bufferedWriter().use { it.write(filename) } + file.inputStream().bufferedReader().use { it.readText() == filename } } catch (e: Exception) { false + } finally { + file?.delete() } }