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() {
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 {
launch(IO) {
rootDoc?.let { doc ->
adapter.clearItems()
val file = File(path)
viewModel.scanFile(file) {
adapter.addItem(it)
val lastDoc = subDocs.lastOrNull() ?: doc
viewModel.scanDoc(lastDoc) {
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) {
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)
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)
)
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