mirror of
https://github.com/InsanusMokrassar/SauceNaoAPI.git
synced 2024-11-26 00:08:43 +00:00
commit
ae9a7baf50
7
.github/workflows/build_and_publish.yml
vendored
7
.github/workflows/build_and_publish.yml
vendored
@ -16,8 +16,13 @@ jobs:
|
||||
mv gradle.properties.tmp gradle.properties
|
||||
- name: Build
|
||||
run: ./gradlew build
|
||||
- name: Publish to Gitea
|
||||
continue-on-error: true
|
||||
run: ./gradlew publishAllPublicationsToGiteaRepository
|
||||
env:
|
||||
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
|
||||
- name: Publish
|
||||
run: ./gradlew publishAllPublicationsToGithubPackagesRepository --no-parallel -x signJsPublication -x signJvmPublication -x signKotlinMultiplatformPublication
|
||||
run: ./gradlew publishAllPublicationsToGithubPackagesRepository --no-parallel
|
||||
continue-on-error: true
|
||||
env:
|
||||
GITHUBPACKAGES_USER: ${{ github.actor }}
|
||||
|
@ -1,5 +1,14 @@
|
||||
# SauceNaoAPI Changelog
|
||||
|
||||
## 0.13.0
|
||||
|
||||
* Versions:
|
||||
* `Kotlin`: `1.7.20` -> `1.7.22`
|
||||
* `Serialization`: `1.4.0` -> `1.4.1`
|
||||
* `Klock`: `3.2.0` -> `3.4.0`
|
||||
* `Ktor`: `2.1.2` -> `2.2.1`
|
||||
* Now it is possible to subscribe onto API limits changes
|
||||
|
||||
## 0.12.2
|
||||
|
||||
* Versions:
|
||||
|
@ -1,3 +1,3 @@
|
||||
kotlin.code.style=official
|
||||
|
||||
library_version=0.12.2
|
||||
library_version=0.13.0
|
||||
|
@ -1,11 +1,11 @@
|
||||
[versions]
|
||||
|
||||
kt = "1.7.20"
|
||||
kt-serialization = "1.4.0"
|
||||
kt = "1.7.22"
|
||||
kt-serialization = "1.4.1"
|
||||
kt-coroutines = "1.6.4"
|
||||
|
||||
klock = "3.2.0"
|
||||
ktor = "2.1.2"
|
||||
klock = "3.4.0"
|
||||
ktor = "2.2.1"
|
||||
|
||||
gh-release = "2.4.1"
|
||||
|
||||
|
@ -42,20 +42,40 @@ publishing {
|
||||
maven {
|
||||
name = "GithubPackages"
|
||||
url = uri("https://maven.pkg.github.com/InsanusMokrassar/SauceNaoAPI")
|
||||
|
||||
credentials {
|
||||
username = project.hasProperty('GITHUBPACKAGES_USER') ? project.property('GITHUBPACKAGES_USER') : System.getenv('GITHUBPACKAGES_USER')
|
||||
password = project.hasProperty('GITHUBPACKAGES_PASSWORD') ? project.property('GITHUBPACKAGES_PASSWORD') : System.getenv('GITHUBPACKAGES_PASSWORD')
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
if (project.hasProperty('GITEA_TOKEN') || System.getenv('GITEA_TOKEN') != null) {
|
||||
maven {
|
||||
name = "Gitea"
|
||||
url = uri("https://git.inmo.dev/api/packages/InsanusMokrassar/maven")
|
||||
|
||||
credentials(HttpHeaderCredentials) {
|
||||
name = "Authorization"
|
||||
value = project.hasProperty('GITEA_TOKEN') ? project.property('GITEA_TOKEN') : System.getenv('GITEA_TOKEN')
|
||||
}
|
||||
|
||||
authentication {
|
||||
header(HttpHeaderAuthentication)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
if ((project.hasProperty('SONATYPE_USER') || System.getenv('SONATYPE_USER') != null) && (project.hasProperty('SONATYPE_PASSWORD') || System.getenv('SONATYPE_PASSWORD') != null)) {
|
||||
maven {
|
||||
name = "sonatype"
|
||||
url = uri("https://oss.sonatype.org/service/local/staging/deploy/maven2/")
|
||||
|
||||
credentials {
|
||||
username = project.hasProperty('SONATYPE_USER') ? project.property('SONATYPE_USER') : System.getenv('SONATYPE_USER')
|
||||
password = project.hasProperty('SONATYPE_PASSWORD') ? project.property('SONATYPE_PASSWORD') : System.getenv('SONATYPE_PASSWORD')
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1 +1 @@
|
||||
{"licenses":[{"id":"Apache-2.0","title":"Apache Software License 2.0","url":"https://github.com/InsanusMokrassar/SauceNaoAPI/blob/master/LICENSE"}],"mavenConfig":{"name":"SauceNao API","description":"SauceNao API library","url":"https://insanusmokrassar.github.io/${project.name}","vcsUrl":"https://github.com/insanusmokrassar/${project.name}.git","developers":[{"id":"InsanusMokrassar","name":"Ovsyannikov Alexey","eMail":"ovsyannikov.alexey95@gmail.com"}],"repositories":[{"name":"GithubPackages","url":"https://maven.pkg.github.com/InsanusMokrassar/SauceNaoAPI"},{"name":"sonatype","url":"https://oss.sonatype.org/service/local/staging/deploy/maven2/"}],"gpgSigning":{"type":"dev.inmo.kmppscriptbuilder.core.models.GpgSigning.Optional"}}}
|
||||
{"licenses":[{"id":"Apache-2.0","title":"Apache Software License 2.0","url":"https://github.com/InsanusMokrassar/SauceNaoAPI/blob/master/LICENSE"}],"mavenConfig":{"name":"SauceNao API","description":"SauceNao API library","url":"https://insanusmokrassar.github.io/${project.name}","vcsUrl":"https://github.com/insanusmokrassar/${project.name}.git","developers":[{"id":"InsanusMokrassar","name":"Ovsyannikov Alexey","eMail":"ovsyannikov.alexey95@gmail.com"}],"repositories":[{"name":"GithubPackages","url":"https://maven.pkg.github.com/InsanusMokrassar/SauceNaoAPI"},{"name":"Gitea","url":"https://git.inmo.dev/api/packages/InsanusMokrassar/maven","credsType":{"type":"dev.inmo.kmppscriptbuilder.core.models.MavenPublishingRepository.CredentialsType.HttpHeaderCredentials","headerName":"Authorization","headerValueProperty":"GITEA_TOKEN"}},{"name":"sonatype","url":"https://oss.sonatype.org/service/local/staging/deploy/maven2/"}],"gpgSigning":{"type":"dev.inmo.kmppscriptbuilder.core.models.GpgSigning.Optional"}}}
|
@ -52,8 +52,12 @@ data class SauceNaoAPI(
|
||||
private val timeManager = TimeManager(subscope)
|
||||
private val quotaManager = RequestQuotaManager(subscope)
|
||||
|
||||
val limitsState: LimitsState
|
||||
get() = quotaManager.limitsState
|
||||
val limitsState: LimitsState by quotaManager::limitsState
|
||||
val longQuotaFlow by quotaManager::longQuotaFlow
|
||||
val shortQuotaFlow by quotaManager::shortQuotaFlow
|
||||
val longMaxQuotaFlow by quotaManager::longMaxQuotaFlow
|
||||
val shortMaxQuotaFlow by quotaManager::shortMaxQuotaFlow
|
||||
val limitsStateFlow by quotaManager::limitsStateFlow
|
||||
|
||||
private val requestsJob = subscope.launch {
|
||||
for ((callback, requestBuilder) in requestsChannel) {
|
||||
|
@ -9,17 +9,39 @@ import dev.inmo.saucenaoapi.models.Header
|
||||
import dev.inmo.saucenaoapi.models.LimitsState
|
||||
import kotlinx.coroutines.*
|
||||
import kotlinx.coroutines.channels.Channel
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.asStateFlow
|
||||
import kotlinx.coroutines.flow.map
|
||||
import kotlinx.coroutines.flow.merge
|
||||
import kotlin.math.max
|
||||
import kotlin.math.min
|
||||
|
||||
internal class RequestQuotaManager (
|
||||
scope: CoroutineScope
|
||||
) {
|
||||
private var longQuota = 1
|
||||
private var shortQuota = 1
|
||||
private var longMaxQuota = 1
|
||||
private var shortMaxQuota = 1
|
||||
private val _longQuotaFlow = MutableStateFlow(1)
|
||||
private val _shortQuotaFlow = MutableStateFlow(1)
|
||||
private val _longMaxQuotaFlow = MutableStateFlow(1)
|
||||
private val _shortMaxQuotaFlow = MutableStateFlow(1)
|
||||
private var longQuota by _longQuotaFlow::value
|
||||
private var shortQuota by _shortQuotaFlow::value
|
||||
private var longMaxQuota by _longMaxQuotaFlow::value
|
||||
private var shortMaxQuota by _shortMaxQuotaFlow::value
|
||||
|
||||
val longQuotaFlow = _longQuotaFlow.asStateFlow()
|
||||
val shortQuotaFlow = _shortQuotaFlow.asStateFlow()
|
||||
val longMaxQuotaFlow = _longMaxQuotaFlow.asStateFlow()
|
||||
val shortMaxQuotaFlow = _shortMaxQuotaFlow.asStateFlow()
|
||||
val limitsStateFlow = merge(
|
||||
longQuotaFlow, shortQuotaFlow, longMaxQuotaFlow, shortMaxQuotaFlow
|
||||
).map { _ ->
|
||||
LimitsState(
|
||||
shortMaxQuota,
|
||||
longMaxQuota,
|
||||
shortQuota,
|
||||
longQuota
|
||||
)
|
||||
}
|
||||
val limitsState: LimitsState
|
||||
get() = LimitsState(
|
||||
shortMaxQuota,
|
||||
|
Loading…
Reference in New Issue
Block a user