mirror of
https://github.com/InsanusMokrassar/SauceNaoAPI.git
synced 2024-12-23 13:17:11 +00:00
large upgrade
This commit is contained in:
parent
09b4b45b75
commit
270be95784
@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
### 0.6.0
|
### 0.6.0
|
||||||
|
|
||||||
|
**MAIN PACKAGE WAS CHANGED: `com.github.insanusmokrassar` -> `com.insanusmokrassar`**
|
||||||
|
|
||||||
* All known fields were added to `ResultData`
|
* All known fields were added to `ResultData`
|
||||||
* Versions updates:
|
* Versions updates:
|
||||||
* `Kotlin`: `1.3.72` -> `1.4.0`
|
* `Kotlin`: `1.3.72` -> `1.4.0`
|
||||||
@ -10,7 +12,6 @@
|
|||||||
* `Klock`: `1.11.14` -> `1.12.0`
|
* `Klock`: `1.11.14` -> `1.12.0`
|
||||||
* `Ktor`: `1.3.2` -> `1.4.0`
|
* `Ktor`: `1.3.2` -> `1.4.0`
|
||||||
|
|
||||||
|
|
||||||
## 0.5.0
|
## 0.5.0
|
||||||
|
|
||||||
* Versions updates
|
* Versions updates
|
||||||
|
@ -14,11 +14,11 @@ buildscript {
|
|||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
id "org.jetbrains.kotlin.multiplatform" version "$kotlin_version"
|
id "org.jetbrains.kotlin.multiplatform" version "$kotlin_version"
|
||||||
|
id "org.jetbrains.kotlin.plugin.serialization" version "$kotlin_version"
|
||||||
}
|
}
|
||||||
apply plugin: 'kotlinx-serialization'
|
|
||||||
|
|
||||||
project.version = "0.6.0"
|
project.version = "0.6.0"
|
||||||
project.group = "com.github.insanusmokrassar"
|
project.group = "com.insanusmokrassar"
|
||||||
|
|
||||||
apply from: "publish.gradle"
|
apply from: "publish.gradle"
|
||||||
|
|
||||||
|
@ -1,23 +0,0 @@
|
|||||||
package com.github.insanusmokrassar.SauceNaoAPI.additional
|
|
||||||
|
|
||||||
import com.github.insanusmokrassar.SauceNaoAPI.additional.header.ResultMetaInfo
|
|
||||||
import com.github.insanusmokrassar.SauceNaoAPI.additional.header.adapted
|
|
||||||
import com.github.insanusmokrassar.SauceNaoAPI.additional.results.AdaptedResult
|
|
||||||
import com.github.insanusmokrassar.SauceNaoAPI.additional.results.adapted
|
|
||||||
import com.github.insanusmokrassar.SauceNaoAPI.models.SauceNaoAnswer
|
|
||||||
|
|
||||||
val SauceNaoAnswer.adapted: AdaptedAnswer
|
|
||||||
get() = header.adapted.let { resultMetainfo ->
|
|
||||||
val adaptedResults = results.map {
|
|
||||||
it.adapted(resultMetainfo)
|
|
||||||
}
|
|
||||||
AdaptedAnswer(
|
|
||||||
resultMetainfo,
|
|
||||||
adaptedResults
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
data class AdaptedAnswer(
|
|
||||||
val resultMetaInfo: ResultMetaInfo,
|
|
||||||
val results: List<AdaptedResult>
|
|
||||||
)
|
|
@ -1,9 +0,0 @@
|
|||||||
package com.github.insanusmokrassar.SauceNaoAPI.additional.results
|
|
||||||
|
|
||||||
import com.github.insanusmokrassar.SauceNaoAPI.additional.header.IndexInfo
|
|
||||||
|
|
||||||
data class ResultHeader(
|
|
||||||
val similarity: Float,
|
|
||||||
val thumbnail: String,
|
|
||||||
val index: IndexInfo
|
|
||||||
)
|
|
@ -1,4 +1,4 @@
|
|||||||
package com.github.insanusmokrassar.SauceNaoAPI
|
package com.insanusmokrassar.SauceNaoAPI
|
||||||
|
|
||||||
sealed class OutputType {
|
sealed class OutputType {
|
||||||
abstract val typeCode: Int
|
abstract val typeCode: Int
|
@ -1,24 +1,23 @@
|
|||||||
package com.github.insanusmokrassar.SauceNaoAPI
|
package com.insanusmokrassar.SauceNaoAPI
|
||||||
|
|
||||||
import com.github.insanusmokrassar.SauceNaoAPI.exceptions.TooManyRequestsException
|
import com.insanusmokrassar.SauceNaoAPI.exceptions.TooManyRequestsException
|
||||||
import com.github.insanusmokrassar.SauceNaoAPI.exceptions.sauceNaoAPIException
|
import com.insanusmokrassar.SauceNaoAPI.exceptions.sauceNaoAPIException
|
||||||
import com.github.insanusmokrassar.SauceNaoAPI.models.*
|
import com.insanusmokrassar.SauceNaoAPI.models.*
|
||||||
import com.github.insanusmokrassar.SauceNaoAPI.utils.*
|
import com.insanusmokrassar.SauceNaoAPI.utils.*
|
||||||
import io.ktor.client.HttpClient
|
import io.ktor.client.HttpClient
|
||||||
import io.ktor.client.features.ClientRequestException
|
import io.ktor.client.features.ClientRequestException
|
||||||
import io.ktor.client.request.*
|
import io.ktor.client.request.*
|
||||||
import io.ktor.client.request.forms.*
|
import io.ktor.client.request.forms.MultiPartFormDataContent
|
||||||
|
import io.ktor.client.request.forms.formData
|
||||||
import io.ktor.client.statement.HttpResponse
|
import io.ktor.client.statement.HttpResponse
|
||||||
import io.ktor.client.statement.readText
|
import io.ktor.client.statement.readText
|
||||||
import io.ktor.http.*
|
import io.ktor.http.*
|
||||||
import io.ktor.utils.io.core.Closeable
|
|
||||||
import io.ktor.utils.io.core.Input
|
import io.ktor.utils.io.core.Input
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.*
|
||||||
import kotlinx.coroutines.channels.Channel
|
import kotlinx.coroutines.channels.Channel
|
||||||
import kotlinx.serialization.json.Json
|
import kotlinx.serialization.json.Json
|
||||||
import kotlinx.serialization.json.nonstrict
|
import kotlin.coroutines.Continuation
|
||||||
import kotlin.Result
|
import kotlin.coroutines.suspendCoroutine
|
||||||
import kotlin.coroutines.*
|
|
||||||
|
|
||||||
private const val API_TOKEN_FIELD = "api_key"
|
private const val API_TOKEN_FIELD = "api_key"
|
||||||
private const val OUTPUT_TYPE_FIELD = "output_type"
|
private const val OUTPUT_TYPE_FIELD = "output_type"
|
||||||
@ -47,7 +46,7 @@ data class SauceNaoAPI(
|
|||||||
private val searchUrl: String = SEARCH_URL,
|
private val searchUrl: String = SEARCH_URL,
|
||||||
private val scope: CoroutineScope = CoroutineScope(Dispatchers.Default),
|
private val scope: CoroutineScope = CoroutineScope(Dispatchers.Default),
|
||||||
private val parser: Json = defaultSauceNaoParser
|
private val parser: Json = defaultSauceNaoParser
|
||||||
) : Closeable {
|
) : SauceCloseable {
|
||||||
private val requestsChannel = Channel<Pair<Continuation<SauceNaoAnswer>, HttpRequestBuilder>>(Channel.UNLIMITED)
|
private val requestsChannel = Channel<Pair<Continuation<SauceNaoAnswer>, HttpRequestBuilder>>(Channel.UNLIMITED)
|
||||||
private val timeManager = TimeManager(scope)
|
private val timeManager = TimeManager(scope)
|
||||||
private val quotaManager = RequestQuotaManager(scope)
|
private val quotaManager = RequestQuotaManager(scope)
|
@ -1,4 +1,4 @@
|
|||||||
package com.github.insanusmokrassar.SauceNaoAPI
|
package com.insanusmokrassar.SauceNaoAPI
|
||||||
|
|
||||||
import io.ktor.http.ContentType
|
import io.ktor.http.ContentType
|
||||||
import io.ktor.utils.io.core.Input
|
import io.ktor.utils.io.core.Input
|
@ -0,0 +1,23 @@
|
|||||||
|
package com.insanusmokrassar.SauceNaoAPI.additional
|
||||||
|
|
||||||
|
import com.insanusmokrassar.SauceNaoAPI.additional.header.ResultMetaInfo
|
||||||
|
import com.insanusmokrassar.SauceNaoAPI.additional.header.adapted
|
||||||
|
import com.insanusmokrassar.SauceNaoAPI.additional.results.AdaptedResult
|
||||||
|
import com.insanusmokrassar.SauceNaoAPI.additional.results.adapted
|
||||||
|
import com.insanusmokrassar.SauceNaoAPI.models.SauceNaoAnswer
|
||||||
|
|
||||||
|
val SauceNaoAnswer.adapted: AdaptedAnswer
|
||||||
|
get() = header.adapted.let { resultMetainfo ->
|
||||||
|
val adaptedResults = results.map {
|
||||||
|
it.adapted(resultMetainfo)
|
||||||
|
}
|
||||||
|
AdaptedAnswer(
|
||||||
|
resultMetainfo,
|
||||||
|
adaptedResults
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
data class AdaptedAnswer(
|
||||||
|
val resultMetaInfo: ResultMetaInfo,
|
||||||
|
val results: List<AdaptedResult>
|
||||||
|
)
|
@ -1,4 +1,4 @@
|
|||||||
package com.github.insanusmokrassar.SauceNaoAPI.additional
|
package com.insanusmokrassar.SauceNaoAPI.additional
|
||||||
|
|
||||||
import com.soywiz.klock.TimeSpan
|
import com.soywiz.klock.TimeSpan
|
||||||
|
|
@ -1,7 +1,7 @@
|
|||||||
package com.github.insanusmokrassar.SauceNaoAPI.additional.header
|
package com.insanusmokrassar.SauceNaoAPI.additional.header
|
||||||
|
|
||||||
import com.github.insanusmokrassar.SauceNaoAPI.additional.*
|
import com.insanusmokrassar.SauceNaoAPI.additional.*
|
||||||
import com.github.insanusmokrassar.SauceNaoAPI.models.Header
|
import com.insanusmokrassar.SauceNaoAPI.models.Header
|
||||||
|
|
||||||
val Header.shortLimitStatus: LimitStatus
|
val Header.shortLimitStatus: LimitStatus
|
||||||
get() = LimitStatus(
|
get() = LimitStatus(
|
@ -1,6 +1,6 @@
|
|||||||
package com.github.insanusmokrassar.SauceNaoAPI.additional.header
|
package com.insanusmokrassar.SauceNaoAPI.additional.header
|
||||||
|
|
||||||
import com.github.insanusmokrassar.SauceNaoAPI.models.Header
|
import com.insanusmokrassar.SauceNaoAPI.models.Header
|
||||||
|
|
||||||
data class IndexInfo(
|
data class IndexInfo(
|
||||||
val id: Int,
|
val id: Int,
|
@ -1,6 +1,6 @@
|
|||||||
package com.github.insanusmokrassar.SauceNaoAPI.additional.header
|
package com.insanusmokrassar.SauceNaoAPI.additional.header
|
||||||
|
|
||||||
import com.github.insanusmokrassar.SauceNaoAPI.models.Header
|
import com.insanusmokrassar.SauceNaoAPI.models.Header
|
||||||
|
|
||||||
val Header.queryPreview
|
val Header.queryPreview
|
||||||
get() = QueryResultPreview(
|
get() = QueryResultPreview(
|
@ -1,6 +1,6 @@
|
|||||||
package com.github.insanusmokrassar.SauceNaoAPI.additional.header
|
package com.insanusmokrassar.SauceNaoAPI.additional.header
|
||||||
|
|
||||||
import com.github.insanusmokrassar.SauceNaoAPI.models.Header
|
import com.insanusmokrassar.SauceNaoAPI.models.Header
|
||||||
|
|
||||||
data class ResultMetaInfo(
|
data class ResultMetaInfo(
|
||||||
val accountInfo: AccountInfo = AccountInfo(),
|
val accountInfo: AccountInfo = AccountInfo(),
|
@ -1,9 +1,9 @@
|
|||||||
package com.github.insanusmokrassar.SauceNaoAPI.additional.results
|
package com.insanusmokrassar.SauceNaoAPI.additional.results
|
||||||
|
|
||||||
import com.github.insanusmokrassar.SauceNaoAPI.additional.header.IndexInfo
|
import com.insanusmokrassar.SauceNaoAPI.additional.header.IndexInfo
|
||||||
import com.github.insanusmokrassar.SauceNaoAPI.additional.header.ResultMetaInfo
|
import com.insanusmokrassar.SauceNaoAPI.additional.header.ResultMetaInfo
|
||||||
import com.github.insanusmokrassar.SauceNaoAPI.models.Result
|
import com.insanusmokrassar.SauceNaoAPI.models.Result
|
||||||
import com.github.insanusmokrassar.SauceNaoAPI.models.ResultData
|
import com.insanusmokrassar.SauceNaoAPI.models.ResultData
|
||||||
|
|
||||||
fun Result.adapted(
|
fun Result.adapted(
|
||||||
resultMetaInfo: ResultMetaInfo
|
resultMetaInfo: ResultMetaInfo
|
@ -0,0 +1,9 @@
|
|||||||
|
package com.insanusmokrassar.SauceNaoAPI.additional.results
|
||||||
|
|
||||||
|
import com.insanusmokrassar.SauceNaoAPI.additional.header.IndexInfo
|
||||||
|
|
||||||
|
data class ResultHeader(
|
||||||
|
val similarity: Float,
|
||||||
|
val thumbnail: String,
|
||||||
|
val index: IndexInfo
|
||||||
|
)
|
@ -1,7 +1,7 @@
|
|||||||
package com.github.insanusmokrassar.SauceNaoAPI.exceptions
|
package com.insanusmokrassar.SauceNaoAPI.exceptions
|
||||||
|
|
||||||
import com.github.insanusmokrassar.SauceNaoAPI.additional.LONG_TIME_RECALCULATING_MILLIS
|
import com.insanusmokrassar.SauceNaoAPI.additional.LONG_TIME_RECALCULATING_MILLIS
|
||||||
import com.github.insanusmokrassar.SauceNaoAPI.additional.SHORT_TIME_RECALCULATING_MILLIS
|
import com.insanusmokrassar.SauceNaoAPI.additional.SHORT_TIME_RECALCULATING_MILLIS
|
||||||
import com.soywiz.klock.TimeSpan
|
import com.soywiz.klock.TimeSpan
|
||||||
import io.ktor.client.features.ClientRequestException
|
import io.ktor.client.features.ClientRequestException
|
||||||
import io.ktor.client.statement.readText
|
import io.ktor.client.statement.readText
|
@ -1,12 +1,13 @@
|
|||||||
package com.github.insanusmokrassar.SauceNaoAPI.models
|
package com.insanusmokrassar.SauceNaoAPI.models
|
||||||
|
|
||||||
import com.github.insanusmokrassar.SauceNaoAPI.defaultSauceNaoParser
|
import com.insanusmokrassar.SauceNaoAPI.defaultSauceNaoParser
|
||||||
import kotlinx.serialization.*
|
import kotlinx.serialization.*
|
||||||
import kotlinx.serialization.builtins.serializer
|
import kotlinx.serialization.builtins.serializer
|
||||||
import kotlinx.serialization.descriptors.SerialDescriptor
|
import kotlinx.serialization.descriptors.SerialDescriptor
|
||||||
import kotlinx.serialization.encoding.Decoder
|
import kotlinx.serialization.encoding.Decoder
|
||||||
import kotlinx.serialization.encoding.Encoder
|
import kotlinx.serialization.encoding.Encoder
|
||||||
import kotlinx.serialization.json.*
|
import kotlinx.serialization.json.JsonObject
|
||||||
|
import kotlinx.serialization.json.jsonObject
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
data class Header(
|
data class Header(
|
@ -1,4 +1,4 @@
|
|||||||
package com.github.insanusmokrassar.SauceNaoAPI.models
|
package com.insanusmokrassar.SauceNaoAPI.models
|
||||||
|
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
package com.github.insanusmokrassar.SauceNaoAPI.models
|
package com.insanusmokrassar.SauceNaoAPI.models
|
||||||
|
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
package com.github.insanusmokrassar.SauceNaoAPI.models
|
package com.insanusmokrassar.SauceNaoAPI.models
|
||||||
|
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
|
|
@ -1,6 +1,6 @@
|
|||||||
package com.github.insanusmokrassar.SauceNaoAPI.models
|
package com.insanusmokrassar.SauceNaoAPI.models
|
||||||
|
|
||||||
import com.github.insanusmokrassar.SauceNaoAPI.utils.CommonMultivariantStringSerializer
|
import com.insanusmokrassar.SauceNaoAPI.utils.CommonMultivariantStringSerializer
|
||||||
import kotlinx.serialization.SerialName
|
import kotlinx.serialization.SerialName
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
package com.github.insanusmokrassar.SauceNaoAPI.models
|
package com.insanusmokrassar.SauceNaoAPI.models
|
||||||
|
|
||||||
import kotlinx.serialization.SerialName
|
import kotlinx.serialization.SerialName
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
@ -1,11 +1,12 @@
|
|||||||
package com.github.insanusmokrassar.SauceNaoAPI.models
|
package com.insanusmokrassar.SauceNaoAPI.models
|
||||||
|
|
||||||
import com.github.insanusmokrassar.SauceNaoAPI.defaultSauceNaoParser
|
import com.insanusmokrassar.SauceNaoAPI.defaultSauceNaoParser
|
||||||
import kotlinx.serialization.*
|
import kotlinx.serialization.*
|
||||||
import kotlinx.serialization.builtins.ListSerializer
|
import kotlinx.serialization.builtins.ListSerializer
|
||||||
import kotlinx.serialization.encoding.Decoder
|
import kotlinx.serialization.encoding.Decoder
|
||||||
import kotlinx.serialization.encoding.Encoder
|
import kotlinx.serialization.encoding.Encoder
|
||||||
import kotlinx.serialization.json.*
|
import kotlinx.serialization.json.JsonObject
|
||||||
|
import kotlinx.serialization.json.buildJsonObject
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
private data class TemporalSauceNaoAnswerRepresentation(
|
private data class TemporalSauceNaoAnswerRepresentation(
|
@ -1,6 +1,7 @@
|
|||||||
package com.github.insanusmokrassar.SauceNaoAPI.utils
|
package com.insanusmokrassar.SauceNaoAPI.utils
|
||||||
|
|
||||||
import kotlinx.serialization.*
|
import kotlinx.serialization.KSerializer
|
||||||
|
import kotlinx.serialization.Serializer
|
||||||
import kotlinx.serialization.builtins.ListSerializer
|
import kotlinx.serialization.builtins.ListSerializer
|
||||||
import kotlinx.serialization.builtins.serializer
|
import kotlinx.serialization.builtins.serializer
|
||||||
import kotlinx.serialization.encoding.Decoder
|
import kotlinx.serialization.encoding.Decoder
|
@ -1,13 +1,12 @@
|
|||||||
package com.github.insanusmokrassar.SauceNaoAPI.utils
|
package com.insanusmokrassar.SauceNaoAPI.utils
|
||||||
|
|
||||||
import com.github.insanusmokrassar.SauceNaoAPI.additional.LONG_TIME_RECALCULATING_MILLIS
|
import com.insanusmokrassar.SauceNaoAPI.additional.LONG_TIME_RECALCULATING_MILLIS
|
||||||
import com.github.insanusmokrassar.SauceNaoAPI.additional.SHORT_TIME_RECALCULATING_MILLIS
|
import com.insanusmokrassar.SauceNaoAPI.additional.SHORT_TIME_RECALCULATING_MILLIS
|
||||||
import com.github.insanusmokrassar.SauceNaoAPI.exceptions.TooManyRequestsException
|
import com.insanusmokrassar.SauceNaoAPI.exceptions.TooManyRequestsException
|
||||||
import com.github.insanusmokrassar.SauceNaoAPI.exceptions.TooManyRequestsLongException
|
import com.insanusmokrassar.SauceNaoAPI.exceptions.TooManyRequestsLongException
|
||||||
import com.github.insanusmokrassar.SauceNaoAPI.models.Header
|
import com.insanusmokrassar.SauceNaoAPI.models.Header
|
||||||
import com.github.insanusmokrassar.SauceNaoAPI.models.LimitsState
|
import com.insanusmokrassar.SauceNaoAPI.models.LimitsState
|
||||||
import com.soywiz.klock.DateTime
|
import com.soywiz.klock.DateTime
|
||||||
import io.ktor.utils.io.core.Closeable
|
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.*
|
||||||
import kotlinx.coroutines.channels.Channel
|
import kotlinx.coroutines.channels.Channel
|
||||||
import kotlin.coroutines.suspendCoroutine
|
import kotlin.coroutines.suspendCoroutine
|
||||||
@ -16,7 +15,7 @@ import kotlin.math.min
|
|||||||
|
|
||||||
internal class RequestQuotaManager (
|
internal class RequestQuotaManager (
|
||||||
scope: CoroutineScope
|
scope: CoroutineScope
|
||||||
) : Closeable {
|
) : SauceCloseable {
|
||||||
private var longQuota = 1
|
private var longQuota = 1
|
||||||
private var shortQuota = 1
|
private var shortQuota = 1
|
||||||
private var longMaxQuota = 1
|
private var longMaxQuota = 1
|
@ -0,0 +1,21 @@
|
|||||||
|
package com.insanusmokrassar.SauceNaoAPI.utils
|
||||||
|
|
||||||
|
import kotlinx.coroutines.supervisorScope
|
||||||
|
|
||||||
|
interface SauceCloseable {
|
||||||
|
fun close()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun <T> SauceCloseable.use(block: (SauceCloseable) -> T): T = try {
|
||||||
|
block(this)
|
||||||
|
} finally {
|
||||||
|
close()
|
||||||
|
}
|
||||||
|
|
||||||
|
suspend fun <T> SauceCloseable.useSafe(block: suspend (SauceCloseable) -> T): T = try {
|
||||||
|
supervisorScope {
|
||||||
|
block(this@useSafe)
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
close()
|
||||||
|
}
|
@ -1,10 +1,9 @@
|
|||||||
package com.github.insanusmokrassar.SauceNaoAPI.utils
|
package com.insanusmokrassar.SauceNaoAPI.utils
|
||||||
|
|
||||||
import com.github.insanusmokrassar.SauceNaoAPI.additional.LONG_TIME_RECALCULATING_MILLIS
|
import com.insanusmokrassar.SauceNaoAPI.additional.LONG_TIME_RECALCULATING_MILLIS
|
||||||
import com.github.insanusmokrassar.SauceNaoAPI.additional.SHORT_TIME_RECALCULATING_MILLIS
|
import com.insanusmokrassar.SauceNaoAPI.additional.SHORT_TIME_RECALCULATING_MILLIS
|
||||||
import com.github.insanusmokrassar.SauceNaoAPI.models.Header
|
import com.insanusmokrassar.SauceNaoAPI.models.Header
|
||||||
import com.soywiz.klock.DateTime
|
import com.soywiz.klock.DateTime
|
||||||
import com.soywiz.klock.TimeSpan
|
|
||||||
|
|
||||||
internal suspend fun calculateSleepTime(
|
internal suspend fun calculateSleepTime(
|
||||||
header: Header,
|
header: Header,
|
@ -1,9 +1,8 @@
|
|||||||
package com.github.insanusmokrassar.SauceNaoAPI.utils
|
package com.insanusmokrassar.SauceNaoAPI.utils
|
||||||
|
|
||||||
import com.github.insanusmokrassar.SauceNaoAPI.additional.LONG_TIME_RECALCULATING_MILLIS
|
import com.insanusmokrassar.SauceNaoAPI.additional.LONG_TIME_RECALCULATING_MILLIS
|
||||||
import com.github.insanusmokrassar.SauceNaoAPI.additional.SHORT_TIME_RECALCULATING_MILLIS
|
import com.insanusmokrassar.SauceNaoAPI.additional.SHORT_TIME_RECALCULATING_MILLIS
|
||||||
import com.soywiz.klock.DateTime
|
import com.soywiz.klock.DateTime
|
||||||
import io.ktor.utils.io.core.Closeable
|
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.channels.Channel
|
import kotlinx.coroutines.channels.Channel
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
@ -69,7 +68,7 @@ private data class TimeManagerMostOldestInShortGetter(
|
|||||||
|
|
||||||
internal class TimeManager(
|
internal class TimeManager(
|
||||||
scope: CoroutineScope
|
scope: CoroutineScope
|
||||||
) : Closeable {
|
) : SauceCloseable {
|
||||||
private val actionsChannel = Channel<TimeManagerAction>(Channel.UNLIMITED)
|
private val actionsChannel = Channel<TimeManagerAction>(Channel.UNLIMITED)
|
||||||
|
|
||||||
private val timeUpdateJob = scope.launch {
|
private val timeUpdateJob = scope.launch {
|
@ -1,6 +1,6 @@
|
|||||||
import com.github.insanusmokrassar.SauceNaoAPI.SauceNaoAPI
|
import com.insanusmokrassar.SauceNaoAPI.SauceNaoAPI
|
||||||
|
import com.insanusmokrassar.SauceNaoAPI.utils.useSafe
|
||||||
import io.ktor.http.ContentType
|
import io.ktor.http.ContentType
|
||||||
import io.ktor.utils.io.streams.asInput
|
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.*
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.nio.file.Files
|
import java.nio.file.Files
|
||||||
@ -11,7 +11,7 @@ suspend fun main(vararg args: String) {
|
|||||||
val scope = CoroutineScope(Dispatchers.Default)
|
val scope = CoroutineScope(Dispatchers.Default)
|
||||||
|
|
||||||
val api = SauceNaoAPI(key, scope = scope)
|
val api = SauceNaoAPI(key, scope = scope)
|
||||||
api.use { _ ->
|
api.useSafe { _ ->
|
||||||
println(
|
println(
|
||||||
when {
|
when {
|
||||||
requestSubject.startsWith("/") -> File(requestSubject).let {
|
requestSubject.startsWith("/") -> File(requestSubject).let {
|
||||||
|
Loading…
Reference in New Issue
Block a user