2020-06-03 15:07:10 +00:00
|
|
|
package com.insanusmokrassar.krontab.internal
|
2019-10-10 10:43:52 +00:00
|
|
|
|
2020-06-03 15:07:10 +00:00
|
|
|
import com.insanusmokrassar.krontab.KronScheduler
|
|
|
|
import com.insanusmokrassar.krontab.anyCronDateTime
|
2019-10-10 10:43:52 +00:00
|
|
|
import com.soywiz.klock.DateTime
|
|
|
|
|
2020-06-03 15:07:10 +00:00
|
|
|
/**
|
|
|
|
* Cron-oriented realisation of [KronScheduler]
|
2020-06-03 15:21:52 +00:00
|
|
|
*
|
|
|
|
* @see com.insanusmokrassar.krontab.AnyTimeScheduler
|
|
|
|
* @see com.insanusmokrassar.krontab.EverySecondScheduler
|
|
|
|
* @see com.insanusmokrassar.krontab.EveryMinuteScheduler
|
|
|
|
* @see com.insanusmokrassar.krontab.EveryHourScheduler
|
|
|
|
* @see com.insanusmokrassar.krontab.EveryDayOfMonthScheduler
|
|
|
|
* @see com.insanusmokrassar.krontab.EveryMonthScheduler
|
|
|
|
*
|
|
|
|
* @see com.insanusmokrassar.krontab.builder.buildSchedule
|
|
|
|
* @see com.insanusmokrassar.krontab.builder.SchedulerBuilder
|
2020-06-03 15:07:10 +00:00
|
|
|
*/
|
2019-10-10 10:43:52 +00:00
|
|
|
internal data class CronDateTimeScheduler internal constructor(
|
|
|
|
internal val cronDateTimes: List<CronDateTime>
|
|
|
|
) : KronScheduler {
|
2020-06-03 15:07:10 +00:00
|
|
|
/**
|
|
|
|
* @return Near date using [cronDateTimes] list and getting the [Iterable.min] one
|
|
|
|
*
|
|
|
|
* @see toNearDateTime
|
|
|
|
*/
|
2019-10-10 10:43:52 +00:00
|
|
|
override suspend fun next(relatively: DateTime): DateTime {
|
|
|
|
return cronDateTimes.map { it.toNearDateTime(relatively) }.min() ?: anyCronDateTime.toNearDateTime(relatively)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|