upmigration

This commit is contained in:
2020-12-02 14:39:54 +06:00
parent 7bc1e822fc
commit f27c493771
29 changed files with 94 additions and 87 deletions

View File

@@ -0,0 +1,23 @@
package dev.inmo.saucenaoapi.additional
import dev.inmo.saucenaoapi.additional.header.ResultMetaInfo
import dev.inmo.saucenaoapi.additional.header.adapted
import dev.inmo.saucenaoapi.additional.results.AdaptedResult
import dev.inmo.saucenaoapi.additional.results.adapted
import dev.inmo.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>
)

View File

@@ -0,0 +1,11 @@
package dev.inmo.saucenaoapi.additional
import com.soywiz.klock.TimeSpan
typealias AccountType = Int
const val defaultAccountType: AccountType = 1 // "basic"
typealias UserId = Int
val SHORT_TIME_RECALCULATING_MILLIS = TimeSpan(30.0 * 1000)
val LONG_TIME_RECALCULATING_MILLIS = TimeSpan(24.0 * 60 * 60 * 1000)

View File

@@ -0,0 +1,43 @@
package dev.inmo.saucenaoapi.additional.header
import dev.inmo.saucenaoapi.additional.*
import dev.inmo.saucenaoapi.models.Header
val Header.shortLimitStatus: LimitStatus
get() = LimitStatus(
shortRemaining,
shortLimit
)
val Header.longLimitStatus: LimitStatus
get() = LimitStatus(
longRemaining,
longLimit
)
val Header.limits
get() = Limits(shortLimitStatus, longLimitStatus)
val Header.accountInfo
get() = AccountInfo(
accountType ?: defaultAccountType,
userId,
limits
)
data class LimitStatus(
val remain: Int = Int.MAX_VALUE,
val limit: Int = Int.MAX_VALUE
)
data class Limits(
val short: LimitStatus = LimitStatus(),
val long: LimitStatus = LimitStatus()
)
data class AccountInfo(
val accountType: AccountType = defaultAccountType,
val userId: UserId? = null,
val limits: Limits = Limits()
)

View File

@@ -0,0 +1,24 @@
package dev.inmo.saucenaoapi.additional.header
import dev.inmo.saucenaoapi.models.Header
data class IndexInfo(
val id: Int,
val status: Int = 500,
val results: Int = 0,
val parent_id: Int? = null
)
val Header.adaptedIndexes: List<IndexInfo>
get() = indexes.mapNotNull {
it ?.let { _ ->
it.id ?.let { id ->
IndexInfo(
id,
it.status ?: 500, // Serverside error if not set
it.results ?: 0,
it.parent_id
)
}
}
}

View File

@@ -0,0 +1,37 @@
package dev.inmo.saucenaoapi.additional.header
import dev.inmo.saucenaoapi.models.Header
val Header.queryPreview
get() = QueryResultPreview(
queryImageDisplay,
queryImage
)
val Header.queryResults
get() = QueryResultsMetainfo(
status ?: 500, // server_side error if status field was not set up
resultsCount ?: 0,
minSimilarity ?: 0F,
searchDepth ?: 128,
queryPreview,
adaptedIndexes
)
data class QueryResultPreview(
val imageDisplay: String? = null, // something like "userdata/uuid.png",
val image: String? = null // something like "uuid.jpg"
)
data class QueryResultsMetainfo(
val status: Int = 0,
val count: Int = 0,
val minSimilarity: Float = 0F,
val searchDepth: Int = 128,
val preview: QueryResultPreview = QueryResultPreview(),
val indexesInfo: List<IndexInfo> = emptyList()
) {
val isOk: Boolean = status == 0
val isClientSideError = status < 0
val isServerSideError = status > 0
}

View File

@@ -0,0 +1,14 @@
package dev.inmo.saucenaoapi.additional.header
import dev.inmo.saucenaoapi.models.Header
data class ResultMetaInfo(
val accountInfo: AccountInfo = AccountInfo(),
val resultsInfo: QueryResultsMetainfo = QueryResultsMetainfo()
)
val Header.adapted
get() = ResultMetaInfo(
accountInfo,
queryResults
)

View File

@@ -0,0 +1,22 @@
package dev.inmo.saucenaoapi.additional.results
import dev.inmo.saucenaoapi.additional.header.IndexInfo
import dev.inmo.saucenaoapi.additional.header.ResultMetaInfo
import dev.inmo.saucenaoapi.models.Result
import dev.inmo.saucenaoapi.models.ResultData
fun Result.adapted(
resultMetaInfo: ResultMetaInfo
): AdaptedResult = AdaptedResult(
ResultHeader(
header.similarity,
header.thumbnail,
resultMetaInfo.resultsInfo.indexesInfo.firstOrNull { it.id == header.indexId } ?: IndexInfo(header.indexId)
),
data
)
data class AdaptedResult(
val resultHeader: ResultHeader,
val resultData: ResultData
)

View File

@@ -0,0 +1,9 @@
package dev.inmo.saucenaoapi.additional.results
import dev.inmo.saucenaoapi.additional.header.IndexInfo
data class ResultHeader(
val similarity: Float,
val thumbnail: String,
val index: IndexInfo
)