# Changelog ## 2.6.1 ## 2.6.0 * Fix of `doOnceTz` behaviour: now it will use local time as utc time to get next waking up time ## 2.5.1 * Add cleaning up of incoming template, which must remove all malformed parts from string template (fix of [#126](https://github.com/InsanusMokrassar/krontab/issues/126)) * Add support of insufficient amount of arguments (fix of [#126](https://github.com/InsanusMokrassar/krontab/issues/126)) * `Version`: * `Kotlin`: `2.0.21` * `AndroidXWork`: `2.10.0` ## 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 * `Version`: * `Kotlin`: `1.9.23` * `Serialization`: `1.6.3` * `Klock`: `5.3.2` * Fixes in build-in schedulers ## 2.2.8 * `Version`: * `Coroutines`: `1.8.0` ## 2.2.7 * `Version`: * `Klock`: `5.3.1` * `AndroidXWork`: `2.9.0` ## 2.2.6 **Since this version klock depdendency replaced with `com.soywiz.korge:korlibs-time`** * `Version`: * `Klock`: `5.3.0` ## 2.2.5 * `Versions` * `Kotlin`: `1.9.22` * `Serialization`: `1.6.2` ## 2.2.4 * `Versions` * `Kotlin`: `1.9.21` * `Serialization`: `1.6.1` ## 2.2.3 **THIS UPDATE CONTAINS UPGRADE OF USED JDK UP TO 17** * Versions * `Kotlin`: `1.9.20` ## 2.2.2 * Versions * `Kotlin`: `1.9.20-RC` * `Android` (min/target): `34` ## 2.2.1 * Potential fix of [#65](https://github.com/InsanusMokrassar/krontab/issues/65) * Versions * `Kotlin`: `1.9.20-Beta` * `Klock`: `4.0.10` * `Serialization`: `1.6.0` ## 2.2.0 * Versions * `Kotlin`: `1.9.0` * `Coroutines`: `1.7.3` * `Klock`: `4.0.9` ## 2.1.2 * Versions * `Coroutines`: `1.7.2` * All callbacks for standard extensions like `doInfinity` now fully inline ## 2.1.1 * `asFlowWithoutDelays` and `asTzFlowWithoutDelays` will have nullable `since` parameters with default to `null` to avoid any inconsistency of `Flow` idiom.
About the reason of changes Cold flows should not contain some state by default. So, it was not right to save some `DateTime`/`DateTimeTz` by default. Now it will not use some external state unless developers will set it manually
## 2.1.0 * Versions * `Kotlin`: `1.8.22` * `Klock`: `4.0.3` * New value class `KrontabConfig`. It is preferable way to create `KronScheduler` instead of `KrontabTemplate` since this update * You may configure krontab with builders using simple `KronScheduler` invoke extension * New useful extensions like `KronScheduler.daily` * `KrontabTemplateWrapper` is obsolete in favor to `KrontabConfig` ## 2.0.0 * Versions * `Kotlin`: `1.8.21` * `Klock`: `4.0.1` * Support of `mingwx64` platform ## 1.0.0 * Versions * `Kotlin`: `1.8.20` * `AndroidXWork`: `2.8.1` ## 0.10.0 * New extensions for `KronScheduler`: * `asTzFlowWithoutDelays`/`asFlowWithoutDelays` * `asTzFlowWithDelays`/`asFlowWithDelays` * Old `KronScheduler.asFlow` and `KronScheduler.asTzFlow` temporarily marked as deprecated: after several versions their behaviour will be changed to undelayed one * All the flow extensions now use `cold` non-channel flows. Potentially it should increase performance and decrease memory usage ## 0.9.0 * Versions * `Kotlin`: `1.8.10` * `AndroidXWork`: `2.8.0` ## 0.8.5 * Project is now available in owner `Gitea`: https://git.inmo.dev/InsanusMokrassar/-/packages/maven/dev.inmo-krontab * `KronSchedulerTz#next` with incoming `DateTime` now will use adjusted local time instead of unadjusted one * `CronDateTimeSchedulerTz#next` with incoming `DateTime` will convert that parameter to internal offset directly ## 0.8.4 * Versions * `Kotlin`: `1.7.22` ## 0.8.3 * Versions * `Kotlin`: `1.7.21` * `Klock`: `3.4.0` ## 0.8.2 **THIS VERSION HAS CHANGED COMPILE ANDROID SDK FROM 32 -> 33** * Versions * `Kotlin`: `1.7.20` * `Klock`: `3.2.0` ## 0.8.1 * Versions * `Klock`: `3.1.0` ## 0.8.0 **THIS VERSION HAS CHANGED MIN ANDROID SDK FROM 19 -> 21** * Versions * `Kotlin`: `1.7.10` * `Klock`: `3.0.0` ## 0.7.5 * Versions * `Coroutines`: `1.6.4` ## 0.7.4 * Versions * `Coroutines`: `1.6.3` ## 0.7.3 * Versions * `Kotlin`: `1.6.21` * Several bug fixes ([#27](https://github.com/InsanusMokrassar/krontab/issues/27), [#34](https://github.com/InsanusMokrassar/krontab/issues/34)) * New factories for `KronScheduler` and `KronSchedulerTz` (fix of [#35](https://github.com/InsanusMokrassar/krontab/issues/35)) * Fill extensions for flow with time zones (fix of [#33](https://github.com/InsanusMokrassar/krontab/issues/33)) ## 0.7.2 * Versions * `Coroutines`: `1.6.1` * `Klock`: `2.7.0` * Deprecate `do*Local` due to their redundancy (use `do*` instead) * Add support of milliseconds as optional parameter after month (fix of [#31](https://github.com/InsanusMokrassar/krontab/issues/31)) * Add support of filters for `Flow`s with `DateTime` (fix of [#30](https://github.com/InsanusMokrassar/krontab/issues/30)) ## 0.7.1 * Versions * `Klock`: `2.5.2` ## 0.7.0 **ALL DEPRECATIONS HAVE BEEN REMOVED** * Versions * `Kotlin`: `1.6.10` * `Klock`: `2.4.10` * `Coroutines`: `1.6.0` * `Androidx Work`: `2.7.1` ## 0.6.6 * Versions * `Klock`: `2.4.8` * `Androidx Work`: `2.7.0` ## 0.6.5 * Flows now use `doWhile` functions * `doWhile` now use additional delay (for 1 ms) for cases when `block` executing too fast * New extensions for `KronScheduler`: `do(Once/While/Infinity)Local`/`do(Once/While/Infinity)Tz` ## 0.6.4 * Versions * `Kotlin`: `1.5.31` * `Coroutines`: `1.5.2` * `Klock`: `2.4.2` * `Androidx Work`: `2.6.0` ## 0.6.3 * Versions * `Kotlin`: `1.5.30` * `Klock`: `2.4.0` ## 0.6.2 **LEGACY COMPILER VARIANT FOR JS IS NOT AVAILABLE SINCE THIS UPDATE** * Versions * `Kotlin`: `1.5.21` * `Coroutines`: `1.5.1` * `Klock`: `2.3.1` ## 0.6.1 * Versions * `Klock`: `2.1.0` -> `2.1.2` * Rewriting of default mechanism of `KronScheduler`s ## 0.6.0 * Versions * `Kotlin`: `1.4.32` -> `1.5.10` * `Coroutines`: `1.4.3` -> `1.5.0` * `Klock`: `2.0.7` -> `2.1.0` ## 0.5.2 * Versions * `Kotlin`: `1.4.31` -> `1.4.32` * Supporting of weekdays * Supporting of timezones * Any `KronScheduler` now can be used for calling `next` with `DateTimeTz` * New type `KronSchedulerTz` * `SchedulerFlow` has been deprecated * New extension `asTzFlow` and small changes in `asFlow` logic * `merge` extensions now return `CollectionKronScheduler` instead of just `KronScheduler` ## 0.5.1 * Versions * `Kotlin`: `1.4.21` -> `1.4.31` * `Coroutines`: `1.4.2` -> `1.4.3` * `Klock`: `2.0.3` -> `2.0.7` * `Androidx Work`: `2.4.0` -> `2.5.0` ## 0.5.0 Years **BREAKING CHANGES** * `CronDateTimeScheduler` has been marked as `internal` and no longer accessible outside of internal functions * Old methods `merge` and `plus` related to `CronDateTimeScheduler` has been marked as `deprecated` and changed their parameters types - it is `KronScheduler` now * New methods `merge` has been added * **`KronScheduler#next` method now is nullable. Use `nextOrRelative`/`nextOrNow` to get next time certainly** * **Years was added as optional part of krontab template and opportunity in `SchedulerBuilder`** * New builder `YearsBuilder` * `SchedulerFlow#collectSafely` will be normally (without exceptions) finish when `next` of scheduler will return null * `KronScheduler#doOnce` will run code immediately in case when `next` is returning null value * `KrontabTemplateWrapper` has been added * New extension `KrontabTemplate#toKronScheduler` (works as `toSchedule`) * **Fixed issue related to the fact that `toNearDateTime` of `CronDateTime` incorrectly handled months** * **Android target has been added** ## 0.4.2 * Versions * `Kotlin`: `1.4.20` -> `1.4.21` * `Klock`: `2.0.1` -> `2.0.3` * `CronDateTimeScheduler` now is deprecated and will be set up as `internal` in future ## 0.4.1 * Versions: * `Coroutines`: `1.4.1` -> `1.4.2` * `Klock`: `2.0.0` -> `2.0.1` * `CronDateTimeScheduler` now is public * New functions for `CronDateTimeScheduler` * Add `CollectionKronScheduler`. It will give opportunity to unite several schedulers in one ## 0.4.0 **BREAKING CHANGES** Package of project has been changed. Migration: * Replace in your dependencies `com.insanusmokrassar:krontab` by `dev.inmo:krontab` * Replace in your project all imports `com.insanusmokrassar.krontab` by `dev.inmo.krontab` * Versions: * `Kotlin`: `1.4.10` -> `1.4.20` * `Klock`: `1.12.1` -> `2.0.0` ## 0.3.3 * Versions: * `Coroutines`: `1.3.9` -> `1.4.1` ## 0.3.2 * Function `TimeBuilder#each` was added (works as `at`) * Add opportunity to use `first` shortcuts: * Value property `TimeBuilder#first` for including via functions like `TimeBuilder#at` * Shortcut for kron string format `f` or `F` * Add opportunity to use `last` shortcuts: * Value property `TimeBuilder#last` for including via functions like `TimeBuilder#at` * Shortcut for kron string format `l` or `L` ## 0.3.1 * Versions: * `Kotlin`: `1.4.0` -> `1.4.10` * `Klock`: `1.12.0` -> `1.12.1` ## 0.3.0 * Versions: * `Kotlin`: `1.3.72` -> `1.4.0` * `Coroutines`: `1.3.8` -> `1.3.9` * `Klock`: `1.11.14` -> `1.12.0` * Typealias `KrontabTemplate` was added * Extension `KrontabTemplate#toSchedule` was added ### 0.2.4 * Updates in libraries: * Klock `1.11.3` -> `1.11.14` * Coroutines `1.3.7` -> `1.3.8` * Ranges support were included. Now it is possible to correctly use syntax `0-5` in strings schedules ## 0.2.3 * Updates in libraries: * Kotlin `1.3.70` -> `1.3.72` * Coroutines `1.3.5` -> `1.3.7` * Klock `1.10.0` -> `1.11.3` * A lot of KDocs added and fixed * `EverySecondScheduler` changed its building logic - now it is lazy with builder using * `KronScheduler#doOnce` was optimized: now it will be explicitly called once and return result of its calculations * `KronScheduler#doWhile` was rewritten to use `KronScheduler#doOnce` for calculations of `block` result * New `buildSchedule(String)` function as a shortcut for `createSimpleScheduler(String)` ## 0.2.2 * Updates in libraries: * Kotlin `1.3.61` -> `1.3.70` * Coroutines `1.3.3` -> `1.3.5` * Klock `1.8.6` -> `1.10.0` ## 0.2.1 * Added support of flows: now any `KronScheduler` can be convert to `Flow` using `asFlow` extension ## 0.2.0 * Updated way of publishing (for more info look at the [git](https://git.insanusmokrassar.com/InsanusMokrassar/krontab)) * Updates in libraries: * Coroutines `1.3.2` -> `1.3.3` * Klock `1.7.3` -> `1.8.6`