From 17971ed8fb3991763179b5f955ae8e22437b71b8 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Sun, 3 Nov 2024 17:40:42 +0600 Subject: [PATCH] now doOnceTz works as it must --- CHANGELOG.md | 2 ++ src/commonMain/kotlin/Executes.kt | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c4f8f1f..fe95f62 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ # Changelog +* Fix of `doOnceTz` behaviour: now it will use local time as utc time to get next waking up time + ## 2.6.0 ## 2.5.1 diff --git a/src/commonMain/kotlin/Executes.kt b/src/commonMain/kotlin/Executes.kt index 90a31ba..751222d 100644 --- a/src/commonMain/kotlin/Executes.kt +++ b/src/commonMain/kotlin/Executes.kt @@ -35,6 +35,8 @@ suspend inline fun KronScheduler.doOnceLocal(block: (DateTime) -> T): T = do /** * Execute [block] once at the [KronScheduler.next] time and return result of [block] calculation. * + * WARNING!!! This method will use local time instead of utc + * * WARNING!!! If you want to launch it in parallel, you must do this explicitly. * * WARNING!!! In case if [KronScheduler.next] of [this] instance will return null, [block] will be called immediatelly @@ -42,7 +44,7 @@ suspend inline fun KronScheduler.doOnceLocal(block: (DateTime) -> T): T = do suspend inline fun KronScheduler.doOnceTz(noinline block: suspend (DateTimeTz) -> T): T { val time = when (this) { is KronSchedulerTz -> nextOrNowWithOffset() - else -> nextOrNow().local + else -> nextTimeZoned() ?: DateTimeTz.nowLocal() } delay((time - DateTimeTz.nowLocal()).millisecondsLong) return block(time)