Просмотр исходного кода

Localbook实现导入压缩文件

Xwite 3 лет назад
Родитель
Сommit
482f65b867

+ 1 - 1
app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt

@@ -534,7 +534,7 @@ class BookInfoActivity :
             } else if (webFile.isSupportDecompress) {
                 /* 解压筛选后再选择导入项 */
                 viewModel.importOrDownloadWebFile<Uri>(webFile) { uri ->
-                    viewModel.getArchiveEntriesName(uri) { fileNames ->
+                    viewModel.getArchiveFilesName(uri) { fileNames ->
                         if (fileNames.size == 1) {
                             viewModel.importArchiveBook(uri, fileNames[0]) {
                                 onClick?.invoke(it)

+ 1 - 1
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<String>) -> Unit) {
+    fun getArchiveFilesName(archiveFileUri: Uri, onSuccess: (List<String>) -> Unit) {
         execute {
             ArchiveUtils.getArchiveFilesName(archiveFileUri) {
                 AppPattern.bookFileRegex.matches(it)

+ 4 - 10
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<String> = getArchiveEntriesName(FileDoc.fromUri(fileUri, false), filter)
+    fun getArchiveFilesName(fileUri: Uri, filter: ((String) -> Boolean)? = null): List<String> = 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()
            }

+ 4 - 2
app/src/main/java/io/legado/app/utils/compress/RarUtils.kt

@@ -113,13 +113,15 @@ object RarUtils {
         archive: Archive,
         filter: ((String) -> Boolean)? = null
     ): List<String> {
-        val fileNames = mutableList<String>()
+        val fileNames = mutableListOf<String>()
         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
     }

+ 4 - 2
app/src/main/java/io/legado/app/utils/compress/SevenZipUtils.kt

@@ -116,13 +116,15 @@ object SevenZipUtils {
         sevenZFile: SevenZFile,
         filter: ((String) -> Boolean)? = null
     ): List<String> {
-        val fileNames = mutableList<String>()
+        val fileNames = mutableListOf<String>()
         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
     }

+ 4 - 2
app/src/main/java/io/legado/app/utils/compress/ZipUtils.kt

@@ -259,13 +259,15 @@ object ZipUtils {
         zipInputStream: ZipArchiveInputStream,
         filter: ((String) -> Boolean)? = null
     ): List<String> {
-        val fileNames = mutableList<String>()
+        val fileNames = mutableListOf<String>()
         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
     }