mirror of
https://github.com/gedoor/legado.git
synced 2024-07-02 23:17:32 +08:00
优化
This commit is contained in:
parent
b0f76445f8
commit
636c369351
|
@ -7,7 +7,6 @@ import android.view.MenuItem
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.activity.viewModels
|
import androidx.activity.viewModels
|
||||||
import androidx.appcompat.app.AlertDialog
|
import androidx.appcompat.app.AlertDialog
|
||||||
import androidx.lifecycle.flowWithLifecycle
|
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import com.google.android.material.textfield.TextInputLayout
|
import com.google.android.material.textfield.TextInputLayout
|
||||||
|
@ -17,6 +16,7 @@ import io.legado.app.constant.AppConst.charsets
|
||||||
import io.legado.app.constant.AppLog
|
import io.legado.app.constant.AppLog
|
||||||
import io.legado.app.constant.EventBus
|
import io.legado.app.constant.EventBus
|
||||||
import io.legado.app.constant.IntentAction
|
import io.legado.app.constant.IntentAction
|
||||||
|
import io.legado.app.data.AppDatabase
|
||||||
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.BookChapter
|
import io.legado.app.data.entities.BookChapter
|
||||||
|
@ -41,6 +41,7 @@ import io.legado.app.utils.applyTint
|
||||||
import io.legado.app.utils.checkWrite
|
import io.legado.app.utils.checkWrite
|
||||||
import io.legado.app.utils.cnCompare
|
import io.legado.app.utils.cnCompare
|
||||||
import io.legado.app.utils.enableCustomExport
|
import io.legado.app.utils.enableCustomExport
|
||||||
|
import io.legado.app.utils.flowWithLifecycleAndDatabaseChange
|
||||||
import io.legado.app.utils.isContentScheme
|
import io.legado.app.utils.isContentScheme
|
||||||
import io.legado.app.utils.observeEvent
|
import io.legado.app.utils.observeEvent
|
||||||
import io.legado.app.utils.parseToUri
|
import io.legado.app.utils.parseToUri
|
||||||
|
@ -221,7 +222,9 @@ class CacheActivity : VMBaseActivity<ActivityCacheBookBinding, CacheViewModel>()
|
||||||
|
|
||||||
else -> booksDownload.sortedByDescending { it.durChapterTime }
|
else -> booksDownload.sortedByDescending { it.durChapterTime }
|
||||||
}
|
}
|
||||||
}.flowWithLifecycle(lifecycle).catch {
|
}.flowWithLifecycleAndDatabaseChange(
|
||||||
|
lifecycle, table = AppDatabase.BOOK_TABLE_NAME
|
||||||
|
).catch {
|
||||||
AppLog.put("缓存管理界面获取书籍列表失败\n${it.localizedMessage}", it)
|
AppLog.put("缓存管理界面获取书籍列表失败\n${it.localizedMessage}", it)
|
||||||
}.flowOn(IO).conflate().collect { books ->
|
}.flowOn(IO).conflate().collect { books ->
|
||||||
adapter.setItems(books)
|
adapter.setItems(books)
|
||||||
|
|
|
@ -5,9 +5,10 @@ import android.view.ViewGroup
|
||||||
import android.widget.ImageView
|
import android.widget.ImageView
|
||||||
import android.widget.ProgressBar
|
import android.widget.ProgressBar
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
|
import androidx.recyclerview.widget.DiffUtil
|
||||||
import io.legado.app.R
|
import io.legado.app.R
|
||||||
|
import io.legado.app.base.adapter.DiffRecyclerAdapter
|
||||||
import io.legado.app.base.adapter.ItemViewHolder
|
import io.legado.app.base.adapter.ItemViewHolder
|
||||||
import io.legado.app.base.adapter.RecyclerAdapter
|
|
||||||
import io.legado.app.data.entities.Book
|
import io.legado.app.data.entities.Book
|
||||||
import io.legado.app.databinding.ItemDownloadBinding
|
import io.legado.app.databinding.ItemDownloadBinding
|
||||||
import io.legado.app.help.book.isLocal
|
import io.legado.app.help.book.isLocal
|
||||||
|
@ -16,7 +17,20 @@ import io.legado.app.utils.gone
|
||||||
import io.legado.app.utils.visible
|
import io.legado.app.utils.visible
|
||||||
|
|
||||||
class CacheAdapter(context: Context, private val callBack: CallBack) :
|
class CacheAdapter(context: Context, private val callBack: CallBack) :
|
||||||
RecyclerAdapter<Book, ItemDownloadBinding>(context) {
|
DiffRecyclerAdapter<Book, ItemDownloadBinding>(context) {
|
||||||
|
|
||||||
|
override val diffItemCallback: DiffUtil.ItemCallback<Book>
|
||||||
|
get() = object : DiffUtil.ItemCallback<Book>() {
|
||||||
|
override fun areItemsTheSame(oldItem: Book, newItem: Book): Boolean {
|
||||||
|
return oldItem.bookUrl == newItem.bookUrl
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun areContentsTheSame(oldItem: Book, newItem: Book): Boolean {
|
||||||
|
return oldItem.name == newItem.name
|
||||||
|
&& oldItem.author == newItem.author
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
override fun getViewBinding(parent: ViewGroup): ItemDownloadBinding {
|
override fun getViewBinding(parent: ViewGroup): ItemDownloadBinding {
|
||||||
return ItemDownloadBinding.inflate(inflater, parent, false)
|
return ItemDownloadBinding.inflate(inflater, parent, false)
|
||||||
|
|
|
@ -16,7 +16,6 @@ import androidx.core.os.bundleOf
|
||||||
import androidx.lifecycle.Lifecycle
|
import androidx.lifecycle.Lifecycle
|
||||||
import androidx.lifecycle.LifecycleOwner
|
import androidx.lifecycle.LifecycleOwner
|
||||||
import androidx.lifecycle.LifecycleRegistry
|
import androidx.lifecycle.LifecycleRegistry
|
||||||
import androidx.lifecycle.flowWithLifecycle
|
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.lifecycle.repeatOnLifecycle
|
import androidx.lifecycle.repeatOnLifecycle
|
||||||
import androidx.recyclerview.widget.ItemTouchHelper
|
import androidx.recyclerview.widget.ItemTouchHelper
|
||||||
|
@ -25,6 +24,7 @@ import io.legado.app.R
|
||||||
import io.legado.app.base.VMBaseActivity
|
import io.legado.app.base.VMBaseActivity
|
||||||
import io.legado.app.constant.AppLog
|
import io.legado.app.constant.AppLog
|
||||||
import io.legado.app.constant.EventBus
|
import io.legado.app.constant.EventBus
|
||||||
|
import io.legado.app.data.AppDatabase
|
||||||
import io.legado.app.data.appDb
|
import io.legado.app.data.appDb
|
||||||
import io.legado.app.data.entities.BookSourcePart
|
import io.legado.app.data.entities.BookSourcePart
|
||||||
import io.legado.app.databinding.ActivityBookSourceBinding
|
import io.legado.app.databinding.ActivityBookSourceBinding
|
||||||
|
@ -52,7 +52,8 @@ import io.legado.app.utils.ACache
|
||||||
import io.legado.app.utils.applyTint
|
import io.legado.app.utils.applyTint
|
||||||
import io.legado.app.utils.cnCompare
|
import io.legado.app.utils.cnCompare
|
||||||
import io.legado.app.utils.dpToPx
|
import io.legado.app.utils.dpToPx
|
||||||
import io.legado.app.utils.flowWithLifecycleFirst
|
import io.legado.app.utils.flowWithLifecycleAndDatabaseChange
|
||||||
|
import io.legado.app.utils.flowWithLifecycleAndDatabaseChangeFirst
|
||||||
import io.legado.app.utils.hideSoftInput
|
import io.legado.app.utils.hideSoftInput
|
||||||
import io.legado.app.utils.isAbsUrl
|
import io.legado.app.utils.isAbsUrl
|
||||||
import io.legado.app.utils.launch
|
import io.legado.app.utils.launch
|
||||||
|
@ -376,7 +377,10 @@ class BookSourceActivity : VMBaseActivity<ActivityBookSourceBinding, BookSourceV
|
||||||
else -> data.reversed()
|
else -> data.reversed()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}.flowWithLifecycle(lifecycle).catch {
|
}.flowWithLifecycleAndDatabaseChange(
|
||||||
|
lifecycle,
|
||||||
|
table = AppDatabase.BOOK_SOURCE_TABLE_NAME
|
||||||
|
).catch {
|
||||||
AppLog.put("书源界面更新书源出错", it)
|
AppLog.put("书源界面更新书源出错", it)
|
||||||
}.flowOn(IO).conflate().collect { data ->
|
}.flowOn(IO).conflate().collect { data ->
|
||||||
adapter.setItems(data, adapter.diffItemCallback, !Debug.isChecking)
|
adapter.setItems(data, adapter.diffItemCallback, !Debug.isChecking)
|
||||||
|
@ -389,8 +393,14 @@ class BookSourceActivity : VMBaseActivity<ActivityBookSourceBinding, BookSourceV
|
||||||
private fun initLiveDataGroup() {
|
private fun initLiveDataGroup() {
|
||||||
lifecycleScope.launch {
|
lifecycleScope.launch {
|
||||||
appDb.bookSourceDao.flowGroups()
|
appDb.bookSourceDao.flowGroups()
|
||||||
.flowWithLifecycle(lifecycle)
|
.flowWithLifecycleAndDatabaseChange(
|
||||||
.flowWithLifecycleFirst(groupMenuLifecycleOwner.lifecycle)
|
lifecycle,
|
||||||
|
table = AppDatabase.BOOK_SOURCE_TABLE_NAME
|
||||||
|
)
|
||||||
|
.flowWithLifecycleAndDatabaseChangeFirst(
|
||||||
|
groupMenuLifecycleOwner.lifecycle,
|
||||||
|
table = AppDatabase.BOOK_SOURCE_TABLE_NAME
|
||||||
|
)
|
||||||
.conflate()
|
.conflate()
|
||||||
.distinctUntilChanged()
|
.distinctUntilChanged()
|
||||||
.collect {
|
.collect {
|
||||||
|
|
|
@ -40,6 +40,7 @@ import kotlinx.coroutines.Job
|
||||||
import kotlinx.coroutines.delay
|
import kotlinx.coroutines.delay
|
||||||
import kotlinx.coroutines.flow.catch
|
import kotlinx.coroutines.flow.catch
|
||||||
import kotlinx.coroutines.flow.conflate
|
import kotlinx.coroutines.flow.conflate
|
||||||
|
import kotlinx.coroutines.flow.distinctUntilChanged
|
||||||
import kotlinx.coroutines.flow.flowOn
|
import kotlinx.coroutines.flow.flowOn
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
|
@ -134,6 +135,7 @@ class ExploreFragment() : VMBaseFragment<ExploreViewModel>(R.layout.fragment_exp
|
||||||
AppDatabase.BOOK_SOURCE_TABLE_NAME
|
AppDatabase.BOOK_SOURCE_TABLE_NAME
|
||||||
)
|
)
|
||||||
.conflate()
|
.conflate()
|
||||||
|
.distinctUntilChanged()
|
||||||
.collect {
|
.collect {
|
||||||
groups.clear()
|
groups.clear()
|
||||||
groups.addAll(it)
|
groups.addAll(it)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user