From dcd6505eff8f8cf6b157df87817443afbc8e9666 Mon Sep 17 00:00:00 2001 From: Syer10 Date: Sat, 18 Feb 2023 15:18:22 -0500 Subject: [PATCH] Simplify Http client factory --- .../jui/domain/SharedDomainComponent.kt | 15 +-- .../ca/gosyer/jui/domain/server/HttpClient.kt | 122 +++++++++--------- 2 files changed, 64 insertions(+), 73 deletions(-) diff --git a/domain/src/commonMain/kotlin/ca/gosyer/jui/domain/SharedDomainComponent.kt b/domain/src/commonMain/kotlin/ca/gosyer/jui/domain/SharedDomainComponent.kt index 75a7fa12..8449415a 100644 --- a/domain/src/commonMain/kotlin/ca/gosyer/jui/domain/SharedDomainComponent.kt +++ b/domain/src/commonMain/kotlin/ca/gosyer/jui/domain/SharedDomainComponent.kt @@ -16,7 +16,7 @@ import ca.gosyer.jui.domain.migration.interactor.RunMigrations import ca.gosyer.jui.domain.migration.service.MigrationPreferences import ca.gosyer.jui.domain.reader.service.ReaderPreferences import ca.gosyer.jui.domain.server.Http -import ca.gosyer.jui.domain.server.HttpProvider +import ca.gosyer.jui.domain.server.httpClient import ca.gosyer.jui.domain.server.service.ServerPreferences import ca.gosyer.jui.domain.source.service.CatalogPreferences import ca.gosyer.jui.domain.ui.service.UiPreferences @@ -26,9 +26,6 @@ import kotlinx.serialization.json.Json import me.tatarka.inject.annotations.Provides interface SharedDomainComponent : CoreComponent { - // Providers - val httpProvider: HttpProvider - // Factories val migrations: RunMigrations @@ -61,6 +58,11 @@ interface SharedDomainComponent : CoreComponent { val json: Json + @AppScope + @Provides + fun httpFactory(serverPreferences: ServerPreferences, json: Json) = + httpClient(serverPreferences, json) + @get:AppScope @get:Provides val serverPreferencesFactory: ServerPreferences @@ -103,11 +105,6 @@ interface SharedDomainComponent : CoreComponent { val updatePreferencesFactory: UpdatePreferences get() = UpdatePreferences(preferenceFactory.create("update")) - @get:AppScope - @get:Provides - val httpFactory: Http - get() = httpProvider.get() - @get:AppScope @get:Provides val libraryUpdateServiceFactory: LibraryUpdateService diff --git a/domain/src/commonMain/kotlin/ca/gosyer/jui/domain/server/HttpClient.kt b/domain/src/commonMain/kotlin/ca/gosyer/jui/domain/server/HttpClient.kt index a9b29877..c5f44716 100644 --- a/domain/src/commonMain/kotlin/ca/gosyer/jui/domain/server/HttpClient.kt +++ b/domain/src/commonMain/kotlin/ca/gosyer/jui/domain/server/HttpClient.kt @@ -29,7 +29,6 @@ import io.ktor.http.URLBuilder import io.ktor.http.URLProtocol import io.ktor.serialization.kotlinx.json.json import kotlinx.serialization.json.Json -import me.tatarka.inject.annotations.Inject import org.lighthousegames.logging.logging import kotlin.time.Duration.Companion.minutes import kotlin.time.Duration.Companion.seconds @@ -41,79 +40,74 @@ expect val Engine: HttpClientEngineFactory expect fun HttpClientConfig.configurePlatform() -class HttpProvider @Inject constructor( - private val serverPreferences: ServerPreferences, - private val json: Json -) { - fun get(): Http { - return HttpClient(Engine) { - configurePlatform() +fun httpClient(serverPreferences: ServerPreferences, json: Json): Http { + return HttpClient(Engine) { + configurePlatform() - expectSuccess = true + expectSuccess = true - engine { - proxy = when (serverPreferences.proxy().get()) { - Proxy.NO_PROXY -> null - Proxy.HTTP_PROXY -> ProxyBuilder.http( - URLBuilder( - host = serverPreferences.proxyHttpHost().get(), - port = serverPreferences.proxyHttpPort().get() - ).build() - ) - Proxy.SOCKS_PROXY -> ProxyBuilder.socks( - serverPreferences.proxySocksHost().get(), - serverPreferences.proxySocksPort().get() - ) - } + engine { + proxy = when (serverPreferences.proxy().get()) { + Proxy.NO_PROXY -> null + Proxy.HTTP_PROXY -> ProxyBuilder.http( + URLBuilder( + host = serverPreferences.proxyHttpHost().get(), + port = serverPreferences.proxyHttpPort().get() + ).build() + ) + Proxy.SOCKS_PROXY -> ProxyBuilder.socks( + serverPreferences.proxySocksHost().get(), + serverPreferences.proxySocksPort().get() + ) } - when (serverPreferences.auth().get()) { - Auth.NONE -> Unit - Auth.BASIC -> AuthPlugin { - basic { - sendWithoutRequest { - it.url.protocol == URLProtocol.WS || it.url.protocol == URLProtocol.WSS - } - credentials { - BasicAuthCredentials( - serverPreferences.authUsername().get(), - serverPreferences.authPassword().get() - ) - } + } + when (serverPreferences.auth().get()) { + Auth.NONE -> Unit + Auth.BASIC -> AuthPlugin { + basic { + sendWithoutRequest { + it.url.protocol == URLProtocol.WS || it.url.protocol == URLProtocol.WSS } - } - Auth.DIGEST -> AuthPlugin { - digest { - credentials { - DigestAuthCredentials( - serverPreferences.authUsername().get(), - serverPreferences.authPassword().get() - ) - } + credentials { + BasicAuthCredentials( + serverPreferences.authUsername().get(), + serverPreferences.authPassword().get() + ) } } } - install(HttpTimeout) { - connectTimeoutMillis = 30.seconds.inWholeMilliseconds - requestTimeoutMillis = 30.seconds.inWholeMilliseconds - socketTimeoutMillis = 2.minutes.inWholeMilliseconds - } - install(ContentNegotiation) { - json(json) - } - install(WebSockets) - install(Logging) { - level = if (BuildKonfig.DEBUG) { - LogLevel.HEADERS - } else { - LogLevel.INFO - } - logger = object : Logger { - val log = logging("HttpClient") - override fun log(message: String) { - log.info { message } + Auth.DIGEST -> AuthPlugin { + digest { + credentials { + DigestAuthCredentials( + serverPreferences.authUsername().get(), + serverPreferences.authPassword().get() + ) } } } } + install(HttpTimeout) { + connectTimeoutMillis = 30.seconds.inWholeMilliseconds + requestTimeoutMillis = 30.seconds.inWholeMilliseconds + socketTimeoutMillis = 2.minutes.inWholeMilliseconds + } + install(ContentNegotiation) { + json(json) + } + install(WebSockets) + install(Logging) { + level = if (BuildKonfig.DEBUG) { + LogLevel.HEADERS + } else { + LogLevel.INFO + } + logger = object : Logger { + val log = logging("HttpClient") + override fun log(message: String) { + log.info { message } + } + } + } } }