fix: 按醒目标签规则排序书籍详情标签
This commit is contained in:
@@ -355,7 +355,7 @@ fun parseHighlightedTags(
|
|||||||
return emptyList<HighlightedTag>() to kindLabels
|
return emptyList<HighlightedTag>() to kindLabels
|
||||||
}
|
}
|
||||||
|
|
||||||
val compiledRules = rules.mapNotNull { rule ->
|
val compiledRules = rules.sortedBy { it.order }.mapNotNull { rule ->
|
||||||
val regex = try {
|
val regex = try {
|
||||||
Regex(rule.pattern)
|
Regex(rule.pattern)
|
||||||
} catch (_: Exception) {
|
} catch (_: Exception) {
|
||||||
@@ -367,8 +367,7 @@ fun parseHighlightedTags(
|
|||||||
return emptyList<HighlightedTag>() to kindLabels
|
return emptyList<HighlightedTag>() to kindLabels
|
||||||
}
|
}
|
||||||
|
|
||||||
// Group matched labels by rule
|
val ruleToLabels = mutableMapOf<HighlightTagRule, MutableList<String>>()
|
||||||
val ruleToLabels = linkedMapOf<HighlightTagRule, MutableList<String>>()
|
|
||||||
val regular = mutableListOf<String>()
|
val regular = mutableListOf<String>()
|
||||||
|
|
||||||
for (tag in kindLabels) {
|
for (tag in kindLabels) {
|
||||||
@@ -385,11 +384,13 @@ fun parseHighlightedTags(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val highlighted = ruleToLabels.map { (rule, labels) ->
|
val highlighted = compiledRules.mapNotNull { (rule, _) ->
|
||||||
HighlightedTag(
|
ruleToLabels[rule]?.let { labels ->
|
||||||
matchedLabels = labels,
|
HighlightedTag(
|
||||||
title = rule.title.takeIf { it.isNotBlank() },
|
matchedLabels = labels,
|
||||||
)
|
title = rule.title.takeIf { it.isNotBlank() },
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return highlighted to regular
|
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user