From 0d146b08ec5ece9356f062df3841c98adfb2998f Mon Sep 17 00:00:00 2001 From: HapeLee <63206378+HapeLee@users.noreply.github.com> Date: Sun, 28 Jun 2026 01:56:50 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=8C=89=E9=86=92=E7=9B=AE=E6=A0=87?= =?UTF-8?q?=E7=AD=BE=E8=A7=84=E5=88=99=E6=8E=92=E5=BA=8F=E4=B9=A6=E7=B1=8D?= =?UTF-8?q?=E8=AF=A6=E6=83=85=E6=A0=87=E7=AD=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/legado/app/help/book/BookExtensions.kt | 17 ++++----- .../app/help/book/BookExtensionsTest.kt | 35 +++++++++++++++++++ 2 files changed, 44 insertions(+), 8 deletions(-) create mode 100644 app/src/test/java/io/legado/app/help/book/BookExtensionsTest.kt diff --git a/app/src/main/java/io/legado/app/help/book/BookExtensions.kt b/app/src/main/java/io/legado/app/help/book/BookExtensions.kt index b14eefef6..ef5574f35 100644 --- a/app/src/main/java/io/legado/app/help/book/BookExtensions.kt +++ b/app/src/main/java/io/legado/app/help/book/BookExtensions.kt @@ -355,7 +355,7 @@ fun parseHighlightedTags( return emptyList() to kindLabels } - val compiledRules = rules.mapNotNull { rule -> + val compiledRules = rules.sortedBy { it.order }.mapNotNull { rule -> val regex = try { Regex(rule.pattern) } catch (_: Exception) { @@ -367,8 +367,7 @@ fun parseHighlightedTags( return emptyList() to kindLabels } - // Group matched labels by rule - val ruleToLabels = linkedMapOf>() + val ruleToLabels = mutableMapOf>() val regular = mutableListOf() for (tag in kindLabels) { @@ -385,11 +384,13 @@ fun parseHighlightedTags( } } - val highlighted = ruleToLabels.map { (rule, labels) -> - HighlightedTag( - matchedLabels = labels, - title = rule.title.takeIf { it.isNotBlank() }, - ) + val highlighted = compiledRules.mapNotNull { (rule, _) -> + ruleToLabels[rule]?.let { labels -> + HighlightedTag( + matchedLabels = labels, + title = rule.title.takeIf { it.isNotBlank() }, + ) + } } return highlighted to regular diff --git a/app/src/test/java/io/legado/app/help/book/BookExtensionsTest.kt b/app/src/test/java/io/legado/app/help/book/BookExtensionsTest.kt new file mode 100644 index 000000000..0ded634ee --- /dev/null +++ b/app/src/test/java/io/legado/app/help/book/BookExtensionsTest.kt @@ -0,0 +1,35 @@ +package io.legado.app.help.book + +import io.legado.app.data.entities.HighlightTagRule +import org.junit.Assert.assertEquals +import org.junit.Test + +class BookExtensionsTest { + + @Test + fun parseHighlightedTags_ordersMatchesByRuleOrder() { + val rules = listOf( + HighlightTagRule( + id = 2, + title = "次要", + pattern = "动作", + order = 1, + ), + HighlightTagRule( + id = 1, + title = "优先", + pattern = "奇幻", + order = 0, + ), + ) + + val (highlighted, regular) = parseHighlightedTags( + kindLabels = listOf("动作", "普通", "奇幻"), + rules = rules, + ) + + assertEquals(listOf("优先", "次要"), highlighted.map { it.title }) + assertEquals(listOf(listOf("奇幻"), listOf("动作")), highlighted.map { it.matchedLabels }) + assertEquals(listOf("普通"), regular) + } +}