diff --git a/temerity/src/androidMain/kotlin/edu/ucsc/its/temerity/di/PlatformModule.android.kt b/temerity/src/androidMain/kotlin/edu/ucsc/its/temerity/di/PlatformModule.android.kt index 36750b7e61051c66cde75e30b06cf92ebf0ae224..1f3994819517bc487b1b88a47077c10fcb72ec73 100644 --- a/temerity/src/androidMain/kotlin/edu/ucsc/its/temerity/di/PlatformModule.android.kt +++ b/temerity/src/androidMain/kotlin/edu/ucsc/its/temerity/di/PlatformModule.android.kt @@ -17,17 +17,12 @@ */ package edu.ucsc.its.temerity.di -import edu.ucsc.its.temerity.extensions.coroutines.createDispatcher import io.ktor.client.engine.android.Android import kotlinx.coroutines.CoroutineDispatcher -import kotlinx.coroutines.Dispatchers import org.koin.core.qualifier.named import org.koin.dsl.module internal actual fun platformModule() = module { - single(named("libraryCoroutineDispatcher")) { (threadCount: Int, dispatcherName: String) -> - createDispatcher(Dispatchers.IO, threadCount, dispatcherName) - } single(named("httpClientEngine")) { (libraryCoroutineDispatcher: CoroutineDispatcher) -> Android.create { dispatcher = libraryCoroutineDispatcher diff --git a/temerity/src/commonMain/kotlin/edu/ucsc/its/temerity/core/Temerity.kt b/temerity/src/commonMain/kotlin/edu/ucsc/its/temerity/core/Temerity.kt index 5c7e2c59ea88ca06dfd4446fff2c5ffda54d99fd..6fedf33c4489f5a7e29b573a1464872ba4640354 100644 --- a/temerity/src/commonMain/kotlin/edu/ucsc/its/temerity/core/Temerity.kt +++ b/temerity/src/commonMain/kotlin/edu/ucsc/its/temerity/core/Temerity.kt @@ -69,6 +69,7 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.async import kotlinx.coroutines.awaitAll import kotlinx.coroutines.delay +import kotlinx.coroutines.withContext import kotlinx.datetime.DateTimeUnit import kotlinx.datetime.LocalDate import kotlinx.datetime.LocalTime @@ -89,11 +90,11 @@ import org.koin.core.logger.Level.WARNING import org.koin.core.logger.Logger import org.koin.core.logger.MESSAGE import org.koin.core.parameter.parametersOf +import org.koin.core.qualifier.named import org.koin.dsl.koinApplication import kotlin.time.Duration import kotlin.time.Duration.Companion.minutes import kotlin.time.DurationUnit.MILLISECONDS -import org.koin.core.qualifier.named import co.touchlab.kermit.Logger as KermitLogger import io.ktor.client.plugins.logging.Logger as KtorLogger @@ -115,16 +116,16 @@ public class Temerity internal constructor( // TODO: Use this as cache4k expiration time public val DEFAULT_CACHE_EXPIRATION: Duration = 15.minutes internal const val DEFAULT_MINIMUM_THREAD_COUNT: Int = 2 - + @JvmStatic internal fun createLogger( tag: String?, config: TemClientConfig?, - supportKtxNotebook: Boolean + supportKtxNotebook: Boolean, ): KermitLogger = LoggerFactory.createLogger( tag = tag, config = config, - supportKtxNotebook = supportKtxNotebook + supportKtxNotebook = supportKtxNotebook, ) @JvmStatic @@ -170,7 +171,7 @@ public class Temerity internal constructor( } override val version: String = BuildConfig.LIB_VERSION - + /** * Kotlinx-serialization [Json] encoder/decoder object used for serializing/deserializing JSON object responses */ @@ -253,9 +254,9 @@ public class Temerity internal constructor( } } - public override suspend fun getUsers(): List<User> { + public override suspend fun getUsers(): List<User> = withContext(libraryCoroutineDispatcher) { val userRequest = platformApi.getUsers() - return decodeResponseCatching(userRequest.executeApiResponse<String>()) + decodeResponseCatching(userRequest.executeApiResponse<String>()) } public override suspend fun getUser(userId: Long): User = diff --git a/temerity/src/commonMain/kotlin/edu/ucsc/its/temerity/di/LibModule.kt b/temerity/src/commonMain/kotlin/edu/ucsc/its/temerity/di/LibModule.kt index d27f07b4d96509c2a08c512186290d464e125c73..95de7e10c5db7a34ff987e93e3163c075aa19b46 100644 --- a/temerity/src/commonMain/kotlin/edu/ucsc/its/temerity/di/LibModule.kt +++ b/temerity/src/commonMain/kotlin/edu/ucsc/its/temerity/di/LibModule.kt @@ -24,16 +24,17 @@ import edu.ucsc.its.temerity.api.PlatformApi import edu.ucsc.its.temerity.api.createPlatformApi import edu.ucsc.its.temerity.core.buildHttpClient import edu.ucsc.its.temerity.core.createCommonLogger +import edu.ucsc.its.temerity.extensions.coroutines.createDispatcher import edu.ucsc.its.temerity.extensions.coroutines.createLibraryScope import io.ktor.client.HttpClient import io.ktor.client.engine.HttpClientEngine import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.Dispatchers import org.koin.core.parameter.parametersOf import org.koin.core.qualifier.named import org.koin.dsl.module import co.touchlab.kermit.Logger as KermitLogger - internal object LibModule { /** * This function provides the Koin module for the Temerity library. @@ -43,6 +44,9 @@ internal object LibModule { single(named("libraryLogger")) { (tag: String?, config: TemClientConfig?) -> createCommonLogger(tag = tag, config = config) } + single(named("libraryCoroutineDispatcher")) { (threadCount: Int, dispatcherName: String) -> + createDispatcher(Dispatchers.IO, threadCount, dispatcherName) + } single(named("libraryCoroutineScope")) { (dispatcher: CoroutineDispatcher) -> createLibraryScope(dispatcher) } diff --git a/temerity/src/jvmMain/kotlin/edu/ucsc/its/temerity/extensions/log/WrappingFormatter.kt b/temerity/src/commonMain/kotlin/edu/ucsc/its/temerity/extensions/log/WrappingFormatter.kt similarity index 100% rename from temerity/src/jvmMain/kotlin/edu/ucsc/its/temerity/extensions/log/WrappingFormatter.kt rename to temerity/src/commonMain/kotlin/edu/ucsc/its/temerity/extensions/log/WrappingFormatter.kt diff --git a/temerity/src/jvmMain/kotlin/edu/ucsc/its/temerity/di/PlatformModule.jvm.kt b/temerity/src/jvmMain/kotlin/edu/ucsc/its/temerity/di/PlatformModule.jvm.kt index 31a96ac9a19833ca0defc30204aa282f80319f21..a9845defa0bd8148131c81826c2f120f22642902 100644 --- a/temerity/src/jvmMain/kotlin/edu/ucsc/its/temerity/di/PlatformModule.jvm.kt +++ b/temerity/src/jvmMain/kotlin/edu/ucsc/its/temerity/di/PlatformModule.jvm.kt @@ -17,17 +17,12 @@ */ package edu.ucsc.its.temerity.di -import edu.ucsc.its.temerity.extensions.coroutines.createDispatcher import io.ktor.client.engine.java.Java import kotlinx.coroutines.CoroutineDispatcher -import kotlinx.coroutines.Dispatchers import org.koin.core.qualifier.named import org.koin.dsl.module internal actual fun platformModule() = module { - single(named("libraryCoroutineDispatcher")) { (threadCount: Int, dispatcherName: String) -> - createDispatcher(Dispatchers.IO, threadCount, dispatcherName) - } factory(named("httpClientEngine")) { (libraryCoroutineDispatcher: CoroutineDispatcher) -> Java.create { dispatcher = libraryCoroutineDispatcher