diff --git a/CHANGELOG.md b/CHANGELOG.md index 695dd72..08ceae5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ * `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 diff --git a/src/commonMain/kotlin/dev/inmo/krontab/utils/flows/Filters.kt b/src/commonMain/kotlin/dev/inmo/krontab/utils/flows/Filters.kt new file mode 100644 index 0000000..1e6b91e --- /dev/null +++ b/src/commonMain/kotlin/dev/inmo/krontab/utils/flows/Filters.kt @@ -0,0 +1,34 @@ +package dev.inmo.krontab.utils.flows + +import com.soywiz.klock.* +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.filter + +@Suppress("NOTHING_TO_INLINE") +inline fun Flow.filterSeconds(vararg seconds: Int) = filter { it.seconds in seconds } + +@Suppress("NOTHING_TO_INLINE") +inline fun Flow.filterMinutes(vararg minutes: Int) = filter { it.minutes in minutes } + +@Suppress("NOTHING_TO_INLINE") +inline fun Flow.filterHours(vararg hours: Int) = filter { it.hours in hours } + +@Suppress("NOTHING_TO_INLINE") +inline fun Flow.filterDaysOfMonths(vararg daysOfMonths: Int) = filter { it.dayOfMonth in daysOfMonths } + +@Suppress("NOTHING_TO_INLINE") +inline fun Flow.filterMonths(vararg months: Month) = filter { it.month in months } +@Suppress("NOTHING_TO_INLINE") +inline fun Flow.filterMonths0(vararg months: Int) = filter { it.month0 in months } +@Suppress("NOTHING_TO_INLINE") +inline fun Flow.filterMonths1(vararg months: Int) = filter { it.month1 in months } + +@Suppress("NOTHING_TO_INLINE") +inline fun Flow.filterYears(year: Year) = filter { it.year == year } +@Suppress("NOTHING_TO_INLINE") +inline fun Flow.filterYears(vararg years: Int) = filter { it.yearInt in years } + +@Suppress("NOTHING_TO_INLINE") +inline fun Flow.filterWeekDays(vararg weekDays: DayOfWeek) = filter { it.dayOfWeek in weekDays } +@Suppress("NOTHING_TO_INLINE") +inline fun Flow.filterWeekDays(vararg weekDays: Int) = filter { it.dayOfWeekInt in weekDays } diff --git a/src/commonMain/kotlin/dev/inmo/krontab/utils/flows/When.kt b/src/commonMain/kotlin/dev/inmo/krontab/utils/flows/When.kt new file mode 100644 index 0000000..8fa156d --- /dev/null +++ b/src/commonMain/kotlin/dev/inmo/krontab/utils/flows/When.kt @@ -0,0 +1,25 @@ +package dev.inmo.krontab.utils.flows + +import com.soywiz.klock.* +import kotlinx.coroutines.flow.Flow + +@Suppress("NOTHING_TO_INLINE") +inline fun Flow.onlyStartsOfMinutes() = filterSeconds(0) + +@Suppress("NOTHING_TO_INLINE") +inline fun Flow.onlyStartsOfHours() = filterMinutes(0).onlyStartsOfMinutes() + +@Suppress("NOTHING_TO_INLINE") +inline fun Flow.onlyStartsOfDays() = filterHours(0).onlyStartsOfHours() + +@Suppress("NOTHING_TO_INLINE") +inline fun Flow.onlyStartsOfMondays() = filterWeekDays(DayOfWeek.Monday).onlyStartsOfDays() + +@Suppress("NOTHING_TO_INLINE") +inline fun Flow.onlyStartsOfSundays() = filterWeekDays(DayOfWeek.Sunday).onlyStartsOfDays() + +@Suppress("NOTHING_TO_INLINE") +inline fun Flow.onlyStartsOfMonths() = filterDaysOfMonths(1).onlyStartsOfDays() + +@Suppress("NOTHING_TO_INLINE") +inline fun Flow.onlyStartsOfYears() = filterMonths(Month.January).onlyStartsOfMonths()