Fix transition when base URL is actually incorrect (#196)

This commit is contained in:
Kirill Kamakin
2024-01-13 12:18:12 +01:00
committed by GitHub
parent 4c6e480737
commit c8f1f477cc
12 changed files with 54 additions and 35 deletions

View File

@@ -1,5 +1,6 @@
package gq.kirmanak.mealient.data.baseurl
import gq.kirmanak.mealient.datasource.models.VersionResponse
import kotlinx.coroutines.flow.Flow
interface ServerInfoRepo {
@@ -8,7 +9,7 @@ interface ServerInfoRepo {
suspend fun getUrl(): String?
suspend fun tryBaseURL(baseURL: String): Result<Unit>
suspend fun tryBaseURL(baseURL: String): Result<VersionResponse>
}

View File

@@ -1,6 +1,7 @@
package gq.kirmanak.mealient.data.baseurl
import gq.kirmanak.mealient.datasource.ServerUrlProvider
import gq.kirmanak.mealient.datasource.models.VersionResponse
import gq.kirmanak.mealient.logging.Logger
import kotlinx.coroutines.flow.Flow
import javax.inject.Inject
@@ -20,18 +21,11 @@ class ServerInfoRepoImpl @Inject constructor(
return result
}
override suspend fun tryBaseURL(baseURL: String): Result<Unit> {
val oldBaseUrl = serverInfoStorage.getBaseURL()
serverInfoStorage.storeBaseURL(baseURL)
try {
versionDataSource.requestVersion()
} catch (e: Throwable) {
serverInfoStorage.storeBaseURL(oldBaseUrl)
return Result.failure(e)
override suspend fun tryBaseURL(baseURL: String): Result<VersionResponse> {
return versionDataSource.runCatching {
requestVersion(baseURL)
}.onSuccess {
serverInfoStorage.storeBaseURL(baseURL)
}
return Result.success(Unit)
}
}

View File

@@ -4,5 +4,5 @@ import gq.kirmanak.mealient.datasource.models.VersionResponse
interface VersionDataSource {
suspend fun requestVersion(): VersionResponse
suspend fun requestVersion(baseURL: String): VersionResponse
}

View File

@@ -8,7 +8,7 @@ class VersionDataSourceImpl @Inject constructor(
private val dataSource: MealieDataSource,
) : VersionDataSource {
override suspend fun requestVersion(): VersionResponse {
return dataSource.getVersionInfo()
override suspend fun requestVersion(baseURL: String): VersionResponse {
return dataSource.getVersionInfo(baseURL)
}
}

View File

@@ -77,7 +77,7 @@ internal class BaseURLViewModel @Inject constructor(
return
}
val result: Result<Unit> = serverInfoRepo.tryBaseURL(url).recoverCatching {
val result = serverInfoRepo.tryBaseURL(url).recoverCatching {
logger.e(it) { "checkBaseURL: trying to recover, had prefix = $hasPrefix" }
val certificateError = it.findCauseAsInstanceOf<CertificateCombinedException>()
if (certificateError != null) {