Localbook实现导入压缩文件

This commit is contained in:
Xwite
2023-03-16 14:31:35 +08:00
parent 37f974e66b
commit 482f65b867
6 changed files with 18 additions and 18 deletions
@@ -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)
@@ -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)
@@ -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()
}
@@ -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
}
@@ -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
}
@@ -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
}