优化代码

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
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.model.rss.Rss
import io.legado.app.model.webBook.WebBook
@ -142,8 +145,7 @@ object Debug {
private fun exploreDebug(webBook: WebBook, url: String) {
log(debugSource, "︾开始解析发现页")
val variableBook = SearchBook()
val explore = webBook.exploreBook(url, 1, variableBook)
val explore = webBook.exploreBook(url, 1)
.onSuccess { exploreBooks ->
if (exploreBooks.isNotEmpty()) {
log(debugSource, "︽发现页解析完成")
@ -161,8 +163,7 @@ object Debug {
private fun searchDebug(webBook: WebBook, key: String) {
log(debugSource, "︾开始解析搜索页")
val variableBook = SearchBook()
val search = webBook.searchBook(key, 1, variableBook)
val search = webBook.searchBook(key, 1)
.onSuccess { searchBooks ->
if (searchBooks.isNotEmpty()) {
log(debugSource, "︽搜索页解析完成")

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

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

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

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

@ -21,7 +21,6 @@ class SearchBookModel(private val scope: CoroutineScope, private val callBack: C
private var searchKey: String = ""
private var tasks = CompositeCoroutine()
private var bookSourceList = arrayListOf<BookSource>()
private val variableBookMap = hashMapOf<String, SearchBook>()
@Volatile
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) {
synchronized(this) {
if (searchIndex >= bookSourceList.lastIndex) {
@ -77,11 +67,9 @@ class SearchBookModel(private val scope: CoroutineScope, private val callBack: C
}
searchIndex++
val source = bookSourceList[searchIndex]
val variableBook = getVariableBook(source.bookSourceUrl)
val task = WebBook(source).searchBook(
searchKey,
searchPage,
variableBook,
scope = scope,
context = searchPool!!
).timeout(30000L)

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

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

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

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

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

@ -16,7 +16,6 @@ class ExploreShowViewModel(application: Application) : BaseViewModel(application
val booksData = MutableLiveData<List<SearchBook>>()
val errorLiveData = MutableLiveData<String>()
private var bookSource: BookSource? = null
private val variableBook = SearchBook()
private var exploreUrl: String? = null
private var page = 1
@ -35,7 +34,7 @@ class ExploreShowViewModel(application: Application) : BaseViewModel(application
val source = bookSource
val url = exploreUrl
if (source != null && url != null) {
WebBook(source).exploreBook(url, page, variableBook, this)
WebBook(source).exploreBook(url, page, this)
.timeout(30000L)
.onSuccess(IO) { 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.BookChapter
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.BookHelp
import io.legado.app.help.IntentDataHelp
@ -216,9 +215,8 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) {
execute {
App.db.bookSourceDao.allTextEnabled.forEach { source ->
try {
val variableBook = SearchBook()
WebBook(source)
.searchBookSuspend(this, name, variableBook = variableBook)
.searchBookSuspend(this, name)
.getOrNull(0)?.let {
if (it.name == name && (it.author == author || author == "")) {
val book = it.toBook()

Loading…
Cancel
Save