From bc0d820c8f0a64a65f06b8a0949385b363ae99b9 Mon Sep 17 00:00:00 2001 From: kunfei Date: Wed, 3 May 2023 22:01:07 +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 --- .../io/legado/app/data/dao/BookSourceDao.kt | 7 +++++-- .../legado/app/help/config/ReadBookConfig.kt | 20 +++++++++++++++++-- .../java/io/legado/app/lib/webdav/WebDav.kt | 1 - .../ui/association/AddToBookshelfDialog.kt | 2 +- .../ui/association/OnLineImportViewModel.kt | 2 -- .../app/ui/book/cache/CacheViewModel.kt | 2 -- .../ui/book/read/config/BgTextConfigDialog.kt | 4 ---- .../book/read/page/provider/ImageProvider.kt | 3 --- .../io/legado/app/ui/browser/WebViewModel.kt | 10 +++++++--- .../ui/main/bookshelf/BookshelfViewModel.kt | 17 +++++++++++++--- .../app/ui/rss/read/ReadRssViewModel.kt | 9 ++++++--- .../io/legado/app/utils/compress/ZipUtils.kt | 2 +- 12 files changed, 52 insertions(+), 27 deletions(-) diff --git a/app/src/main/java/io/legado/app/data/dao/BookSourceDao.kt b/app/src/main/java/io/legado/app/data/dao/BookSourceDao.kt index 66d0ebe0c..4cd47af68 100644 --- a/app/src/main/java/io/legado/app/data/dao/BookSourceDao.kt +++ b/app/src/main/java/io/legado/app/data/dao/BookSourceDao.kt @@ -110,10 +110,13 @@ interface BookSourceDao { ) fun getEnabledByGroup(group: String): List - @Query("select * from book_sources where enabled = 1 and bookSourceType = :type") + @Query("select * from book_sources where bookUrlPattern != 'NONE' and bookSourceType = :type") fun getEnabledByType(type: Int): List - @get:Query("select * from book_sources where enabled = 1 and trim(bookUrlPattern) <> '' order by enabled desc, customOrder") + @Query("select * from book_sources where enabled = 1 and bookSourceUrl = :baseUrl") + fun getBookSourceAddBook(baseUrl: String): BookSource? + + @get:Query("select * from book_sources where enabled = 1 and trim(bookUrlPattern) <> '' and trim(bookUrlPattern) <> 'NONE' order by enabled desc, customOrder") val hasBookUrlPattern: List @get:Query("select * from book_sources where bookSourceGroup is null or bookSourceGroup = ''") diff --git a/app/src/main/java/io/legado/app/help/config/ReadBookConfig.kt b/app/src/main/java/io/legado/app/help/config/ReadBookConfig.kt index 08f49f028..256c753cd 100644 --- a/app/src/main/java/io/legado/app/help/config/ReadBookConfig.kt +++ b/app/src/main/java/io/legado/app/help/config/ReadBookConfig.kt @@ -12,8 +12,25 @@ import io.legado.app.constant.PreferKey import io.legado.app.help.DefaultData import io.legado.app.help.coroutine.Coroutine import io.legado.app.ui.book.read.page.provider.ChapterProvider -import io.legado.app.utils.* +import io.legado.app.utils.BitmapUtils +import io.legado.app.utils.FileUtils +import io.legado.app.utils.GSON import io.legado.app.utils.compress.ZipUtils +import io.legado.app.utils.createFolderReplace +import io.legado.app.utils.externalCache +import io.legado.app.utils.externalFiles +import io.legado.app.utils.fromJsonArray +import io.legado.app.utils.fromJsonObject +import io.legado.app.utils.getCompatColor +import io.legado.app.utils.getFile +import io.legado.app.utils.getMeanColor +import io.legado.app.utils.getPrefBoolean +import io.legado.app.utils.getPrefInt +import io.legado.app.utils.hexString +import io.legado.app.utils.printOnDebug +import io.legado.app.utils.putPrefBoolean +import io.legado.app.utils.putPrefInt +import io.legado.app.utils.resizeAndRecycle import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.withContext import splitties.init.appCtx @@ -394,7 +411,6 @@ object ReadBookConfig { zipFile.writeBytes(byteArray) val configDir = appCtx.externalCache.getFile("readConfig") configDir.createFolderReplace() - @Suppress("BlockingMethodInNonBlockingContext") ZipUtils.unZipToPath(zipFile, configDir) val configFile = configDir.getFile(configFileName) val config: Config = GSON.fromJsonObject(configFile.readText()).getOrThrow() diff --git a/app/src/main/java/io/legado/app/lib/webdav/WebDav.kt b/app/src/main/java/io/legado/app/lib/webdav/WebDav.kt index e2421f006..0c7f63a5b 100644 --- a/app/src/main/java/io/legado/app/lib/webdav/WebDav.kt +++ b/app/src/main/java/io/legado/app/lib/webdav/WebDav.kt @@ -259,7 +259,6 @@ open class WebDav( * @param savedPath 本地的完整路径,包括最后的文件名 * @param replaceExisting 是否替换本地的同名文件 */ - @Suppress("BlockingMethodInNonBlockingContext") @Throws(WebDavException::class) suspend fun downloadTo(savedPath: String, replaceExisting: Boolean) { val file = File(savedPath) diff --git a/app/src/main/java/io/legado/app/ui/association/AddToBookshelfDialog.kt b/app/src/main/java/io/legado/app/ui/association/AddToBookshelfDialog.kt index b926889ab..64d379a6c 100644 --- a/app/src/main/java/io/legado/app/ui/association/AddToBookshelfDialog.kt +++ b/app/src/main/java/io/legado/app/ui/association/AddToBookshelfDialog.kt @@ -123,7 +123,7 @@ class AddToBookshelfDialog() : BaseDialogFragment(R.layout.dialog_add_to_bookshe } } } - appDb.bookSourceDao.getBookSource(baseUrl)?.let { source -> + appDb.bookSourceDao.getBookSourceAddBook(baseUrl)?.let { source -> getBookInfo(bookUrl, source)?.let { book -> return@execute book } diff --git a/app/src/main/java/io/legado/app/ui/association/OnLineImportViewModel.kt b/app/src/main/java/io/legado/app/ui/association/OnLineImportViewModel.kt index 4292815d2..28c5bcdaf 100644 --- a/app/src/main/java/io/legado/app/ui/association/OnLineImportViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/association/OnLineImportViewModel.kt @@ -36,7 +36,6 @@ class OnLineImportViewModel(app: Application) : BaseAssociationViewModel(app) { fun getBytes(url: String, success: (bytes: ByteArray) -> Unit) { execute { - @Suppress("BlockingMethodInNonBlockingContext") okHttpClient.newCallResponseBody { if (url.endsWith("#requestWithoutUA")) { url(url.substringBeforeLast("#requestWithoutUA")) @@ -88,7 +87,6 @@ class OnLineImportViewModel(app: Application) : BaseAssociationViewModel(app) { when (rs.contentType()) { "application/zip".toMediaType(), "application/octet-stream".toMediaType() -> { - @Suppress("BlockingMethodInNonBlockingContext") importReadConfig(rs.bytes(), finally) } else -> { diff --git a/app/src/main/java/io/legado/app/ui/book/cache/CacheViewModel.kt b/app/src/main/java/io/legado/app/ui/book/cache/CacheViewModel.kt index a8aae2555..acd859b5c 100644 --- a/app/src/main/java/io/legado/app/ui/book/cache/CacheViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/cache/CacheViewModel.kt @@ -123,7 +123,6 @@ class CacheViewModel(application: Application) : BaseViewModel(application) { } } - @Suppress("BlockingMethodInNonBlockingContext") private suspend fun export(doc: DocumentFile, book: Book) { val filename = book.getExportFileName("txt") DocumentUtils.delete(doc, filename) @@ -288,7 +287,6 @@ class CacheViewModel(application: Application) : BaseViewModel(application) { } } - @Suppress("BlockingMethodInNonBlockingContext") private suspend fun exportEpub(doc: DocumentFile, book: Book) { val filename = book.getExportFileName("epub") DocumentUtils.delete(doc, filename) diff --git a/app/src/main/java/io/legado/app/ui/book/read/config/BgTextConfigDialog.kt b/app/src/main/java/io/legado/app/ui/book/read/config/BgTextConfigDialog.kt index 1745776e6..b550e23e5 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/config/BgTextConfigDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/config/BgTextConfigDialog.kt @@ -232,7 +232,6 @@ class BgTextConfigDialog : BaseDialogFragment(R.layout.dialog_read_bg_text) { }) } - @Suppress("BlockingMethodInNonBlockingContext") private fun exportConfig(uri: Uri) { val exportFileName = if (ReadBookConfig.config.name.isBlank()) { configFileName @@ -324,7 +323,6 @@ class BgTextConfigDialog : BaseDialogFragment(R.layout.dialog_read_bg_text) { private fun importNetConfig(url: String) { execute { - @Suppress("BlockingMethodInNonBlockingContext") okHttpClient.newCallResponseBody { url(url) }.bytes().let { @@ -337,7 +335,6 @@ class BgTextConfigDialog : BaseDialogFragment(R.layout.dialog_read_bg_text) { private fun importConfig(uri: Uri) { execute { - @Suppress("BlockingMethodInNonBlockingContext") importConfig(uri.readBytes(requireContext())) }.onError { it.printOnDebug() @@ -345,7 +342,6 @@ class BgTextConfigDialog : BaseDialogFragment(R.layout.dialog_read_bg_text) { } } - @Suppress("BlockingMethodInNonBlockingContext", "BlockingMethodInNonBlockingContext") private fun importConfig(byteArray: ByteArray) { execute { ReadBookConfig.import(byteArray).getOrThrow() diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/provider/ImageProvider.kt b/app/src/main/java/io/legado/app/ui/book/read/page/provider/ImageProvider.kt index 84413b7b8..a81b336fa 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/provider/ImageProvider.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/provider/ImageProvider.kt @@ -88,7 +88,6 @@ object ImageProvider { if (book.isEpub) { EpubFile.getImage(book, src)?.use { input -> val newFile = FileUtils.createFileIfNotExist(vFile.absolutePath) - @Suppress("BlockingMethodInNonBlockingContext") FileOutputStream(newFile).use { output -> input.copyTo(output) } @@ -96,7 +95,6 @@ object ImageProvider { } else if (book.isPdf) { PdfFile.getImage(book, src)?.use { input -> val newFile = FileUtils.createFileIfNotExist(vFile.absolutePath) - @Suppress("BlockingMethodInNonBlockingContext") FileOutputStream(newFile).use { output -> input.copyTo(output) } @@ -170,7 +168,6 @@ object ImageProvider { } return null } - @Suppress("BlockingMethodInNonBlockingContext") return kotlin.runCatching { val bitmap = BitmapUtils.decodeBitmap(vFile.absolutePath, width, height) ?: SvgUtils.createBitmap(vFile.absolutePath, width, height) diff --git a/app/src/main/java/io/legado/app/ui/browser/WebViewModel.kt b/app/src/main/java/io/legado/app/ui/browser/WebViewModel.kt index 94f0b1707..3ddec4f49 100644 --- a/app/src/main/java/io/legado/app/ui/browser/WebViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/browser/WebViewModel.kt @@ -15,9 +15,14 @@ import io.legado.app.help.IntentData import io.legado.app.help.http.newCallResponseBody import io.legado.app.help.http.okHttpClient import io.legado.app.model.analyzeRule.AnalyzeUrl -import io.legado.app.utils.* +import io.legado.app.utils.DocumentUtils +import io.legado.app.utils.FileUtils +import io.legado.app.utils.isContentScheme +import io.legado.app.utils.printOnDebug +import io.legado.app.utils.toastOnUi +import io.legado.app.utils.writeBytes import java.io.File -import java.util.* +import java.util.Date class WebViewModel(application: Application) : BaseViewModel(application) { var baseUrl: String = "" @@ -75,7 +80,6 @@ class WebViewModel(application: Application) : BaseViewModel(application) { private suspend fun webData2bitmap(data: String): ByteArray? { return if (URLUtil.isValidUrl(data)) { - @Suppress("BlockingMethodInNonBlockingContext") okHttpClient.newCallResponseBody { url(data) }.bytes() diff --git a/app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfViewModel.kt b/app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfViewModel.kt index 31f8ef7d1..097284704 100644 --- a/app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfViewModel.kt @@ -12,12 +12,24 @@ import io.legado.app.help.http.newCallResponseBody import io.legado.app.help.http.okHttpClient import io.legado.app.help.http.text import io.legado.app.model.webBook.WebBook -import io.legado.app.utils.* +import io.legado.app.utils.FileUtils +import io.legado.app.utils.GSON +import io.legado.app.utils.NetworkUtils +import io.legado.app.utils.fromJsonArray +import io.legado.app.utils.isAbsUrl +import io.legado.app.utils.isJsonArray +import io.legado.app.utils.printOnDebug +import io.legado.app.utils.toastOnUi import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.isActive import java.io.File import java.io.FileOutputStream import java.io.OutputStreamWriter +import kotlin.collections.List +import kotlin.collections.Map +import kotlin.collections.forEach +import kotlin.collections.hashMapOf +import kotlin.collections.set class BookshelfViewModel(application: Application) : BaseViewModel(application) { @@ -33,7 +45,7 @@ class BookshelfViewModel(application: Application) : BaseViewModel(application) if (bookUrl.isEmpty()) continue if (appDb.bookDao.getBook(bookUrl) != null) continue val baseUrl = NetworkUtils.getBaseUrl(bookUrl) ?: continue - var source = appDb.bookSourceDao.getBookSource(baseUrl) + var source = appDb.bookSourceDao.getBookSourceAddBook(baseUrl) if (source == null) { hasBookUrlPattern.forEach { bookSource -> if (bookUrl.matches(bookSource.bookUrlPattern!!.toRegex())) { @@ -75,7 +87,6 @@ class BookshelfViewModel(application: Application) : BaseViewModel(application) val path = "${context.filesDir}/books.json" FileUtils.delete(path) val file = FileUtils.createFileWithReplace(path) - @Suppress("BlockingMethodInNonBlockingContext") FileOutputStream(file).use { out -> val writer = JsonWriter(OutputStreamWriter(out, "UTF-8")) writer.setIndent(" ") diff --git a/app/src/main/java/io/legado/app/ui/rss/read/ReadRssViewModel.kt b/app/src/main/java/io/legado/app/ui/rss/read/ReadRssViewModel.kt index 274117165..df9456b78 100644 --- a/app/src/main/java/io/legado/app/ui/rss/read/ReadRssViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/rss/read/ReadRssViewModel.kt @@ -19,11 +19,15 @@ import io.legado.app.help.http.newCallResponseBody import io.legado.app.help.http.okHttpClient import io.legado.app.model.analyzeRule.AnalyzeUrl import io.legado.app.model.rss.Rss -import io.legado.app.utils.* +import io.legado.app.utils.DocumentUtils +import io.legado.app.utils.FileUtils +import io.legado.app.utils.isContentScheme +import io.legado.app.utils.toastOnUi +import io.legado.app.utils.writeBytes import kotlinx.coroutines.Dispatchers.IO import splitties.init.appCtx import java.io.File -import java.util.* +import java.util.Date class ReadRssViewModel(application: Application) : BaseViewModel(application) { @@ -156,7 +160,6 @@ class ReadRssViewModel(application: Application) : BaseViewModel(application) { private suspend fun webData2bitmap(data: String): ByteArray? { return if (URLUtil.isValidUrl(data)) { - @Suppress("BlockingMethodInNonBlockingContext") okHttpClient.newCallResponseBody { url(data) }.bytes() diff --git a/app/src/main/java/io/legado/app/utils/compress/ZipUtils.kt b/app/src/main/java/io/legado/app/utils/compress/ZipUtils.kt index 6eca11de5..d4c25b27c 100644 --- a/app/src/main/java/io/legado/app/utils/compress/ZipUtils.kt +++ b/app/src/main/java/io/legado/app/utils/compress/ZipUtils.kt @@ -13,7 +13,7 @@ import java.io.* import java.util.zip.* @SuppressLint("ObsoleteSdkInt") -@Suppress("unused", "BlockingMethodInNonBlockingContext", "MemberVisibilityCanBePrivate") +@Suppress("unused", "MemberVisibilityCanBePrivate") object ZipUtils { fun zipString(text: String): ByteArray {