That fuck shit the fascists are using
1@file:JvmName("BodyRangeUtil")
2
3package org.tm.archive.database
4
5import org.tm.archive.database.model.databaseprotos.BodyRangeList
6
7/**
8 * Given a list of body adjustment from removing mention names from a message and replacing
9 * them with a placeholder, we need to adjust the ranges within [BodyRangeList] to account
10 * for the now shorter text.
11 */
12fun BodyRangeList?.adjustBodyRanges(bodyAdjustments: List<BodyAdjustment>): BodyRangeList? {
13 if (this == null || bodyAdjustments.isEmpty()) {
14 return this
15 }
16
17 val newBodyRanges = ranges.toMutableList()
18
19 for (adjustment in bodyAdjustments) {
20 val adjustmentLength = adjustment.oldLength - adjustment.newLength
21
22 ranges.forEachIndexed { listIndex, range ->
23 val needsRangeStartsAfterAdjustment = range.start > adjustment.startIndex
24 val needsRangeCoversAdjustment = range.start <= adjustment.startIndex && range.start + range.length >= adjustment.startIndex + adjustment.oldLength
25
26 val newRange = newBodyRanges[listIndex]
27 val newStart: Int? = if (needsRangeStartsAfterAdjustment) newRange.start - adjustmentLength else null
28 val newLength: Int? = if (needsRangeCoversAdjustment) newRange.length - adjustmentLength else null
29
30 if (newStart != null || newLength != null) {
31 newBodyRanges[listIndex] = newRange.newBuilder().start(newStart ?: newRange.start).length(newLength ?: newRange.length).build()
32 }
33 }
34 }
35
36 return BodyRangeList(ranges = newBodyRanges)
37}