pull/457/head
gedoor 4 years ago
parent d622823e93
commit 61689338fe
  1. 20
      app/src/main/java/io/legado/app/ui/book/local/ImportBookActivity.kt
  2. 43
      app/src/main/java/io/legado/app/ui/book/local/ImportBookViewModel.kt

@ -29,6 +29,7 @@ import kotlinx.coroutines.Dispatchers.Main
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import org.jetbrains.anko.sdk27.listeners.onClick import org.jetbrains.anko.sdk27.listeners.onClick
import org.jetbrains.anko.toast
import java.io.File import java.io.File
import java.util.* import java.util.*
@ -234,8 +235,23 @@ class ImportBookActivity : VMBaseActivity<ImportBookViewModel>(R.layout.activity
* 扫描当前文件夹 * 扫描当前文件夹
*/ */
private fun scanFolder() { private fun scanFolder() {
rootDoc?.let { rootDoc?.let { doc ->
adapter.clearItems()
val lastDoc = subDocs.lastOrNull() ?: doc
viewModel.scanDoc(lastDoc) {
adapter.addItem(it)
}
} ?: let {
val lastPath = AppConfig.importBookPath
if (lastPath.isNullOrEmpty()) {
toast(R.string.empty_msg_import_book)
} else {
adapter.clearItems()
val file = File(path)
viewModel.scanFile(file) {
adapter.addItem(it)
}
}
} }
} }

@ -5,6 +5,10 @@ import android.net.Uri
import androidx.documentfile.provider.DocumentFile import androidx.documentfile.provider.DocumentFile
import io.legado.app.base.BaseViewModel import io.legado.app.base.BaseViewModel
import io.legado.app.model.localBook.LocalBook import io.legado.app.model.localBook.LocalBook
import io.legado.app.utils.DocItem
import io.legado.app.utils.DocumentUtils
import java.io.File
import java.util.*
class ImportBookViewModel(application: Application) : BaseViewModel(application) { class ImportBookViewModel(application: Application) : BaseViewModel(application) {
@ -29,4 +33,43 @@ class ImportBookViewModel(application: Application) : BaseViewModel(application)
} }
} }
fun scanDoc(documentFile: DocumentFile, find: (docItem: DocItem) -> Unit) {
execute {
val docList = DocumentUtils.listFiles(context, documentFile.uri)
docList.forEach { docItem ->
if (docItem.isDir) {
DocumentFile.fromSingleUri(context, docItem.uri)?.let {
scanDoc(it, find)
}
} else if (docItem.name.endsWith(".txt", true)
|| docItem.name.endsWith(".epub", true)
) {
find(docItem)
}
}
}
}
fun scanFile(file: File, find: (docItem: DocItem) -> Unit) {
execute {
file.listFiles()?.forEach {
if (it.isDirectory) {
scanFile(it, find)
} else if (it.name.endsWith(".txt", true)
|| it.name.endsWith(".epub", true)
) {
find(
DocItem(
it.name,
it.extension,
it.length(),
Date(it.lastModified()),
Uri.parse(it.absolutePath)
)
)
}
}
}
}
} }
Loading…
Cancel
Save