优化
This commit is contained in:
@@ -1,8 +1,12 @@
|
|||||||
package io.legado.app.data.dao
|
package io.legado.app.data.dao
|
||||||
|
|
||||||
import androidx.room.*
|
import androidx.room.*
|
||||||
|
import io.legado.app.constant.AppPattern
|
||||||
import io.legado.app.data.entities.BookSource
|
import io.legado.app.data.entities.BookSource
|
||||||
|
import io.legado.app.utils.cnCompare
|
||||||
|
import io.legado.app.utils.splitNotBlank
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
|
import kotlinx.coroutines.flow.map
|
||||||
|
|
||||||
@Dao
|
@Dao
|
||||||
interface BookSourceDao {
|
interface BookSourceDao {
|
||||||
@@ -82,7 +86,7 @@ interface BookSourceDao {
|
|||||||
fun flowGroupExplore(key: String): Flow<List<BookSource>>
|
fun flowGroupExplore(key: String): Flow<List<BookSource>>
|
||||||
|
|
||||||
@Query("select distinct bookSourceGroup from book_sources where trim(bookSourceGroup) <> ''")
|
@Query("select distinct bookSourceGroup from book_sources where trim(bookSourceGroup) <> ''")
|
||||||
fun flowGroup(): Flow<List<String>>
|
fun flowGroupsUnDeal(): Flow<List<String>>
|
||||||
|
|
||||||
@Query("select distinct bookSourceGroup from book_sources where enabled = 1 and trim(bookSourceGroup) <> ''")
|
@Query("select distinct bookSourceGroup from book_sources where enabled = 1 and trim(bookSourceGroup) <> ''")
|
||||||
fun flowGroupEnabled(): Flow<List<String>>
|
fun flowGroupEnabled(): Flow<List<String>>
|
||||||
@@ -127,8 +131,8 @@ interface BookSourceDao {
|
|||||||
@get:Query("select * from book_sources where enabled = 1 and bookSourceType = 0 order by customOrder")
|
@get:Query("select * from book_sources where enabled = 1 and bookSourceType = 0 order by customOrder")
|
||||||
val allTextEnabled: List<BookSource>
|
val allTextEnabled: List<BookSource>
|
||||||
|
|
||||||
@get:Query("select distinct bookSourceGroup from book_sources where trim(bookSourceGroup) <> ''")
|
@Query("select distinct bookSourceGroup from book_sources where trim(bookSourceGroup) <> ''")
|
||||||
val allGroup: List<String>
|
fun getAllGroupsUnDeal(): List<String>
|
||||||
|
|
||||||
@Query("select * from book_sources where bookSourceUrl = :key")
|
@Query("select * from book_sources where bookSourceUrl = :key")
|
||||||
fun getBookSource(key: String): BookSource?
|
fun getBookSource(key: String): BookSource?
|
||||||
@@ -153,4 +157,27 @@ interface BookSourceDao {
|
|||||||
|
|
||||||
@get:Query("select max(customOrder) from book_sources")
|
@get:Query("select max(customOrder) from book_sources")
|
||||||
val maxOrder: Int
|
val maxOrder: Int
|
||||||
|
|
||||||
|
fun dealGroups(list: List<String>): List<String> {
|
||||||
|
val groups = linkedSetOf<String>()
|
||||||
|
list.forEach {
|
||||||
|
it.splitNotBlank(AppPattern.splitGroupRegex).forEach { group ->
|
||||||
|
groups.add(group)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return groups.sortedWith { o1, o2 ->
|
||||||
|
o1.cnCompare(o2)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val allGroups: List<String>
|
||||||
|
get() {
|
||||||
|
return dealGroups(getAllGroupsUnDeal())
|
||||||
|
}
|
||||||
|
|
||||||
|
fun flowGroups(): Flow<List<String>> {
|
||||||
|
return flowGroupsUnDeal().map { list ->
|
||||||
|
dealGroups(list)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -14,7 +14,6 @@ import io.legado.app.R
|
|||||||
import io.legado.app.base.BaseDialogFragment
|
import io.legado.app.base.BaseDialogFragment
|
||||||
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.base.adapter.RecyclerAdapter
|
||||||
import io.legado.app.constant.AppPattern
|
|
||||||
import io.legado.app.constant.PreferKey
|
import io.legado.app.constant.PreferKey
|
||||||
import io.legado.app.data.appDb
|
import io.legado.app.data.appDb
|
||||||
import io.legado.app.data.entities.BookSource
|
import io.legado.app.data.entities.BookSource
|
||||||
@@ -158,10 +157,7 @@ class ImportBookSourceDialog() : BaseDialogFragment(R.layout.dialog_recycler_vie
|
|||||||
private fun alertCustomGroup(item: MenuItem) {
|
private fun alertCustomGroup(item: MenuItem) {
|
||||||
alert(R.string.diy_edit_source_group) {
|
alert(R.string.diy_edit_source_group) {
|
||||||
val alertBinding = DialogCustomGroupBinding.inflate(layoutInflater).apply {
|
val alertBinding = DialogCustomGroupBinding.inflate(layoutInflater).apply {
|
||||||
val groups = linkedSetOf<String>()
|
val groups = appDb.bookSourceDao.allGroups
|
||||||
appDb.bookSourceDao.allGroup.forEach { group ->
|
|
||||||
groups.addAll(group.splitNotBlank(AppPattern.splitGroupRegex))
|
|
||||||
}
|
|
||||||
textInputLayout.setHint(R.string.group_name)
|
textInputLayout.setHint(R.string.group_name)
|
||||||
editView.setFilterValues(groups.toList())
|
editView.setFilterValues(groups.toList())
|
||||||
editView.dropDownHeight = 180.dpToPx()
|
editView.dropDownHeight = 180.dpToPx()
|
||||||
|
|||||||
@@ -12,12 +12,14 @@ import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel
|
|||||||
import io.legado.app.R
|
import io.legado.app.R
|
||||||
import io.legado.app.base.VMBaseActivity
|
import io.legado.app.base.VMBaseActivity
|
||||||
import io.legado.app.constant.BookType
|
import io.legado.app.constant.BookType
|
||||||
|
import io.legado.app.data.appDb
|
||||||
import io.legado.app.data.entities.BookSource
|
import io.legado.app.data.entities.BookSource
|
||||||
import io.legado.app.data.entities.rule.*
|
import io.legado.app.data.entities.rule.*
|
||||||
import io.legado.app.databinding.ActivityBookSourceEditBinding
|
import io.legado.app.databinding.ActivityBookSourceEditBinding
|
||||||
import io.legado.app.help.config.LocalConfig
|
import io.legado.app.help.config.LocalConfig
|
||||||
import io.legado.app.lib.dialogs.SelectItem
|
import io.legado.app.lib.dialogs.SelectItem
|
||||||
import io.legado.app.lib.dialogs.alert
|
import io.legado.app.lib.dialogs.alert
|
||||||
|
import io.legado.app.lib.dialogs.selector
|
||||||
import io.legado.app.lib.theme.accentColor
|
import io.legado.app.lib.theme.accentColor
|
||||||
import io.legado.app.lib.theme.backgroundColor
|
import io.legado.app.lib.theme.backgroundColor
|
||||||
import io.legado.app.lib.theme.primaryColor
|
import io.legado.app.lib.theme.primaryColor
|
||||||
@@ -30,6 +32,9 @@ import io.legado.app.ui.widget.dialog.UrlOptionDialog
|
|||||||
import io.legado.app.ui.widget.keyboard.KeyboardToolPop
|
import io.legado.app.ui.widget.keyboard.KeyboardToolPop
|
||||||
import io.legado.app.utils.*
|
import io.legado.app.utils.*
|
||||||
import io.legado.app.utils.viewbindingdelegate.viewBinding
|
import io.legado.app.utils.viewbindingdelegate.viewBinding
|
||||||
|
import kotlinx.coroutines.Dispatchers.IO
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
|
|
||||||
class BookSourceEditActivity :
|
class BookSourceEditActivity :
|
||||||
VMBaseActivity<ActivityBookSourceEditBinding, BookSourceEditViewModel>(false),
|
VMBaseActivity<ActivityBookSourceEditBinding, BookSourceEditViewModel>(false),
|
||||||
@@ -484,21 +489,38 @@ class BookSourceEditActivity :
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun alertGroups() {
|
||||||
|
launch {
|
||||||
|
val groups = withContext(IO) {
|
||||||
|
appDb.bookSourceDao.allGroups
|
||||||
|
}
|
||||||
|
selector(groups) { _, s, _ ->
|
||||||
|
sendText(s)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun helpActions(): List<SelectItem<String>> {
|
override fun helpActions(): List<SelectItem<String>> {
|
||||||
return arrayListOf(
|
val helpActions = arrayListOf(
|
||||||
SelectItem("插入URL参数", "urlOption"),
|
SelectItem("插入URL参数", "urlOption"),
|
||||||
SelectItem("书源教程", "ruleHelp"),
|
SelectItem("书源教程", "ruleHelp"),
|
||||||
SelectItem("js教程", "jsHelp"),
|
SelectItem("js教程", "jsHelp"),
|
||||||
SelectItem("正则教程", "regexHelp"),
|
SelectItem("正则教程", "regexHelp"),
|
||||||
SelectItem("选择文件", "selectFile"),
|
SelectItem("选择文件", "selectFile"),
|
||||||
)
|
)
|
||||||
|
val view = window.decorView.findFocus()
|
||||||
|
if (view is EditText && view.getTag(R.id.tag) == "bookSourceGroup") {
|
||||||
|
helpActions.add(
|
||||||
|
SelectItem("插入分组", "addGroup")
|
||||||
|
)
|
||||||
|
}
|
||||||
|
return helpActions
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onHelpActionSelect(action: String) {
|
override fun onHelpActionSelect(action: String) {
|
||||||
when (action) {
|
when (action) {
|
||||||
"urlOption" -> UrlOptionDialog(this) {
|
"addGroup" -> alertGroups()
|
||||||
sendText(it)
|
"urlOption" -> UrlOptionDialog(this) { sendText(it) }.show()
|
||||||
}.show()
|
|
||||||
"ruleHelp" -> showHelp("ruleHelp")
|
"ruleHelp" -> showHelp("ruleHelp")
|
||||||
"jsHelp" -> showHelp("jsHelp")
|
"jsHelp" -> showHelp("jsHelp")
|
||||||
"regexHelp" -> showHelp("regexHelp")
|
"regexHelp" -> showHelp("regexHelp")
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ class BookSourceEditAdapter : RecyclerView.Adapter<BookSourceEditAdapter.MyViewH
|
|||||||
class MyViewHolder(val binding: ItemSourceEditBinding) : RecyclerView.ViewHolder(binding.root) {
|
class MyViewHolder(val binding: ItemSourceEditBinding) : RecyclerView.ViewHolder(binding.root) {
|
||||||
|
|
||||||
fun bind(editEntity: EditEntity) = binding.run {
|
fun bind(editEntity: EditEntity) = binding.run {
|
||||||
|
editText.setTag(R.id.tag, editEntity.key)
|
||||||
if (editText.getTag(R.id.tag1) == null) {
|
if (editText.getTag(R.id.tag1) == null) {
|
||||||
val listener = object : View.OnAttachStateChangeListener {
|
val listener = object : View.OnAttachStateChangeListener {
|
||||||
override fun onViewAttachedToWindow(v: View) {
|
override fun onViewAttachedToWindow(v: View) {
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ import com.google.android.material.snackbar.Snackbar
|
|||||||
import io.legado.app.R
|
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.AppPattern
|
|
||||||
import io.legado.app.constant.EventBus
|
import io.legado.app.constant.EventBus
|
||||||
import io.legado.app.data.appDb
|
import io.legado.app.data.appDb
|
||||||
import io.legado.app.data.entities.BookSource
|
import io.legado.app.data.entities.BookSource
|
||||||
@@ -306,16 +305,9 @@ class BookSourceActivity : VMBaseActivity<ActivityBookSourceBinding, BookSourceV
|
|||||||
|
|
||||||
private fun initLiveDataGroup() {
|
private fun initLiveDataGroup() {
|
||||||
launch {
|
launch {
|
||||||
val noGroupName = getString(R.string.no_group)
|
appDb.bookSourceDao.flowGroups().conflate().collect {
|
||||||
appDb.bookSourceDao.flowGroup().conflate().collect {
|
|
||||||
groups.clear()
|
groups.clear()
|
||||||
it.forEach { groupStr ->
|
groups.addAll(it)
|
||||||
groupStr.splitNotBlank(AppPattern.splitGroupRegex).forEach { group ->
|
|
||||||
if (group != noGroupName) {
|
|
||||||
groups.add(group)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
upGroupMenu()
|
upGroupMenu()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -453,9 +445,7 @@ class BookSourceActivity : VMBaseActivity<ActivityBookSourceBinding, BookSourceV
|
|||||||
|
|
||||||
private fun upGroupMenu() = groupMenu?.let { menu ->
|
private fun upGroupMenu() = groupMenu?.let { menu ->
|
||||||
menu.removeGroup(R.id.source_group)
|
menu.removeGroup(R.id.source_group)
|
||||||
groups.sortedWith { o1, o2 ->
|
groups.forEach {
|
||||||
o1.cnCompare(o2)
|
|
||||||
}.map {
|
|
||||||
menu.add(R.id.source_group, Menu.NONE, Menu.NONE, it)
|
menu.add(R.id.source_group, Menu.NONE, Menu.NONE, it)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ import io.legado.app.R
|
|||||||
import io.legado.app.base.BaseDialogFragment
|
import io.legado.app.base.BaseDialogFragment
|
||||||
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.base.adapter.RecyclerAdapter
|
||||||
import io.legado.app.constant.AppPattern
|
|
||||||
import io.legado.app.data.appDb
|
import io.legado.app.data.appDb
|
||||||
import io.legado.app.databinding.DialogEditTextBinding
|
import io.legado.app.databinding.DialogEditTextBinding
|
||||||
import io.legado.app.databinding.DialogRecyclerViewBinding
|
import io.legado.app.databinding.DialogRecyclerViewBinding
|
||||||
@@ -22,7 +21,9 @@ import io.legado.app.lib.dialogs.alert
|
|||||||
import io.legado.app.lib.theme.backgroundColor
|
import io.legado.app.lib.theme.backgroundColor
|
||||||
import io.legado.app.lib.theme.primaryColor
|
import io.legado.app.lib.theme.primaryColor
|
||||||
import io.legado.app.ui.widget.recycler.VerticalDivider
|
import io.legado.app.ui.widget.recycler.VerticalDivider
|
||||||
import io.legado.app.utils.*
|
import io.legado.app.utils.applyTint
|
||||||
|
import io.legado.app.utils.requestInputMethod
|
||||||
|
import io.legado.app.utils.setLayout
|
||||||
import io.legado.app.utils.viewbindingdelegate.viewBinding
|
import io.legado.app.utils.viewbindingdelegate.viewBinding
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
@@ -54,16 +55,8 @@ class GroupManageDialog : BaseDialogFragment(R.layout.dialog_recycler_view),
|
|||||||
|
|
||||||
private fun initData() {
|
private fun initData() {
|
||||||
launch {
|
launch {
|
||||||
appDb.bookSourceDao.flowGroup().collect {
|
appDb.bookSourceDao.flowGroups().collect {
|
||||||
val groups = linkedSetOf<String>()
|
adapter.setItems(it)
|
||||||
it.map { group ->
|
|
||||||
groups.addAll(group.splitNotBlank(AppPattern.splitGroupRegex))
|
|
||||||
}
|
|
||||||
adapter.setItems(
|
|
||||||
groups.sortedWith { o1, o2 ->
|
|
||||||
o1.cnCompare(o2)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
|
|
||||||
|
<item name="tag" type="id" />
|
||||||
<item name="tag1" type="id" />
|
<item name="tag1" type="id" />
|
||||||
<item name="tag2" type="id" />
|
<item name="tag2" type="id" />
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user