From 9cf0fdb83409328585581c93ebd093b097eea6ed Mon Sep 17 00:00:00 2001 From: kunfei Date: Sun, 16 Oct 2022 13:22:39 +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 --- .../java/io/legado/app/utils/DocumentUtils.kt | 11 ---- .../io/legado/app/utils/FileDocExtensions.kt | 56 ++++++++++++++++++- 2 files changed, 55 insertions(+), 12 deletions(-) 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 e7e31d4cb..c2b93c61c 100644 --- a/app/src/main/java/io/legado/app/utils/DocumentUtils.kt +++ b/app/src/main/java/io/legado/app/utils/DocumentUtils.kt @@ -1,6 +1,5 @@ package io.legado.app.utils -import android.provider.DocumentsContract import androidx.documentfile.provider.DocumentFile @Suppress("MemberVisibilityCanBePrivate") @@ -45,14 +44,4 @@ object DocumentUtils { return parent } - val projection by lazy { - arrayOf( - DocumentsContract.Document.COLUMN_DOCUMENT_ID, - DocumentsContract.Document.COLUMN_DISPLAY_NAME, - DocumentsContract.Document.COLUMN_LAST_MODIFIED, - DocumentsContract.Document.COLUMN_SIZE, - DocumentsContract.Document.COLUMN_MIME_TYPE - ) - } - } \ No newline at end of file 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 8e4ef3948..798262602 100644 --- a/app/src/main/java/io/legado/app/utils/FileDocExtensions.kt +++ b/app/src/main/java/io/legado/app/utils/FileDocExtensions.kt @@ -1,3 +1,5 @@ +@file:Suppress("unused") + package io.legado.app.utils import android.app.DownloadManager @@ -86,6 +88,16 @@ data class FileDoc( */ typealias FileDocFilter = (file: FileDoc) -> Boolean +private val projection by lazy { + arrayOf( + DocumentsContract.Document.COLUMN_DOCUMENT_ID, + DocumentsContract.Document.COLUMN_DISPLAY_NAME, + DocumentsContract.Document.COLUMN_LAST_MODIFIED, + DocumentsContract.Document.COLUMN_SIZE, + DocumentsContract.Document.COLUMN_MIME_TYPE + ) +} + /** * 返回子文件列表,如果不是文件夹则返回null */ @@ -102,7 +114,7 @@ fun FileDoc.list(filter: FileDocFilter? = null): ArrayList? { try { cursor = appCtx.contentResolver.query( childrenUri, - DocumentUtils.projection, + projection, null, null, DocumentsContract.Document.COLUMN_DISPLAY_NAME @@ -167,6 +179,48 @@ fun FileDoc.find(name: String, depth: Int = 0): FileDoc? { return null } +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)!! + FileDoc.fromDocumentFile(tmp) + } else { + val path = FileUtils.getPath(uri.path!!, *subDirs) + File.separator + fileName + val tmp = FileUtils.createFileIfNotExist(path) + FileDoc.fromFile(tmp) + } +} + +fun FileDoc.createFolderIfNotExist( + vararg subDirs: String +): FileDoc { + return if (uri.isContentScheme()) { + val documentFile = DocumentFile.fromTreeUri(appCtx, uri)!! + val tmp = DocumentUtils.createFolderIfNotExist(documentFile, *subDirs)!! + FileDoc.fromDocumentFile(tmp) + } else { + val path = FileUtils.getPath(uri.path!!, *subDirs) + val tmp = FileUtils.createFolderIfNotExist(path) + FileDoc.fromFile(tmp) + } +} + +fun FileDoc.exists( + fileName: String, + vararg subDirs: String +): Boolean { + return if (uri.isContentScheme()) { + DocumentUtils.exists(DocumentFile.fromTreeUri(appCtx, uri)!!, fileName, *subDirs) + } else { + val path = FileUtils.getPath(uri.path!!, *subDirs) + File.separator + fileName + FileUtils.exist(path) + } +} + /** * DocumentFile 的 listFiles() 非常的慢,尽量不要使用 */