diff options
| -rw-r--r-- | src/main/java/at/hannibal2/skyhanni/utils/TimeUtils.kt | 20 |
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 |
