From ba091f8c3cfa665e83c789e1a5845d1ae0f26b6b Mon Sep 17 00:00:00 2001 From: Empa <42304516+ItsEmpa@users.noreply.github.com> Date: Mon, 15 Jul 2024 19:54:04 +0200 Subject: Backend: RecalculatingValue as a ReadOnlyProperty (#2151) --- .../java/at/hannibal2/skyhanni/utils/InventoryUtils.kt | 2 +- .../java/at/hannibal2/skyhanni/utils/LorenzUtils.kt | 7 +------ src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt | 2 +- .../at/hannibal2/skyhanni/utils/RecalculatingValue.kt | 17 ++++++++++++++--- .../java/at/hannibal2/skyhanni/utils/SkyblockSeason.kt | 4 +--- 5 files changed, 18 insertions(+), 14 deletions(-) (limited to 'src/main/java/at/hannibal2/skyhanni/utils') diff --git a/src/main/java/at/hannibal2/skyhanni/utils/InventoryUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/InventoryUtils.kt index 76f9fbfcb..c8492086a 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/InventoryUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/InventoryUtils.kt @@ -71,7 +71,7 @@ object InventoryUtils { fun getLeggings(): ItemStack? = getArmor()[1] fun getBoots(): ItemStack? = getArmor()[0] - val isNeuStorageEnabled = RecalculatingValue(10.seconds) { + val isNeuStorageEnabled by RecalculatingValue(10.seconds) { try { val config = NotEnoughUpdates.INSTANCE.config diff --git a/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt index ea2a935a3..3c97919fc 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt @@ -315,13 +315,8 @@ object LorenzUtils { this.cancel() } } - - // TODO move into mayor api - private val recalculateDerpy = - RecalculatingValue(1.seconds) { Perk.DOUBLE_MOBS_HP.isActive } - // TODO move into mayor api - val isDerpy get() = recalculateDerpy.getValue() + val isDerpy by RecalculatingValue(1.seconds) { Perk.DOUBLE_MOBS_HP.isActive } // TODO move into mayor api fun Int.derpy() = if (isDerpy) this / 2 else this diff --git a/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt b/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt index 51a07c0b3..217d681c3 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt @@ -382,7 +382,7 @@ object NEUItems { fun neuHasFocus(): Boolean { if (AuctionSearchOverlay.shouldReplace()) return true if (BazaarSearchOverlay.shouldReplace()) return true - if (InventoryUtils.inStorage() && InventoryUtils.isNeuStorageEnabled.getValue()) return true + if (InventoryUtils.inStorage() && InventoryUtils.isNeuStorageEnabled) return true if (NEUOverlay.searchBarHasFocus) return true return false diff --git a/src/main/java/at/hannibal2/skyhanni/utils/RecalculatingValue.kt b/src/main/java/at/hannibal2/skyhanni/utils/RecalculatingValue.kt index 76f0c0c94..6059ed662 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/RecalculatingValue.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/RecalculatingValue.kt @@ -1,17 +1,28 @@ package at.hannibal2.skyhanni.utils +import kotlin.properties.ReadOnlyProperty +import kotlin.reflect.KProperty import kotlin.time.Duration -class RecalculatingValue(private val expireTime: Duration, val calculation: () -> T) { +class RecalculatingValue(private val expireTime: Duration, private val calculation: () -> T) : ReadOnlyProperty { - private var currentValue = calculation() + private var currentValue: Any? = UNINITIALIZED_VALUE private var lastAccessTime = SimpleTimeMark.farPast() + @Deprecated("use \"by RecalculatingValue\" instead") fun getValue(): T { if (lastAccessTime.passedSince() > expireTime) { currentValue = calculation() lastAccessTime = SimpleTimeMark.now() } - return currentValue + @Suppress("UNCHECKED_CAST") + return currentValue as T + } + + @Suppress("DEPRECATION") + override fun getValue(thisRef: Any?, property: KProperty<*>): T = getValue() + + companion object { + private val UNINITIALIZED_VALUE = Any() } } diff --git a/src/main/java/at/hannibal2/skyhanni/utils/SkyblockSeason.kt b/src/main/java/at/hannibal2/skyhanni/utils/SkyblockSeason.kt index edeb706b7..d74b80959 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/SkyblockSeason.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/SkyblockSeason.kt @@ -21,9 +21,7 @@ enum class SkyblockSeason( companion object { - fun getCurrentSeason(): SkyblockSeason? = currentSeason.getValue() - - private val currentSeason = RecalculatingValue(1.seconds) { + val currentSeason by RecalculatingValue(1.seconds) { getSeasonByName(SkyBlockTime.now().monthName) } -- cgit