pull/32/head
kunfei 6 years ago
parent f9d904eea6
commit c75156ca2c
  1. 68
      app/src/main/java/io/legado/app/model/webbook/BookContent.kt

@ -18,20 +18,20 @@ object BookContent {
@Throws(Exception::class) @Throws(Exception::class)
suspend fun analyzeContent( suspend fun analyzeContent(
coroutineScope: CoroutineScope, coroutineScope: CoroutineScope,
response: Response<String>, response: Response<String>,
book: Book, book: Book,
bookChapter: BookChapter, bookChapter: BookChapter,
bookSource: BookSource, bookSource: BookSource,
nextChapterUrlF: String? = null nextChapterUrlF: String? = null
): String { ): String {
val baseUrl: String = NetworkUtils.getUrl(response) val baseUrl: String = NetworkUtils.getUrl(response)
val body: String? = response.body() val body: String? = response.body()
body ?: throw Exception( body ?: throw Exception(
App.INSTANCE.getString( App.INSTANCE.getString(
R.string.error_get_web_content, R.string.error_get_web_content,
baseUrl baseUrl
) )
) )
SourceDebug.printLog(bookSource.bookSourceUrl, 1, "获取成功:$baseUrl") SourceDebug.printLog(bookSource.bookSourceUrl, 1, "获取成功:$baseUrl")
val content = StringBuilder() val content = StringBuilder()
@ -47,21 +47,21 @@ object BookContent {
App.db.bookChapterDao().getChapter(book.bookUrl, bookChapter.index + 1)?.url App.db.bookChapterDao().getChapter(book.bookUrl, bookChapter.index + 1)?.url
while (nextUrl.isNotEmpty() && !nextUrlList.contains(nextUrl)) { while (nextUrl.isNotEmpty() && !nextUrlList.contains(nextUrl)) {
if (!nextChapterUrl.isNullOrEmpty() if (!nextChapterUrl.isNullOrEmpty()
&& NetworkUtils.getAbsoluteURL(baseUrl, nextUrl) && NetworkUtils.getAbsoluteURL(baseUrl, nextUrl)
== NetworkUtils.getAbsoluteURL(baseUrl, nextChapterUrl) == NetworkUtils.getAbsoluteURL(baseUrl, nextChapterUrl)
) break ) break
nextUrlList.add(nextUrl) nextUrlList.add(nextUrl)
AnalyzeUrl( AnalyzeUrl(
ruleUrl = nextUrl, ruleUrl = nextUrl,
book = book, book = book,
headerMapF = bookSource.getHeaderMap() headerMapF = bookSource.getHeaderMap()
).getResponseAsync().await() ).getResponseAsync().await()
.body()?.let { nextBody -> .body()?.let { nextBody ->
contentData = analyzeContent(nextBody, contentRule, book, baseUrl) contentData = analyzeContent(nextBody, contentRule, book, baseUrl)
nextUrl = nextUrl =
if (contentData.nextUrl.isNotEmpty()) contentData.nextUrl[0] else "" if (contentData.nextUrl.isNotEmpty()) contentData.nextUrl[0] else ""
content.append(contentData.content) content.append(contentData.content)
} }
} }
} else if (contentData.nextUrl.size > 1) { } else if (contentData.nextUrl.size > 1) {
val contentDataList = arrayListOf<ContentData<String>>() val contentDataList = arrayListOf<ContentData<String>>()
@ -72,15 +72,15 @@ object BookContent {
for (item in contentDataList) { for (item in contentDataList) {
withContext(coroutineScope.coroutineContext) { withContext(coroutineScope.coroutineContext) {
val nextResponse = AnalyzeUrl( val nextResponse = AnalyzeUrl(
ruleUrl = item.nextUrl, ruleUrl = item.nextUrl,
book = book, book = book,
headerMapF = bookSource.getHeaderMap() headerMapF = bookSource.getHeaderMap()
).getResponseAsync().await() ).getResponseAsync().await()
val nextContentData = analyzeContent( val nextContentData = analyzeContent(
nextResponse.body() ?: "", nextResponse.body() ?: "",
contentRule, contentRule,
book, book,
item.nextUrl item.nextUrl
) )
item.content = nextContentData.content item.content = nextContentData.content
} }
@ -92,8 +92,8 @@ object BookContent {
if (content.isNotEmpty()) { if (content.isNotEmpty()) {
if (!content[0].toString().startsWith(bookChapter.title)) { if (!content[0].toString().startsWith(bookChapter.title)) {
content content
.insert(0, "\n") .insert(0, "\n")
.insert(0, bookChapter.title) .insert(0, bookChapter.title)
} }
} }
return content.toString() return content.toString()
@ -101,10 +101,10 @@ object BookContent {
@Throws(Exception::class) @Throws(Exception::class)
private fun analyzeContent( private fun analyzeContent(
body: String, body: String,
contentRule: ContentRule, contentRule: ContentRule,
book: Book, book: Book,
baseUrl: String baseUrl: String
): ContentData<List<String>> { ): ContentData<List<String>> {
val nextUrlList = arrayListOf<String>() val nextUrlList = arrayListOf<String>()
val analyzeRule = AnalyzeRule(book) val analyzeRule = AnalyzeRule(book)

Loading…
Cancel
Save