From 2842239757eade51564f61d54499797fc63f1aa5 Mon Sep 17 00:00:00 2001 From: Horis <8674809+821938089@users.noreply.github.com> Date: Mon, 20 Jan 2025 18:32:59 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../legado/app/model/webBook/SearchModel.kt | 6 +++-- .../app/ui/book/search/SearchActivity.kt | 22 +++++-------------- .../app/ui/book/search/SearchViewModel.kt | 5 ++++- .../app/ui/widget/text/MultilineTextView.kt | 7 ++++++ .../app/web/socket/BookSearchWebSocket.kt | 2 +- 5 files changed, 21 insertions(+), 21 deletions(-) diff --git a/app/src/main/java/io/legado/app/model/webBook/SearchModel.kt b/app/src/main/java/io/legado/app/model/webBook/SearchModel.kt index 6d66e30cb231..50dd8318682d 100644 --- a/app/src/main/java/io/legado/app/model/webBook/SearchModel.kt +++ b/app/src/main/java/io/legado/app/model/webBook/SearchModel.kt @@ -73,6 +73,7 @@ class SearchModel(private val scope: CoroutineScope, private val callBack: CallB private fun startSearch() { val precision = appCtx.getPrefBoolean(PreferKey.precisionSearch) + var hasMore = false searchJob = scope.launch(searchPool!!) { flow { for (bs in bookSourceParts) { @@ -90,12 +91,13 @@ class SearchModel(private val scope: CoroutineScope, private val callBack: CallB for (book in items) { book.releaseHtmlData() } + hasMore = hasMore || items.isNotEmpty() appDb.searchBookDao.insert(*items.toTypedArray()) mergeItems(items, precision) currentCoroutineContext().ensureActive() callBack.onSearchSuccess(searchBooks) }.onCompletion { - if (it == null) callBack.onSearchFinish(searchBooks.isEmpty()) + if (it == null) callBack.onSearchFinish(searchBooks.isEmpty(), hasMore) }.catch { AppLog.put("书源搜索出错\n${it.localizedMessage}", it) }.collect() @@ -185,7 +187,7 @@ class SearchModel(private val scope: CoroutineScope, private val callBack: CallB fun getSearchScope(): SearchScope fun onSearchStart() fun onSearchSuccess(searchBooks: List) - fun onSearchFinish(isEmpty: Boolean) + fun onSearchFinish(isEmpty: Boolean, hasMore: Boolean) fun onSearchCancel(exception: Throwable? = null) } diff --git a/app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt b/app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt index 006ba064e51a..b29c869e8a66 100644 --- a/app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt @@ -54,7 +54,6 @@ import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import splitties.init.appCtx -import kotlin.math.abs class SearchActivity : VMBaseActivity(), BookAdapter.CallBack, @@ -240,20 +239,7 @@ class SearchActivity : VMBaseActivity() var isSearchLiveData = MutableLiveData() var searchKey: String = "" + var hasMore = true private var searchID = 0L private val searchModel = SearchModel(viewModelScope, object : SearchModel.CallBack { @@ -45,9 +46,10 @@ class SearchViewModel(application: Application) : BaseViewModel(application) { searchBookLiveData.postValue(searchBooks) } - override fun onSearchFinish(isEmpty: Boolean) { + override fun onSearchFinish(isEmpty: Boolean, hasMore: Boolean) { isSearchLiveData.postValue(false) searchFinishLiveData.postValue(isEmpty) + this@SearchViewModel.hasMore = hasMore } override fun onSearchCancel(exception: Throwable?) { @@ -99,6 +101,7 @@ class SearchViewModel(application: Application) : BaseViewModel(application) { searchID = System.currentTimeMillis() searchBookLiveData.postValue(emptyList()) searchKey = key + hasMore = true } if (searchKey.isEmpty()) { return@execute diff --git a/app/src/main/java/io/legado/app/ui/widget/text/MultilineTextView.kt b/app/src/main/java/io/legado/app/ui/widget/text/MultilineTextView.kt index 622279292120..acaa6aa0ab1d 100644 --- a/app/src/main/java/io/legado/app/ui/widget/text/MultilineTextView.kt +++ b/app/src/main/java/io/legado/app/ui/widget/text/MultilineTextView.kt @@ -1,12 +1,19 @@ package io.legado.app.ui.widget.text import android.content.Context +import android.os.Build import android.util.AttributeSet import androidx.appcompat.widget.AppCompatTextView class MultilineTextView(context: Context, attrs: AttributeSet?) : AppCompatTextView(context, attrs) { + init { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + isFallbackLineSpacing = false + } + } + override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { val heightSize = MeasureSpec.getSize(heightMeasureSpec) calculateLines(heightSize) diff --git a/app/src/main/java/io/legado/app/web/socket/BookSearchWebSocket.kt b/app/src/main/java/io/legado/app/web/socket/BookSearchWebSocket.kt index b1ed3f907328..c6917e4107fd 100644 --- a/app/src/main/java/io/legado/app/web/socket/BookSearchWebSocket.kt +++ b/app/src/main/java/io/legado/app/web/socket/BookSearchWebSocket.kt @@ -90,7 +90,7 @@ class BookSearchWebSocket(handshakeRequest: NanoHTTPD.IHTTPSession) : send(GSON.toJson(searchBooks)) } - override fun onSearchFinish(isEmpty: Boolean) = close(normalClosure, SEARCH_FINISH, false) + override fun onSearchFinish(isEmpty: Boolean, hasMore: Boolean) = close(normalClosure, SEARCH_FINISH, false) override fun onSearchCancel(exception: Throwable?) = close(normalClosure, exception?.toString() ?: SEARCH_FINISH, false)