Compare commits

...

13 Commits

7 changed files with 74 additions and 16 deletions

1
.gitignore vendored
View File

@ -1,4 +1,5 @@
.idea .idea
.kotlin
out/* out/*
*.iml *.iml
target target

View File

@ -1,5 +1,25 @@
# Changelog # Changelog
## 2.5.0
* `Version`:
* `Kotlin`: `2.0.20`
* `Coroutines`: `1.9.0`
* `Serialization`: `1.7.3`
## 2.4.0
* `Version`:
* `Kotlin`: `2.0.10`
* `Coroutines`: `1.8.1`
* `Serialization`: `1.7.1`
* `Klock`: `5.4.0`
* `AndroidXWork`: `2.9.1`
## 2.3.0
* `doWhile` now will guarantee that it will not call `doOnce` more than once for time
## 2.2.9 ## 2.2.9
* `Version`: * `Version`:

View File

@ -9,9 +9,9 @@ android.useAndroidX=true
android.enableJetifier=false android.enableJetifier=false
kotlin_version=1.9.23 kotlin_version=2.0.20
kotlin_coroutines_version=1.8.0 kotlin_coroutines_version=1.9.0
kotlin_serialization_version=1.6.3 kotlin_serialization_version=1.7.3
dokka_version=1.9.20 dokka_version=1.9.20
@ -23,18 +23,18 @@ github_release_plugin_version=2.5.2
## Android ## Android
android_gradle_version=8.1.4 android_gradle_version=8.2.2
android_minSdkVersion=21 android_minSdkVersion=21
android_compileSdkVersion=34 android_compileSdkVersion=35
android_buildToolsVersion=34.0.0 android_buildToolsVersion=35.0.0
dexcount_version=4.0.0 dexcount_version=4.0.0
junit_version=4.12 junit_version=4.12
test_ext_junit_version=1.1.3 test_ext_junit_version=1.1.3
espresso_core=3.4.0 espresso_core=3.4.0
androidx_work_version=2.9.0 androidx_work_version=2.9.1
## Common ## Common
version=2.2.9 version=2.5.0
android_code_version=39 android_code_version=42

View File

@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip

View File

@ -139,10 +139,14 @@ abstract class KronSchedulerWork(
} }
throw e throw e
} }
when (result) { result.checkResults(
is Result.Failure -> if (prolongOnFailure) prolong() onFailure = {
is Result.Success -> if (prolongOnSuccess) prolong() if (prolongOnFailure) prolong()
} },
onSuccess = {
if (prolongOnSuccess) prolong()
}
)
return result return result
} }
} }

View File

@ -0,0 +1,15 @@
package dev.inmo.krontab
import android.annotation.SuppressLint
import androidx.work.ListenableWorker
@SuppressLint("RestrictedApi")
internal inline fun ListenableWorker.Result.checkResults(
onFailure: () -> Unit,
onSuccess: () -> Unit
) {
when (this) {
is ListenableWorker.Result.Failure -> onFailure()
is ListenableWorker.Result.Success -> onSuccess()
}
}

View File

@ -71,9 +71,18 @@ suspend inline fun <T> doOnceTz(
* Will execute [block] while it will return true as a result of its calculation * Will execute [block] while it will return true as a result of its calculation
*/ */
suspend inline fun KronScheduler.doWhile(block: (DateTime) -> Boolean) { suspend inline fun KronScheduler.doWhile(block: (DateTime) -> Boolean) {
var latest: DateTime? = null
do { do {
delay(1L) delay(1L)
} while (doOnce(block)) val result = doOnce {
if (latest != it) {
latest = it
block(it)
} else {
null
}
}
} while (result == null || result)
} }
/** /**
* Will execute [block] while it will return true as a result of its calculation * Will execute [block] while it will return true as a result of its calculation
@ -85,9 +94,18 @@ suspend inline fun KronScheduler.doWhileLocal(block: (DateTime) -> Boolean) = do
* Will execute [block] while it will return true as a result of its calculation * Will execute [block] while it will return true as a result of its calculation
*/ */
suspend inline fun KronScheduler.doWhileTz(noinline block: suspend (DateTimeTz) -> Boolean) { suspend inline fun KronScheduler.doWhileTz(noinline block: suspend (DateTimeTz) -> Boolean) {
var latest: DateTimeTz? = null
do { do {
delay(1L) delay(1L)
} while (doOnceTz(block)) val result = doOnceTz {
if (latest != it) {
latest = it
block(it)
} else {
null
}
}
} while (result == null || result)
} }
/** /**