contents for reading
This commit is contained in:
1 parent
cde4d89eed
commit
7681590992
7 files changed
+301
-22
No files matched your search
@@ -665,16 +665,34 @@ private fun ReadingPosition.toFormatHintsJson(): String =
|
||||
buildString {
|
||||
append("""{"firstVisibleItemIndex":$itemIndex,"firstVisibleItemScrollOffset":$scrollOffset""")
|
||||
readAloudSentenceIndex?.let { append(""","readAloudSentenceIndex":$it""") }
|
||||
if (backStack.isNotEmpty()) {
|
||||
append(""","backStack":[""")
|
||||
append(backStack.take(MaxStoredReadingBackStack).joinToString(",") { it.toFormatHintsJson() })
|
||||
append("]")
|
||||
}
|
||||
append("}")
|
||||
}
|
||||
|
||||
private fun String.toReadingPosition(): ReadingPosition? {
|
||||
val position = toReadingPositionObject() ?: return null
|
||||
val backStackJson = Regex(""""backStack"\s*:\s*\[(.*)]""").find(this)?.groupValues?.getOrNull(1)
|
||||
val backStack = backStackJson
|
||||
?.let { ReadingPositionObjectRegex.findAll(it).mapNotNull { match -> match.value.toReadingPositionObject() }.toList() }
|
||||
.orEmpty()
|
||||
.take(MaxStoredReadingBackStack)
|
||||
return position.copy(backStack = backStack)
|
||||
}
|
||||
|
||||
private fun String.toReadingPositionObject(): ReadingPosition? {
|
||||
val index = Regex(""""firstVisibleItemIndex"\s*:\s*(\d+)""").find(this)?.groupValues?.getOrNull(1)?.toIntOrNull()
|
||||
val offset = Regex(""""firstVisibleItemScrollOffset"\s*:\s*(\d+)""").find(this)?.groupValues?.getOrNull(1)?.toIntOrNull()
|
||||
val sentenceIndex = Regex(""""readAloudSentenceIndex"\s*:\s*(\d+)""").find(this)?.groupValues?.getOrNull(1)?.toIntOrNull()
|
||||
return if (index != null && offset != null) ReadingPosition(index, offset, sentenceIndex) else null
|
||||
}
|
||||
|
||||
private val ReadingPositionObjectRegex = Regex("""[{][^{}]*[}]""")
|
||||
private const val MaxStoredReadingBackStack = 10
|
||||
|
||||
private fun String.toSearchPrefixes(): List<String> =
|
||||
SearchPrefixRegex.findAll(lowercase()).map { it.value }.distinct().toList()
|
||||
|
||||
|
||||
Reference in new issue
Block a user