Merge pull request #9 from InsanusMokrassar/0.4.0

0.4.0
This commit is contained in:
InsanusMokrassar 2020-11-21 15:29:23 +06:00 committed by GitHub
commit 46f227f9a3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
28 changed files with 154 additions and 205 deletions

View File

@ -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

View File

@ -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:

View File

@ -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')
} }

View File

@ -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

View File

@ -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

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-6.5.1-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-bin.zip

View File

@ -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"
}
}
}
}
}

View File

@ -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"}]}}

View File

@ -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 afterEvaluate {
override = true project.publishing.publications.all {
// rename artifacts
pkg { groupId "${project.group}"
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 {
publications = publishing.publications.collect {
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')
}
}
}
}
}

View File

@ -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)
}
}

View File

@ -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
/** /**

View File

@ -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
} }

View File

@ -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()

View File

@ -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(" ")

View File

@ -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)
} }

View File

@ -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,

View File

@ -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

View File

@ -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)
}
}

View File

@ -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(",")

View File

@ -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

View File

@ -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]

View File

@ -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.*

View File

@ -1,4 +1,4 @@
package com.insanusmokrassar.krontab.utils package dev.inmo.krontab.utils
import kotlinx.coroutines.* import kotlinx.coroutines.*

View File

@ -1,4 +1,4 @@
package com.insanusmokrassar.krontab.utils package dev.inmo.krontab.utils
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope

View File

@ -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

View File

@ -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

View File

@ -1,4 +1,4 @@
package com.insanusmokrassar.krontab.utils package dev.inmo.krontab.utils
import kotlinx.coroutines.* import kotlinx.coroutines.*

View File

@ -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