优化
This commit is contained in:
@@ -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()
|
||||||
|
|||||||
Reference in New Issue
Block a user