优化
This commit is contained in:
@@ -2,6 +2,7 @@ package io.legado.app.data.dao
|
|||||||
|
|
||||||
import androidx.room.*
|
import androidx.room.*
|
||||||
import io.legado.app.constant.BookType
|
import io.legado.app.constant.BookType
|
||||||
|
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.BookGroup
|
import io.legado.app.data.entities.BookGroup
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
@@ -9,6 +10,19 @@ import kotlinx.coroutines.flow.Flow
|
|||||||
@Dao
|
@Dao
|
||||||
interface BookDao {
|
interface BookDao {
|
||||||
|
|
||||||
|
fun flowByGroup(groupId: Long): Flow<List<Book>> {
|
||||||
|
return when (groupId) {
|
||||||
|
BookGroup.IdRoot -> appDb.bookDao.flowRoot()
|
||||||
|
BookGroup.IdAll -> appDb.bookDao.flowAll()
|
||||||
|
BookGroup.IdLocal -> appDb.bookDao.flowLocal()
|
||||||
|
BookGroup.IdAudio -> appDb.bookDao.flowAudio()
|
||||||
|
BookGroup.IdNetNone -> appDb.bookDao.flowNetNoGroup()
|
||||||
|
BookGroup.IdLocalNone -> appDb.bookDao.flowLocalNoGroup()
|
||||||
|
BookGroup.IdError -> appDb.bookDao.flowUpdateError()
|
||||||
|
else -> appDb.bookDao.flowByUserGroup(groupId)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Query(
|
@Query(
|
||||||
"""
|
"""
|
||||||
select * from books where type & ${BookType.text} > 0
|
select * from books where type & ${BookType.text} > 0
|
||||||
@@ -45,7 +59,7 @@ interface BookDao {
|
|||||||
fun flowLocalNoGroup(): Flow<List<Book>>
|
fun flowLocalNoGroup(): Flow<List<Book>>
|
||||||
|
|
||||||
@Query("SELECT * FROM books WHERE (`group` & :group) > 0")
|
@Query("SELECT * FROM books WHERE (`group` & :group) > 0")
|
||||||
fun flowByGroup(group: Long): Flow<List<Book>>
|
fun flowByUserGroup(group: Long): Flow<List<Book>>
|
||||||
|
|
||||||
@Query("SELECT * FROM books WHERE name like '%'||:key||'%' or author like '%'||:key||'%'")
|
@Query("SELECT * FROM books WHERE name like '%'||:key||'%' or author like '%'||:key||'%'")
|
||||||
fun flowSearch(key: String): Flow<List<Book>>
|
fun flowSearch(key: String): Flow<List<Book>>
|
||||||
|
|||||||
@@ -6,9 +6,7 @@ import androidx.room.ColumnInfo
|
|||||||
import androidx.room.Entity
|
import androidx.room.Entity
|
||||||
import androidx.room.PrimaryKey
|
import androidx.room.PrimaryKey
|
||||||
import io.legado.app.R
|
import io.legado.app.R
|
||||||
import io.legado.app.data.appDb
|
|
||||||
import io.legado.app.help.config.AppConfig
|
import io.legado.app.help.config.AppConfig
|
||||||
import kotlinx.coroutines.flow.Flow
|
|
||||||
import kotlinx.parcelize.Parcelize
|
import kotlinx.parcelize.Parcelize
|
||||||
|
|
||||||
@Parcelize
|
@Parcelize
|
||||||
@@ -35,20 +33,6 @@ data class BookGroup(
|
|||||||
const val IdNetNone = -4L
|
const val IdNetNone = -4L
|
||||||
const val IdLocalNone = -5L
|
const val IdLocalNone = -5L
|
||||||
const val IdError = -11L
|
const val IdError = -11L
|
||||||
|
|
||||||
fun flowBook(groupId: Long): Flow<List<Book>> {
|
|
||||||
return when (groupId) {
|
|
||||||
IdRoot -> appDb.bookDao.flowRoot()
|
|
||||||
IdAll -> appDb.bookDao.flowAll()
|
|
||||||
IdLocal -> appDb.bookDao.flowLocal()
|
|
||||||
IdAudio -> appDb.bookDao.flowAudio()
|
|
||||||
IdNetNone -> appDb.bookDao.flowNetNoGroup()
|
|
||||||
IdLocalNone -> appDb.bookDao.flowLocalNoGroup()
|
|
||||||
IdError -> appDb.bookDao.flowUpdateError()
|
|
||||||
else -> appDb.bookDao.flowByGroup(groupId)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getManageName(context: Context): String {
|
fun getManageName(context: Context): String {
|
||||||
|
|||||||
@@ -186,7 +186,7 @@ class CacheActivity : VMBaseActivity<ActivityCacheBookBinding, CacheViewModel>()
|
|||||||
private fun initBookData() {
|
private fun initBookData() {
|
||||||
booksFlowJob?.cancel()
|
booksFlowJob?.cancel()
|
||||||
booksFlowJob = launch {
|
booksFlowJob = launch {
|
||||||
BookGroup.flowBook(groupId).conflate().map { books ->
|
appDb.bookDao.flowByGroup(groupId).conflate().map { books ->
|
||||||
val booksDownload = books.filter {
|
val booksDownload = books.filter {
|
||||||
!it.isAudio
|
!it.isAudio
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -198,7 +198,7 @@ class BookshelfManageActivity :
|
|||||||
booksFlowJob?.cancel()
|
booksFlowJob?.cancel()
|
||||||
booksFlowJob = launch {
|
booksFlowJob = launch {
|
||||||
val bookSort = AppConfig.getBookSortByGroupId(viewModel.groupId)
|
val bookSort = AppConfig.getBookSortByGroupId(viewModel.groupId)
|
||||||
BookGroup.flowBook(viewModel.groupId).conflate().map { list ->
|
appDb.bookDao.flowByGroup(viewModel.groupId).conflate().map { list ->
|
||||||
when (bookSort) {
|
when (bookSort) {
|
||||||
1 -> list.sortedByDescending {
|
1 -> list.sortedByDescending {
|
||||||
it.latestChapterTime
|
it.latestChapterTime
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import io.legado.app.base.BaseFragment
|
|||||||
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.PreferKey
|
import io.legado.app.constant.PreferKey
|
||||||
|
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.BookGroup
|
import io.legado.app.data.entities.BookGroup
|
||||||
import io.legado.app.databinding.FragmentBooksBinding
|
import io.legado.app.databinding.FragmentBooksBinding
|
||||||
@@ -133,7 +134,7 @@ class BooksFragment() : BaseFragment(R.layout.fragment_books),
|
|||||||
private fun upRecyclerData() {
|
private fun upRecyclerData() {
|
||||||
booksFlowJob?.cancel()
|
booksFlowJob?.cancel()
|
||||||
booksFlowJob = launch {
|
booksFlowJob = launch {
|
||||||
BookGroup.flowBook(groupId).conflate().map { list ->
|
appDb.bookDao.flowByGroup(groupId).conflate().map { list ->
|
||||||
//排序
|
//排序
|
||||||
when (bookSort) {
|
when (bookSort) {
|
||||||
1 -> list.sortedByDescending { it.latestChapterTime }
|
1 -> list.sortedByDescending { it.latestChapterTime }
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import io.legado.app.R
|
|||||||
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.PreferKey
|
import io.legado.app.constant.PreferKey
|
||||||
|
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.BookGroup
|
import io.legado.app.data.entities.BookGroup
|
||||||
import io.legado.app.databinding.FragmentBookshelf2Binding
|
import io.legado.app.databinding.FragmentBookshelf2Binding
|
||||||
@@ -133,7 +134,7 @@ class BookshelfFragment2() : BaseBookshelfFragment(R.layout.fragment_bookshelf2)
|
|||||||
}
|
}
|
||||||
booksFlowJob?.cancel()
|
booksFlowJob?.cancel()
|
||||||
booksFlowJob = launch {
|
booksFlowJob = launch {
|
||||||
BookGroup.flowBook(groupId).conflate().map { list ->
|
appDb.bookDao.flowByGroup(groupId).conflate().map { list ->
|
||||||
//排序
|
//排序
|
||||||
when (AppConfig.getBookSortByGroupId(groupId)) {
|
when (AppConfig.getBookSortByGroupId(groupId)) {
|
||||||
1 -> list.sortedByDescending {
|
1 -> list.sortedByDescending {
|
||||||
|
|||||||
Reference in New Issue
Block a user