This commit is contained in:
kunfei
2022-10-16 13:22:39 +08:00
parent ca6bfe68db
commit 55c8cba480
2 changed files with 55 additions and 12 deletions
@@ -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
)
}
}
@@ -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<FileDoc>? {
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() 非常的慢,尽量不要使用
*/