Merge pull request #1575 from HapeLee/feature/highlight-tag-sorting
按醒目标签规则排序书籍详情标签
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user