From 5ea0b530bde78821395b32fec9ed1d7f0b288f17 Mon Sep 17 00:00:00 2001 From: stslex Date: Sat, 30 Mar 2024 15:10:07 +0300 Subject: [PATCH 1/3] update versions --- .../src/main/kotlin/AppVersions.kt | 4 +-- .../st.slex.csplashscreen/ComposeAndroid.kt | 2 +- .../st.slex.csplashscreen/KotlinAndroid.kt | 30 ++++++++++++------- .../LocalPropertiesConstants.kt | 12 ++++++-- gradle/libs.versions.toml | 20 ++++++------- gradle/wrapper/gradle-wrapper.properties | 2 +- 6 files changed, 44 insertions(+), 26 deletions(-) diff --git a/build-logic/dependencies/src/main/kotlin/AppVersions.kt b/build-logic/dependencies/src/main/kotlin/AppVersions.kt index e5567ce0..554230c4 100644 --- a/build-logic/dependencies/src/main/kotlin/AppVersions.kt +++ b/build-logic/dependencies/src/main/kotlin/AppVersions.kt @@ -1,4 +1,4 @@ object AppVersions { - const val VERSION_NAME = "1.70" - const val VERSION_CODE = 16 + const val VERSION_NAME = "1.71" + const val VERSION_CODE = 17 } \ No newline at end of file diff --git a/build-logic/dependencies/src/main/kotlin/st.slex.csplashscreen/ComposeAndroid.kt b/build-logic/dependencies/src/main/kotlin/st.slex.csplashscreen/ComposeAndroid.kt index 756ae709..18437947 100644 --- a/build-logic/dependencies/src/main/kotlin/st.slex.csplashscreen/ComposeAndroid.kt +++ b/build-logic/dependencies/src/main/kotlin/st.slex.csplashscreen/ComposeAndroid.kt @@ -12,7 +12,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile * Configure Compose-specific options */ internal fun Project.configureAndroidCompose( - commonExtension: CommonExtension<*, *, *, *, *>, + commonExtension: CommonExtension<*, *, *, *, *, *>, ) { val libs = extensions.getByType().named("libs") diff --git a/build-logic/dependencies/src/main/kotlin/st.slex.csplashscreen/KotlinAndroid.kt b/build-logic/dependencies/src/main/kotlin/st.slex.csplashscreen/KotlinAndroid.kt index fc1e60bf..6e3f1281 100644 --- a/build-logic/dependencies/src/main/kotlin/st.slex.csplashscreen/KotlinAndroid.kt +++ b/build-logic/dependencies/src/main/kotlin/st.slex.csplashscreen/KotlinAndroid.kt @@ -13,12 +13,13 @@ import org.gradle.kotlin.dsl.provideDelegate import org.gradle.kotlin.dsl.withType import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions import org.jetbrains.kotlin.gradle.tasks.KotlinCompile +import org.jetbrains.kotlin.konan.properties.Properties /** * Configure base Kotlin with Android options */ internal fun Project.configureKotlinAndroid( - commonExtension: CommonExtension<*, *, *, *, *>, + commonExtension: CommonExtension<*, *, *, *, *, *>, ) { commonExtension.apply { @@ -27,7 +28,13 @@ internal fun Project.configureKotlinAndroid( defaultConfig { minSdk = 28 buildFeatures.buildConfig = true - setLocalProperty(project.rootProject) + + gradleLocalProperties( + projectRootDir = project.rootProject.projectDir, + providers = providers + ).let { properties -> + setLocalProperties(properties) + } } compileOptions { @@ -69,7 +76,7 @@ internal fun Project.configureKotlinAndroid( } } -private fun CommonExtension<*, *, *, *, *>.kotlinOptions(block: KotlinJvmOptions.() -> Unit) { +private fun CommonExtension<*, *, *, *, *, *>.kotlinOptions(block: KotlinJvmOptions.() -> Unit) { (this as ExtensionAware).extensions.configure("kotlinOptions", block) } @@ -108,12 +115,15 @@ private fun Project.configureKotlin() { } } - -fun DefaultConfig.setLocalProperty( - dir: Project +fun DefaultConfig.setLocalProperties( + properties: Properties ) { - val key = gradleLocalProperties(dir.projectDir)["API_KEY"] - ?.toString() - ?: throw IllegalStateException("API_KEY should be initialised") - buildConfigField("String", "API_KEY", key) + LocalProperties.values().forEach { property -> + properties[property.key] + ?.toString() + ?.let { value -> + buildConfigField(property.type, property.buildName, value) + } + ?: throw IllegalStateException("API_KEY should be initialised") + } } diff --git a/build-logic/dependencies/src/main/kotlin/st.slex.csplashscreen/LocalPropertiesConstants.kt b/build-logic/dependencies/src/main/kotlin/st.slex.csplashscreen/LocalPropertiesConstants.kt index a84eddd8..c947d58c 100644 --- a/build-logic/dependencies/src/main/kotlin/st.slex.csplashscreen/LocalPropertiesConstants.kt +++ b/build-logic/dependencies/src/main/kotlin/st.slex.csplashscreen/LocalPropertiesConstants.kt @@ -1,5 +1,13 @@ package st.slex.csplashscreen -internal object LocalPropertiesConstants { - const val API_KEY = "API_KEY" +enum class LocalProperties( + val key: String, + val buildName: String, + val type: String, +) { + API_KEY( + key = "API_KEY", + buildName = "API_KEY", + type = "String", + ) } \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 32d9ff4e..ec3b4c81 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,17 +1,17 @@ [versions] androidDesugarJdkLibs = "2.0.4" -kotlin = "1.9.20" -androidGradlePlugin = "8.1.4" +kotlin = "1.9.23" +androidGradlePlugin = "8.3.1" ktx = "1.12.0" -material = "1.10.0" +material = "1.11.0" appcompat = "1.6.1" immutableCollection = "0.3.5" -lifecycle = "2.6.2" +lifecycle = "2.7.0" coroutines = "1.7.3" -composeCompiler = "1.5.4" -composeBom = "2023.10.01" +composeCompiler = "1.5.11" +composeBom = "2024.03.00" composeNavigation = "2.7.2" accompanist = "0.30.0" coilCompose = "2.4.0" @@ -26,8 +26,8 @@ espresso = "3.5.1" robolectric = "4.9" androidxTest = "1.5.0" -room = "2.6.0" -ksp = "1.9.20-1.0.14" +room = "2.6.1" +ksp = "1.9.23-1.0.19" mockito = "2.19.0" dagger = "2.48" @@ -48,7 +48,7 @@ lifecycle-compose = { group = "androidx.lifecycle", name = "lifecycle-viewmodel- coroutines = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-android", version.ref = "coroutines" } androidx-compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "composeBom" } -androidx-compose-activity = "androidx.activity:activity-compose:1.8.1" +androidx-compose-activity = "androidx.activity:activity-compose:1.8.2" androidx-compose-material3 = { group = "androidx.compose.material3", name = "material3" } androidx-compose-ui = { group = "androidx.compose.ui", name = "ui" } androidx-compose-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview" } @@ -65,7 +65,7 @@ coil-compose = { group = "io.coil-kt", name = "coil-compose", version.ref = "coi androidx-compose-paging = "androidx.paging:paging-compose:3.2.1" androidx-paging-runtime = "androidx.paging:paging-runtime-ktx:3.2.1" -kotlinx-serialization-json = "org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.1" +kotlinx-serialization-json = "org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0" accompanist-placeholder = { module = "com.google.accompanist:accompanist-placeholder", version.ref = "accompanist" } accompanist-systemuicontroller = { module = "com.google.accompanist:accompanist-systemuicontroller", version.ref = "accompanist" } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 2e8465b1..04cba79f 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Tue Feb 15 09:17:21 MSK 2022 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME From 0b55995aa8985e08c84bfce4128edc42a6e19d84 Mon Sep 17 00:00:00 2001 From: stslex Date: Sat, 30 Mar 2024 15:25:28 +0300 Subject: [PATCH 2/3] refactor network layer (simplify) --- .../core/network/client/NetworkClient.kt | 11 +++ .../network/client/NetworkClientBuilder.kt | 67 ------------- .../core/network/client/NetworkClientImpl.kt | 66 ++++++++++++- .../impl/CollectionNetworkClientImpl.kt | 24 ++--- .../source/impl/PhotosNetworkClientImpl.kt | 93 ++++++++----------- .../impl/SearchPhotosNetworkSourceImpl.kt | 15 ++- .../source/impl/TopicsNetworkSourceImpl.kt | 13 +-- .../source/impl/UserNetworkSourceImpl.kt | 9 +- 8 files changed, 138 insertions(+), 160 deletions(-) delete mode 100644 core/network/src/main/java/st/slex/csplashscreen/core/network/client/NetworkClientBuilder.kt diff --git a/core/network/src/main/java/st/slex/csplashscreen/core/network/client/NetworkClient.kt b/core/network/src/main/java/st/slex/csplashscreen/core/network/client/NetworkClient.kt index 6e3c87d4..0eeef5bc 100644 --- a/core/network/src/main/java/st/slex/csplashscreen/core/network/client/NetworkClient.kt +++ b/core/network/src/main/java/st/slex/csplashscreen/core/network/client/NetworkClient.kt @@ -1,8 +1,19 @@ package st.slex.csplashscreen.core.network.client import io.ktor.client.HttpClient +import io.ktor.client.call.body +import io.ktor.client.request.HttpRequestBuilder +import io.ktor.client.request.get interface NetworkClient { suspend fun request(request: suspend HttpClient.() -> T): T } + +internal suspend inline fun NetworkClient.get( + crossinline builder: suspend HttpRequestBuilder.() -> Unit +): T = request { + get { + builder() + }.body() +} diff --git a/core/network/src/main/java/st/slex/csplashscreen/core/network/client/NetworkClientBuilder.kt b/core/network/src/main/java/st/slex/csplashscreen/core/network/client/NetworkClientBuilder.kt deleted file mode 100644 index a3a81b2f..00000000 --- a/core/network/src/main/java/st/slex/csplashscreen/core/network/client/NetworkClientBuilder.kt +++ /dev/null @@ -1,67 +0,0 @@ -package st.slex.csplashscreen.core.network.client - -import io.ktor.client.HttpClientConfig -import io.ktor.client.engine.android.AndroidEngineConfig -import io.ktor.client.plugins.contentnegotiation.ContentNegotiation -import io.ktor.client.plugins.defaultRequest -import io.ktor.client.plugins.logging.ANDROID -import io.ktor.client.plugins.logging.EMPTY -import io.ktor.client.plugins.logging.LogLevel -import io.ktor.client.plugins.logging.Logger -import io.ktor.client.plugins.logging.Logging -import io.ktor.client.request.headers -import io.ktor.http.URLProtocol -import io.ktor.serialization.kotlinx.json.json -import kotlinx.serialization.ExperimentalSerializationApi -import kotlinx.serialization.json.Json -import st.slex.csplashscreen.core.core.BuildConfig.DEBUG -import st.slex.csplashscreen.core.network.BuildConfig - -internal object NetworkClientBuilder { - - private const val HOST_URL = "api.unsplash.com" - private const val HEADER_AUTH = "Authorization" - private const val HEADER_AUTH_FIELD = "Client-ID" - - @OptIn(ExperimentalSerializationApi::class) - fun HttpClientConfig.setupNegotiation() { - install(ContentNegotiation) { - json( - Json { - prettyPrint = true - isLenient = true - ignoreUnknownKeys = true - explicitNulls = false - } - ) - } - } - - fun HttpClientConfig.setupDefaultRequest() { - defaultRequest { - url { - host = HOST_URL - protocol = URLProtocol.HTTPS - } - headers { - append( - HEADER_AUTH, - "$HEADER_AUTH_FIELD ${BuildConfig.API_KEY}" - ) - } - } - } - - fun HttpClientConfig.setupLogging() { - install(Logging) { - logger = when (DEBUG) { - true -> Logger.ANDROID - false -> Logger.EMPTY - } - level = when (DEBUG) { - true -> LogLevel.ALL - false -> LogLevel.NONE - } - } - } -} \ No newline at end of file diff --git a/core/network/src/main/java/st/slex/csplashscreen/core/network/client/NetworkClientImpl.kt b/core/network/src/main/java/st/slex/csplashscreen/core/network/client/NetworkClientImpl.kt index 2ed8f0b7..21ffe30a 100644 --- a/core/network/src/main/java/st/slex/csplashscreen/core/network/client/NetworkClientImpl.kt +++ b/core/network/src/main/java/st/slex/csplashscreen/core/network/client/NetworkClientImpl.kt @@ -1,13 +1,25 @@ package st.slex.csplashscreen.core.network.client import io.ktor.client.HttpClient +import io.ktor.client.HttpClientConfig import io.ktor.client.engine.android.Android +import io.ktor.client.engine.android.AndroidEngineConfig import io.ktor.client.plugins.cache.HttpCache +import io.ktor.client.plugins.contentnegotiation.ContentNegotiation +import io.ktor.client.plugins.defaultRequest +import io.ktor.client.plugins.logging.ANDROID +import io.ktor.client.plugins.logging.EMPTY +import io.ktor.client.plugins.logging.LogLevel +import io.ktor.client.plugins.logging.Logger +import io.ktor.client.plugins.logging.Logging +import io.ktor.client.request.headers +import io.ktor.http.URLProtocol +import io.ktor.serialization.kotlinx.json.json import kotlinx.coroutines.withContext +import kotlinx.serialization.ExperimentalSerializationApi +import kotlinx.serialization.json.Json import st.slex.csplashscreen.core.core.coroutine.AppDispatcher -import st.slex.csplashscreen.core.network.client.NetworkClientBuilder.setupDefaultRequest -import st.slex.csplashscreen.core.network.client.NetworkClientBuilder.setupLogging -import st.slex.csplashscreen.core.network.client.NetworkClientBuilder.setupNegotiation +import st.slex.csplashscreen.core.network.BuildConfig import javax.inject.Inject import javax.inject.Singleton @@ -29,4 +41,52 @@ class NetworkClientImpl @Inject constructor( expectSuccess = true setupDefaultRequest() } + + @OptIn(ExperimentalSerializationApi::class) + fun HttpClientConfig.setupNegotiation() { + install(ContentNegotiation) { + json( + Json { + prettyPrint = true + isLenient = true + ignoreUnknownKeys = true + explicitNulls = false + } + ) + } + } + + fun HttpClientConfig.setupDefaultRequest() { + defaultRequest { + url { + host = HOST_URL + protocol = URLProtocol.HTTPS + } + headers { + append( + HEADER_AUTH, + "$HEADER_AUTH_FIELD ${BuildConfig.API_KEY}" + ) + } + } + } + + fun HttpClientConfig.setupLogging() { + install(Logging) { + logger = when (st.slex.csplashscreen.core.core.BuildConfig.DEBUG) { + true -> Logger.ANDROID + false -> Logger.EMPTY + } + level = when (st.slex.csplashscreen.core.core.BuildConfig.DEBUG) { + true -> LogLevel.ALL + false -> LogLevel.NONE + } + } + } + + companion object { + private const val HOST_URL = "api.unsplash.com" + private const val HEADER_AUTH = "Authorization" + private const val HEADER_AUTH_FIELD = "Client-ID" + } } diff --git a/core/network/src/main/java/st/slex/csplashscreen/core/network/source/impl/CollectionNetworkClientImpl.kt b/core/network/src/main/java/st/slex/csplashscreen/core/network/source/impl/CollectionNetworkClientImpl.kt index 3ab463b2..0ed486a9 100644 --- a/core/network/src/main/java/st/slex/csplashscreen/core/network/source/impl/CollectionNetworkClientImpl.kt +++ b/core/network/src/main/java/st/slex/csplashscreen/core/network/source/impl/CollectionNetworkClientImpl.kt @@ -1,10 +1,9 @@ package st.slex.csplashscreen.core.network.source.impl -import io.ktor.client.call.body -import io.ktor.client.request.get import io.ktor.client.request.parameter import io.ktor.http.appendPathSegments import st.slex.csplashscreen.core.network.client.NetworkClient +import st.slex.csplashscreen.core.network.client.get import st.slex.csplashscreen.core.network.model.remote.collection.RemoteCollectionModel import st.slex.csplashscreen.core.network.source.interf.CollectionNetworkClient import st.slex.csplashscreen.core.network.utils.ServiceConstants.PARAMETER_PAGE @@ -22,24 +21,19 @@ class CollectionNetworkClientImpl @Inject constructor( override suspend fun getCollections( page: Int, pageSize: Int - ): List = client.request { - get { - url.appendPathSegments(PATH_COLLECTIONS) - parameter(PARAMETER_PAGE, page) - parameter(PARAMETER_PAGE_SIZE, pageSize) - }.body() + ): List = client.get { + url.appendPathSegments(PATH_COLLECTIONS) + parameter(PARAMETER_PAGE, page) + parameter(PARAMETER_PAGE_SIZE, pageSize) } - override suspend fun getUserCollections( username: String, page: Int, pageSize: Int - ): List = client.request { - get { - url.appendPathSegments(PATH_USERS, username, PATH_COLLECTIONS) - parameter(PARAMETER_PAGE, page) - parameter(PARAMETER_PAGE_SIZE, pageSize) - }.body() + ): List = client.get { + url.appendPathSegments(PATH_USERS, username, PATH_COLLECTIONS) + parameter(PARAMETER_PAGE, page) + parameter(PARAMETER_PAGE_SIZE, pageSize) } } \ No newline at end of file diff --git a/core/network/src/main/java/st/slex/csplashscreen/core/network/source/impl/PhotosNetworkClientImpl.kt b/core/network/src/main/java/st/slex/csplashscreen/core/network/source/impl/PhotosNetworkClientImpl.kt index c27a6a06..987e17a7 100644 --- a/core/network/src/main/java/st/slex/csplashscreen/core/network/source/impl/PhotosNetworkClientImpl.kt +++ b/core/network/src/main/java/st/slex/csplashscreen/core/network/source/impl/PhotosNetworkClientImpl.kt @@ -1,10 +1,9 @@ package st.slex.csplashscreen.core.network.source.impl -import io.ktor.client.call.body -import io.ktor.client.request.get import io.ktor.client.request.parameter import io.ktor.http.appendPathSegments import st.slex.csplashscreen.core.network.client.NetworkClient +import st.slex.csplashscreen.core.network.client.get import st.slex.csplashscreen.core.network.model.remote.download.RemoteDownloadModel import st.slex.csplashscreen.core.network.model.remote.image.RemoteImageModel import st.slex.csplashscreen.core.network.source.interf.PhotosNetworkClient @@ -18,6 +17,9 @@ import st.slex.csplashscreen.core.network.utils.ServiceConstants.PATH_TOPICS import st.slex.csplashscreen.core.network.utils.ServiceConstants.PATH_USERS import javax.inject.Inject import javax.inject.Singleton +import kotlin.collections.List +import kotlin.collections.mutableMapOf +import kotlin.collections.set @Singleton class PhotosNetworkClientImpl @Inject constructor( @@ -34,81 +36,68 @@ class PhotosNetworkClientImpl @Inject constructor( override suspend fun getCollectionPhotos( query: String, page: Int, pageSize: Int - ): List = collectionPhotos[page] ?: client.request { - get { - url.appendPathSegments(PATH_COLLECTIONS, query, PATH_PHOTOS) - parameter(PARAMETER_PAGE, page) - parameter(PARAMETER_PAGE_SIZE, pageSize) - }.body>().also { result -> - collectionPhotos[page] = result - } + ): List = collectionPhotos[page] ?: client.get> { + url.appendPathSegments(PATH_COLLECTIONS, query, PATH_PHOTOS) + parameter(PARAMETER_PAGE, page) + parameter(PARAMETER_PAGE_SIZE, pageSize) + }.also { result -> + collectionPhotos[page] = result } override suspend fun getPhotos( page: Int, pageSize: Int - ): List = photos[page] ?: client.request { - get { - url.appendPathSegments(PATH_PHOTOS) - parameter(PARAMETER_PAGE, page) - parameter(PARAMETER_PAGE_SIZE, pageSize) - }.body>().also { result -> - photos[page] = result - } + ): List = photos[page] ?: client.get> { + url.appendPathSegments(PATH_PHOTOS) + parameter(PARAMETER_PAGE, page) + parameter(PARAMETER_PAGE_SIZE, pageSize) + }.also { result -> + photos[page] = result } override suspend fun getUserPhotos( username: String, page: Int, pageSize: Int - ): List = userPhotos[page] ?: client.request { - get { - url.appendPathSegments(PATH_USERS, username, PATH_PHOTOS) - parameter(PARAMETER_PAGE, page) - parameter(PARAMETER_PAGE_SIZE, pageSize) - }.body>().also { result -> - userPhotos[page] = result - } + ): List = userPhotos[page] ?: client.get> { + url.appendPathSegments(PATH_USERS, username, PATH_PHOTOS) + parameter(PARAMETER_PAGE, page) + parameter(PARAMETER_PAGE_SIZE, pageSize) + }.also { result -> + userPhotos[page] = result } override suspend fun getUserLikePhotos( username: String, page: Int, pageSize: Int - ): List = userLikePhotos[page] ?: client.request { - get { - url.appendPathSegments(PATH_USERS, username, PATH_LIKES) - parameter(PARAMETER_PAGE, page) - parameter(PARAMETER_PAGE_SIZE, pageSize) - }.body>().also { result -> - userLikePhotos[page] = result - } + ): List = userLikePhotos[page] ?: client.get> { + url.appendPathSegments(PATH_USERS, username, PATH_LIKES) + parameter(PARAMETER_PAGE, page) + parameter(PARAMETER_PAGE_SIZE, pageSize) + }.also { result -> + userLikePhotos[page] = result } override suspend fun getTopicPhotos( topicId: String, page: Int, pageSize: Int - ): List = userTopicPhotos[page] ?: client.request { - get { - url.appendPathSegments(PATH_TOPICS, topicId, PATH_PHOTOS) - parameter(PARAMETER_PAGE, page) - parameter(PARAMETER_PAGE_SIZE, pageSize) - }.body>().also { result -> - userTopicPhotos[page] = result - } + ): List = userTopicPhotos[page] ?: client.get> { + url.appendPathSegments(PATH_TOPICS, topicId, PATH_PHOTOS) + parameter(PARAMETER_PAGE, page) + parameter(PARAMETER_PAGE_SIZE, pageSize) + }.also { result -> + userTopicPhotos[page] = result } override suspend fun getSinglePhoto( id: String - ): RemoteImageModel = singlePhoto[id] ?: client.request { - get { - url.appendPathSegments(PATH_PHOTOS, id) - }.body().also { result -> - singlePhoto[id] = result - } + ): RemoteImageModel = singlePhoto[id] ?: client.get { + url.appendPathSegments(PATH_PHOTOS, id) + }.also { result -> + singlePhoto[id] = result } override suspend fun getDownloadLink( id: String - ): RemoteDownloadModel = downloadLink[id] ?: client.request { - get { + ): RemoteDownloadModel = downloadLink[id] + ?: client.get { url.appendPathSegments(PATH_PHOTOS, id, PATH_DOWNLOAD) - }.body().also { result -> + }.also { result -> downloadLink[id] = result } - } } \ No newline at end of file diff --git a/core/network/src/main/java/st/slex/csplashscreen/core/network/source/impl/SearchPhotosNetworkSourceImpl.kt b/core/network/src/main/java/st/slex/csplashscreen/core/network/source/impl/SearchPhotosNetworkSourceImpl.kt index 73c4793a..b6c0a60f 100644 --- a/core/network/src/main/java/st/slex/csplashscreen/core/network/source/impl/SearchPhotosNetworkSourceImpl.kt +++ b/core/network/src/main/java/st/slex/csplashscreen/core/network/source/impl/SearchPhotosNetworkSourceImpl.kt @@ -1,10 +1,9 @@ package st.slex.csplashscreen.core.network.source.impl -import io.ktor.client.call.body -import io.ktor.client.request.get import io.ktor.client.request.parameter import io.ktor.http.appendPathSegments import st.slex.csplashscreen.core.network.client.NetworkClient +import st.slex.csplashscreen.core.network.client.get import st.slex.csplashscreen.core.network.model.remote.image.RemoteImageSearchModel import st.slex.csplashscreen.core.network.source.interf.SearchPhotosNetworkSource import st.slex.csplashscreen.core.network.utils.ServiceConstants.PARAMETER_PAGE @@ -24,12 +23,10 @@ class SearchPhotosNetworkSourceImpl @Inject constructor( query: String, page: Int, pageSize: Int - ): RemoteImageSearchModel = client.request { - get { - url.appendPathSegments(PATH_SEARCH, PATH_PHOTOS) - parameter(PARAMETER_QUERY, query) - parameter(PARAMETER_PAGE, page) - parameter(PARAMETER_PAGE_SIZE, pageSize) - }.body() + ): RemoteImageSearchModel = client.get { + url.appendPathSegments(PATH_SEARCH, PATH_PHOTOS) + parameter(PARAMETER_QUERY, query) + parameter(PARAMETER_PAGE, page) + parameter(PARAMETER_PAGE_SIZE, pageSize) } } \ No newline at end of file diff --git a/core/network/src/main/java/st/slex/csplashscreen/core/network/source/impl/TopicsNetworkSourceImpl.kt b/core/network/src/main/java/st/slex/csplashscreen/core/network/source/impl/TopicsNetworkSourceImpl.kt index 0798e061..76431f73 100644 --- a/core/network/src/main/java/st/slex/csplashscreen/core/network/source/impl/TopicsNetworkSourceImpl.kt +++ b/core/network/src/main/java/st/slex/csplashscreen/core/network/source/impl/TopicsNetworkSourceImpl.kt @@ -1,10 +1,9 @@ package st.slex.csplashscreen.core.network.source.impl -import io.ktor.client.call.body -import io.ktor.client.request.get import io.ktor.client.request.parameter import io.ktor.http.appendPathSegments import st.slex.csplashscreen.core.network.client.NetworkClient +import st.slex.csplashscreen.core.network.client.get import st.slex.csplashscreen.core.network.model.remote.topics.RemoteTopicsModel import st.slex.csplashscreen.core.network.source.interf.TopicsNetworkSource import st.slex.csplashscreen.core.network.utils.ServiceConstants @@ -21,11 +20,9 @@ class TopicsNetworkSourceImpl @Inject constructor( override suspend fun getTopics( page: Int, pageSize: Int - ): List = client.request { - get { - url.appendPathSegments(ServiceConstants.PATH_TOPICS) - parameter(PARAMETER_PAGE, page) - parameter(PARAMETER_PAGE_SIZE, pageSize) - }.body() + ): List = client.get { + url.appendPathSegments(ServiceConstants.PATH_TOPICS) + parameter(PARAMETER_PAGE, page) + parameter(PARAMETER_PAGE_SIZE, pageSize) } } \ No newline at end of file diff --git a/core/network/src/main/java/st/slex/csplashscreen/core/network/source/impl/UserNetworkSourceImpl.kt b/core/network/src/main/java/st/slex/csplashscreen/core/network/source/impl/UserNetworkSourceImpl.kt index 7e524ea8..4b129397 100644 --- a/core/network/src/main/java/st/slex/csplashscreen/core/network/source/impl/UserNetworkSourceImpl.kt +++ b/core/network/src/main/java/st/slex/csplashscreen/core/network/source/impl/UserNetworkSourceImpl.kt @@ -1,9 +1,8 @@ package st.slex.csplashscreen.core.network.source.impl -import io.ktor.client.call.body -import io.ktor.client.request.get import io.ktor.http.appendPathSegments import st.slex.csplashscreen.core.network.client.NetworkClient +import st.slex.csplashscreen.core.network.client.get import st.slex.csplashscreen.core.network.model.remote.user.RemoteUserModel import st.slex.csplashscreen.core.network.source.interf.UserNetworkSource import st.slex.csplashscreen.core.network.utils.ServiceConstants @@ -17,9 +16,7 @@ class UserNetworkSourceImpl @Inject constructor( override suspend fun getUser( username: String - ): RemoteUserModel = client.request { - get { - url.appendPathSegments(ServiceConstants.PATH_USERS, username) - }.body() + ): RemoteUserModel = client.get { + url.appendPathSegments(ServiceConstants.PATH_USERS, username) } } \ No newline at end of file From 57b2fb0f5ef2801613fa82aa54ab88fb77c0b87f Mon Sep 17 00:00:00 2001 From: Ilya Stepanyuk Date: Sat, 30 Mar 2024 22:29:42 +0300 Subject: [PATCH 3/3] Update android_build.yml --- .github/workflows/android_build.yml | 4 ++-- build.gradle.kts | 4 +--- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/.github/workflows/android_build.yml b/.github/workflows/android_build.yml index e89477bb..39e3df59 100644 --- a/.github/workflows/android_build.yml +++ b/.github/workflows/android_build.yml @@ -10,7 +10,7 @@ jobs: build: runs-on: ubuntu-latest - timeout-minutes: 60 + timeout-minutes: 15 steps: @@ -50,4 +50,4 @@ jobs: run: ./gradlew build - name: Junit tests with Gradle - run: ./gradlew testDebugUnitTest \ No newline at end of file + run: ./gradlew testDebugUnitTest diff --git a/build.gradle.kts b/build.gradle.kts index 60b49721..b5f0d0b9 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,5 +1,4 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. -@Suppress("DSL_SCOPE_VIOLATION") // TODO: Remove once KTIJ-19369 is fixed plugins { alias(libs.plugins.application) apply false alias(libs.plugins.kotlin) apply false @@ -7,7 +6,6 @@ plugins { alias(libs.plugins.serialization) alias(libs.plugins.ksp) apply false } -true // Needed to make the Suppress annotation work for the plugins block buildscript { @@ -18,5 +16,5 @@ buildscript { } tasks.register(name = "type", type = Delete::class) { - delete(rootProject.buildDir) + delete(rootProject.projectDir.resolve("build")) }