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

@ -235,21 +235,27 @@ class ImportBookActivity : VMBaseActivity<ImportBookViewModel>(R.layout.activity
* 扫描当前文件夹 * 扫描当前文件夹
*/ */
private fun scanFolder() { private fun scanFolder() {
rootDoc?.let { doc -> launch(IO) {
adapter.clearItems() rootDoc?.let { doc ->
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() adapter.clearItems()
val file = File(path) val lastDoc = subDocs.lastOrNull() ?: doc
viewModel.scanFile(file) { viewModel.scanDoc(lastDoc) {
adapter.addItem(it) launch {
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) {
launch {
adapter.addItem(it)
}
}
} }
} }
} }

@ -34,40 +34,36 @@ class ImportBookViewModel(application: Application) : BaseViewModel(application)
} }
fun scanDoc(documentFile: DocumentFile, find: (docItem: DocItem) -> Unit) { fun scanDoc(documentFile: DocumentFile, find: (docItem: DocItem) -> Unit) {
execute { val docList = DocumentUtils.listFiles(context, documentFile.uri)
val docList = DocumentUtils.listFiles(context, documentFile.uri) docList.forEach { docItem ->
docList.forEach { docItem -> if (docItem.isDir) {
if (docItem.isDir) { DocumentFile.fromSingleUri(context, docItem.uri)?.let {
DocumentFile.fromSingleUri(context, docItem.uri)?.let { scanDoc(it, find)
scanDoc(it, find)
}
} else if (docItem.name.endsWith(".txt", true)
|| docItem.name.endsWith(".epub", true)
) {
find(docItem)
} }
} else if (docItem.name.endsWith(".txt", true)
|| docItem.name.endsWith(".epub", true)
) {
find(docItem)
} }
} }
} }
fun scanFile(file: File, find: (docItem: DocItem) -> Unit) { fun scanFile(file: File, find: (docItem: DocItem) -> Unit) {
execute { file.listFiles()?.forEach {
file.listFiles()?.forEach { if (it.isDirectory) {
if (it.isDirectory) { scanFile(it, find)
scanFile(it, find) } else if (it.name.endsWith(".txt", true)
} else if (it.name.endsWith(".txt", true) || it.name.endsWith(".epub", true)
|| it.name.endsWith(".epub", true) ) {
) { find(
find( DocItem(
DocItem( it.name,
it.name, it.extension,
it.extension, it.length(),
it.length(), Date(it.lastModified()),
Date(it.lastModified()), Uri.parse(it.absolutePath)
Uri.parse(it.absolutePath)
)
) )
} )
} }
} }
} }

Loading…
Cancel
Save