优化代码

pull/754/head
gedoor 5 years ago
parent 39a25c8be7
commit 83667fe69e
  1. 11
      app/src/main/java/io/legado/app/model/Debug.kt
  2. 6
      app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt
  3. 1
      app/src/main/java/io/legado/app/model/webBook/BookChapterList.kt
  4. 2
      app/src/main/java/io/legado/app/model/webBook/BookContent.kt
  5. 1
      app/src/main/java/io/legado/app/model/webBook/BookInfo.kt
  6. 12
      app/src/main/java/io/legado/app/model/webBook/SearchBookModel.kt
  7. 8
      app/src/main/java/io/legado/app/model/webBook/WebBook.kt
  8. 4
      app/src/main/java/io/legado/app/service/help/CheckSource.kt
  9. 3
      app/src/main/java/io/legado/app/ui/book/changecover/ChangeCoverViewModel.kt
  10. 3
      app/src/main/java/io/legado/app/ui/book/changesource/ChangeSourceViewModel.kt
  11. 9
      app/src/main/java/io/legado/app/ui/book/explore/ExploreShowActivity.kt
  12. 3
      app/src/main/java/io/legado/app/ui/book/explore/ExploreShowViewModel.kt
  13. 4
      app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt

@ -1,7 +1,10 @@
package io.legado.app.model package io.legado.app.model
import android.annotation.SuppressLint import android.annotation.SuppressLint
import io.legado.app.data.entities.* import io.legado.app.data.entities.Book
import io.legado.app.data.entities.BookChapter
import io.legado.app.data.entities.RssArticle
import io.legado.app.data.entities.RssSource
import io.legado.app.help.coroutine.CompositeCoroutine import io.legado.app.help.coroutine.CompositeCoroutine
import io.legado.app.model.rss.Rss import io.legado.app.model.rss.Rss
import io.legado.app.model.webBook.WebBook import io.legado.app.model.webBook.WebBook
@ -142,8 +145,7 @@ object Debug {
private fun exploreDebug(webBook: WebBook, url: String) { private fun exploreDebug(webBook: WebBook, url: String) {
log(debugSource, "︾开始解析发现页") log(debugSource, "︾开始解析发现页")
val variableBook = SearchBook() val explore = webBook.exploreBook(url, 1)
val explore = webBook.exploreBook(url, 1, variableBook)
.onSuccess { exploreBooks -> .onSuccess { exploreBooks ->
if (exploreBooks.isNotEmpty()) { if (exploreBooks.isNotEmpty()) {
log(debugSource, "︽发现页解析完成") log(debugSource, "︽发现页解析完成")
@ -161,8 +163,7 @@ object Debug {
private fun searchDebug(webBook: WebBook, key: String) { private fun searchDebug(webBook: WebBook, key: String) {
log(debugSource, "︾开始解析搜索页") log(debugSource, "︾开始解析搜索页")
val variableBook = SearchBook() val search = webBook.searchBook(key, 1)
val search = webBook.searchBook(key, 1, variableBook)
.onSuccess { searchBooks -> .onSuccess { searchBooks ->
if (searchBooks.isNotEmpty()) { if (searchBooks.isNotEmpty()) {
log(debugSource, "︽搜索页解析完成") log(debugSource, "︽搜索页解析完成")

@ -41,6 +41,12 @@ class AnalyzeRule(val ruleData: RuleDataInterface) : JsExtensions {
private var objectChangedJS = false private var objectChangedJS = false
private var objectChangedJP = false private var objectChangedJP = false
init {
if (ruleData is BaseBook) {
book = ruleData
}
}
@JvmOverloads @JvmOverloads
fun setContent(content: Any?, baseUrl: String? = null): AnalyzeRule { fun setContent(content: Any?, baseUrl: String? = null): AnalyzeRule {
if (content == null) throw AssertionError("Content cannot be null") if (content == null) throw AssertionError("Content cannot be null")

@ -211,7 +211,6 @@ object BookChapterList {
): ChapterData<List<String>> { ): ChapterData<List<String>> {
val analyzeRule = AnalyzeRule(book) val analyzeRule = AnalyzeRule(book)
analyzeRule.setContent(body).setBaseUrl(baseUrl) analyzeRule.setContent(body).setBaseUrl(baseUrl)
analyzeRule.book = book
val chapterList = arrayListOf<BookChapter>() val chapterList = arrayListOf<BookChapter>()
val nextUrlList = arrayListOf<String>() val nextUrlList = arrayListOf<String>()
val nextTocRule = tocRule.nextTocUrl val nextTocRule = tocRule.nextTocUrl

@ -35,7 +35,6 @@ object BookContent {
val nextUrlList = arrayListOf(baseUrl) val nextUrlList = arrayListOf(baseUrl)
val contentRule = bookSource.getContentRule() val contentRule = bookSource.getContentRule()
val analyzeRule = AnalyzeRule(book).setContent(body, baseUrl) val analyzeRule = AnalyzeRule(book).setContent(body, baseUrl)
analyzeRule.book = book
var contentData = analyzeContent( var contentData = analyzeContent(
book, baseUrl, body, contentRule, bookChapter, bookSource book, baseUrl, body, contentRule, bookChapter, bookSource
) )
@ -119,7 +118,6 @@ object BookContent {
): ContentData<List<String>> { ): ContentData<List<String>> {
val analyzeRule = AnalyzeRule(book) val analyzeRule = AnalyzeRule(book)
analyzeRule.setContent(body).setBaseUrl(baseUrl) analyzeRule.setContent(body).setBaseUrl(baseUrl)
analyzeRule.book = book
val nextUrlList = arrayListOf<String>() val nextUrlList = arrayListOf<String>()
analyzeRule.chapter = chapter analyzeRule.chapter = chapter
val nextUrlRule = contentRule.nextContentUrl val nextUrlRule = contentRule.nextContentUrl

@ -27,7 +27,6 @@ object BookInfo {
Debug.log(bookSource.bookSourceUrl, "≡获取成功:${baseUrl}") Debug.log(bookSource.bookSourceUrl, "≡获取成功:${baseUrl}")
val infoRule = bookSource.getBookInfoRule() val infoRule = bookSource.getBookInfoRule()
val analyzeRule = AnalyzeRule(book) val analyzeRule = AnalyzeRule(book)
analyzeRule.book = book
analyzeRule.setContent(body).setBaseUrl(baseUrl) analyzeRule.setContent(body).setBaseUrl(baseUrl)
infoRule.init?.let { infoRule.init?.let {
if (it.isNotBlank()) { if (it.isNotBlank()) {

@ -21,7 +21,6 @@ class SearchBookModel(private val scope: CoroutineScope, private val callBack: C
private var searchKey: String = "" private var searchKey: String = ""
private var tasks = CompositeCoroutine() private var tasks = CompositeCoroutine()
private var bookSourceList = arrayListOf<BookSource>() private var bookSourceList = arrayListOf<BookSource>()
private val variableBookMap = hashMapOf<String, SearchBook>()
@Volatile @Volatile
private var searchIndex = -1 private var searchIndex = -1
@ -61,15 +60,6 @@ class SearchBookModel(private val scope: CoroutineScope, private val callBack: C
} }
} }
private fun getVariableBook(sourceUrl: String): SearchBook {
var vBook = variableBookMap[sourceUrl]
if (vBook == null) {
vBook = SearchBook()
variableBookMap[sourceUrl] = vBook
}
return vBook
}
private fun search(searchId: Long) { private fun search(searchId: Long) {
synchronized(this) { synchronized(this) {
if (searchIndex >= bookSourceList.lastIndex) { if (searchIndex >= bookSourceList.lastIndex) {
@ -77,11 +67,9 @@ class SearchBookModel(private val scope: CoroutineScope, private val callBack: C
} }
searchIndex++ searchIndex++
val source = bookSourceList[searchIndex] val source = bookSourceList[searchIndex]
val variableBook = getVariableBook(source.bookSourceUrl)
val task = WebBook(source).searchBook( val task = WebBook(source).searchBook(
searchKey, searchKey,
searchPage, searchPage,
variableBook,
scope = scope, scope = scope,
context = searchPool!! context = searchPool!!
).timeout(30000L) ).timeout(30000L)

@ -22,12 +22,11 @@ class WebBook(val bookSource: BookSource) {
fun searchBook( fun searchBook(
key: String, key: String,
page: Int? = 1, page: Int? = 1,
variableBook: SearchBook,
scope: CoroutineScope = Coroutine.DEFAULT, scope: CoroutineScope = Coroutine.DEFAULT,
context: CoroutineContext = Dispatchers.IO, context: CoroutineContext = Dispatchers.IO,
): Coroutine<ArrayList<SearchBook>> { ): Coroutine<ArrayList<SearchBook>> {
return Coroutine.async(scope, context) { return Coroutine.async(scope, context) {
searchBookSuspend(scope, key, page, variableBook) searchBookSuspend(scope, key, page)
} }
} }
@ -35,8 +34,8 @@ class WebBook(val bookSource: BookSource) {
scope: CoroutineScope, scope: CoroutineScope,
key: String, key: String,
page: Int? = 1, page: Int? = 1,
variableBook: SearchBook,
): ArrayList<SearchBook> { ): ArrayList<SearchBook> {
val variableBook = SearchBook()
bookSource.searchUrl?.let { searchUrl -> bookSource.searchUrl?.let { searchUrl ->
val analyzeUrl = AnalyzeUrl( val analyzeUrl = AnalyzeUrl(
ruleUrl = searchUrl, ruleUrl = searchUrl,
@ -66,15 +65,16 @@ class WebBook(val bookSource: BookSource) {
fun exploreBook( fun exploreBook(
url: String, url: String,
page: Int? = 1, page: Int? = 1,
variableBook: SearchBook,
scope: CoroutineScope = Coroutine.DEFAULT, scope: CoroutineScope = Coroutine.DEFAULT,
context: CoroutineContext = Dispatchers.IO, context: CoroutineContext = Dispatchers.IO,
): Coroutine<List<SearchBook>> { ): Coroutine<List<SearchBook>> {
val variableBook = SearchBook()
return Coroutine.async(scope, context) { return Coroutine.async(scope, context) {
val analyzeUrl = AnalyzeUrl( val analyzeUrl = AnalyzeUrl(
ruleUrl = url, ruleUrl = url,
page = page, page = page,
baseUrl = sourceUrl, baseUrl = sourceUrl,
book = variableBook,
headerMapF = bookSource.getHeaderMap() headerMapF = bookSource.getHeaderMap()
) )
val res = analyzeUrl.getStrResponse(bookSource.bookSourceUrl) val res = analyzeUrl.getStrResponse(bookSource.bookSourceUrl)

@ -6,7 +6,6 @@ import io.legado.app.App
import io.legado.app.R import io.legado.app.R
import io.legado.app.constant.IntentAction import io.legado.app.constant.IntentAction
import io.legado.app.data.entities.BookSource import io.legado.app.data.entities.BookSource
import io.legado.app.data.entities.SearchBook
import io.legado.app.help.coroutine.Coroutine import io.legado.app.help.coroutine.Coroutine
import io.legado.app.model.webBook.WebBook import io.legado.app.model.webBook.WebBook
import io.legado.app.service.CheckSourceService import io.legado.app.service.CheckSourceService
@ -50,9 +49,8 @@ class CheckSource(val source: BookSource) {
onNext: (sourceUrl: String) -> Unit onNext: (sourceUrl: String) -> Unit
): Coroutine<*> { ): Coroutine<*> {
val webBook = WebBook(source) val webBook = WebBook(source)
val variableBook = SearchBook(origin = source.bookSourceUrl)
return webBook return webBook
.searchBook(keyword, scope = scope, context = context, variableBook = variableBook) .searchBook(keyword, scope = scope, context = context)
.timeout(60000L) .timeout(60000L)
.onError(Dispatchers.IO) { .onError(Dispatchers.IO) {
source.addGroup("失效") source.addGroup("失效")

@ -97,9 +97,8 @@ class ChangeCoverViewModel(application: Application) : BaseViewModel(application
} }
searchIndex++ searchIndex++
val source = bookSourceList[searchIndex] val source = bookSourceList[searchIndex]
val variableBook = SearchBook(origin = source.bookSourceUrl)
val task = WebBook(source) val task = WebBook(source)
.searchBook(name, scope = this, context = searchPool!!, variableBook = variableBook) .searchBook(name, scope = this, context = searchPool!!)
.timeout(60000L) .timeout(60000L)
.onSuccess(Dispatchers.IO) { .onSuccess(Dispatchers.IO) {
if (it.isNotEmpty()) { if (it.isNotEmpty()) {

@ -121,10 +121,9 @@ class ChangeSourceViewModel(application: Application) : BaseViewModel(applicatio
searchIndex++ searchIndex++
} }
val source = bookSourceList[searchIndex] val source = bookSourceList[searchIndex]
val variableBook = SearchBook()
val webBook = WebBook(source) val webBook = WebBook(source)
val task = webBook val task = webBook
.searchBook(name, variableBook = variableBook, scope = this, context = searchPool!!) .searchBook(name, scope = this, context = searchPool!!)
.timeout(60000L) .timeout(60000L)
.onSuccess(IO) { .onSuccess(IO) {
it.forEach { searchBook -> it.forEach { searchBook ->

@ -30,8 +30,11 @@ class ExploreShowActivity : VMBaseActivity<ActivityExploreShowBinding, ExploreSh
override fun onActivityCreated(savedInstanceState: Bundle?) { override fun onActivityCreated(savedInstanceState: Bundle?) {
binding.titleBar.title = intent.getStringExtra("exploreName") binding.titleBar.title = intent.getStringExtra("exploreName")
initRecyclerView() initRecyclerView()
viewModel.booksData.observe(this, { upData(it) }) viewModel.booksData.observe(this) { upData(it) }
viewModel.initData(intent) viewModel.initData(intent)
viewModel.errorLiveData.observe(this) {
loadMoreView.error(it)
}
} }
private fun initRecyclerView() { private fun initRecyclerView() {
@ -74,7 +77,9 @@ class ExploreShowActivity : VMBaseActivity<ActivityExploreShowBinding, ExploreSh
loadMoreView.noMore(getString(R.string.empty)) loadMoreView.noMore(getString(R.string.empty))
} else if (books.isEmpty()) { } else if (books.isEmpty()) {
loadMoreView.noMore() loadMoreView.noMore()
} else if (adapter.getItems().contains(books.first()) && adapter.getItems().contains(books.last())) { } else if (adapter.getItems().contains(books.first()) && adapter.getItems()
.contains(books.last())
) {
loadMoreView.noMore() loadMoreView.noMore()
} else { } else {
adapter.addItems(books) adapter.addItems(books)

@ -16,7 +16,6 @@ class ExploreShowViewModel(application: Application) : BaseViewModel(application
val booksData = MutableLiveData<List<SearchBook>>() val booksData = MutableLiveData<List<SearchBook>>()
val errorLiveData = MutableLiveData<String>() val errorLiveData = MutableLiveData<String>()
private var bookSource: BookSource? = null private var bookSource: BookSource? = null
private val variableBook = SearchBook()
private var exploreUrl: String? = null private var exploreUrl: String? = null
private var page = 1 private var page = 1
@ -35,7 +34,7 @@ class ExploreShowViewModel(application: Application) : BaseViewModel(application
val source = bookSource val source = bookSource
val url = exploreUrl val url = exploreUrl
if (source != null && url != null) { if (source != null && url != null) {
WebBook(source).exploreBook(url, page, variableBook, this) WebBook(source).exploreBook(url, page, this)
.timeout(30000L) .timeout(30000L)
.onSuccess(IO) { searchBooks -> .onSuccess(IO) { searchBooks ->
booksData.postValue(searchBooks) booksData.postValue(searchBooks)

@ -8,7 +8,6 @@ import io.legado.app.base.BaseViewModel
import io.legado.app.data.entities.Book import io.legado.app.data.entities.Book
import io.legado.app.data.entities.BookChapter import io.legado.app.data.entities.BookChapter
import io.legado.app.data.entities.BookProgress import io.legado.app.data.entities.BookProgress
import io.legado.app.data.entities.SearchBook
import io.legado.app.help.AppConfig import io.legado.app.help.AppConfig
import io.legado.app.help.BookHelp import io.legado.app.help.BookHelp
import io.legado.app.help.IntentDataHelp import io.legado.app.help.IntentDataHelp
@ -216,9 +215,8 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) {
execute { execute {
App.db.bookSourceDao.allTextEnabled.forEach { source -> App.db.bookSourceDao.allTextEnabled.forEach { source ->
try { try {
val variableBook = SearchBook()
WebBook(source) WebBook(source)
.searchBookSuspend(this, name, variableBook = variableBook) .searchBookSuspend(this, name)
.getOrNull(0)?.let { .getOrNull(0)?.let {
if (it.name == name && (it.author == author || author == "")) { if (it.name == name && (it.author == author || author == "")) {
val book = it.toBook() val book = it.toBook()

Loading…
Cancel
Save