mirror of
https://github.com/gedoor/legado.git
synced 2024-07-19 01:06:36 +08:00
优化
This commit is contained in:
parent
0044250563
commit
93662444da
@ -38,14 +38,6 @@ object AppConst {
|
||||
SimpleDateFormat("yy-MM-dd-HH-mm-ss")
|
||||
}
|
||||
|
||||
const val rootGroupId = -100L
|
||||
const val bookGroupAllId = -1L
|
||||
const val bookGroupLocalId = -2L
|
||||
const val bookGroupAudioId = -3L
|
||||
const val bookGroupNetNoneId = -4L
|
||||
const val bookGroupLocalNoneId = -5L
|
||||
const val bookGroupErrorId = -11L
|
||||
|
||||
const val imagePathKey = "imagePath"
|
||||
|
||||
val menuViewNames = arrayOf(
|
||||
|
@ -7,7 +7,6 @@ import androidx.room.Database
|
||||
import androidx.room.Room
|
||||
import androidx.room.RoomDatabase
|
||||
import androidx.sqlite.db.SupportSQLiteDatabase
|
||||
import io.legado.app.constant.AppConst
|
||||
import io.legado.app.data.dao.*
|
||||
import io.legado.app.data.entities.*
|
||||
import io.legado.app.help.DefaultData
|
||||
@ -99,43 +98,43 @@ abstract class AppDatabase : RoomDatabase() {
|
||||
@Language("sql")
|
||||
val insertBookGroupAllSql = """
|
||||
insert into book_groups(groupId, groupName, 'order', show)
|
||||
select ${AppConst.bookGroupAllId}, '全部', -10, 1
|
||||
where not exists (select * from book_groups where groupId = ${AppConst.bookGroupAllId})
|
||||
select ${BookGroup.IdAll}, '全部', -10, 1
|
||||
where not exists (select * from book_groups where groupId = ${BookGroup.IdAll})
|
||||
""".trimIndent()
|
||||
db.execSQL(insertBookGroupAllSql)
|
||||
@Language("sql")
|
||||
val insertBookGroupLocalSql = """
|
||||
insert into book_groups(groupId, groupName, 'order', enableRefresh, show)
|
||||
select ${AppConst.bookGroupLocalId}, '本地', -9, 0, 1
|
||||
where not exists (select * from book_groups where groupId = ${AppConst.bookGroupLocalId})
|
||||
select ${BookGroup.IdLocal}, '本地', -9, 0, 1
|
||||
where not exists (select * from book_groups where groupId = ${BookGroup.IdLocal})
|
||||
""".trimIndent()
|
||||
db.execSQL(insertBookGroupLocalSql)
|
||||
@Language("sql")
|
||||
val insertBookGroupMusicSql = """
|
||||
insert into book_groups(groupId, groupName, 'order', show)
|
||||
select ${AppConst.bookGroupAudioId}, '音频', -8, 1
|
||||
where not exists (select * from book_groups where groupId = ${AppConst.bookGroupAudioId})
|
||||
select ${BookGroup.IdAudio}, '音频', -8, 1
|
||||
where not exists (select * from book_groups where groupId = ${BookGroup.IdAudio})
|
||||
""".trimIndent()
|
||||
db.execSQL(insertBookGroupMusicSql)
|
||||
@Language("sql")
|
||||
val insertBookGroupNetNoneGroupSql = """
|
||||
insert into book_groups(groupId, groupName, 'order', show)
|
||||
select ${AppConst.bookGroupNetNoneId}, '网络未分组', -7, 1
|
||||
where not exists (select * from book_groups where groupId = ${AppConst.bookGroupNetNoneId})
|
||||
select ${BookGroup.IdNetNone}, '网络未分组', -7, 1
|
||||
where not exists (select * from book_groups where groupId = ${BookGroup.IdNetNone})
|
||||
""".trimIndent()
|
||||
db.execSQL(insertBookGroupNetNoneGroupSql)
|
||||
@Language("sql")
|
||||
val insertBookGroupLocalNoneGroupSql = """
|
||||
insert into book_groups(groupId, groupName, 'order', show)
|
||||
select ${AppConst.bookGroupLocalNoneId}, '本地未分组', -6, 0
|
||||
where not exists (select * from book_groups where groupId = ${AppConst.bookGroupLocalNoneId})
|
||||
select ${BookGroup.IdLocalNone}, '本地未分组', -6, 0
|
||||
where not exists (select * from book_groups where groupId = ${BookGroup.IdLocalNone})
|
||||
""".trimIndent()
|
||||
db.execSQL(insertBookGroupLocalNoneGroupSql)
|
||||
@Language("sql")
|
||||
val insertBookGroupErrorSql = """
|
||||
insert into book_groups(groupId, groupName, 'order', show)
|
||||
select ${AppConst.bookGroupErrorId}, '更新失败', -1, 1
|
||||
where not exists (select * from book_groups where groupId = ${AppConst.bookGroupErrorId})
|
||||
select ${BookGroup.IdError}, '更新失败', -1, 1
|
||||
where not exists (select * from book_groups where groupId = ${BookGroup.IdError})
|
||||
""".trimIndent()
|
||||
db.execSQL(insertBookGroupErrorSql)
|
||||
@Language("sql")
|
||||
|
@ -1,9 +1,9 @@
|
||||
package io.legado.app.data.dao
|
||||
|
||||
import androidx.room.*
|
||||
import io.legado.app.constant.AppConst
|
||||
import io.legado.app.constant.BookType
|
||||
import io.legado.app.data.entities.Book
|
||||
import io.legado.app.data.entities.BookGroup
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
||||
@Dao
|
||||
@ -14,7 +14,7 @@ interface BookDao {
|
||||
select * from books where type & ${BookType.text} > 0
|
||||
and type & ${BookType.local} = 0
|
||||
and ((SELECT sum(groupId) FROM book_groups where groupId > 0) & `group`) = 0
|
||||
and (select show from book_groups where groupId = ${AppConst.bookGroupNetNoneId}) != 1
|
||||
and (select show from book_groups where groupId = ${BookGroup.IdNetNone}) != 1
|
||||
"""
|
||||
)
|
||||
fun flowRoot(): Flow<List<Book>>
|
||||
|
@ -6,8 +6,9 @@ import androidx.room.ColumnInfo
|
||||
import androidx.room.Entity
|
||||
import androidx.room.PrimaryKey
|
||||
import io.legado.app.R
|
||||
import io.legado.app.constant.AppConst
|
||||
import io.legado.app.data.appDb
|
||||
import io.legado.app.help.config.AppConfig
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.parcelize.Parcelize
|
||||
|
||||
@Parcelize
|
||||
@ -26,14 +27,38 @@ data class BookGroup(
|
||||
var bookSort: Int = -1
|
||||
) : Parcelable {
|
||||
|
||||
companion object {
|
||||
const val IdRoot = -100L
|
||||
const val IdAll = -1L
|
||||
const val IdLocal = -2L
|
||||
const val IdAudio = -3L
|
||||
const val IdNetNone = -4L
|
||||
const val IdLocalNone = -5L
|
||||
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 {
|
||||
return when (groupId) {
|
||||
AppConst.bookGroupAllId -> "$groupName(${context.getString(R.string.all)})"
|
||||
AppConst.bookGroupAudioId -> "$groupName(${context.getString(R.string.audio)})"
|
||||
AppConst.bookGroupLocalId -> "$groupName(${context.getString(R.string.local)})"
|
||||
AppConst.bookGroupNetNoneId -> "$groupName(${context.getString(R.string.net_no_group)})"
|
||||
AppConst.bookGroupLocalNoneId -> "$groupName(${context.getString(R.string.local_no_group)})"
|
||||
AppConst.bookGroupErrorId -> "$groupName(${context.getString(R.string.update_book_fail)})"
|
||||
IdAll -> "$groupName(${context.getString(R.string.all)})"
|
||||
IdAudio -> "$groupName(${context.getString(R.string.audio)})"
|
||||
IdLocal -> "$groupName(${context.getString(R.string.local)})"
|
||||
IdNetNone -> "$groupName(${context.getString(R.string.net_no_group)})"
|
||||
IdLocalNone -> "$groupName(${context.getString(R.string.local_no_group)})"
|
||||
IdError -> "$groupName(${context.getString(R.string.update_book_fail)})"
|
||||
else -> groupName
|
||||
}
|
||||
}
|
||||
|
@ -11,7 +11,6 @@ import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import com.google.android.material.textfield.TextInputLayout
|
||||
import io.legado.app.R
|
||||
import io.legado.app.base.VMBaseActivity
|
||||
import io.legado.app.constant.AppConst
|
||||
import io.legado.app.constant.AppConst.charsets
|
||||
import io.legado.app.constant.AppLog
|
||||
import io.legado.app.constant.EventBus
|
||||
@ -187,14 +186,7 @@ class CacheActivity : VMBaseActivity<ActivityCacheBookBinding, CacheViewModel>()
|
||||
private fun initBookData() {
|
||||
booksFlowJob?.cancel()
|
||||
booksFlowJob = launch {
|
||||
when (groupId) {
|
||||
AppConst.bookGroupAllId -> appDb.bookDao.flowAll()
|
||||
AppConst.bookGroupLocalId -> appDb.bookDao.flowLocal()
|
||||
AppConst.bookGroupAudioId -> appDb.bookDao.flowAudio()
|
||||
AppConst.bookGroupNetNoneId -> appDb.bookDao.flowNetNoGroup()
|
||||
AppConst.bookGroupLocalNoneId -> appDb.bookDao.flowLocalNoGroup()
|
||||
else -> appDb.bookDao.flowByGroup(groupId)
|
||||
}.conflate().map { books ->
|
||||
BookGroup.flowBook(groupId).conflate().map { books ->
|
||||
val booksDownload = books.filter {
|
||||
!it.isAudio
|
||||
}
|
||||
|
@ -15,7 +15,6 @@ import androidx.recyclerview.widget.ItemTouchHelper
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import io.legado.app.R
|
||||
import io.legado.app.base.VMBaseActivity
|
||||
import io.legado.app.constant.AppConst
|
||||
import io.legado.app.data.appDb
|
||||
import io.legado.app.data.entities.Book
|
||||
import io.legado.app.data.entities.BookGroup
|
||||
@ -199,16 +198,7 @@ class BookshelfManageActivity :
|
||||
booksFlowJob?.cancel()
|
||||
booksFlowJob = launch {
|
||||
val bookSort = AppConfig.getBookSortByGroupId(viewModel.groupId)
|
||||
when (viewModel.groupId) {
|
||||
AppConst.rootGroupId -> appDb.bookDao.flowNetNoGroup()
|
||||
AppConst.bookGroupAllId -> appDb.bookDao.flowAll()
|
||||
AppConst.bookGroupLocalId -> appDb.bookDao.flowLocal()
|
||||
AppConst.bookGroupAudioId -> appDb.bookDao.flowAudio()
|
||||
AppConst.bookGroupNetNoneId -> appDb.bookDao.flowNetNoGroup()
|
||||
AppConst.bookGroupLocalNoneId -> appDb.bookDao.flowLocalNoGroup()
|
||||
AppConst.bookGroupErrorId -> appDb.bookDao.flowUpdateError()
|
||||
else -> appDb.bookDao.flowByGroup(viewModel.groupId)
|
||||
}.conflate().map { list ->
|
||||
BookGroup.flowBook(viewModel.groupId).conflate().map { list ->
|
||||
when (bookSort) {
|
||||
1 -> list.sortedByDescending {
|
||||
it.latestChapterTime
|
||||
|
@ -11,7 +11,6 @@ import androidx.fragment.app.FragmentManager
|
||||
import androidx.fragment.app.FragmentStatePagerAdapter
|
||||
import com.google.android.material.tabs.TabLayout
|
||||
import io.legado.app.R
|
||||
import io.legado.app.constant.AppConst
|
||||
import io.legado.app.constant.PreferKey
|
||||
import io.legado.app.data.appDb
|
||||
import io.legado.app.data.entities.Book
|
||||
@ -86,7 +85,7 @@ class BookshelfFragment1() : BaseBookshelfFragment(R.layout.fragment_bookshelf1)
|
||||
@Synchronized
|
||||
override fun upGroup(data: List<BookGroup>) {
|
||||
if (data.isEmpty()) {
|
||||
appDb.bookGroupDao.enableGroup(AppConst.bookGroupAllId)
|
||||
appDb.bookGroupDao.enableGroup(BookGroup.IdAll)
|
||||
} else {
|
||||
if (data != bookGroups) {
|
||||
bookGroups.clear()
|
||||
|
@ -10,11 +10,9 @@ import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import io.legado.app.R
|
||||
import io.legado.app.base.BaseFragment
|
||||
import io.legado.app.constant.AppConst
|
||||
import io.legado.app.constant.AppLog
|
||||
import io.legado.app.constant.EventBus
|
||||
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.BookGroup
|
||||
import io.legado.app.databinding.FragmentBooksBinding
|
||||
@ -135,16 +133,8 @@ class BooksFragment() : BaseFragment(R.layout.fragment_books),
|
||||
private fun upRecyclerData() {
|
||||
booksFlowJob?.cancel()
|
||||
booksFlowJob = launch {
|
||||
when (groupId) {
|
||||
AppConst.bookGroupAllId -> appDb.bookDao.flowAll()
|
||||
AppConst.bookGroupLocalId -> appDb.bookDao.flowLocal()
|
||||
AppConst.bookGroupAudioId -> appDb.bookDao.flowAudio()
|
||||
AppConst.bookGroupNetNoneId -> appDb.bookDao.flowNetNoGroup()
|
||||
AppConst.bookGroupLocalNoneId -> appDb.bookDao.flowLocalNoGroup()
|
||||
AppConst.bookGroupErrorId -> appDb.bookDao.flowUpdateError()
|
||||
else -> appDb.bookDao.flowByGroup(groupId)
|
||||
// 书籍排序
|
||||
}.conflate().map { list ->
|
||||
BookGroup.flowBook(groupId).conflate().map { list ->
|
||||
//排序
|
||||
when (bookSort) {
|
||||
1 -> list.sortedByDescending { it.latestChapterTime }
|
||||
2 -> list.sortedWith { o1, o2 ->
|
||||
|
@ -9,11 +9,9 @@ import androidx.recyclerview.widget.GridLayoutManager
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import io.legado.app.R
|
||||
import io.legado.app.constant.AppConst
|
||||
import io.legado.app.constant.AppLog
|
||||
import io.legado.app.constant.EventBus
|
||||
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.BookGroup
|
||||
import io.legado.app.databinding.FragmentBookshelf2Binding
|
||||
@ -65,7 +63,7 @@ class BookshelfFragment2() : BaseBookshelfFragment(R.layout.fragment_bookshelf2)
|
||||
}
|
||||
private var bookGroups: List<BookGroup> = emptyList()
|
||||
private var booksFlowJob: Job? = null
|
||||
override var groupId = AppConst.rootGroupId
|
||||
override var groupId = BookGroup.IdRoot
|
||||
override var books: List<Book> = emptyList()
|
||||
|
||||
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
|
||||
@ -135,23 +133,17 @@ class BookshelfFragment2() : BaseBookshelfFragment(R.layout.fragment_bookshelf2)
|
||||
}
|
||||
booksFlowJob?.cancel()
|
||||
booksFlowJob = launch {
|
||||
when (groupId) {
|
||||
AppConst.rootGroupId -> appDb.bookDao.flowRoot()
|
||||
AppConst.bookGroupAllId -> appDb.bookDao.flowAll()
|
||||
AppConst.bookGroupLocalId -> appDb.bookDao.flowLocal()
|
||||
AppConst.bookGroupAudioId -> appDb.bookDao.flowAudio()
|
||||
AppConst.bookGroupNetNoneId -> appDb.bookDao.flowNetNoGroup()
|
||||
AppConst.bookGroupLocalNoneId -> appDb.bookDao.flowLocalNoGroup()
|
||||
AppConst.bookGroupErrorId -> appDb.bookDao.flowUpdateError()
|
||||
else -> appDb.bookDao.flowByGroup(groupId)
|
||||
}.conflate().map { list ->
|
||||
BookGroup.flowBook(groupId).conflate().map { list ->
|
||||
//排序
|
||||
when (AppConfig.getBookSortByGroupId(groupId)) {
|
||||
1 -> list.sortedByDescending {
|
||||
it.latestChapterTime
|
||||
}
|
||||
|
||||
2 -> list.sortedWith { o1, o2 ->
|
||||
o1.name.cnCompare(o2.name)
|
||||
}
|
||||
|
||||
3 -> list.sortedBy {
|
||||
it.order
|
||||
}
|
||||
@ -229,7 +221,7 @@ class BookshelfFragment2() : BaseBookshelfFragment(R.layout.fragment_bookshelf2)
|
||||
}
|
||||
|
||||
override fun getItemCount(): Int {
|
||||
return if (groupId == AppConst.rootGroupId) {
|
||||
return if (groupId == BookGroup.IdRoot) {
|
||||
bookGroups.size + books.size
|
||||
} else {
|
||||
books.size
|
||||
@ -237,7 +229,7 @@ class BookshelfFragment2() : BaseBookshelfFragment(R.layout.fragment_bookshelf2)
|
||||
}
|
||||
|
||||
override fun getItemType(position: Int): Int {
|
||||
if (groupId != AppConst.rootGroupId) {
|
||||
if (groupId != BookGroup.IdRoot) {
|
||||
return 0
|
||||
}
|
||||
if (position < bookGroups.size) {
|
||||
@ -247,7 +239,7 @@ class BookshelfFragment2() : BaseBookshelfFragment(R.layout.fragment_bookshelf2)
|
||||
}
|
||||
|
||||
override fun getItem(position: Int): Any? {
|
||||
if (groupId != AppConst.rootGroupId) {
|
||||
if (groupId != BookGroup.IdRoot) {
|
||||
return books.getOrNull(position)
|
||||
}
|
||||
if (position < bookGroups.size) {
|
||||
|
Loading…
Reference in New Issue
Block a user