kunfei 4 年之前
父節點
當前提交
55c8cba480

+ 0 - 11
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
-        )
-    }
-
 }

+ 55 - 1
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<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() 非常的慢,尽量不要使用
  */