diff --git a/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt b/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt index 81ec2e4d1..b273c5e02 100644 --- a/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt @@ -534,7 +534,7 @@ class BookInfoActivity : } else if (webFile.isSupportDecompress) { /* 解压筛选后再选择导入项 */ viewModel.importOrDownloadWebFile(webFile) { uri -> - viewModel.getArchiveEntriesName(uri) { fileNames -> + viewModel.getArchiveFilesName(uri) { fileNames -> if (fileNames.size == 1) { viewModel.importArchiveBook(uri, fileNames[0]) { onClick?.invoke(it) diff --git a/app/src/main/java/io/legado/app/ui/book/info/BookInfoViewModel.kt b/app/src/main/java/io/legado/app/ui/book/info/BookInfoViewModel.kt index ea2fe20cc..d33d7ff9a 100644 --- a/app/src/main/java/io/legado/app/ui/book/info/BookInfoViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/info/BookInfoViewModel.kt @@ -289,7 +289,7 @@ class BookInfoViewModel(application: Application) : BaseViewModel(application) { } } - fun getArchiveEntriesName(archiveFileUri: Uri, onSuccess: (List) -> Unit) { + fun getArchiveFilesName(archiveFileUri: Uri, onSuccess: (List) -> Unit) { execute { ArchiveUtils.getArchiveFilesName(archiveFileUri) { AppPattern.bookFileRegex.matches(it) diff --git a/app/src/main/java/io/legado/app/utils/ArchiveUtils.kt b/app/src/main/java/io/legado/app/utils/ArchiveUtils.kt index 83a7f00da..f7da695e1 100644 --- a/app/src/main/java/io/legado/app/utils/ArchiveUtils.kt +++ b/app/src/main/java/io/legado/app/utils/ArchiveUtils.kt @@ -71,7 +71,7 @@ object ArchiveUtils { } /* 遍历目录获取文件名 */ - fun getArchiveFilesName(fileUri: Uri, filter: ((String) -> Boolean)? = null): List = getArchiveEntriesName(FileDoc.fromUri(fileUri, false), filter) + fun getArchiveFilesName(fileUri: Uri, filter: ((String) -> Boolean)? = null): List = getArchiveFilesName(FileDoc.fromUri(fileUri, false), filter) fun getArchiveFilesName( fileDoc: FileDoc, @@ -82,19 +82,13 @@ object ArchiveUtils { return fileDoc.openInputStream().getOrThrow().use { when { name.endsWith(".rar", ignoreCase = true) -> { - RarUtils.getFilesName(it) { - filter?.invoke(it) - } + RarUtils.getFilesName(it, filter) } name.endsWith(".zip", ignoreCase = true) -> { - ZipUtils.getFilesName(it) { - filter?.invoke(it) - } + ZipUtils.getFilesName(it, filter) } name.endsWith(".7z", ignoreCase = true) -> { - SevenZipUtils.getFilesName(it) { - filter?.invoke(it) - } + SevenZipUtils.getFilesName(it, filter) } else -> emptyList() } diff --git a/app/src/main/java/io/legado/app/utils/compress/RarUtils.kt b/app/src/main/java/io/legado/app/utils/compress/RarUtils.kt index ab3b10d79..cf69d598b 100644 --- a/app/src/main/java/io/legado/app/utils/compress/RarUtils.kt +++ b/app/src/main/java/io/legado/app/utils/compress/RarUtils.kt @@ -113,13 +113,15 @@ object RarUtils { archive: Archive, filter: ((String) -> Boolean)? = null ): List { - val fileNames = mutableList() + val fileNames = mutableListOf() var entry: FileHeader? while (archive.nextFileHeader().also { entry = it } != null) { if (entry!!.isDirectory) { continue } - fileNames.add(entry!!.fileName) + val fileName = entry!!.fileName + if (filter != null && filter.invoke(fileName)) + fileNames.add(fileName) } return fileNames } diff --git a/app/src/main/java/io/legado/app/utils/compress/SevenZipUtils.kt b/app/src/main/java/io/legado/app/utils/compress/SevenZipUtils.kt index 995de28d3..76bdad68b 100644 --- a/app/src/main/java/io/legado/app/utils/compress/SevenZipUtils.kt +++ b/app/src/main/java/io/legado/app/utils/compress/SevenZipUtils.kt @@ -116,13 +116,15 @@ object SevenZipUtils { sevenZFile: SevenZFile, filter: ((String) -> Boolean)? = null ): List { - val fileNames = mutableList() + val fileNames = mutableListOf() var entry: SevenZArchiveEntry? while (sevenZFile.nextEntry.also { entry = it } != null) { if (entry!!.isDirectory) { continue } - fileNames.add(entry!!.name) + val fileName = entry!!.name + if (filter != null && filter.invoke(fileName)) + fileNames.add(fileName) } return fileNames } diff --git a/app/src/main/java/io/legado/app/utils/compress/ZipUtils.kt b/app/src/main/java/io/legado/app/utils/compress/ZipUtils.kt index c51d98876..d5f1509d0 100644 --- a/app/src/main/java/io/legado/app/utils/compress/ZipUtils.kt +++ b/app/src/main/java/io/legado/app/utils/compress/ZipUtils.kt @@ -259,13 +259,15 @@ object ZipUtils { zipInputStream: ZipArchiveInputStream, filter: ((String) -> Boolean)? = null ): List { - val fileNames = mutableList() + val fileNames = mutableListOf() var entry: ArchiveEntry? while (zipInputStream.nextEntry.also { entry = it } != null) { if (entry!!.isDirectory) { continue } - fileNames.add(entry!!.name) + val fileName = entry!!.name + if (filter != null && filter.invoke(fileName)) + fileNames.add(fileName) } return fileNames }