Localbook实现导入压缩文件
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user