pull/48/head
parent
41388f8a20
commit
d8fd296e88
@ -0,0 +1,269 @@ |
||||
package io.legado.app.model |
||||
|
||||
import android.annotation.SuppressLint |
||||
import io.legado.app.data.entities.Book |
||||
import io.legado.app.data.entities.BookChapter |
||||
import io.legado.app.help.coroutine.CompositeCoroutine |
||||
import io.legado.app.utils.htmlFormat |
||||
import io.legado.app.utils.isAbsUrl |
||||
import java.text.SimpleDateFormat |
||||
import java.util.* |
||||
|
||||
object SourceDebug { |
||||
var debugSource: String? = null |
||||
var callback: Callback? = null |
||||
private val tasks: CompositeCoroutine = CompositeCoroutine() |
||||
|
||||
@SuppressLint("ConstantLocale") |
||||
private val DEBUG_TIME_FORMAT = SimpleDateFormat("[mm:ss.SSS]", Locale.getDefault()) |
||||
private var startTime: Long = System.currentTimeMillis() |
||||
|
||||
@Synchronized |
||||
fun printLog( |
||||
sourceUrl: String?, |
||||
msg: String?, |
||||
print: Boolean = true, |
||||
isHtml: Boolean = false, |
||||
showTime: Boolean = true, |
||||
state: Int = 1 |
||||
) { |
||||
if (debugSource != sourceUrl || callback == null || !print) return |
||||
var printMsg = msg ?: "" |
||||
if (isHtml) { |
||||
printMsg = printMsg.htmlFormat() |
||||
} |
||||
if (showTime) { |
||||
printMsg = |
||||
"${DEBUG_TIME_FORMAT.format(Date(System.currentTimeMillis() - startTime))} $printMsg" |
||||
} |
||||
callback?.printLog(state, printMsg) |
||||
} |
||||
|
||||
fun cancelDebug(destroy: Boolean = false) { |
||||
tasks.clear() |
||||
|
||||
if (destroy) { |
||||
debugSource = null |
||||
callback = null |
||||
} |
||||
} |
||||
|
||||
fun startDebug(webBook: WebBook, key: String) { |
||||
cancelDebug() |
||||
startTime = System.currentTimeMillis() |
||||
when { |
||||
key.isAbsUrl() -> { |
||||
val book = Book() |
||||
book.origin = webBook.sourceUrl |
||||
book.bookUrl = key |
||||
printLog( |
||||
webBook.sourceUrl, |
||||
"⇒开始访问详情页:$key" |
||||
) |
||||
infoDebug(webBook, book) |
||||
} |
||||
key.contains("::") -> { |
||||
val url = key.substring(key.indexOf("::") + 2) |
||||
printLog( |
||||
webBook.sourceUrl, |
||||
"⇒开始访问发现页:$url" |
||||
) |
||||
exploreDebug(webBook, url) |
||||
} |
||||
else -> { |
||||
printLog( |
||||
webBook.sourceUrl, |
||||
"⇒开始搜索关键字:$key" |
||||
) |
||||
searchDebug(webBook, key) |
||||
} |
||||
} |
||||
} |
||||
|
||||
private fun exploreDebug(webBook: WebBook, url: String) { |
||||
printLog( |
||||
debugSource, |
||||
"︾开始解析发现页" |
||||
) |
||||
val explore = webBook.exploreBook(url, 1) |
||||
.onSuccess { exploreBooks -> |
||||
exploreBooks?.let { |
||||
if (exploreBooks.isNotEmpty()) { |
||||
printLog( |
||||
debugSource, |
||||
"︽发现页解析完成" |
||||
) |
||||
printLog( |
||||
debugSource, |
||||
"", |
||||
showTime = false |
||||
) |
||||
infoDebug( |
||||
webBook, |
||||
exploreBooks[0].toBook() |
||||
) |
||||
} else { |
||||
printLog( |
||||
debugSource, |
||||
"︽未获取到书籍", |
||||
state = -1 |
||||
) |
||||
} |
||||
} |
||||
} |
||||
.onError { |
||||
printLog( |
||||
debugSource, |
||||
it.localizedMessage, |
||||
state = -1 |
||||
) |
||||
} |
||||
tasks.add(explore) |
||||
} |
||||
|
||||
private fun searchDebug(webBook: WebBook, key: String) { |
||||
printLog( |
||||
debugSource, |
||||
"︾开始解析搜索页" |
||||
) |
||||
val search = webBook.searchBook(key, 1) |
||||
.onSuccess { searchBooks -> |
||||
searchBooks?.let { |
||||
if (searchBooks.isNotEmpty()) { |
||||
printLog( |
||||
debugSource, |
||||
"︽搜索页解析完成" |
||||
) |
||||
printLog( |
||||
debugSource, |
||||
"", |
||||
showTime = false |
||||
) |
||||
infoDebug( |
||||
webBook, |
||||
searchBooks[0].toBook() |
||||
) |
||||
} else { |
||||
printLog( |
||||
debugSource, |
||||
"︽未获取到书籍", |
||||
state = -1 |
||||
) |
||||
} |
||||
} |
||||
} |
||||
.onError { |
||||
printLog( |
||||
debugSource, |
||||
it.localizedMessage, |
||||
state = -1 |
||||
) |
||||
} |
||||
tasks.add(search) |
||||
} |
||||
|
||||
private fun infoDebug(webBook: WebBook, book: Book) { |
||||
printLog( |
||||
debugSource, |
||||
"︾开始解析详情页" |
||||
) |
||||
val info = webBook.getBookInfo(book) |
||||
.onSuccess { |
||||
printLog( |
||||
debugSource, |
||||
"︽详情页解析完成" |
||||
) |
||||
printLog( |
||||
debugSource, |
||||
"", |
||||
showTime = false |
||||
) |
||||
tocDebug(webBook, book) |
||||
} |
||||
.onError { |
||||
printLog( |
||||
debugSource, |
||||
it.localizedMessage, |
||||
state = -1 |
||||
) |
||||
} |
||||
tasks.add(info) |
||||
} |
||||
|
||||
private fun tocDebug(webBook: WebBook, book: Book) { |
||||
printLog( |
||||
debugSource, |
||||
"︾开始解析目录页" |
||||
) |
||||
val chapterList = webBook.getChapterList(book) |
||||
.onSuccess { chapterList -> |
||||
chapterList?.let { |
||||
if (it.isNotEmpty()) { |
||||
printLog( |
||||
debugSource, |
||||
"︽目录页解析完成" |
||||
) |
||||
printLog( |
||||
debugSource, |
||||
"", |
||||
showTime = false |
||||
) |
||||
val nextChapterUrl = if (it.size > 1) it[1].url else null |
||||
contentDebug( |
||||
webBook, |
||||
book, |
||||
it[0], |
||||
nextChapterUrl |
||||
) |
||||
} else { |
||||
printLog( |
||||
debugSource, |
||||
"︽目录列表为空", |
||||
state = -1 |
||||
) |
||||
} |
||||
} |
||||
} |
||||
.onError { |
||||
printLog( |
||||
debugSource, |
||||
it.localizedMessage, |
||||
state = -1 |
||||
) |
||||
} |
||||
tasks.add(chapterList) |
||||
} |
||||
|
||||
private fun contentDebug( |
||||
webBook: WebBook, |
||||
book: Book, |
||||
bookChapter: BookChapter, |
||||
nextChapterUrl: String? |
||||
) { |
||||
printLog( |
||||
debugSource, |
||||
"︾开始解析正文页" |
||||
) |
||||
val content = webBook.getContent(book, bookChapter, nextChapterUrl) |
||||
.onSuccess { |
||||
printLog( |
||||
debugSource, |
||||
"︽正文页解析完成", |
||||
state = 1000 |
||||
) |
||||
} |
||||
.onError { |
||||
printLog( |
||||
debugSource, |
||||
it.localizedMessage, |
||||
state = -1 |
||||
) |
||||
} |
||||
tasks.add(content) |
||||
} |
||||
|
||||
interface Callback { |
||||
fun printLog(state: Int, msg: String) |
||||
} |
||||
|
||||
} |
@ -1,175 +0,0 @@ |
||||
package io.legado.app.model.webbook |
||||
|
||||
import android.annotation.SuppressLint |
||||
import io.legado.app.data.entities.Book |
||||
import io.legado.app.data.entities.BookChapter |
||||
import io.legado.app.help.coroutine.CompositeCoroutine |
||||
import io.legado.app.model.WebBook |
||||
import io.legado.app.utils.htmlFormat |
||||
import io.legado.app.utils.isAbsUrl |
||||
import java.text.SimpleDateFormat |
||||
import java.util.* |
||||
|
||||
class SourceDebug(private val webBook: WebBook, callback: Callback) { |
||||
|
||||
companion object { |
||||
private var debugSource: String? = null |
||||
private var callback: Callback? = null |
||||
private val tasks: CompositeCoroutine = CompositeCoroutine() |
||||
|
||||
@SuppressLint("ConstantLocale") |
||||
private val DEBUG_TIME_FORMAT = SimpleDateFormat("[mm:ss.SSS]", Locale.getDefault()) |
||||
private var startTime: Long = System.currentTimeMillis() |
||||
|
||||
@Synchronized |
||||
fun printLog( |
||||
sourceUrl: String?, |
||||
msg: String?, |
||||
print: Boolean = true, |
||||
isHtml: Boolean = false, |
||||
showTime: Boolean = true, |
||||
state: Int = 1 |
||||
) { |
||||
if (debugSource != sourceUrl || callback == null || !print) return |
||||
var printMsg = msg ?: "" |
||||
if (isHtml) { |
||||
printMsg = printMsg.htmlFormat() |
||||
} |
||||
if (showTime) { |
||||
printMsg = |
||||
"${DEBUG_TIME_FORMAT.format(Date(System.currentTimeMillis() - startTime))} $printMsg" |
||||
} |
||||
callback?.printLog(state, printMsg) |
||||
} |
||||
|
||||
fun cancelDebug(destroy: Boolean = false) { |
||||
tasks.clear() |
||||
|
||||
if (destroy) { |
||||
debugSource = null |
||||
callback = null |
||||
} |
||||
} |
||||
|
||||
} |
||||
|
||||
init { |
||||
debugSource = webBook.sourceUrl |
||||
SourceDebug.callback = callback |
||||
} |
||||
|
||||
fun startDebug(key: String) { |
||||
cancelDebug() |
||||
startTime = System.currentTimeMillis() |
||||
when { |
||||
key.isAbsUrl() -> { |
||||
val book = Book() |
||||
book.origin = webBook.sourceUrl |
||||
book.bookUrl = key |
||||
printLog(webBook.sourceUrl, "⇒开始访问详情页:$key") |
||||
infoDebug(book) |
||||
} |
||||
key.contains("::") -> { |
||||
val url = key.substring(key.indexOf("::") + 2) |
||||
printLog(webBook.sourceUrl, "⇒开始访问发现页:$url") |
||||
exploreDebug(url) |
||||
} |
||||
else -> { |
||||
printLog(webBook.sourceUrl, "⇒开始搜索关键字:$key") |
||||
searchDebug(key) |
||||
} |
||||
} |
||||
} |
||||
|
||||
private fun exploreDebug(url: String) { |
||||
printLog(debugSource, "︾开始解析发现页") |
||||
val explore = webBook.exploreBook(url, 1) |
||||
.onSuccess { exploreBooks -> |
||||
exploreBooks?.let { |
||||
if (exploreBooks.isNotEmpty()) { |
||||
printLog(debugSource, "︽发现页解析完成") |
||||
printLog(debugSource, "", showTime = false) |
||||
infoDebug(exploreBooks[0].toBook()) |
||||
} else { |
||||
printLog(debugSource, "︽未获取到书籍", state = -1) |
||||
} |
||||
} |
||||
} |
||||
.onError { |
||||
printLog(debugSource, it.localizedMessage, state = -1) |
||||
} |
||||
tasks.add(explore) |
||||
} |
||||
|
||||
private fun searchDebug(key: String) { |
||||
printLog(debugSource, "︾开始解析搜索页") |
||||
val search = webBook.searchBook(key, 1) |
||||
.onSuccess { searchBooks -> |
||||
searchBooks?.let { |
||||
if (searchBooks.isNotEmpty()) { |
||||
printLog(debugSource, "︽搜索页解析完成") |
||||
printLog(debugSource, "", showTime = false) |
||||
infoDebug(searchBooks[0].toBook()) |
||||
} else { |
||||
printLog(debugSource, "︽未获取到书籍", state = -1) |
||||
} |
||||
} |
||||
} |
||||
.onError { |
||||
printLog(debugSource, it.localizedMessage, state = -1) |
||||
} |
||||
tasks.add(search) |
||||
} |
||||
|
||||
private fun infoDebug(book: Book) { |
||||
printLog(debugSource, "︾开始解析详情页") |
||||
val info = webBook.getBookInfo(book) |
||||
.onSuccess { |
||||
printLog(debugSource, "︽详情页解析完成") |
||||
printLog(debugSource, "", showTime = false) |
||||
tocDebug(book) |
||||
} |
||||
.onError { |
||||
printLog(debugSource, it.localizedMessage, state = -1) |
||||
} |
||||
tasks.add(info) |
||||
} |
||||
|
||||
private fun tocDebug(book: Book) { |
||||
printLog(debugSource, "︾开始解析目录页") |
||||
val chapterList = webBook.getChapterList(book) |
||||
.onSuccess { chapterList -> |
||||
chapterList?.let { |
||||
if (it.isNotEmpty()) { |
||||
printLog(debugSource, "︽目录页解析完成") |
||||
printLog(debugSource, "", showTime = false) |
||||
val nextChapterUrl = if (it.size > 1) it[1].url else null |
||||
contentDebug(book, it[0], nextChapterUrl) |
||||
} else { |
||||
printLog(debugSource, "︽目录列表为空", state = -1) |
||||
} |
||||
} |
||||
} |
||||
.onError { |
||||
printLog(debugSource, it.localizedMessage, state = -1) |
||||
} |
||||
tasks.add(chapterList) |
||||
} |
||||
|
||||
private fun contentDebug(book: Book, bookChapter: BookChapter, nextChapterUrl: String?) { |
||||
printLog(debugSource, "︾开始解析正文页") |
||||
val content = webBook.getContent(book, bookChapter, nextChapterUrl) |
||||
.onSuccess { |
||||
printLog(debugSource, "︽正文页解析完成", state = 1000) |
||||
} |
||||
.onError { |
||||
printLog(debugSource, it.localizedMessage, state = -1) |
||||
} |
||||
tasks.add(content) |
||||
} |
||||
|
||||
interface Callback { |
||||
fun printLog(state: Int, msg: String) |
||||
} |
||||
|
||||
} |
Loading…
Reference in new issue