mirror of
https://github.com/InsanusMokrassar/krontab.git
synced 2024-11-23 02:28:52 +00:00
commit
46f227f9a3
24
CHANGELOG.md
24
CHANGELOG.md
@ -1,11 +1,23 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
### 0.3.3
|
## 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:
|
* Versions:
|
||||||
* `Coroutines`: `1.3.9` -> `1.4.1`
|
* `Coroutines`: `1.3.9` -> `1.4.1`
|
||||||
|
|
||||||
### 0.3.2
|
## 0.3.2
|
||||||
|
|
||||||
* Function `TimeBuilder#each` was added (works as `at`)
|
* Function `TimeBuilder#each` was added (works as `at`)
|
||||||
* Add opportunity to use `first` shortcuts:
|
* Add opportunity to use `first` shortcuts:
|
||||||
@ -15,7 +27,7 @@
|
|||||||
* Value property `TimeBuilder#last` for including via functions like `TimeBuilder#at`
|
* Value property `TimeBuilder#last` for including via functions like `TimeBuilder#at`
|
||||||
* Shortcut for kron string format `l` or `L`
|
* Shortcut for kron string format `l` or `L`
|
||||||
|
|
||||||
### 0.3.1
|
## 0.3.1
|
||||||
|
|
||||||
* Versions:
|
* Versions:
|
||||||
* `Kotlin`: `1.4.0` -> `1.4.10`
|
* `Kotlin`: `1.4.0` -> `1.4.10`
|
||||||
@ -37,7 +49,7 @@
|
|||||||
* Coroutines `1.3.7` -> `1.3.8`
|
* Coroutines `1.3.7` -> `1.3.8`
|
||||||
* Ranges support were included. Now it is possible to correctly use syntax `0-5` in strings schedules
|
* Ranges support were included. Now it is possible to correctly use syntax `0-5` in strings schedules
|
||||||
|
|
||||||
### 0.2.3
|
## 0.2.3
|
||||||
|
|
||||||
* Updates in libraries:
|
* Updates in libraries:
|
||||||
* Kotlin `1.3.70` -> `1.3.72`
|
* Kotlin `1.3.70` -> `1.3.72`
|
||||||
@ -49,14 +61,14 @@
|
|||||||
* `KronScheduler#doWhile` was rewritten to use `KronScheduler#doOnce` for calculations of `block` result
|
* `KronScheduler#doWhile` was rewritten to use `KronScheduler#doOnce` for calculations of `block` result
|
||||||
* New `buildSchedule(String)` function as a shortcut for `createSimpleScheduler(String)`
|
* New `buildSchedule(String)` function as a shortcut for `createSimpleScheduler(String)`
|
||||||
|
|
||||||
### 0.2.2
|
## 0.2.2
|
||||||
|
|
||||||
* Updates in libraries:
|
* Updates in libraries:
|
||||||
* Kotlin `1.3.61` -> `1.3.70`
|
* Kotlin `1.3.61` -> `1.3.70`
|
||||||
* Coroutines `1.3.3` -> `1.3.5`
|
* Coroutines `1.3.3` -> `1.3.5`
|
||||||
* Klock `1.8.6` -> `1.10.0`
|
* Klock `1.8.6` -> `1.10.0`
|
||||||
|
|
||||||
### 0.2.1
|
## 0.2.1
|
||||||
|
|
||||||
* Added support of flows: now any `KronScheduler` can be convert to `Flow<DateTime>` using `asFlow` extension
|
* Added support of flows: now any `KronScheduler` can be convert to `Flow<DateTime>` using `asFlow` extension
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# krontab
|
# krontab
|
||||||
|
|
||||||
[ ![Download](https://api.bintray.com/packages/insanusmokrassar/InsanusMokrassar/krontab-mpp/images/download.svg) ](https://bintray.com/insanusmokrassar/InsanusMokrassar/krontab-mpp/_latestVersion)
|
[ ![Download](https://api.bintray.com/packages/insanusmokrassar/InsanusMokrassar/krontab-mpp/images/download.svg) ](https://bintray.com/insanusmokrassar/InsanusMokrassar/krontab-mpp/_latestVersion)
|
||||||
[![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.insanusmokrassar/krontab/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.insanusmokrassar/krontab)
|
[![Maven Central](https://maven-badges.herokuapp.com/maven-central/dev.inmo/krontab/badge.svg)](https://maven-badges.herokuapp.com/maven-central/dev.inmo/krontab)
|
||||||
[![Build Status](https://travis-ci.com/InsanusMokrassar/krontab.svg?branch=master)](https://travis-ci.com/InsanusMokrassar/krontab)
|
[![Build Status](https://travis-ci.com/InsanusMokrassar/krontab.svg?branch=master)](https://travis-ci.com/InsanusMokrassar/krontab)
|
||||||
|
|
||||||
Library was created to give oppotunity to launch some things from time to time according to some schedule in
|
Library was created to give oppotunity to launch some things from time to time according to some schedule in
|
||||||
@ -39,7 +39,7 @@ If you want to include `krontab` in your project, just add next line to your
|
|||||||
dependencies part:
|
dependencies part:
|
||||||
|
|
||||||
```groovy
|
```groovy
|
||||||
implementation "com.insanusmokrassar:krontab:$krontab_version"
|
implementation "dev.inmo:krontab:$krontab_version"
|
||||||
```
|
```
|
||||||
|
|
||||||
Next version is the latest currently for the library:
|
Next version is the latest currently for the library:
|
||||||
|
11
build.gradle
11
build.gradle
@ -7,7 +7,6 @@ buildscript {
|
|||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||||
classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:$gradle_bintray_plugin_version"
|
|
||||||
classpath "com.github.breadmoirai:github-release:$github_release_plugin_version"
|
classpath "com.github.breadmoirai:github-release:$github_release_plugin_version"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -17,8 +16,8 @@ plugins {
|
|||||||
id "org.jetbrains.dokka" version "$dokka_version"
|
id "org.jetbrains.dokka" version "$dokka_version"
|
||||||
}
|
}
|
||||||
|
|
||||||
project.version = "0.3.3"
|
project.version = "0.4.0"
|
||||||
project.group = "com.insanusmokrassar"
|
project.group = "dev.inmo"
|
||||||
|
|
||||||
apply from: "publish.gradle"
|
apply from: "publish.gradle"
|
||||||
apply from: "github_release.gradle"
|
apply from: "github_release.gradle"
|
||||||
@ -55,16 +54,12 @@ kotlin {
|
|||||||
implementation kotlin('test-annotations-common')
|
implementation kotlin('test-annotations-common')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
jvmMain {
|
|
||||||
dependencies {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
jvmTest {
|
jvmTest {
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation kotlin('test-junit')
|
implementation kotlin('test-junit')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
jsMain {
|
jsTest {
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation kotlin('test-js')
|
implementation kotlin('test-js')
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,7 @@ dokka {
|
|||||||
multiplatform {
|
multiplatform {
|
||||||
global {
|
global {
|
||||||
perPackageOption {
|
perPackageOption {
|
||||||
prefix = "com.insanusmokrassar"
|
prefix = "dev.inmo"
|
||||||
skipDeprecated = true
|
skipDeprecated = true
|
||||||
includeNonPublic = true
|
includeNonPublic = true
|
||||||
reportUndocumented = true
|
reportUndocumented = true
|
||||||
|
@ -5,14 +5,12 @@ kotlin.incremental=true
|
|||||||
kotlin.incremental.js=true
|
kotlin.incremental.js=true
|
||||||
|
|
||||||
|
|
||||||
kotlin_version=1.4.10
|
kotlin_version=1.4.20
|
||||||
kotlin_coroutines_version=1.4.1
|
kotlin_coroutines_version=1.4.1
|
||||||
|
|
||||||
dokka_version=0.10.1
|
dokka_version=0.10.1
|
||||||
|
|
||||||
gradle_bintray_plugin_version=1.8.5
|
klockVersion=2.0.0
|
||||||
|
|
||||||
klockVersion=1.12.1
|
|
||||||
|
|
||||||
github_release_plugin_version=2.2.12
|
github_release_plugin_version=2.2.12
|
||||||
|
|
||||||
|
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@ -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-6.5.1-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-bin.zip
|
||||||
|
@ -1,53 +0,0 @@
|
|||||||
apply plugin: 'maven-publish'
|
|
||||||
|
|
||||||
task javadocsJar(type: Jar) {
|
|
||||||
classifier = 'javadoc'
|
|
||||||
}
|
|
||||||
|
|
||||||
afterEvaluate {
|
|
||||||
project.publishing.publications.all {
|
|
||||||
// rename artifacts
|
|
||||||
groupId "${project.group}"
|
|
||||||
if (it.name.contains('kotlinMultiplatform')) {
|
|
||||||
artifactId = "${project.name}"
|
|
||||||
} else {
|
|
||||||
artifactId = "${project.name}-$name"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
publishing {
|
|
||||||
publications.all {
|
|
||||||
artifact javadocsJar
|
|
||||||
|
|
||||||
pom {
|
|
||||||
description = "It is an analog of crontab util for Kotlin Coroutines"
|
|
||||||
name = "Krontab"
|
|
||||||
url = "https://git.insanusmokrassar.com/InsanusMokrassar/krontab"
|
|
||||||
|
|
||||||
scm {
|
|
||||||
developerConnection = "scm:git:[fetch=]https://git.insanusmokrassar.com:8322/InsanusMokrassar/krontab.git[push=]https://git.insanusmokrassar.com:8322/InsanusMokrassar/krontab.git"
|
|
||||||
url = "https://git.insanusmokrassar.com:8322/InsanusMokrassar/krontab.git"
|
|
||||||
}
|
|
||||||
|
|
||||||
developers {
|
|
||||||
|
|
||||||
developer {
|
|
||||||
id = "InsanusMokrassar"
|
|
||||||
name = "Ovsiannikov Aleksei"
|
|
||||||
email = "ovsyannikov.alexey95@gmail.com"
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
licenses {
|
|
||||||
|
|
||||||
license {
|
|
||||||
name = "Apache Software License 2.0"
|
|
||||||
url = "https://git.insanusmokrassar.com/InsanusMokrassar/krontab/src/master/LICENSE"
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1 +1 @@
|
|||||||
{"bintrayConfig":{"repo":"InsanusMokrassar","packageName":"${project.name}-mpp","packageVcs":"https://git.insanusmokrassar.com/InsanusMokrassar/krontab","autoPublish":true,"overridePublish":true},"licenses":[{"id":"Apache-2.0","title":"Apache Software License 2.0","url":"https://git.insanusmokrassar.com/InsanusMokrassar/krontab/src/master/LICENSE"}],"mavenConfig":{"name":"Krontab","description":"It is an analog of crontab util for Kotlin Coroutines","url":"https://git.insanusmokrassar.com/InsanusMokrassar/krontab","vcsUrl":"https://git.insanusmokrassar.com:8322/InsanusMokrassar/krontab.git","developers":[{"id":"InsanusMokrassar","name":"Ovsiannikov Aleksei","eMail":"ovsyannikov.alexey95@gmail.com"}]},"type":"Multiplatform"}
|
{"bintrayConfig":{"repo":"InsanusMokrassar","packageName":"${project.name}-mpp","packageVcs":"https://git.insanusmokrassar.com/InsanusMokrassar/krontab","autoPublish":true,"overridePublish":true},"licenses":[{"id":"Apache-2.0","title":"Apache Software License 2.0","url":"https://git.insanusmokrassar.com/InsanusMokrassar/krontab/src/master/LICENSE"}],"mavenConfig":{"name":"Krontab","description":"It is an analog of crontab util for Kotlin Coroutines","url":"https://git.insanusmokrassar.com/InsanusMokrassar/krontab","vcsUrl":"https://git.insanusmokrassar.com:8322/InsanusMokrassar/krontab.git","developers":[{"id":"InsanusMokrassar","name":"Ovsiannikov Aleksei","eMail":"ovsyannikov.alexey95@gmail.com"}]}}
|
108
publish.gradle
108
publish.gradle
@ -1,59 +1,65 @@
|
|||||||
apply plugin: 'com.jfrog.bintray'
|
apply plugin: 'maven-publish'
|
||||||
|
|
||||||
apply from: "maven.publish.gradle"
|
task javadocsJar(type: Jar) {
|
||||||
|
classifier = 'javadoc'
|
||||||
bintray {
|
|
||||||
user = project.hasProperty('BINTRAY_USER') ? project.property('BINTRAY_USER') : System.getenv('BINTRAY_USER')
|
|
||||||
key = project.hasProperty('BINTRAY_KEY') ? project.property('BINTRAY_KEY') : System.getenv('BINTRAY_KEY')
|
|
||||||
filesSpec {
|
|
||||||
from "${buildDir}/publications/"
|
|
||||||
eachFile {
|
|
||||||
String directorySubname = it.getFile().parentFile.name
|
|
||||||
if (it.getName() == "module.json") {
|
|
||||||
if (directorySubname == "kotlinMultiplatform") {
|
|
||||||
it.setPath("${project.name}/${project.version}/${project.name}-${project.version}.module")
|
|
||||||
} else {
|
|
||||||
it.setPath("${project.name}-${directorySubname}/${project.version}/${project.name}-${directorySubname}-${project.version}.module")
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (directorySubname == "kotlinMultiplatform" && it.getName() == "pom-default.xml") {
|
|
||||||
it.setPath("${project.name}/${project.version}/${project.name}-${project.version}.pom")
|
|
||||||
} else {
|
|
||||||
it.exclude()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
into "${project.group}".replace(".", "/")
|
|
||||||
}
|
|
||||||
|
|
||||||
publish = true
|
|
||||||
override = true
|
|
||||||
|
|
||||||
pkg {
|
|
||||||
repo = "InsanusMokrassar"
|
|
||||||
name = "${project.name}-mpp"
|
|
||||||
vcsUrl = "https://git.insanusmokrassar.com/InsanusMokrassar/krontab"
|
|
||||||
licenses = ["Apache-2.0"]
|
|
||||||
version {
|
|
||||||
name = "${project.version}"
|
|
||||||
released = new Date()
|
|
||||||
vcsTag = "${project.version}"
|
|
||||||
gpg {
|
|
||||||
sign = true
|
|
||||||
passphrase = project.hasProperty('signing.gnupg.passphrase') ? project.property('signing.gnupg.passphrase') : System.getenv('signing.gnupg.passphrase')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bintrayUpload.doFirst {
|
afterEvaluate {
|
||||||
publications = publishing.publications.collect {
|
project.publishing.publications.all {
|
||||||
|
// rename artifacts
|
||||||
|
groupId "${project.group}"
|
||||||
if (it.name.contains('kotlinMultiplatform')) {
|
if (it.name.contains('kotlinMultiplatform')) {
|
||||||
null
|
artifactId = "${project.name}"
|
||||||
} else {
|
} else {
|
||||||
it.name
|
artifactId = "${project.name}-$name"
|
||||||
}
|
}
|
||||||
} - null
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bintrayUpload.dependsOn publishToMavenLocal
|
publishing {
|
||||||
|
publications.all {
|
||||||
|
artifact javadocsJar
|
||||||
|
|
||||||
|
pom {
|
||||||
|
description = "It is an analog of crontab util for Kotlin Coroutines"
|
||||||
|
name = "Krontab"
|
||||||
|
url = "https://git.insanusmokrassar.com/InsanusMokrassar/krontab"
|
||||||
|
|
||||||
|
scm {
|
||||||
|
developerConnection = "scm:git:[fetch=]https://git.insanusmokrassar.com:8322/InsanusMokrassar/krontab.git[push=]https://git.insanusmokrassar.com:8322/InsanusMokrassar/krontab.git"
|
||||||
|
url = "https://git.insanusmokrassar.com:8322/InsanusMokrassar/krontab.git"
|
||||||
|
}
|
||||||
|
|
||||||
|
developers {
|
||||||
|
|
||||||
|
developer {
|
||||||
|
id = "InsanusMokrassar"
|
||||||
|
name = "Ovsiannikov Aleksei"
|
||||||
|
email = "ovsyannikov.alexey95@gmail.com"
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
licenses {
|
||||||
|
|
||||||
|
license {
|
||||||
|
name = "Apache Software License 2.0"
|
||||||
|
url = "https://git.insanusmokrassar.com/InsanusMokrassar/krontab/src/master/LICENSE"
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
repositories {
|
||||||
|
maven {
|
||||||
|
name = "bintray"
|
||||||
|
url = uri("https://api.bintray.com/maven/${project.hasProperty('BINTRAY_USER') ? project.property('BINTRAY_USER') : System.getenv('BINTRAY_USER')}/InsanusMokrassar/${project.name}-mpp/;publish=1;override=1")
|
||||||
|
credentials {
|
||||||
|
username = project.hasProperty('BINTRAY_USER') ? project.property('BINTRAY_USER') : System.getenv('BINTRAY_USER')
|
||||||
|
password = project.hasProperty('BINTRAY_KEY') ? project.property('BINTRAY_KEY') : System.getenv('BINTRAY_KEY')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -1,32 +0,0 @@
|
|||||||
package com.insanusmokrassar.krontab.internal
|
|
||||||
|
|
||||||
import com.insanusmokrassar.krontab.KronScheduler
|
|
||||||
import com.insanusmokrassar.krontab.anyCronDateTime
|
|
||||||
import com.soywiz.klock.DateTime
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Cron-oriented realisation of [KronScheduler]
|
|
||||||
*
|
|
||||||
* @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
|
|
||||||
*/
|
|
||||||
internal data class CronDateTimeScheduler internal constructor(
|
|
||||||
internal val cronDateTimes: List<CronDateTime>
|
|
||||||
) : KronScheduler {
|
|
||||||
/**
|
|
||||||
* @return Near date using [cronDateTimes] list and getting the [Iterable.min] one
|
|
||||||
*
|
|
||||||
* @see toNearDateTime
|
|
||||||
*/
|
|
||||||
override suspend fun next(relatively: DateTime): DateTime {
|
|
||||||
return cronDateTimes.map { it.toNearDateTime(relatively) }.minOrNull() ?: anyCronDateTime.toNearDateTime(relatively)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
|||||||
package com.insanusmokrassar.krontab
|
package dev.inmo.krontab
|
||||||
|
|
||||||
import com.soywiz.klock.DateTime
|
import com.soywiz.klock.DateTime
|
||||||
import kotlinx.coroutines.Deferred
|
|
||||||
import kotlinx.coroutines.delay
|
import kotlinx.coroutines.delay
|
||||||
|
|
||||||
/**
|
/**
|
@ -1,21 +1,21 @@
|
|||||||
package com.insanusmokrassar.krontab
|
package dev.inmo.krontab
|
||||||
|
|
||||||
import com.soywiz.klock.DateTime
|
import com.soywiz.klock.DateTime
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This interface was created for abstraction of [next] operation. Currently, there is only
|
* This interface was created for abstraction of [next] operation. Currently, there is only
|
||||||
* [com.insanusmokrassar.krontab.internal.CronDateTimeScheduler] realisation of this interface inside of this library,
|
* [dev.inmo.krontab.internal.CronDateTimeScheduler] realisation of this interface inside of this library,
|
||||||
* but you it is possible to create your own realisation of this interface for scheduling, for example, depending of
|
* but you it is possible to create your own realisation of this interface for scheduling, for example, depending of
|
||||||
* users activity or something like this
|
* users activity or something like this
|
||||||
*
|
*
|
||||||
* @see com.insanusmokrassar.krontab.internal.CronDateTimeScheduler
|
* @see dev.inmo.krontab.internal.CronDateTimeScheduler
|
||||||
*/
|
*/
|
||||||
interface KronScheduler {
|
interface KronScheduler {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Next [DateTime] when some action must be triggered according to settings of this instance
|
* @return Next [DateTime] when some action must be triggered according to settings of this instance
|
||||||
*
|
*
|
||||||
* @see com.insanusmokrassar.krontab.internal.CronDateTimeScheduler.next
|
* @see dev.inmo.krontab.internal.CronDateTimeScheduler.next
|
||||||
*/
|
*/
|
||||||
suspend fun next(relatively: DateTime = DateTime.now()): DateTime
|
suspend fun next(relatively: DateTime = DateTime.now()): DateTime
|
||||||
}
|
}
|
@ -1,8 +1,8 @@
|
|||||||
package com.insanusmokrassar.krontab
|
package dev.inmo.krontab
|
||||||
|
|
||||||
import com.insanusmokrassar.krontab.builder.buildSchedule
|
import dev.inmo.krontab.builder.buildSchedule
|
||||||
import com.insanusmokrassar.krontab.internal.CronDateTime
|
import dev.inmo.krontab.internal.CronDateTime
|
||||||
import com.insanusmokrassar.krontab.internal.CronDateTimeScheduler
|
import dev.inmo.krontab.internal.CronDateTimeScheduler
|
||||||
|
|
||||||
internal val anyCronDateTime by lazy {
|
internal val anyCronDateTime by lazy {
|
||||||
CronDateTime()
|
CronDateTime()
|
@ -1,6 +1,6 @@
|
|||||||
package com.insanusmokrassar.krontab
|
package dev.inmo.krontab
|
||||||
|
|
||||||
import com.insanusmokrassar.krontab.internal.*
|
import dev.inmo.krontab.internal.*
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see createSimpleScheduler
|
* @see createSimpleScheduler
|
||||||
@ -45,7 +45,7 @@ typealias KrontabTemplate = String
|
|||||||
* * "0/15 30 * * *" for every 15th seconds in a half of each hour
|
* * "0/15 30 * * *" for every 15th seconds in a half of each hour
|
||||||
* * "1 2 3 F,4,L 5" for triggering in near first second of second minute of third hour of fourth day of may
|
* * "1 2 3 F,4,L 5" for triggering in near first second of second minute of third hour of fourth day of may
|
||||||
*
|
*
|
||||||
* @see com.insanusmokrassar.krontab.internal.createKronScheduler
|
* @see dev.inmo.krontab.internal.createKronScheduler
|
||||||
*/
|
*/
|
||||||
fun createSimpleScheduler(incoming: KrontabTemplate): KronScheduler {
|
fun createSimpleScheduler(incoming: KrontabTemplate): KronScheduler {
|
||||||
val (secondsSource, minutesSource, hoursSource, dayOfMonthSource, monthSource) = incoming.split(" ")
|
val (secondsSource, minutesSource, hoursSource, dayOfMonthSource, monthSource) = incoming.split(" ")
|
@ -1,15 +1,12 @@
|
|||||||
package com.insanusmokrassar.krontab.builder
|
package dev.inmo.krontab.builder
|
||||||
|
|
||||||
import com.insanusmokrassar.krontab.KronScheduler
|
import dev.inmo.krontab.KronScheduler
|
||||||
import com.insanusmokrassar.krontab.internal.*
|
import dev.inmo.krontab.internal.createKronScheduler
|
||||||
import com.insanusmokrassar.krontab.internal.CronDateTime
|
|
||||||
import com.insanusmokrassar.krontab.internal.CronDateTimeScheduler
|
|
||||||
import com.insanusmokrassar.krontab.internal.fillWith
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Will help to create an instance of [KronScheduler]
|
* Will help to create an instance of [KronScheduler]
|
||||||
*
|
*
|
||||||
* @see com.insanusmokrassar.krontab.createSimpleScheduler
|
* @see dev.inmo.krontab.createSimpleScheduler
|
||||||
*/
|
*/
|
||||||
fun buildSchedule(settingsBlock: SchedulerBuilder.() -> Unit): KronScheduler {
|
fun buildSchedule(settingsBlock: SchedulerBuilder.() -> Unit): KronScheduler {
|
||||||
val builder = SchedulerBuilder()
|
val builder = SchedulerBuilder()
|
||||||
@ -100,8 +97,8 @@ class SchedulerBuilder(
|
|||||||
/**
|
/**
|
||||||
* @return Completely built and independent [KronScheduler]
|
* @return Completely built and independent [KronScheduler]
|
||||||
*
|
*
|
||||||
* @see com.insanusmokrassar.krontab.createSimpleScheduler
|
* @see dev.inmo.krontab.createSimpleScheduler
|
||||||
* @see com.insanusmokrassar.krontab.internal.createKronScheduler
|
* @see dev.inmo.krontab.internal.createKronScheduler
|
||||||
*/
|
*/
|
||||||
fun build(): KronScheduler = createKronScheduler(seconds, minutes, hours, dayOfMonth, month)
|
fun build(): KronScheduler = createKronScheduler(seconds, minutes, hours, dayOfMonth, month)
|
||||||
}
|
}
|
@ -1,7 +1,7 @@
|
|||||||
package com.insanusmokrassar.krontab.builder
|
package dev.inmo.krontab.builder
|
||||||
|
|
||||||
import com.insanusmokrassar.krontab.internal.*
|
import dev.inmo.krontab.internal.*
|
||||||
import com.insanusmokrassar.krontab.utils.clamp
|
import dev.inmo.krontab.utils.clamp
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class was created for incapsulation of builder work with specified [restrictionsRange]. For example,
|
* This class was created for incapsulation of builder work with specified [restrictionsRange]. For example,
|
@ -1,9 +1,8 @@
|
|||||||
package com.insanusmokrassar.krontab.internal
|
package dev.inmo.krontab.internal
|
||||||
|
|
||||||
import com.insanusmokrassar.krontab.KronScheduler
|
|
||||||
import com.insanusmokrassar.krontab.utils.clamp
|
|
||||||
import com.soywiz.klock.DateTime
|
import com.soywiz.klock.DateTime
|
||||||
import com.soywiz.klock.DateTimeSpan
|
import com.soywiz.klock.DateTimeSpan
|
||||||
|
import dev.inmo.krontab.KronScheduler
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param month 0-11
|
* @param month 0-11
|
@ -0,0 +1,32 @@
|
|||||||
|
package dev.inmo.krontab.internal
|
||||||
|
|
||||||
|
import com.soywiz.klock.DateTime
|
||||||
|
import dev.inmo.krontab.KronScheduler
|
||||||
|
import dev.inmo.krontab.anyCronDateTime
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cron-oriented realisation of [KronScheduler]
|
||||||
|
*
|
||||||
|
* @see dev.inmo.krontab.AnyTimeScheduler
|
||||||
|
* @see dev.inmo.krontab.EverySecondScheduler
|
||||||
|
* @see dev.inmo.krontab.EveryMinuteScheduler
|
||||||
|
* @see dev.inmo.krontab.EveryHourScheduler
|
||||||
|
* @see dev.inmo.krontab.EveryDayOfMonthScheduler
|
||||||
|
* @see dev.inmo.krontab.EveryMonthScheduler
|
||||||
|
*
|
||||||
|
* @see dev.inmo.krontab.builder.buildSchedule
|
||||||
|
* @see dev.inmo.krontab.builder.SchedulerBuilder
|
||||||
|
*/
|
||||||
|
internal data class CronDateTimeScheduler internal constructor(
|
||||||
|
internal val cronDateTimes: List<CronDateTime>
|
||||||
|
) : KronScheduler {
|
||||||
|
/**
|
||||||
|
* @return Near date using [cronDateTimes] list and getting the [Iterable.min] one
|
||||||
|
*
|
||||||
|
* @see toNearDateTime
|
||||||
|
*/
|
||||||
|
override suspend fun next(relatively: DateTime): DateTime {
|
||||||
|
return cronDateTimes.map { it.toNearDateTime(relatively) }.minOrNull() ?: anyCronDateTime.toNearDateTime(relatively)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,6 +1,6 @@
|
|||||||
package com.insanusmokrassar.krontab.internal
|
package dev.inmo.krontab.internal
|
||||||
|
|
||||||
import com.insanusmokrassar.krontab.utils.clamp
|
import dev.inmo.krontab.utils.clamp
|
||||||
|
|
||||||
private fun createSimpleScheduler(from: String, dataRange: IntRange): Array<Byte>? {
|
private fun createSimpleScheduler(from: String, dataRange: IntRange): Array<Byte>? {
|
||||||
val things = from.split(",")
|
val things = from.split(",")
|
@ -1,4 +1,4 @@
|
|||||||
package com.insanusmokrassar.krontab.internal
|
package dev.inmo.krontab.internal
|
||||||
|
|
||||||
internal val monthRange = 0 .. 11
|
internal val monthRange = 0 .. 11
|
||||||
internal val dayOfMonthRange = 0 .. 30
|
internal val dayOfMonthRange = 0 .. 30
|
@ -1,4 +1,4 @@
|
|||||||
package com.insanusmokrassar.krontab.utils
|
package dev.inmo.krontab.utils
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return [min] in case if [this] less than [min]. Otherwise will check that [max] grant than [this] and return [this]
|
* @return [min] in case if [this] less than [min]. Otherwise will check that [max] grant than [this] and return [this]
|
@ -1,7 +1,7 @@
|
|||||||
package com.insanusmokrassar.krontab.utils
|
package dev.inmo.krontab.utils
|
||||||
|
|
||||||
import com.insanusmokrassar.krontab.KronScheduler
|
|
||||||
import com.soywiz.klock.DateTime
|
import com.soywiz.klock.DateTime
|
||||||
|
import dev.inmo.krontab.KronScheduler
|
||||||
import kotlinx.coroutines.FlowPreview
|
import kotlinx.coroutines.FlowPreview
|
||||||
import kotlinx.coroutines.delay
|
import kotlinx.coroutines.delay
|
||||||
import kotlinx.coroutines.flow.*
|
import kotlinx.coroutines.flow.*
|
@ -1,4 +1,4 @@
|
|||||||
package com.insanusmokrassar.krontab.utils
|
package dev.inmo.krontab.utils
|
||||||
|
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.*
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
package com.insanusmokrassar.krontab.utils
|
package dev.inmo.krontab.utils
|
||||||
|
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
|
@ -1,7 +1,6 @@
|
|||||||
package com.insanusmokrassar.krontab.utils
|
package dev.inmo.krontab.utils
|
||||||
|
|
||||||
import com.insanusmokrassar.krontab.builder.buildSchedule
|
import dev.inmo.krontab.builder.buildSchedule
|
||||||
import com.soywiz.klock.DateTime
|
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.*
|
||||||
import kotlinx.coroutines.flow.collect
|
import kotlinx.coroutines.flow.collect
|
||||||
import kotlinx.coroutines.flow.takeWhile
|
import kotlinx.coroutines.flow.takeWhile
|
@ -1,12 +1,9 @@
|
|||||||
package com.insanusmokrassar.krontab.utils
|
package dev.inmo.krontab.utils
|
||||||
|
|
||||||
import com.insanusmokrassar.krontab.buildSchedule
|
import dev.inmo.krontab.buildSchedule
|
||||||
import com.soywiz.klock.DateTime
|
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.*
|
||||||
import kotlinx.coroutines.flow.collect
|
import kotlinx.coroutines.flow.collect
|
||||||
import kotlinx.coroutines.flow.takeWhile
|
import kotlinx.coroutines.flow.takeWhile
|
||||||
import kotlin.math.max
|
|
||||||
import kotlin.math.min
|
|
||||||
import kotlin.test.Test
|
import kotlin.test.Test
|
||||||
import kotlin.test.assertEquals
|
import kotlin.test.assertEquals
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
package com.insanusmokrassar.krontab.utils
|
package dev.inmo.krontab.utils
|
||||||
|
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.*
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
package com.insanusmokrassar.krontab.utils
|
package dev.inmo.krontab.utils
|
||||||
|
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.runBlocking
|
import kotlinx.coroutines.runBlocking
|
Loading…
Reference in New Issue
Block a user