Localbook实现导入压缩文件
This commit is contained in:
@@ -534,7 +534,7 @@ class BookInfoActivity :
|
|||||||
} else if (webFile.isSupportDecompress) {
|
} else if (webFile.isSupportDecompress) {
|
||||||
/* 解压筛选后再选择导入项 */
|
/* 解压筛选后再选择导入项 */
|
||||||
viewModel.importOrDownloadWebFile<Uri>(webFile) { uri ->
|
viewModel.importOrDownloadWebFile<Uri>(webFile) { uri ->
|
||||||
viewModel.getArchiveEntriesName(uri) { fileNames ->
|
viewModel.getArchiveFilesName(uri) { fileNames ->
|
||||||
if (fileNames.size == 1) {
|
if (fileNames.size == 1) {
|
||||||
viewModel.importArchiveBook(uri, fileNames[0]) {
|
viewModel.importArchiveBook(uri, fileNames[0]) {
|
||||||
onClick?.invoke(it)
|
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 {
|
execute {
|
||||||
ArchiveUtils.getArchiveFilesName(archiveFileUri) {
|
ArchiveUtils.getArchiveFilesName(archiveFileUri) {
|
||||||
AppPattern.bookFileRegex.matches(it)
|
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(
|
fun getArchiveFilesName(
|
||||||
fileDoc: FileDoc,
|
fileDoc: FileDoc,
|
||||||
@@ -82,19 +82,13 @@ object ArchiveUtils {
|
|||||||
return fileDoc.openInputStream().getOrThrow().use {
|
return fileDoc.openInputStream().getOrThrow().use {
|
||||||
when {
|
when {
|
||||||
name.endsWith(".rar", ignoreCase = true) -> {
|
name.endsWith(".rar", ignoreCase = true) -> {
|
||||||
RarUtils.getFilesName(it) {
|
RarUtils.getFilesName(it, filter)
|
||||||
filter?.invoke(it)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
name.endsWith(".zip", ignoreCase = true) -> {
|
name.endsWith(".zip", ignoreCase = true) -> {
|
||||||
ZipUtils.getFilesName(it) {
|
ZipUtils.getFilesName(it, filter)
|
||||||
filter?.invoke(it)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
name.endsWith(".7z", ignoreCase = true) -> {
|
name.endsWith(".7z", ignoreCase = true) -> {
|
||||||
SevenZipUtils.getFilesName(it) {
|
SevenZipUtils.getFilesName(it, filter)
|
||||||
filter?.invoke(it)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else -> emptyList()
|
else -> emptyList()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -113,13 +113,15 @@ object RarUtils {
|
|||||||
archive: Archive,
|
archive: Archive,
|
||||||
filter: ((String) -> Boolean)? = null
|
filter: ((String) -> Boolean)? = null
|
||||||
): List<String> {
|
): List<String> {
|
||||||
val fileNames = mutableList<String>()
|
val fileNames = mutableListOf<String>()
|
||||||
var entry: FileHeader?
|
var entry: FileHeader?
|
||||||
while (archive.nextFileHeader().also { entry = it } != null) {
|
while (archive.nextFileHeader().also { entry = it } != null) {
|
||||||
if (entry!!.isDirectory) {
|
if (entry!!.isDirectory) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
fileNames.add(entry!!.fileName)
|
val fileName = entry!!.fileName
|
||||||
|
if (filter != null && filter.invoke(fileName))
|
||||||
|
fileNames.add(fileName)
|
||||||
}
|
}
|
||||||
return fileNames
|
return fileNames
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -116,13 +116,15 @@ object SevenZipUtils {
|
|||||||
sevenZFile: SevenZFile,
|
sevenZFile: SevenZFile,
|
||||||
filter: ((String) -> Boolean)? = null
|
filter: ((String) -> Boolean)? = null
|
||||||
): List<String> {
|
): List<String> {
|
||||||
val fileNames = mutableList<String>()
|
val fileNames = mutableListOf<String>()
|
||||||
var entry: SevenZArchiveEntry?
|
var entry: SevenZArchiveEntry?
|
||||||
while (sevenZFile.nextEntry.also { entry = it } != null) {
|
while (sevenZFile.nextEntry.also { entry = it } != null) {
|
||||||
if (entry!!.isDirectory) {
|
if (entry!!.isDirectory) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
fileNames.add(entry!!.name)
|
val fileName = entry!!.name
|
||||||
|
if (filter != null && filter.invoke(fileName))
|
||||||
|
fileNames.add(fileName)
|
||||||
}
|
}
|
||||||
return fileNames
|
return fileNames
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -259,13 +259,15 @@ object ZipUtils {
|
|||||||
zipInputStream: ZipArchiveInputStream,
|
zipInputStream: ZipArchiveInputStream,
|
||||||
filter: ((String) -> Boolean)? = null
|
filter: ((String) -> Boolean)? = null
|
||||||
): List<String> {
|
): List<String> {
|
||||||
val fileNames = mutableList<String>()
|
val fileNames = mutableListOf<String>()
|
||||||
var entry: ArchiveEntry?
|
var entry: ArchiveEntry?
|
||||||
while (zipInputStream.nextEntry.also { entry = it } != null) {
|
while (zipInputStream.nextEntry.also { entry = it } != null) {
|
||||||
if (entry!!.isDirectory) {
|
if (entry!!.isDirectory) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
fileNames.add(entry!!.name)
|
val fileName = entry!!.name
|
||||||
|
if (filter != null && filter.invoke(fileName))
|
||||||
|
fileNames.add(fileName)
|
||||||
}
|
}
|
||||||
return fileNames
|
return fileNames
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user