diff --git a/app/src/main/java/io/legado/app/constant/AppPattern.kt b/app/src/main/java/io/legado/app/constant/AppPattern.kt index 396edb73d..e9a508939 100644 --- a/app/src/main/java/io/legado/app/constant/AppPattern.kt +++ b/app/src/main/java/io/legado/app/constant/AppPattern.kt @@ -3,8 +3,11 @@ package io.legado.app.constant import java.util.regex.Pattern object AppPattern { - val JS_PATTERN: Pattern = Pattern.compile("([\\w\\W]*?|@js:[\\w\\W]*$)", Pattern.CASE_INSENSITIVE) + val JS_PATTERN: Pattern = + Pattern.compile("([\\w\\W]*?|@js:[\\w\\W]*$)", Pattern.CASE_INSENSITIVE) val EXP_PATTERN: Pattern = Pattern.compile("\\{\\{([\\w\\W]*?)\\}\\}") val authorRegex = "作\\s*者\\s*[::]".toRegex() + + val splitGroupRegex = Regex("[,;]") } \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt b/app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt index 681e9aa9e..2870818c2 100644 --- a/app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt @@ -13,6 +13,7 @@ import com.google.android.flexbox.FlexboxLayoutManager import io.legado.app.App import io.legado.app.R import io.legado.app.base.VMBaseActivity +import io.legado.app.constant.AppPattern import io.legado.app.constant.PreferKey import io.legado.app.data.entities.Book import io.legado.app.data.entities.SearchBook @@ -178,7 +179,7 @@ class SearchActivity : VMBaseActivity(R.layout.activity_book_se App.db.bookSourceDao().liveGroupEnabled().observe(this, { groups.clear() it.map { group -> - groups.addAll(group.splitNotBlank(",", ";")) + groups.addAll(group.splitNotBlank(AppPattern.splitGroupRegex)) } upGroupMenu() }) diff --git a/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceActivity.kt b/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceActivity.kt index c06110f12..7fb8855b3 100644 --- a/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceActivity.kt @@ -17,6 +17,7 @@ import androidx.recyclerview.widget.LinearLayoutManager import io.legado.app.App import io.legado.app.R import io.legado.app.base.VMBaseActivity +import io.legado.app.constant.AppPattern import io.legado.app.data.entities.BookSource import io.legado.app.help.IntentDataHelp import io.legado.app.help.ItemTouchCallback @@ -181,7 +182,7 @@ class BookSourceActivity : VMBaseActivity(R.layout.activity App.db.bookSourceDao().liveGroup().observe(this, { groups.clear() it.map { group -> - groups.addAll(group.splitNotBlank(",", ";")) + groups.addAll(group.splitNotBlank(AppPattern.splitGroupRegex)) } upGroupMenu() }) diff --git a/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceViewModel.kt b/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceViewModel.kt index 8038cf0db..29be62163 100644 --- a/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceViewModel.kt @@ -5,6 +5,7 @@ import android.text.TextUtils import androidx.documentfile.provider.DocumentFile import io.legado.app.App import io.legado.app.base.BaseViewModel +import io.legado.app.constant.AppPattern import io.legado.app.data.entities.BookSource import io.legado.app.utils.FileUtils import io.legado.app.utils.GSON @@ -94,41 +95,41 @@ class BookSourceViewModel(application: Application) : BaseViewModel(application) } fun selectionAddToGroups(sources: List, groups: String) { - execute { - val list = arrayListOf() - sources.forEach { - val newGroupList = arrayListOf() - it.bookSourceGroup?.splitNotBlank(",", ";")?.forEach { - newGroupList.add(it) - } - groups.splitNotBlank(",", ";", ",").forEach { - newGroupList.add(it) - } - val lh = LinkedHashSet(newGroupList) - val newGroup = ArrayList(lh).joinToString(separator = ",") - list.add(it.copy(bookSourceGroup = newGroup)) + execute { + val list = arrayListOf() + sources.forEach { source -> + val newGroupList = arrayListOf() + source.bookSourceGroup?.splitNotBlank(AppPattern.splitGroupRegex)?.forEach { + newGroupList.add(it) } - App.db.bookSourceDao().update(*list.toTypedArray()) + groups.splitNotBlank(",", ";", ",").forEach { + newGroupList.add(it) + } + val lh = LinkedHashSet(newGroupList) + val newGroup = ArrayList(lh).joinToString(separator = ",") + list.add(source.copy(bookSourceGroup = newGroup)) } + App.db.bookSourceDao().update(*list.toTypedArray()) + } } fun selectionRemoveFromGroups(sources: List, groups: String) { - execute { - val list = arrayListOf() - sources.forEach { - val newGroupList = arrayListOf() - it.bookSourceGroup?.splitNotBlank(",", ";")?.forEach { - newGroupList.add(it) - } - groups.splitNotBlank(",", ";", ",").forEach { - newGroupList.remove(it) - } - val lh = LinkedHashSet(newGroupList) - val newGroup = ArrayList(lh).joinToString(separator = ",") - list.add(it.copy(bookSourceGroup = newGroup)) + execute { + val list = arrayListOf() + sources.forEach { source -> + val newGroupList = arrayListOf() + source.bookSourceGroup?.splitNotBlank(AppPattern.splitGroupRegex)?.forEach { + newGroupList.add(it) } - App.db.bookSourceDao().update(*list.toTypedArray()) + groups.splitNotBlank(",", ";", ",").forEach { + newGroupList.remove(it) + } + val lh = LinkedHashSet(newGroupList) + val newGroup = ArrayList(lh).joinToString(separator = ",") + list.add(source.copy(bookSourceGroup = newGroup)) } + App.db.bookSourceDao().update(*list.toTypedArray()) + } } fun delSelection(sources: List) { diff --git a/app/src/main/java/io/legado/app/ui/book/source/manage/GroupManageDialog.kt b/app/src/main/java/io/legado/app/ui/book/source/manage/GroupManageDialog.kt index 3724694d4..5c7136691 100644 --- a/app/src/main/java/io/legado/app/ui/book/source/manage/GroupManageDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/source/manage/GroupManageDialog.kt @@ -16,6 +16,7 @@ import io.legado.app.App import io.legado.app.R import io.legado.app.base.adapter.ItemViewHolder import io.legado.app.base.adapter.SimpleRecyclerAdapter +import io.legado.app.constant.AppPattern import io.legado.app.lib.dialogs.alert import io.legado.app.lib.dialogs.customView import io.legado.app.lib.dialogs.noButton @@ -71,7 +72,7 @@ class GroupManageDialog : DialogFragment(), Toolbar.OnMenuItemClickListener { App.db.bookSourceDao().liveGroup().observe(viewLifecycleOwner, { val groups = linkedSetOf() it.map { group -> - groups.addAll(group.splitNotBlank(",", ";")) + groups.addAll(group.splitNotBlank(AppPattern.splitGroupRegex)) } adapter.setItems(groups.toList()) }) diff --git a/app/src/main/java/io/legado/app/ui/main/explore/ExploreFragment.kt b/app/src/main/java/io/legado/app/ui/main/explore/ExploreFragment.kt index 00e8c8da8..6aa870ee7 100644 --- a/app/src/main/java/io/legado/app/ui/main/explore/ExploreFragment.kt +++ b/app/src/main/java/io/legado/app/ui/main/explore/ExploreFragment.kt @@ -13,6 +13,7 @@ import androidx.recyclerview.widget.RecyclerView import io.legado.app.App import io.legado.app.R import io.legado.app.base.VMBaseFragment +import io.legado.app.constant.AppPattern import io.legado.app.data.entities.BookSource import io.legado.app.lib.theme.ATH import io.legado.app.lib.theme.primaryTextColor @@ -95,7 +96,7 @@ class ExploreFragment : VMBaseFragment(R.layout.fragment_find_ liveGroup?.observe(viewLifecycleOwner, { groups.clear() it.map { group -> - groups.addAll(group.splitNotBlank(",", ";")) + groups.addAll(group.splitNotBlank(AppPattern.splitGroupRegex)) } upGroupsMenu() }) diff --git a/app/src/main/java/io/legado/app/ui/replacerule/GroupManageDialog.kt b/app/src/main/java/io/legado/app/ui/replacerule/GroupManageDialog.kt index 17d5bcd53..bf9cb5409 100644 --- a/app/src/main/java/io/legado/app/ui/replacerule/GroupManageDialog.kt +++ b/app/src/main/java/io/legado/app/ui/replacerule/GroupManageDialog.kt @@ -16,6 +16,7 @@ import io.legado.app.App import io.legado.app.R import io.legado.app.base.adapter.ItemViewHolder import io.legado.app.base.adapter.SimpleRecyclerAdapter +import io.legado.app.constant.AppPattern import io.legado.app.lib.dialogs.alert import io.legado.app.lib.dialogs.customView import io.legado.app.lib.dialogs.noButton @@ -71,7 +72,7 @@ class GroupManageDialog : DialogFragment(), Toolbar.OnMenuItemClickListener { App.db.replaceRuleDao().liveGroup().observe(viewLifecycleOwner, { val groups = linkedSetOf() it.map { group -> - groups.addAll(group.splitNotBlank(",", ";")) + groups.addAll(group.splitNotBlank(AppPattern.splitGroupRegex)) } adapter.setItems(groups.toList()) }) diff --git a/app/src/main/java/io/legado/app/ui/replacerule/ReplaceRuleActivity.kt b/app/src/main/java/io/legado/app/ui/replacerule/ReplaceRuleActivity.kt index adf9fbb03..52fec9244 100644 --- a/app/src/main/java/io/legado/app/ui/replacerule/ReplaceRuleActivity.kt +++ b/app/src/main/java/io/legado/app/ui/replacerule/ReplaceRuleActivity.kt @@ -17,6 +17,7 @@ import androidx.recyclerview.widget.LinearLayoutManager import io.legado.app.App import io.legado.app.R import io.legado.app.base.VMBaseActivity +import io.legado.app.constant.AppPattern import io.legado.app.data.entities.ReplaceRule import io.legado.app.help.BookHelp import io.legado.app.help.IntentDataHelp @@ -148,7 +149,7 @@ class ReplaceRuleActivity : VMBaseActivity(R.layout.activi App.db.replaceRuleDao().liveGroup().observe(this, { groups.clear() it.map { group -> - groups.addAll(group.splitNotBlank(",", ";")) + groups.addAll(group.splitNotBlank(AppPattern.splitGroupRegex)) } upGroupMenu() }) diff --git a/app/src/main/java/io/legado/app/ui/rss/source/manage/GroupManageDialog.kt b/app/src/main/java/io/legado/app/ui/rss/source/manage/GroupManageDialog.kt index bfb876e0b..48180951f 100644 --- a/app/src/main/java/io/legado/app/ui/rss/source/manage/GroupManageDialog.kt +++ b/app/src/main/java/io/legado/app/ui/rss/source/manage/GroupManageDialog.kt @@ -16,6 +16,7 @@ import io.legado.app.R import io.legado.app.base.BaseDialogFragment import io.legado.app.base.adapter.ItemViewHolder import io.legado.app.base.adapter.SimpleRecyclerAdapter +import io.legado.app.constant.AppPattern import io.legado.app.lib.dialogs.alert import io.legado.app.lib.dialogs.customView import io.legado.app.lib.dialogs.noButton @@ -65,7 +66,7 @@ class GroupManageDialog : BaseDialogFragment(), Toolbar.OnMenuItemClickListener App.db.rssSourceDao().liveGroup().observe(viewLifecycleOwner, { val groups = linkedSetOf() it.map { group -> - groups.addAll(group.splitNotBlank(",", ";")) + groups.addAll(group.splitNotBlank(AppPattern.splitGroupRegex)) } adapter.setItems(groups.toList()) }) 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 2f9050f37..64fc6a849 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 @@ -17,6 +17,7 @@ import androidx.recyclerview.widget.LinearLayoutManager import io.legado.app.App import io.legado.app.R import io.legado.app.base.VMBaseActivity +import io.legado.app.constant.AppPattern import io.legado.app.data.entities.RssSource import io.legado.app.help.IntentDataHelp import io.legado.app.help.ItemTouchCallback @@ -144,7 +145,7 @@ class RssSourceActivity : VMBaseActivity(R.layout.activity_r App.db.rssSourceDao().liveGroup().observe(this, { groups.clear() it.map { group -> - groups.addAll(group.splitNotBlank(",", ";")) + groups.addAll(group.splitNotBlank(AppPattern.splitGroupRegex)) } upGroupMenu() })