From 6cd211e1fa520272bf01417dd78b4111c1d859e3 Mon Sep 17 00:00:00 2001 From: kunfei Date: Fri, 24 Mar 2023 16:46:44 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../association/FileAssociationViewModel.kt | 35 ++++++++++++------- 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/association/FileAssociationViewModel.kt b/app/src/main/java/io/legado/app/ui/association/FileAssociationViewModel.kt index afa774b8e..dc3a9b7f3 100644 --- a/app/src/main/java/io/legado/app/ui/association/FileAssociationViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/association/FileAssociationViewModel.kt @@ -4,6 +4,7 @@ import android.app.Application import android.net.Uri import androidx.lifecycle.MutableLiveData import io.legado.app.constant.AppLog +import io.legado.app.constant.AppPattern import io.legado.app.constant.AppPattern.bookFileRegex import io.legado.app.model.localBook.LocalBook import io.legado.app.utils.* @@ -22,20 +23,13 @@ class FileAssociationViewModel(application: Application) : BaseAssociationViewMo if (uri.isContentScheme() || uri.isFileScheme()) { val fileDoc = FileDoc.fromUri(uri, false) fileName = fileDoc.name - kotlin.runCatching { - if (uri.inputStream(context).getOrNull().isJson()) { - importJson(uri) - return@execute + if (fileName.matches(AppPattern.archiveFileRegex)) { + ArchiveUtils.deCompress(fileDoc).forEach { + dispatch(FileDoc.fromFile(it)) } - }.onFailure { - it.printOnDebug() - AppLog.put("尝试导入为JSON文件失败\n${it.localizedMessage}", it) + } else { + dispatch(fileDoc) } - if (fileName.matches(bookFileRegex)) { - importBookLiveData.postValue(uri) - return@execute - } - notSupportedLiveData.postValue(Pair(uri, fileName)) } else { onLineImportLive.postValue(uri) } @@ -46,6 +40,23 @@ class FileAssociationViewModel(application: Application) : BaseAssociationViewMo } } + fun dispatch(fileDoc: FileDoc) { + kotlin.runCatching { + if (fileDoc.openInputStream().getOrNull().isJson()) { + importJson(fileDoc.uri) + return + } + }.onFailure { + it.printOnDebug() + AppLog.put("尝试导入为JSON文件失败\n${it.localizedMessage}", it) + } + if (fileDoc.name.matches(bookFileRegex)) { + importBookLiveData.postValue(fileDoc.uri) + return + } + notSupportedLiveData.postValue(Pair(fileDoc.uri, fileDoc.name)) + } + fun importBook(uri: Uri) { val book = LocalBook.importFile(uri) openBookLiveData.postValue(book.bookUrl)