pull/2299/head
kunfei 3 years ago
parent 0896590786
commit 0132f202fb
  1. 19
      app/src/main/java/io/legado/app/data/entities/RssSource.kt
  2. 43
      app/src/main/java/io/legado/app/ui/rss/source/manage/RssSourceActivity.kt
  3. 18
      app/src/main/java/io/legado/app/ui/rss/source/manage/RssSourceViewModel.kt
  4. 18
      app/src/main/res/menu/rss_source_sel.xml

@ -1,11 +1,13 @@
package io.legado.app.data.entities package io.legado.app.data.entities
import android.os.Parcelable import android.os.Parcelable
import android.text.TextUtils
import androidx.room.ColumnInfo import androidx.room.ColumnInfo
import androidx.room.Entity import androidx.room.Entity
import androidx.room.Index import androidx.room.Index
import androidx.room.PrimaryKey import androidx.room.PrimaryKey
import com.jayway.jsonpath.DocumentContext import com.jayway.jsonpath.DocumentContext
import io.legado.app.constant.AppPattern
import io.legado.app.utils.* import io.legado.app.utils.*
import kotlinx.parcelize.Parcelize import kotlinx.parcelize.Parcelize
@ -114,6 +116,23 @@ data class RssSource(
} }
} }
fun addGroup(groups: String): RssSource {
sourceGroup?.splitNotBlank(AppPattern.splitGroupRegex)?.toHashSet()?.let {
it.addAll(groups.splitNotBlank(AppPattern.splitGroupRegex))
sourceGroup = TextUtils.join(",", it)
}
if (sourceGroup.isNullOrBlank()) sourceGroup = groups
return this
}
fun removeGroup(groups: String): RssSource {
sourceGroup?.splitNotBlank(AppPattern.splitGroupRegex)?.toHashSet()?.let {
it.removeAll(groups.splitNotBlank(AppPattern.splitGroupRegex).toSet())
sourceGroup = TextUtils.join(",", it)
}
return this
}
fun sortUrls(): List<Pair<String, String>> = arrayListOf<Pair<String, String>>().apply { fun sortUrls(): List<Pair<String, String>> = arrayListOf<Pair<String, String>>().apply {
kotlin.runCatching { kotlin.runCatching {
var a = sortUrl var a = sortUrl

@ -146,6 +146,8 @@ class RssSourceActivity : VMBaseActivity<ActivityRssSourceBinding, RssSourceView
when (item?.itemId) { when (item?.itemId) {
R.id.menu_enable_selection -> viewModel.enableSelection(adapter.selection) R.id.menu_enable_selection -> viewModel.enableSelection(adapter.selection)
R.id.menu_disable_selection -> viewModel.disableSelection(adapter.selection) R.id.menu_disable_selection -> viewModel.disableSelection(adapter.selection)
R.id.menu_add_group -> selectionAddToGroups()
R.id.menu_remove_group -> selectionRemoveFromGroups()
R.id.menu_top_sel -> viewModel.topSource(*adapter.selection.toTypedArray()) R.id.menu_top_sel -> viewModel.topSource(*adapter.selection.toTypedArray())
R.id.menu_bottom_sel -> viewModel.bottomSource(*adapter.selection.toTypedArray()) R.id.menu_bottom_sel -> viewModel.bottomSource(*adapter.selection.toTypedArray())
R.id.menu_export_selection -> viewModel.saveToFile(adapter.selection) { file -> R.id.menu_export_selection -> viewModel.saveToFile(adapter.selection) { file ->
@ -154,6 +156,7 @@ class RssSourceActivity : VMBaseActivity<ActivityRssSourceBinding, RssSourceView
fileData = Triple("exportRssSource.json", file, "application/json") fileData = Triple("exportRssSource.json", file, "application/json")
} }
} }
R.id.menu_share_source -> viewModel.saveToFile(adapter.selection) { R.id.menu_share_source -> viewModel.saveToFile(adapter.selection) {
share(it) share(it)
} }
@ -213,6 +216,46 @@ class RssSourceActivity : VMBaseActivity<ActivityRssSourceBinding, RssSourceView
} }
} }
@SuppressLint("InflateParams")
private fun selectionAddToGroups() {
alert(titleResource = R.string.add_group) {
val alertBinding = DialogEditTextBinding.inflate(layoutInflater).apply {
editView.setHint(R.string.group_name)
editView.setFilterValues(groups.toList())
editView.dropDownHeight = 180.dpToPx()
}
customView { alertBinding.root }
okButton {
alertBinding.editView.text?.toString()?.let {
if (it.isNotEmpty()) {
viewModel.selectionAddToGroups(adapter.selection, it)
}
}
}
cancelButton()
}
}
@SuppressLint("InflateParams")
private fun selectionRemoveFromGroups() {
alert(titleResource = R.string.remove_group) {
val alertBinding = DialogEditTextBinding.inflate(layoutInflater).apply {
editView.setHint(R.string.group_name)
editView.setFilterValues(groups.toList())
editView.dropDownHeight = 180.dpToPx()
}
customView { alertBinding.root }
okButton {
alertBinding.editView.text?.toString()?.let {
if (it.isNotEmpty()) {
viewModel.selectionRemoveFromGroups(adapter.selection, it)
}
}
}
cancelButton()
}
}
override fun selectAll(selectAll: Boolean) { override fun selectAll(selectAll: Boolean) {
if (selectAll) { if (selectAll) {
adapter.selectAll() adapter.selectAll()

@ -87,6 +87,24 @@ class RssSourceViewModel(application: Application) : BaseViewModel(application)
} }
} }
fun selectionAddToGroups(sources: List<RssSource>, groups: String) {
execute {
val array = Array(sources.size) {
sources[it].copy().addGroup(groups)
}
appDb.rssSourceDao.update(*array)
}
}
fun selectionRemoveFromGroups(sources: List<RssSource>, groups: String) {
execute {
val array = Array(sources.size) {
sources[it].copy().removeGroup(groups)
}
appDb.rssSourceDao.update(*array)
}
}
fun addGroup(group: String) { fun addGroup(group: String) {
execute { execute {
val sources = appDb.rssSourceDao.noGroup val sources = appDb.rssSourceDao.noGroup

@ -5,22 +5,32 @@
<item <item
android:id="@+id/menu_enable_selection" android:id="@+id/menu_enable_selection"
android:title="@string/enable_selection" android:title="@string/enable_selection"
app:showAsAction="never" /> app:showAsAction="never"/>
<item <item
android:id="@+id/menu_disable_selection" android:id="@+id/menu_disable_selection"
android:title="@string/disable_selection" android:title="@string/disable_selection"
app:showAsAction="never" /> app:showAsAction="never"/>
<item
android:id="@+id/menu_add_group"
android:title="@string/add_group"
app:showAsAction="never"/>
<item
android:id="@+id/menu_remove_group"
android:title="@string/remove_group"
app:showAsAction="never"/>
<item <item
android:id="@+id/menu_top_sel" android:id="@+id/menu_top_sel"
android:title="@string/selection_to_top" android:title="@string/selection_to_top"
app:showAsAction="never" /> app:showAsAction="never"/>
<item <item
android:id="@+id/menu_bottom_sel" android:id="@+id/menu_bottom_sel"
android:title="@string/selection_to_bottom" android:title="@string/selection_to_bottom"
app:showAsAction="never" /> app:showAsAction="never"/>
<item <item
android:id="@+id/menu_export_selection" android:id="@+id/menu_export_selection"

Loading…
Cancel
Save