pull/1415/head
gedoor 4 years ago
parent 468c574c25
commit 92ec2d1057
  1. 4
      app/src/main/java/io/legado/app/ui/book/local/ImportBookActivity.kt
  2. 5
      app/src/main/java/io/legado/app/ui/book/local/ImportBookViewModel.kt
  3. 7
      app/src/main/java/io/legado/app/utils/DocumentExtensions.kt

@ -190,6 +190,7 @@ class ImportBookActivity : VMBaseActivity<ActivityImportBookBinding, ImportBookV
adapter.selectedUris.clear()
adapter.clearItems()
launch(IO) {
runCatching {
val docList = DocumentUtils.listFiles(lastDoc.uri)
for (i in docList.lastIndex downTo 0) {
val item = docList[i]
@ -207,6 +208,9 @@ class ImportBookActivity : VMBaseActivity<ActivityImportBookBinding, ImportBookV
withContext(Main) {
adapter.setItems(docList)
}
}.onFailure {
toastOnUi("获取文件列表出错\n${it.localizedMessage}")
}
}
}

@ -8,6 +8,7 @@ import io.legado.app.model.localBook.LocalBook
import io.legado.app.utils.DocItem
import io.legado.app.utils.DocumentUtils
import io.legado.app.utils.isContentScheme
import io.legado.app.utils.toastOnUi
import java.io.File
import java.util.*
@ -47,6 +48,7 @@ class ImportBookViewModel(application: Application) : BaseViewModel(application)
find: (docItem: DocItem) -> Unit,
finally: (() -> Unit)? = null
) {
kotlin.runCatching {
val docList = DocumentUtils.listFiles(documentFile.uri)
docList.forEach { docItem ->
if (docItem.isDir) {
@ -59,6 +61,9 @@ class ImportBookViewModel(application: Application) : BaseViewModel(application)
find(docItem)
}
}
}.onFailure {
context.toastOnUi("扫描文件夹出错\n${it.localizedMessage}")
}
if (isRoot) {
finally?.invoke()
}

@ -7,7 +7,6 @@ import android.provider.DocumentsContract
import androidx.documentfile.provider.DocumentFile
import io.legado.app.model.NoStackTraceException
import splitties.init.appCtx
import timber.log.Timber
import java.io.File
import java.nio.charset.Charset
import java.util.*
@ -95,6 +94,7 @@ object DocumentUtils {
} ?: throw NoStackTraceException("打开文件失败\n${uri}")
}
@Throws(Exception::class)
fun listFiles(uri: Uri, regex: Regex? = null): ArrayList<DocItem> {
val docList = arrayListOf<DocItem>()
var cursor: Cursor? = null
@ -133,17 +133,15 @@ object DocumentUtils {
} while (cursor.moveToNext())
}
}
} catch (e: Exception) {
Timber.e(e)
} finally {
cursor?.close()
}
return docList
}
@Throws(Exception::class)
fun listFiles(path: String, regex: Regex? = null): ArrayList<DocItem> {
val docItems = arrayListOf<DocItem>()
kotlin.runCatching {
val file = File(path)
file.listFiles { pathName ->
regex?.let {
@ -160,7 +158,6 @@ object DocumentUtils {
)
)
}
}
return docItems
}

Loading…
Cancel
Save