From 349ab62a0414911d646a1a64c68e295a29785e22 Mon Sep 17 00:00:00 2001 From: kunfei Date: Wed, 15 Mar 2023 20:31:05 +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 --- .../app/ui/book/info/BookInfoViewModel.kt | 31 +++++++++++++------ .../java/io/legado/app/utils/ArchiveUtils.kt | 2 +- .../io/legado/app/utils/FileDocExtensions.kt | 4 +++ 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/book/info/BookInfoViewModel.kt b/app/src/main/java/io/legado/app/ui/book/info/BookInfoViewModel.kt index 2d50c6811fbc..1975b8a7f1b2 100644 --- a/app/src/main/java/io/legado/app/ui/book/info/BookInfoViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/info/BookInfoViewModel.kt @@ -242,9 +242,7 @@ class BookInfoViewModel(application: Application) : BaseViewModel(application) { val fileName = "${book.name} 作者:${book.author}" book.downloadUrls!!.map { val mFileName = UrlUtil.getFileName(it) ?: fileName - val isSupportedFile = AppPattern.bookFileRegex.matches(mFileName) - val isSupportDecompress = AppPattern.archiveFileRegex.matches(mFileName) - WebFile(it, mFileName, isSupportedFile, isSupportDecompress) + WebFile(it, mFileName) } }.onError { context.toastOnUi("LoadWebFileError\n${it.localizedMessage}") @@ -259,10 +257,18 @@ class BookInfoViewModel(application: Application) : BaseViewModel(application) { execute { waitDialogData.postValue(true) if (webFile.isSupported) { - val book = LocalBook.importFileOnLine(webFile.url, webFile.name, bookSource) + val book = LocalBook.importFileOnLine( + webFile.url, + bookData.value!!.getExportFileName(webFile.suffix), + bookSource + ) changeToLocalBook(book) } else { - LocalBook.saveBookFile(webFile.url, webFile.name, bookSource) + LocalBook.saveBookFile( + webFile.url, + bookData.value!!.getExportFileName(webFile.suffix), + bookSource + ) } }.onSuccess { @Suppress("unchecked_cast") @@ -437,14 +443,21 @@ class BookInfoViewModel(application: Application) : BaseViewModel(application) { data class WebFile( val url: String, val name: String, - // txt epub umd pdf等文件 - val isSupported: Boolean, - // 压缩包形式的txt epub umd pdf文件 - val isSupportDecompress: Boolean ) { + override fun toString(): String { return name } + + // 后缀 + val suffix: String = name.substringAfterLast(".") + + // txt epub umd pdf等文件 + val isSupported: Boolean = AppPattern.bookFileRegex.matches(name) + + // 压缩包形式的txt epub umd pdf文件 + val isSupportDecompress: Boolean = AppPattern.archiveFileRegex.matches(name) + } } diff --git a/app/src/main/java/io/legado/app/utils/ArchiveUtils.kt b/app/src/main/java/io/legado/app/utils/ArchiveUtils.kt index e16a73a1ee6a..e9397bae4675 100644 --- a/app/src/main/java/io/legado/app/utils/ArchiveUtils.kt +++ b/app/src/main/java/io/legado/app/utils/ArchiveUtils.kt @@ -54,7 +54,7 @@ object ArchiveUtils { val name = archiveFileDoc.name val workPathFileDoc = getCacheFolderFileDoc(name, path) val workPath = workPathFileDoc.toString() - return archiveFileDoc.uri.inputStream(appCtx).getOrThrow().use { + return archiveFileDoc.openInputStream().getOrThrow().use { when { name.endsWith(".zip", ignoreCase = true) -> ZipUtils.unZipToPath(it, workPath) name.endsWith(".rar", ignoreCase = true) -> RarUtils.unRarToPath(it, workPath) diff --git a/app/src/main/java/io/legado/app/utils/FileDocExtensions.kt b/app/src/main/java/io/legado/app/utils/FileDocExtensions.kt index f36e33388b85..95f66f8a54db 100644 --- a/app/src/main/java/io/legado/app/utils/FileDocExtensions.kt +++ b/app/src/main/java/io/legado/app/utils/FileDocExtensions.kt @@ -211,6 +211,10 @@ fun FileDoc.createFolderIfNotExist( } } +fun FileDoc.openInputStream(): Result { + return uri.inputStream(appCtx) +} + fun FileDoc.exists( fileName: String, vararg subDirs: String