优化
This commit is contained in:
@@ -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() 非常的慢,尽量不要使用
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user