aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin
diff options
context:
space:
mode:
authorLinnea Gräf <nea@nea.moe>2024-11-10 17:32:05 +0100
committerLinnea Gräf <nea@nea.moe>2024-11-10 17:32:05 +0100
commitd1241fb0d94aeaa14efe68f0b14bf862d98807bf (patch)
treef989ca108c3f0de0736f16ae29845c15f62a2875 /src/main/kotlin
parent4d0a73030dec57f0358d70314f9cefc752e5a94d (diff)
downloadFirmament-d1241fb0d94aeaa14efe68f0b14bf862d98807bf.tar.gz
Firmament-d1241fb0d94aeaa14efe68f0b14bf862d98807bf.tar.bz2
Firmament-d1241fb0d94aeaa14efe68f0b14bf862d98807bf.zip
feat: More fine grained time display
Diffstat (limited to 'src/main/kotlin')
-rw-r--r--src/main/kotlin/util/FirmFormatters.kt100
-rw-r--r--src/main/kotlin/util/textutil.kt2
2 files changed, 54 insertions, 48 deletions
diff --git a/src/main/kotlin/util/FirmFormatters.kt b/src/main/kotlin/util/FirmFormatters.kt
index c3bdd16..61644db 100644
--- a/src/main/kotlin/util/FirmFormatters.kt
+++ b/src/main/kotlin/util/FirmFormatters.kt
@@ -1,59 +1,65 @@
-
-
package moe.nea.firmament.util
import com.google.common.math.IntMath.pow
import kotlin.math.absoluteValue
import kotlin.time.Duration
+import kotlin.time.Duration.Companion.seconds
object FirmFormatters {
- fun formatCommas(int: Int, segments: Int = 3): String = formatCommas(int.toLong(), segments)
- fun formatCommas(long: Long, segments: Int = 3): String {
- val α = long / 1000
- if (α != 0L) {
- return formatCommas(α, segments) + "," + (long - α * 1000).toString().padStart(3, '0')
- }
- return long.toString()
- }
+ fun formatCommas(int: Int, segments: Int = 3): String = formatCommas(int.toLong(), segments)
+ fun formatCommas(long: Long, segments: Int = 3): String {
+ val α = long / 1000
+ if (α != 0L) {
+ return formatCommas(α, segments) + "," + (long - α * 1000).toString().padStart(3, '0')
+ }
+ return long.toString()
+ }
- fun formatCommas(float: Float, fractionalDigits: Int): String = formatCommas(float.toDouble(), fractionalDigits)
- fun formatCommas(double: Double, fractionalDigits: Int): String {
- val long = double.toLong()
- val δ = (double - long).absoluteValue
- val μ = pow(10, fractionalDigits)
- val digits = (μ * δ).toInt().toString().padStart(fractionalDigits, '0').trimEnd('0')
- return formatCommas(long) + (if (digits.isEmpty()) "" else ".$digits")
- }
+ fun formatCommas(float: Float, fractionalDigits: Int): String = formatCommas(float.toDouble(), fractionalDigits)
+ fun formatCommas(double: Double, fractionalDigits: Int): String {
+ val long = double.toLong()
+ val δ = (double - long).absoluteValue
+ val μ = pow(10, fractionalDigits)
+ val digits = (μ * δ).toInt().toString().padStart(fractionalDigits, '0').trimEnd('0')
+ return formatCommas(long) + (if (digits.isEmpty()) "" else ".$digits")
+ }
- fun formatDistance(distance: Double): String {
- if (distance < 10)
- return "%.1fm".format(distance)
- return "%dm".format(distance.toInt())
- }
+ fun formatDistance(distance: Double): String {
+ if (distance < 10)
+ return "%.1fm".format(distance)
+ return "%dm".format(distance.toInt())
+ }
- fun formatTimespan(duration: Duration, millis: Boolean = false): String {
- if (duration.isInfinite()) {
- return if (duration.isPositive()) "∞"
- else "-∞"
- }
- val sb = StringBuilder()
- if (duration.isNegative()) sb.append("-")
- duration.toComponents { days, hours, minutes, seconds, nanoseconds ->
- if (days > 0) {
- sb.append(days).append("d")
- }
- if (hours > 0) {
- sb.append(hours).append("h")
- }
- if (minutes > 0) {
- sb.append(minutes).append("m")
- }
- sb.append(seconds).append("s")
- if (millis) {
- sb.append(nanoseconds / 1_000_000).append("ms")
- }
- }
- return sb.toString()
- }
+ fun formatTimespan(duration: Duration, millis: Boolean = false): String {
+ if (duration.isInfinite()) {
+ return if (duration.isPositive()) "∞"
+ else "-∞"
+ }
+ val sb = StringBuilder()
+ if (duration.isNegative()) sb.append("-")
+ duration.toComponents { days, hours, minutes, seconds, nanoseconds ->
+ if (days > 0) {
+ sb.append(days).append("d")
+ }
+ if (hours > 0) {
+ sb.append(hours).append("h")
+ }
+ if (minutes > 0) {
+ sb.append(minutes).append("m")
+ }
+ val milliTime = nanoseconds / 1_000_000
+ val deciseconds = milliTime / 100
+ if (millis) {
+ sb.append(seconds).append("s")
+ sb.append(milliTime).append("ms")
+ } else if (duration.absoluteValue < 5.seconds && deciseconds != 0) {
+ sb.append(seconds).append('.').append(deciseconds.digitToChar()).append("s")
+ } else {
+ sb.append(seconds).append("s")
+ }
+ Unit
+ }
+ return sb.toString()
+ }
}
diff --git a/src/main/kotlin/util/textutil.kt b/src/main/kotlin/util/textutil.kt
index 3687743..2770b26 100644
--- a/src/main/kotlin/util/textutil.kt
+++ b/src/main/kotlin/util/textutil.kt
@@ -90,7 +90,7 @@ fun CharSequence.removeColorCodes(keepNonColorCodes: Boolean = false): String {
}
val Text.unformattedString: String
- get() = string.removeColorCodes()
+ get() = string.removeColorCodes() // TODO: maybe shortcircuit this with .visit
val Text.directLiteralStringContent: String? get() = (this.content as? PlainTextContent)?.string()