From 0132f202fb3d1a5ea74d0d3e69d0bb44600df285 Mon Sep 17 00:00:00 2001 From: kunfei Date: Sun, 18 Sep 2022 00:00:32 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/legado/app/data/entities/RssSource.kt | 19 ++++++++ .../ui/rss/source/manage/RssSourceActivity.kt | 43 +++++++++++++++++++ .../rss/source/manage/RssSourceViewModel.kt | 18 ++++++++ app/src/main/res/menu/rss_source_sel.xml | 18 ++++++-- 4 files changed, 94 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/io/legado/app/data/entities/RssSource.kt b/app/src/main/java/io/legado/app/data/entities/RssSource.kt index 6c99095f0..b7811237b 100644 --- a/app/src/main/java/io/legado/app/data/entities/RssSource.kt +++ b/app/src/main/java/io/legado/app/data/entities/RssSource.kt @@ -1,11 +1,13 @@ package io.legado.app.data.entities import android.os.Parcelable +import android.text.TextUtils import androidx.room.ColumnInfo import androidx.room.Entity import androidx.room.Index import androidx.room.PrimaryKey import com.jayway.jsonpath.DocumentContext +import io.legado.app.constant.AppPattern import io.legado.app.utils.* 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> = arrayListOf>().apply { kotlin.runCatching { var a = sortUrl diff --git a/app/src/main/java/io/legado/app/ui/rss/source/manage/RssSourceActivity.kt b/app/src/main/java/io/legado/app/ui/rss/source/manage/RssSourceActivity.kt index 50581448e..d5be7813c 100644 --- a/app/src/main/java/io/legado/app/ui/rss/source/manage/RssSourceActivity.kt +++ b/app/src/main/java/io/legado/app/ui/rss/source/manage/RssSourceActivity.kt @@ -146,6 +146,8 @@ class RssSourceActivity : VMBaseActivity viewModel.enableSelection(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_bottom_sel -> viewModel.bottomSource(*adapter.selection.toTypedArray()) R.id.menu_export_selection -> viewModel.saveToFile(adapter.selection) { file -> @@ -154,6 +156,7 @@ class RssSourceActivity : VMBaseActivity viewModel.saveToFile(adapter.selection) { share(it) } @@ -213,6 +216,46 @@ class RssSourceActivity : VMBaseActivity, groups: String) { + execute { + val array = Array(sources.size) { + sources[it].copy().addGroup(groups) + } + appDb.rssSourceDao.update(*array) + } + } + + fun selectionRemoveFromGroups(sources: List, groups: String) { + execute { + val array = Array(sources.size) { + sources[it].copy().removeGroup(groups) + } + appDb.rssSourceDao.update(*array) + } + } + fun addGroup(group: String) { execute { val sources = appDb.rssSourceDao.noGroup diff --git a/app/src/main/res/menu/rss_source_sel.xml b/app/src/main/res/menu/rss_source_sel.xml index 542e280c5..4775c2dc3 100644 --- a/app/src/main/res/menu/rss_source_sel.xml +++ b/app/src/main/res/menu/rss_source_sel.xml @@ -5,22 +5,32 @@ + app:showAsAction="never"/> + app:showAsAction="never"/> + + + + + app:showAsAction="never"/> + app:showAsAction="never"/>