aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/TimeUtils.kt20
1 files changed, 13 insertions, 7 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/utils/TimeUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/TimeUtils.kt
index 3ac04b93d..ef434a1e5 100644
--- a/src/main/java/at/hannibal2/skyhanni/utils/TimeUtils.kt
+++ b/src/main/java/at/hannibal2/skyhanni/utils/TimeUtils.kt
@@ -5,6 +5,7 @@ import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators
import at.hannibal2.skyhanni.utils.RegexUtils.matchMatcher
import java.time.LocalDate
import java.time.ZoneId
+import kotlin.math.absoluteValue
import kotlin.time.Duration
import kotlin.time.Duration.Companion.milliseconds
import kotlin.time.Duration.Companion.minutes
@@ -16,12 +17,17 @@ object TimeUtils {
fun Duration.format(
biggestUnit: TimeUnit = TimeUnit.YEAR,
- showMilliSeconds: Boolean = this in -1.seconds..1.seconds,
+ showMilliSeconds: Boolean = this.absoluteValue < 1.seconds,
longName: Boolean = false,
maxUnits: Int = -1,
showSmallerUnits: Boolean = false,
+ showNegativeAsSoon: Boolean = true,
): String {
- var millis = inWholeMilliseconds
+ var millis = inWholeMilliseconds.absoluteValue
+ val prefix = if (isNegative()) {
+ if (showNegativeAsSoon) return "Soon"
+ "-"
+ } else ""
val parts = mutableMapOf<TimeUnit, Int>()
for (unit in TimeUnit.entries) {
@@ -36,7 +42,7 @@ object TimeUtils {
if (absoluteValue < 1.seconds) {
val formattedMillis = (millis / 100).toInt()
- return "0.${formattedMillis}s"
+ return "${prefix}0.${formattedMillis}${TimeUnit.SECOND.getName(formattedMillis, longName)}"
}
var currentUnits = 0
@@ -57,7 +63,7 @@ object TimeUtils {
}
}
}
- return result.trim()
+ return prefix + result.trim()
}
fun Duration.timerColor(default: String = "§f") = when (this) {
@@ -162,7 +168,7 @@ private const val FACTOR_HOURS = FACTOR_MINUTES * 60
private const val FACTOR_DAYS = FACTOR_HOURS * 24
private const val FACTOR_YEARS = (FACTOR_DAYS * 365.25).toLong()
-enum class TimeUnit(val factor: Long, val shortName: String, val longName: String) {
+enum class TimeUnit(val factor: Long, private val shortName: String, private val longName: String) {
YEAR(FACTOR_YEARS, "y", "Year"),
DAY(FACTOR_DAYS, "d", "Day"),
HOUR(FACTOR_HOURS, "h", "Hour"),
@@ -171,13 +177,13 @@ enum class TimeUnit(val factor: Long, val shortName: String, val longName: Strin
;
fun getName(value: Int, longFormat: Boolean) = if (longFormat) {
- " $longName" + if (value > 1) "s" else ""
+ " $longName" + if (value == 1) "" else "s"
} else shortName
fun format(value: Int, longFormat: Boolean = false) = value.addSeparators() + getName(value, longFormat)
}
-val Duration.inPartialSeconds: Double get() = inWholeMilliseconds.toDouble() / 1000
+val Duration.inPartialSeconds: Double get() = toDouble(DurationUnit.SECONDS)
val Duration.inPartialMinutes: Double get() = inPartialSeconds / 60
val Duration.inPartialHours: Double get() = inPartialSeconds / 3600
val Duration.inPartialDays: Double get() = inPartialSeconds / 86_400