From 0070463d9417c0dc3b9ad6917b149bfc58ec791c Mon Sep 17 00:00:00 2001 From: kunfei Date: Sun, 8 Mar 2020 10:50:39 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/io/legado/app/model/WebBook.kt | 40 +++++++++++++++++++ .../app/web/controller/BookshelfController.kt | 20 +++------- 2 files changed, 46 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/io/legado/app/model/WebBook.kt b/app/src/main/java/io/legado/app/model/WebBook.kt index 5a51b486c..725cf82bb 100644 --- a/app/src/main/java/io/legado/app/model/WebBook.kt +++ b/app/src/main/java/io/legado/app/model/WebBook.kt @@ -12,6 +12,7 @@ import io.legado.app.model.webBook.BookInfo import io.legado.app.model.webBook.BookList import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.runBlocking import kotlin.coroutines.CoroutineContext class WebBook(val bookSource: BookSource) { @@ -171,4 +172,43 @@ class WebBook(val bookSource: BookSource) { ) } } + + fun getContentBlocking( + book: Book, + bookChapter: BookChapter, + nextChapterUrl: String? = null + ): String { + return runBlocking { + if (bookSource.getContentRule().content.isNullOrEmpty()) { + Debug.log(sourceUrl, "⇒正文规则为空,使用章节链接:${bookChapter.url}") + return@runBlocking bookChapter.url + } + val body = + if (bookChapter.url == book.bookUrl && !book.tocHtml.isNullOrEmpty()) { + book.tocHtml + } else { + val analyzeUrl = + AnalyzeUrl( + book = book, + ruleUrl = bookChapter.url, + baseUrl = book.tocUrl, + headerMapF = bookSource.getHeaderMap() + ) + analyzeUrl.getResponseAwait( + bookSource.bookSourceUrl, + jsStr = bookSource.getContentRule().webJs, + sourceRegex = bookSource.getContentRule().sourceRegex + ).body + } + BookContent.analyzeContent( + this, + body, + book, + bookChapter, + bookSource, + bookChapter.url, + nextChapterUrl + ) + } + } } \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/web/controller/BookshelfController.kt b/app/src/main/java/io/legado/app/web/controller/BookshelfController.kt index 6f6dbbd4b..bb1869fe8 100644 --- a/app/src/main/java/io/legado/app/web/controller/BookshelfController.kt +++ b/app/src/main/java/io/legado/app/web/controller/BookshelfController.kt @@ -7,7 +7,6 @@ import io.legado.app.model.WebBook import io.legado.app.utils.GSON import io.legado.app.utils.fromJsonObject import io.legado.app.web.utils.ReturnData -import kotlinx.coroutines.runBlocking class BookshelfController { @@ -37,25 +36,18 @@ class BookshelfController { return returnData.setErrorMsg("参数url不能为空,请指定内容地址") } val book = App.db.bookDao().getBook(strings[0]) - val chapter = App.db.bookChapterDao().getChapter(strings[0], 1) + val chapter = App.db.bookChapterDao().getChapter(strings[0], strings[1].toInt()) if (book == null || chapter == null) { returnData.setErrorMsg("未找到") } else { - val content = BookHelp.getContent(book, chapter) + var content = BookHelp.getContent(book, chapter) if (content != null) { returnData.setData(content) } else { - runBlocking { - App.db.bookSourceDao().getBookSource(book.origin)?.let { source -> - WebBook(source).getContent(book, chapter) - .onSuccess { - returnData.setData(it!!) - } - .onError { - returnData.setErrorMsg(it.localizedMessage) - } - } ?: returnData.setErrorMsg("未找到书源") - } + App.db.bookSourceDao().getBookSource(book.origin)?.let { source -> + content = WebBook(source).getContentBlocking(book, chapter) + returnData.setErrorMsg(content) + } ?: returnData.setErrorMsg("未找到书源") } } return returnData