Merge pull request #1575 from HapeLee/feature/highlight-tag-sorting

按醒目标签规则排序书籍详情标签
This commit is contained in:
Kudomaga
2026-06-28 02:00:20 +08:00
committed by GitHub
2 changed files with 44 additions and 8 deletions
@@ -355,7 +355,7 @@ fun parseHighlightedTags(
return emptyList<HighlightedTag>() 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<HighlightedTag>() to kindLabels
}
// Group matched labels by rule
val ruleToLabels = linkedMapOf<HighlightTagRule, MutableList<String>>()
val ruleToLabels = mutableMapOf<HighlightTagRule, MutableList<String>>()
val regular = mutableListOf<String>()
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
@@ -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)
}
}