pull/2578/head
kunfei 3 years ago
parent 83385e1491
commit 72b3689a94
  1. 8
      app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt
  2. 54
      app/src/main/java/io/legado/app/ui/association/AddToBookshelfDialog.kt

@ -661,6 +661,14 @@ class AnalyzeUrl(
return charset return charset
} }
fun setOrigin(value: String?) {
origin = if (value.isNullOrBlank()) null else value
}
fun getOrigin(): String? {
return origin
}
fun setRetry(value: String?) { fun setRetry(value: String?) {
retry = if (value.isNullOrEmpty()) null else value.toIntOrNull() retry = if (value.isNullOrEmpty()) null else value.toIntOrNull()
} }

@ -14,8 +14,10 @@ import io.legado.app.base.BaseViewModel
import io.legado.app.constant.AppLog import io.legado.app.constant.AppLog
import io.legado.app.data.appDb import io.legado.app.data.appDb
import io.legado.app.data.entities.Book import io.legado.app.data.entities.Book
import io.legado.app.data.entities.BookSource
import io.legado.app.databinding.DialogAddToBookshelfBinding import io.legado.app.databinding.DialogAddToBookshelfBinding
import io.legado.app.exception.NoStackTraceException import io.legado.app.exception.NoStackTraceException
import io.legado.app.model.analyzeRule.AnalyzeUrl
import io.legado.app.model.webBook.WebBook import io.legado.app.model.webBook.WebBook
import io.legado.app.ui.book.read.ReadBookActivity import io.legado.app.ui.book.read.ReadBookActivity
import io.legado.app.utils.* import io.legado.app.utils.*
@ -102,31 +104,38 @@ class AddToBookshelfDialog() : BaseDialogFragment(R.layout.dialog_add_to_bookshe
fun load(bookUrl: String, success: (book: Book) -> Unit) { fun load(bookUrl: String, success: (book: Book) -> Unit) {
execute { execute {
val sources = appDb.bookSourceDao.hasBookUrlPattern
appDb.bookDao.getBook(bookUrl)?.let { appDb.bookDao.getBook(bookUrl)?.let {
throw NoStackTraceException("${it.name} 已在书架") throw NoStackTraceException("${it.name} 已在书架")
} }
val baseUrl = NetworkUtils.getBaseUrl(bookUrl) val baseUrl = NetworkUtils.getBaseUrl(bookUrl)
?: throw NoStackTraceException("书籍地址格式不对") ?: throw NoStackTraceException("书籍地址格式不对")
var source = appDb.bookSourceDao.getBookSource(baseUrl) val urlMatcher = AnalyzeUrl.paramPattern.matcher(bookUrl)
if (source == null) { if (urlMatcher.find()) {
sources.forEach { bookSource -> val origin = GSON.fromJsonObject<AnalyzeUrl.UrlOption>(
if (bookUrl.matches(bookSource.bookUrlPattern!!.toRegex())) { bookUrl.substring(urlMatcher.end())
source = bookSource ).getOrNull()?.getOrigin()
return@forEach origin?.let {
val source = appDb.bookSourceDao.getBookSource(it)
source?.let {
getBookInfo(bookUrl, source)?.let { book ->
return@execute book
}
} }
} }
} }
source?.let { bookSource -> appDb.bookSourceDao.getBookSource(baseUrl)?.let { source ->
val book = Book( getBookInfo(bookUrl, source)?.let { book ->
bookUrl = bookUrl, return@execute book
origin = bookSource.bookSourceUrl, }
originName = bookSource.bookSourceName }
) appDb.bookSourceDao.hasBookUrlPattern.forEach { source ->
WebBook.getBookInfoAwait(bookSource, book) if (bookUrl.matches(source.bookUrlPattern!!.toRegex())) {
book.order = appDb.bookDao.minOrder - 1 getBookInfo(bookUrl, source)?.let { book ->
return@execute book return@execute book
} ?: throw NoStackTraceException("未找到匹配书源") }
}
}
throw NoStackTraceException("未找到匹配书源")
}.onError { }.onError {
AppLog.put("添加书籍 ${bookUrl} 出错", it) AppLog.put("添加书籍 ${bookUrl} 出错", it)
loadErrorLiveData.postValue(it.localizedMessage) loadErrorLiveData.postValue(it.localizedMessage)
@ -140,6 +149,17 @@ class AddToBookshelfDialog() : BaseDialogFragment(R.layout.dialog_add_to_bookshe
} }
} }
private suspend fun getBookInfo(bookUrl: String, source: BookSource): Book? {
return kotlin.runCatching {
val book = Book(
bookUrl = bookUrl,
origin = source.bookSourceUrl,
originName = source.bookSourceName
)
WebBook.getBookInfoAwait(source, book)
}.getOrNull()
}
fun saveBook(success: (book: Book?) -> Unit) { fun saveBook(success: (book: Book?) -> Unit) {
execute { execute {
book?.save() book?.save()

Loading…
Cancel
Save