From 270be9578496ade5afb160113177df087af58eeb Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Sat, 29 Aug 2020 19:09:54 +0600 Subject: [PATCH] large upgrade --- CHANGELOG.md | 3 ++- build.gradle | 4 ++-- .../SauceNaoAPI/additional/AdaptedAnswer.kt | 23 ------------------- .../additional/results/ResultHeader.kt | 9 -------- .../SauceNaoAPI/OutputType.kt | 2 +- .../SauceNaoAPI/SauceNaoAPI.kt | 21 ++++++++--------- .../SauceNaoAPI/SauceRequestSubject.kt | 2 +- .../SauceNaoAPI/additional/AdaptedAnswer.kt | 23 +++++++++++++++++++ .../SauceNaoAPI/additional/Utils.kt | 2 +- .../additional/header/AccountInfo.kt | 6 ++--- .../additional/header/IndexInfo.kt | 4 ++-- .../additional/header/QueryResultsMetainfo.kt | 4 ++-- .../additional/header/ResultMetaInfo.kt | 4 ++-- .../additional/results/AdaptedResult.kt | 10 ++++---- .../additional/results/ResultHeader.kt | 9 ++++++++ .../exceptions/TooManyRequestsException.kt | 6 ++--- .../SauceNaoAPI/models/Header.kt | 7 +++--- .../SauceNaoAPI/models/HeaderIndex.kt | 2 +- .../SauceNaoAPI/models/LimitsState.kt | 2 +- .../SauceNaoAPI/models/Result.kt | 2 +- .../SauceNaoAPI/models/ResultData.kt | 4 ++-- .../SauceNaoAPI/models/ResultHeader.kt | 2 +- .../SauceNaoAPI/models/SauceNaoAnswer.kt | 7 +++--- .../CommonMultivariantStringSerializer.kt | 5 ++-- .../SauceNaoAPI/utils/RequestQuotaManager.kt | 17 +++++++------- .../SauceNaoAPI/utils/SauceCloseable.kt | 21 +++++++++++++++++ .../SauceNaoAPI/utils/SleepCalculations.kt | 9 ++++---- .../SauceNaoAPI/utils/TimeManager.kt | 9 ++++---- src/jvmTest/kotlin/Launcher.kt | 6 ++--- 29 files changed, 123 insertions(+), 102 deletions(-) delete mode 100644 src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/additional/AdaptedAnswer.kt delete mode 100644 src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/additional/results/ResultHeader.kt rename src/commonMain/kotlin/com/{github => }/insanusmokrassar/SauceNaoAPI/OutputType.kt (85%) rename src/commonMain/kotlin/com/{github => }/insanusmokrassar/SauceNaoAPI/SauceNaoAPI.kt (93%) rename src/commonMain/kotlin/com/{github => }/insanusmokrassar/SauceNaoAPI/SauceRequestSubject.kt (91%) create mode 100644 src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/additional/AdaptedAnswer.kt rename src/commonMain/kotlin/com/{github => }/insanusmokrassar/SauceNaoAPI/additional/Utils.kt (82%) rename src/commonMain/kotlin/com/{github => }/insanusmokrassar/SauceNaoAPI/additional/header/AccountInfo.kt (80%) rename src/commonMain/kotlin/com/{github => }/insanusmokrassar/SauceNaoAPI/additional/header/IndexInfo.kt (79%) rename src/commonMain/kotlin/com/{github => }/insanusmokrassar/SauceNaoAPI/additional/header/QueryResultsMetainfo.kt (87%) rename src/commonMain/kotlin/com/{github => }/insanusmokrassar/SauceNaoAPI/additional/header/ResultMetaInfo.kt (65%) rename src/commonMain/kotlin/com/{github => }/insanusmokrassar/SauceNaoAPI/additional/results/AdaptedResult.kt (52%) create mode 100644 src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/additional/results/ResultHeader.kt rename src/commonMain/kotlin/com/{github => }/insanusmokrassar/SauceNaoAPI/exceptions/TooManyRequestsException.kt (85%) rename src/commonMain/kotlin/com/{github => }/insanusmokrassar/SauceNaoAPI/models/Header.kt (91%) rename src/commonMain/kotlin/com/{github => }/insanusmokrassar/SauceNaoAPI/models/HeaderIndex.kt (78%) rename src/commonMain/kotlin/com/{github => }/insanusmokrassar/SauceNaoAPI/models/LimitsState.kt (78%) rename src/commonMain/kotlin/com/{github => }/insanusmokrassar/SauceNaoAPI/models/Result.kt (70%) rename src/commonMain/kotlin/com/{github => }/insanusmokrassar/SauceNaoAPI/models/ResultData.kt (97%) rename src/commonMain/kotlin/com/{github => }/insanusmokrassar/SauceNaoAPI/models/ResultHeader.kt (83%) rename src/commonMain/kotlin/com/{github => }/insanusmokrassar/SauceNaoAPI/models/SauceNaoAnswer.kt (89%) rename src/commonMain/kotlin/com/{github => }/insanusmokrassar/SauceNaoAPI/utils/CommonMultivariantStringSerializer.kt (85%) rename src/commonMain/kotlin/com/{github => }/insanusmokrassar/SauceNaoAPI/utils/RequestQuotaManager.kt (82%) create mode 100644 src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/utils/SauceCloseable.kt rename src/commonMain/kotlin/com/{github => }/insanusmokrassar/SauceNaoAPI/utils/SleepCalculations.kt (59%) rename src/commonMain/kotlin/com/{github => }/insanusmokrassar/SauceNaoAPI/utils/TimeManager.kt (90%) diff --git a/CHANGELOG.md b/CHANGELOG.md index db92ebc..8d30c14 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ### 0.6.0 +**MAIN PACKAGE WAS CHANGED: `com.github.insanusmokrassar` -> `com.insanusmokrassar`** + * All known fields were added to `ResultData` * Versions updates: * `Kotlin`: `1.3.72` -> `1.4.0` @@ -10,7 +12,6 @@ * `Klock`: `1.11.14` -> `1.12.0` * `Ktor`: `1.3.2` -> `1.4.0` - ## 0.5.0 * Versions updates diff --git a/build.gradle b/build.gradle index 42073d5..1966924 100644 --- a/build.gradle +++ b/build.gradle @@ -14,11 +14,11 @@ buildscript { plugins { 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.group = "com.github.insanusmokrassar" +project.group = "com.insanusmokrassar" apply from: "publish.gradle" diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/additional/AdaptedAnswer.kt b/src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/additional/AdaptedAnswer.kt deleted file mode 100644 index 08a0b83..0000000 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/additional/AdaptedAnswer.kt +++ /dev/null @@ -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 -) diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/additional/results/ResultHeader.kt b/src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/additional/results/ResultHeader.kt deleted file mode 100644 index 96788d5..0000000 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/additional/results/ResultHeader.kt +++ /dev/null @@ -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 -) diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/OutputType.kt b/src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/OutputType.kt similarity index 85% rename from src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/OutputType.kt rename to src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/OutputType.kt index 841c06f..77bb84d 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/OutputType.kt +++ b/src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/OutputType.kt @@ -1,4 +1,4 @@ -package com.github.insanusmokrassar.SauceNaoAPI +package com.insanusmokrassar.SauceNaoAPI sealed class OutputType { abstract val typeCode: Int diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/SauceNaoAPI.kt b/src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/SauceNaoAPI.kt similarity index 93% rename from src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/SauceNaoAPI.kt rename to src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/SauceNaoAPI.kt index db8e34c..66bdd52 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/SauceNaoAPI.kt +++ b/src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/SauceNaoAPI.kt @@ -1,24 +1,23 @@ -package com.github.insanusmokrassar.SauceNaoAPI +package com.insanusmokrassar.SauceNaoAPI -import com.github.insanusmokrassar.SauceNaoAPI.exceptions.TooManyRequestsException -import com.github.insanusmokrassar.SauceNaoAPI.exceptions.sauceNaoAPIException -import com.github.insanusmokrassar.SauceNaoAPI.models.* -import com.github.insanusmokrassar.SauceNaoAPI.utils.* +import com.insanusmokrassar.SauceNaoAPI.exceptions.TooManyRequestsException +import com.insanusmokrassar.SauceNaoAPI.exceptions.sauceNaoAPIException +import com.insanusmokrassar.SauceNaoAPI.models.* +import com.insanusmokrassar.SauceNaoAPI.utils.* import io.ktor.client.HttpClient import io.ktor.client.features.ClientRequestException 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.readText import io.ktor.http.* -import io.ktor.utils.io.core.Closeable import io.ktor.utils.io.core.Input import kotlinx.coroutines.* import kotlinx.coroutines.channels.Channel import kotlinx.serialization.json.Json -import kotlinx.serialization.json.nonstrict -import kotlin.Result -import kotlin.coroutines.* +import kotlin.coroutines.Continuation +import kotlin.coroutines.suspendCoroutine private const val API_TOKEN_FIELD = "api_key" private const val OUTPUT_TYPE_FIELD = "output_type" @@ -47,7 +46,7 @@ data class SauceNaoAPI( private val searchUrl: String = SEARCH_URL, private val scope: CoroutineScope = CoroutineScope(Dispatchers.Default), private val parser: Json = defaultSauceNaoParser -) : Closeable { +) : SauceCloseable { private val requestsChannel = Channel, HttpRequestBuilder>>(Channel.UNLIMITED) private val timeManager = TimeManager(scope) private val quotaManager = RequestQuotaManager(scope) diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/SauceRequestSubject.kt b/src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/SauceRequestSubject.kt similarity index 91% rename from src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/SauceRequestSubject.kt rename to src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/SauceRequestSubject.kt index 573473e..680e802 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/SauceRequestSubject.kt +++ b/src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/SauceRequestSubject.kt @@ -1,4 +1,4 @@ -package com.github.insanusmokrassar.SauceNaoAPI +package com.insanusmokrassar.SauceNaoAPI import io.ktor.http.ContentType import io.ktor.utils.io.core.Input diff --git a/src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/additional/AdaptedAnswer.kt b/src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/additional/AdaptedAnswer.kt new file mode 100644 index 0000000..5a76ab0 --- /dev/null +++ b/src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/additional/AdaptedAnswer.kt @@ -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 +) diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/additional/Utils.kt b/src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/additional/Utils.kt similarity index 82% rename from src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/additional/Utils.kt rename to src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/additional/Utils.kt index 7873582..e30b422 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/additional/Utils.kt +++ b/src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/additional/Utils.kt @@ -1,4 +1,4 @@ -package com.github.insanusmokrassar.SauceNaoAPI.additional +package com.insanusmokrassar.SauceNaoAPI.additional import com.soywiz.klock.TimeSpan diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/additional/header/AccountInfo.kt b/src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/additional/header/AccountInfo.kt similarity index 80% rename from src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/additional/header/AccountInfo.kt rename to src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/additional/header/AccountInfo.kt index fce54ac..4dc30da 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/additional/header/AccountInfo.kt +++ b/src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/additional/header/AccountInfo.kt @@ -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.github.insanusmokrassar.SauceNaoAPI.models.Header +import com.insanusmokrassar.SauceNaoAPI.additional.* +import com.insanusmokrassar.SauceNaoAPI.models.Header val Header.shortLimitStatus: LimitStatus get() = LimitStatus( diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/additional/header/IndexInfo.kt b/src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/additional/header/IndexInfo.kt similarity index 79% rename from src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/additional/header/IndexInfo.kt rename to src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/additional/header/IndexInfo.kt index 109939f..574e43a 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/additional/header/IndexInfo.kt +++ b/src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/additional/header/IndexInfo.kt @@ -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( val id: Int, diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/additional/header/QueryResultsMetainfo.kt b/src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/additional/header/QueryResultsMetainfo.kt similarity index 87% rename from src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/additional/header/QueryResultsMetainfo.kt rename to src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/additional/header/QueryResultsMetainfo.kt index 69e3c8f..14a4219 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/additional/header/QueryResultsMetainfo.kt +++ b/src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/additional/header/QueryResultsMetainfo.kt @@ -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 get() = QueryResultPreview( diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/additional/header/ResultMetaInfo.kt b/src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/additional/header/ResultMetaInfo.kt similarity index 65% rename from src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/additional/header/ResultMetaInfo.kt rename to src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/additional/header/ResultMetaInfo.kt index 1e77a32..519335d 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/additional/header/ResultMetaInfo.kt +++ b/src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/additional/header/ResultMetaInfo.kt @@ -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( val accountInfo: AccountInfo = AccountInfo(), diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/additional/results/AdaptedResult.kt b/src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/additional/results/AdaptedResult.kt similarity index 52% rename from src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/additional/results/AdaptedResult.kt rename to src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/additional/results/AdaptedResult.kt index 2c16a44..f4ac074 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/additional/results/AdaptedResult.kt +++ b/src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/additional/results/AdaptedResult.kt @@ -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.github.insanusmokrassar.SauceNaoAPI.additional.header.ResultMetaInfo -import com.github.insanusmokrassar.SauceNaoAPI.models.Result -import com.github.insanusmokrassar.SauceNaoAPI.models.ResultData +import com.insanusmokrassar.SauceNaoAPI.additional.header.IndexInfo +import com.insanusmokrassar.SauceNaoAPI.additional.header.ResultMetaInfo +import com.insanusmokrassar.SauceNaoAPI.models.Result +import com.insanusmokrassar.SauceNaoAPI.models.ResultData fun Result.adapted( resultMetaInfo: ResultMetaInfo diff --git a/src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/additional/results/ResultHeader.kt b/src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/additional/results/ResultHeader.kt new file mode 100644 index 0000000..68d4770 --- /dev/null +++ b/src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/additional/results/ResultHeader.kt @@ -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 +) diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/exceptions/TooManyRequestsException.kt b/src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/exceptions/TooManyRequestsException.kt similarity index 85% rename from src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/exceptions/TooManyRequestsException.kt rename to src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/exceptions/TooManyRequestsException.kt index 7649f3d..8356d2a 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/exceptions/TooManyRequestsException.kt +++ b/src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/exceptions/TooManyRequestsException.kt @@ -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.github.insanusmokrassar.SauceNaoAPI.additional.SHORT_TIME_RECALCULATING_MILLIS +import com.insanusmokrassar.SauceNaoAPI.additional.LONG_TIME_RECALCULATING_MILLIS +import com.insanusmokrassar.SauceNaoAPI.additional.SHORT_TIME_RECALCULATING_MILLIS import com.soywiz.klock.TimeSpan import io.ktor.client.features.ClientRequestException import io.ktor.client.statement.readText diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/models/Header.kt b/src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/models/Header.kt similarity index 91% rename from src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/models/Header.kt rename to src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/models/Header.kt index 45482b4..53ad52f 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/models/Header.kt +++ b/src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/models/Header.kt @@ -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.builtins.serializer import kotlinx.serialization.descriptors.SerialDescriptor import kotlinx.serialization.encoding.Decoder import kotlinx.serialization.encoding.Encoder -import kotlinx.serialization.json.* +import kotlinx.serialization.json.JsonObject +import kotlinx.serialization.json.jsonObject @Serializable data class Header( diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/models/HeaderIndex.kt b/src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/models/HeaderIndex.kt similarity index 78% rename from src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/models/HeaderIndex.kt rename to src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/models/HeaderIndex.kt index c34b0b7..359dac9 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/models/HeaderIndex.kt +++ b/src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/models/HeaderIndex.kt @@ -1,4 +1,4 @@ -package com.github.insanusmokrassar.SauceNaoAPI.models +package com.insanusmokrassar.SauceNaoAPI.models import kotlinx.serialization.Serializable diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/models/LimitsState.kt b/src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/models/LimitsState.kt similarity index 78% rename from src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/models/LimitsState.kt rename to src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/models/LimitsState.kt index 6b27024..ffe6e7a 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/models/LimitsState.kt +++ b/src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/models/LimitsState.kt @@ -1,4 +1,4 @@ -package com.github.insanusmokrassar.SauceNaoAPI.models +package com.insanusmokrassar.SauceNaoAPI.models import kotlinx.serialization.Serializable diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/models/Result.kt b/src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/models/Result.kt similarity index 70% rename from src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/models/Result.kt rename to src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/models/Result.kt index b2a1c93..5444b55 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/models/Result.kt +++ b/src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/models/Result.kt @@ -1,4 +1,4 @@ -package com.github.insanusmokrassar.SauceNaoAPI.models +package com.insanusmokrassar.SauceNaoAPI.models import kotlinx.serialization.Serializable diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/models/ResultData.kt b/src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/models/ResultData.kt similarity index 97% rename from src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/models/ResultData.kt rename to src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/models/ResultData.kt index 160b74b..c247923 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/models/ResultData.kt +++ b/src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/models/ResultData.kt @@ -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.Serializable diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/models/ResultHeader.kt b/src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/models/ResultHeader.kt similarity index 83% rename from src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/models/ResultHeader.kt rename to src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/models/ResultHeader.kt index 68e1a75..85c664f 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/models/ResultHeader.kt +++ b/src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/models/ResultHeader.kt @@ -1,4 +1,4 @@ -package com.github.insanusmokrassar.SauceNaoAPI.models +package com.insanusmokrassar.SauceNaoAPI.models import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/models/SauceNaoAnswer.kt b/src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/models/SauceNaoAnswer.kt similarity index 89% rename from src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/models/SauceNaoAnswer.kt rename to src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/models/SauceNaoAnswer.kt index 234c332..dd24d8d 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/models/SauceNaoAnswer.kt +++ b/src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/models/SauceNaoAnswer.kt @@ -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.builtins.ListSerializer import kotlinx.serialization.encoding.Decoder import kotlinx.serialization.encoding.Encoder -import kotlinx.serialization.json.* +import kotlinx.serialization.json.JsonObject +import kotlinx.serialization.json.buildJsonObject @Serializable private data class TemporalSauceNaoAnswerRepresentation( diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/utils/CommonMultivariantStringSerializer.kt b/src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/utils/CommonMultivariantStringSerializer.kt similarity index 85% rename from src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/utils/CommonMultivariantStringSerializer.kt rename to src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/utils/CommonMultivariantStringSerializer.kt index cf0c7c7..a531c0d 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/utils/CommonMultivariantStringSerializer.kt +++ b/src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/utils/CommonMultivariantStringSerializer.kt @@ -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.serializer import kotlinx.serialization.encoding.Decoder diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/utils/RequestQuotaManager.kt b/src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/utils/RequestQuotaManager.kt similarity index 82% rename from src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/utils/RequestQuotaManager.kt rename to src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/utils/RequestQuotaManager.kt index f6fe356..4542f9b 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/utils/RequestQuotaManager.kt +++ b/src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/utils/RequestQuotaManager.kt @@ -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.github.insanusmokrassar.SauceNaoAPI.additional.SHORT_TIME_RECALCULATING_MILLIS -import com.github.insanusmokrassar.SauceNaoAPI.exceptions.TooManyRequestsException -import com.github.insanusmokrassar.SauceNaoAPI.exceptions.TooManyRequestsLongException -import com.github.insanusmokrassar.SauceNaoAPI.models.Header -import com.github.insanusmokrassar.SauceNaoAPI.models.LimitsState +import com.insanusmokrassar.SauceNaoAPI.additional.LONG_TIME_RECALCULATING_MILLIS +import com.insanusmokrassar.SauceNaoAPI.additional.SHORT_TIME_RECALCULATING_MILLIS +import com.insanusmokrassar.SauceNaoAPI.exceptions.TooManyRequestsException +import com.insanusmokrassar.SauceNaoAPI.exceptions.TooManyRequestsLongException +import com.insanusmokrassar.SauceNaoAPI.models.Header +import com.insanusmokrassar.SauceNaoAPI.models.LimitsState import com.soywiz.klock.DateTime -import io.ktor.utils.io.core.Closeable import kotlinx.coroutines.* import kotlinx.coroutines.channels.Channel import kotlin.coroutines.suspendCoroutine @@ -16,7 +15,7 @@ import kotlin.math.min internal class RequestQuotaManager ( scope: CoroutineScope -) : Closeable { +) : SauceCloseable { private var longQuota = 1 private var shortQuota = 1 private var longMaxQuota = 1 diff --git a/src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/utils/SauceCloseable.kt b/src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/utils/SauceCloseable.kt new file mode 100644 index 0000000..87791fa --- /dev/null +++ b/src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/utils/SauceCloseable.kt @@ -0,0 +1,21 @@ +package com.insanusmokrassar.SauceNaoAPI.utils + +import kotlinx.coroutines.supervisorScope + +interface SauceCloseable { + fun close() +} + +fun SauceCloseable.use(block: (SauceCloseable) -> T): T = try { + block(this) +} finally { + close() +} + +suspend fun SauceCloseable.useSafe(block: suspend (SauceCloseable) -> T): T = try { + supervisorScope { + block(this@useSafe) + } +} finally { + close() +} diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/utils/SleepCalculations.kt b/src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/utils/SleepCalculations.kt similarity index 59% rename from src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/utils/SleepCalculations.kt rename to src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/utils/SleepCalculations.kt index 88a1462..f279599 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/utils/SleepCalculations.kt +++ b/src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/utils/SleepCalculations.kt @@ -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.github.insanusmokrassar.SauceNaoAPI.additional.SHORT_TIME_RECALCULATING_MILLIS -import com.github.insanusmokrassar.SauceNaoAPI.models.Header +import com.insanusmokrassar.SauceNaoAPI.additional.LONG_TIME_RECALCULATING_MILLIS +import com.insanusmokrassar.SauceNaoAPI.additional.SHORT_TIME_RECALCULATING_MILLIS +import com.insanusmokrassar.SauceNaoAPI.models.Header import com.soywiz.klock.DateTime -import com.soywiz.klock.TimeSpan internal suspend fun calculateSleepTime( header: Header, diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/utils/TimeManager.kt b/src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/utils/TimeManager.kt similarity index 90% rename from src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/utils/TimeManager.kt rename to src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/utils/TimeManager.kt index fa466a5..c6a7a48 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/SauceNaoAPI/utils/TimeManager.kt +++ b/src/commonMain/kotlin/com/insanusmokrassar/SauceNaoAPI/utils/TimeManager.kt @@ -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.github.insanusmokrassar.SauceNaoAPI.additional.SHORT_TIME_RECALCULATING_MILLIS +import com.insanusmokrassar.SauceNaoAPI.additional.LONG_TIME_RECALCULATING_MILLIS +import com.insanusmokrassar.SauceNaoAPI.additional.SHORT_TIME_RECALCULATING_MILLIS import com.soywiz.klock.DateTime -import io.ktor.utils.io.core.Closeable import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.launch @@ -69,7 +68,7 @@ private data class TimeManagerMostOldestInShortGetter( internal class TimeManager( scope: CoroutineScope -) : Closeable { +) : SauceCloseable { private val actionsChannel = Channel(Channel.UNLIMITED) private val timeUpdateJob = scope.launch { diff --git a/src/jvmTest/kotlin/Launcher.kt b/src/jvmTest/kotlin/Launcher.kt index 99c50f3..22e164a 100644 --- a/src/jvmTest/kotlin/Launcher.kt +++ b/src/jvmTest/kotlin/Launcher.kt @@ -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.utils.io.streams.asInput import kotlinx.coroutines.* import java.io.File import java.nio.file.Files @@ -11,7 +11,7 @@ suspend fun main(vararg args: String) { val scope = CoroutineScope(Dispatchers.Default) val api = SauceNaoAPI(key, scope = scope) - api.use { _ -> + api.useSafe { _ -> println( when { requestSubject.startsWith("/") -> File(requestSubject).let {