Skip to content

Commit

Permalink
improve status package
Browse files Browse the repository at this point in the history
  • Loading branch information
makeevrserg committed Oct 12, 2023
1 parent 33740b1 commit 75f5b52
Show file tree
Hide file tree
Showing 13 changed files with 78 additions and 63 deletions.
2 changes: 1 addition & 1 deletion modules/features/root/root.podspec
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Pod::Spec.new do |spec|
spec.name = 'root'
spec.version = '0.0.3'
spec.version = '0.1.0'
spec.homepage = 'https://empireprojekt.ru'
spec.source = { :http=> ''}
spec.authors = ''
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import kotlinx.coroutines.flow.update
import kotlinx.coroutines.isActive
import kotlinx.coroutines.launch

class StubStatusComponent : StatusComponent, CoroutineScope by MainScope() {
class PreviewStatusComponent : StatusComponent, CoroutineScope by MainScope() {
private val mutableStateFlow = MutableStateFlow<StubModel>(StubModel())
override val model: AnyStateFlow<StatusComponent.Model> = mutableStateFlow.wrapToAny()

Expand Down
Original file line number Diff line number Diff line change
@@ -1,24 +1,7 @@
package com.makeevrserg.empireprojekt.mobile.features.status.data

import com.makeevrserg.empireprojekt.mobile.features.status.data.model.MinecraftStatusResponse
import io.ktor.client.HttpClient
import io.ktor.client.call.body
import io.ktor.client.request.get
import kotlinx.coroutines.withContext
import ru.astrainteractive.klibs.mikro.core.dispatchers.KotlinDispatchers

interface MinecraftStatusRepository {
suspend fun get(): Result<MinecraftStatusResponse>
class Default(
private val httpClient: HttpClient,
private val dispatchers: KotlinDispatchers
) : MinecraftStatusRepository {
override suspend fun get(): Result<MinecraftStatusResponse> =
runCatching<Default, MinecraftStatusResponse> {
val request = withContext(dispatchers.IO) {
httpClient.get("https://api.minetools.eu/ping/play.empireprojekt.ru")
}
request.body()
}.map { it.copy(description = it.description.replace("§", "")) }
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,20 +1,5 @@
package com.makeevrserg.empireprojekt.mobile.features.status.data

import io.ktor.client.HttpClient
import io.ktor.client.request.get
import io.ktor.http.HttpStatusCode
import kotlinx.coroutines.withContext
import ru.astrainteractive.klibs.mikro.core.dispatchers.KotlinDispatchers

class UrlStatusRepository(
private val url: String,
private val httpClient: HttpClient,
private val dispatchers: KotlinDispatchers
) : StatusRepository {
override suspend fun isActive(): Result<Boolean> = runCatching {
val request = withContext(dispatchers.IO) {
httpClient.get(url)
}
request.status == HttpStatusCode.OK
}
interface UrlStatusRepository {
suspend fun isActive(): Result<Boolean>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.makeevrserg.empireprojekt.mobile.features.status.data.impl

import com.makeevrserg.empireprojekt.mobile.features.status.data.MinecraftStatusRepository
import com.makeevrserg.empireprojekt.mobile.features.status.data.model.MinecraftStatusResponse
import io.ktor.client.HttpClient
import io.ktor.client.call.body
import io.ktor.client.request.get
import kotlinx.coroutines.withContext
import ru.astrainteractive.klibs.mikro.core.dispatchers.KotlinDispatchers

class MinecraftStatusRepositoryImpl(
private val httpClient: HttpClient,
private val dispatchers: KotlinDispatchers
) : MinecraftStatusRepository {
override suspend fun get(): Result<MinecraftStatusResponse> =
runCatching<MinecraftStatusRepositoryImpl, MinecraftStatusResponse> {
val request = withContext(dispatchers.IO) {
httpClient.get("https://api.minetools.eu/ping/play.empireprojekt.ru")
}
request.body()
}.map { it.copy(description = it.description.replace("§", "")) }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.makeevrserg.empireprojekt.mobile.features.status.data.impl

import com.makeevrserg.empireprojekt.mobile.features.status.data.UrlStatusRepository
import io.ktor.client.HttpClient
import io.ktor.client.request.get
import io.ktor.http.HttpStatusCode
import kotlinx.coroutines.withContext
import ru.astrainteractive.klibs.mikro.core.dispatchers.KotlinDispatchers

class UrlStatusRepositoryImpl(
private val url: String,
private val httpClient: HttpClient,
private val dispatchers: KotlinDispatchers
) : UrlStatusRepository {
override suspend fun isActive(): Result<Boolean> = runCatching {
val request = withContext(dispatchers.IO) {
httpClient.get(url)
}
request.status == HttpStatusCode.OK
}
}
Original file line number Diff line number Diff line change
@@ -1,16 +1,36 @@
package com.makeevrserg.empireprojekt.mobile.features.status.di

import com.makeevrserg.empireprojekt.mobile.features.status.data.MinecraftStatusRepository
import com.makeevrserg.empireprojekt.mobile.features.status.data.UrlStatusRepository
import com.makeevrserg.empireprojekt.mobile.features.status.data.impl.MinecraftStatusRepositoryImpl
import com.makeevrserg.empireprojekt.mobile.features.status.data.impl.UrlStatusRepositoryImpl
import io.ktor.client.HttpClient
import ru.astrainteractive.klibs.kdi.Factory
import ru.astrainteractive.klibs.kdi.Module
import ru.astrainteractive.klibs.kdi.Provider
import ru.astrainteractive.klibs.kdi.getValue
import ru.astrainteractive.klibs.mikro.core.dispatchers.KotlinDispatchers

interface StatusModule : Module {
val dispatchers: KotlinDispatchers
val httpClient: HttpClient

val minecraftStatusRepository: MinecraftStatusRepository
fun urlStatRepositoryFactory(url: String): Factory<UrlStatusRepository>
class Default(
override val dispatchers: KotlinDispatchers,
override val httpClient: HttpClient
) : StatusModule
private val httpClient: HttpClient
) : StatusModule {
override val minecraftStatusRepository: MinecraftStatusRepository by Provider {
MinecraftStatusRepositoryImpl(
httpClient = httpClient,
dispatchers = dispatchers
)
}
override fun urlStatRepositoryFactory(url: String) = Factory {
UrlStatusRepositoryImpl(
url = url,
httpClient = httpClient,
dispatchers = dispatchers
)
}
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.makeevrserg.empireprojekt.mobile.features.status.mincraft
package com.makeevrserg.empireprojekt.mobile.features.status.minecraft

import com.makeevrserg.empireprojekt.mobile.features.status.StatusComponent
import com.makeevrserg.empireprojekt.mobile.features.status.data.MinecraftStatusRepository
import com.makeevrserg.empireprojekt.mobile.features.status.di.StatusModule
import com.makeevrserg.empireprojekt.mobile.services.core.AnyStateFlow
import com.makeevrserg.empireprojekt.mobile.services.core.CoroutineFeature
Expand All @@ -18,10 +17,6 @@ class DefaultMinecraftStatusComponent(
title: String,
private val coroutineFeature: CoroutineFeature
) : StatusComponent, StatusModule by module {
private val repository = MinecraftStatusRepository.Default(
httpClient = httpClient,
dispatchers = dispatchers
)
private val _model = MutableStateFlow(
MinecraftStatusComponent.Model(
title = StringDesc.Raw(title),
Expand All @@ -43,7 +38,7 @@ class DefaultMinecraftStatusComponent(
_model.update {
it.copy(isLoading = true)
}
val response = repository.get()
val response = minecraftStatusRepository.get()
_model.update {
it.copy(
isLoading = false,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.makeevrserg.empireprojekt.mobile.features.status.mincraft
package com.makeevrserg.empireprojekt.mobile.features.status.minecraft

import com.makeevrserg.empireprojekt.mobile.features.status.StatusComponent
import com.makeevrserg.empireprojekt.mobile.features.status.data.model.MinecraftStatusResponse
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package com.makeevrserg.empireprojekt.mobile.features.status.root

import com.makeevrserg.empireprojekt.mobile.features.status.StatusComponent
import com.makeevrserg.empireprojekt.mobile.features.status.di.StatusModule
import com.makeevrserg.empireprojekt.mobile.features.status.mincraft.DefaultMinecraftStatusComponent
import com.makeevrserg.empireprojekt.mobile.features.status.minecraft.DefaultMinecraftStatusComponent
import com.makeevrserg.empireprojekt.mobile.features.status.url.DefaultUrlStatusComponent
import com.makeevrserg.empireprojekt.mobile.services.core.CoroutineFeature

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package com.makeevrserg.empireprojekt.mobile.features.status.url

import com.makeevrserg.empireprojekt.mobile.features.status.StatusComponent
import com.makeevrserg.empireprojekt.mobile.features.status.data.StatusRepository
import com.makeevrserg.empireprojekt.mobile.features.status.data.UrlStatusRepository
import com.makeevrserg.empireprojekt.mobile.features.status.di.StatusModule
import com.makeevrserg.empireprojekt.mobile.services.core.AnyStateFlow
import com.makeevrserg.empireprojekt.mobile.services.core.CoroutineFeature
Expand All @@ -20,11 +18,7 @@ class DefaultUrlStatusComponent(
module: StatusModule,
private val coroutineFeature: CoroutineFeature
) : UrlStatusComponent, StatusModule by module {
private val statusRepository: StatusRepository = UrlStatusRepository(
url = url,
httpClient = httpClient,
dispatchers = dispatchers
)
private val urlStatusRepository = urlStatRepositoryFactory(url).create()

private val _model = MutableStateFlow(
UrlStatusComponent.Model(
Expand All @@ -45,7 +39,7 @@ class DefaultUrlStatusComponent(
_model.update {
it.copy(isLoading = true)
}
val response = statusRepository.isActive()
val response = urlStatusRepository.isActive()
response.onSuccess {
_model.update {
it.copy(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ import androidx.compose.ui.unit.dp
import com.makeevrserg.empireprojekt.mobile.core.ui.asComposableString
import com.makeevrserg.empireprojekt.mobile.core.ui.theme.AppTheme
import com.makeevrserg.empireprojekt.mobile.features.status.StatusComponent
import com.makeevrserg.empireprojekt.mobile.features.status.mincraft.MinecraftStatusComponent
import com.makeevrserg.empireprojekt.mobile.features.status.minecraft.MinecraftStatusComponent

private const val FADE_DURATION = 1200

Expand Down

0 comments on commit 75f5b52

Please sign in to comment.