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

@@ -35,7 +35,7 @@ interface MealieDataSource {
password: String,
): String
suspend fun getVersionInfo(): VersionResponse
suspend fun getVersionInfo(baseURL: String): VersionResponse
suspend fun requestRecipes(
page: Int,

View File

@@ -28,7 +28,7 @@ internal interface MealieService {
slug: String,
): GetRecipeResponse
suspend fun getVersion(): VersionResponse
suspend fun getVersion(baseURL: String): VersionResponse
suspend fun getRecipeSummary(page: Int, perPage: Int): GetRecipesResponse

View File

@@ -65,16 +65,18 @@ internal class MealieDataSourceImpl @Inject constructor(
throw if (errorDetail.detail == "Unauthorized") NetworkError.Unauthorized(it) else it
}
override suspend fun getVersionInfo(): VersionResponse = networkRequestWrapper.makeCall(
block = { service.getVersion() },
logMethod = { "getVersionInfo" },
).getOrElse {
throw when (it) {
is ResponseException, is NoTransformationFoundException -> NetworkError.NotMealie(it)
is SocketTimeoutException, is SocketException -> NetworkError.NoServerConnection(it)
else -> NetworkError.MalformedUrl(it)
override suspend fun getVersionInfo(baseURL: String): VersionResponse =
networkRequestWrapper.makeCall(
block = { service.getVersion(baseURL) },
logMethod = { "getVersionInfo" },
logParameters = { "baseURL = $baseURL" }
).getOrElse {
throw when (it) {
is ResponseException, is NoTransformationFoundException -> NetworkError.NotMealie(it)
is SocketTimeoutException, is SocketException -> NetworkError.NoServerConnection(it)
else -> NetworkError.MalformedUrl(it)
}
}
}
override suspend fun requestRecipes(
page: Int,

View File

@@ -76,9 +76,9 @@ internal class MealieServiceKtor @Inject constructor(
}.body()
}
override suspend fun getVersion(): VersionResponse {
override suspend fun getVersion(baseURL: String): VersionResponse {
return httpClient.get {
endpoint("/api/app/about")
endpoint(baseURL, "/api/app/about")
}.body()
}
@@ -198,9 +198,21 @@ internal class MealieServiceKtor @Inject constructor(
private suspend fun HttpRequestBuilder.endpoint(
path: String,
block: URLBuilder.() -> Unit = {}
block: URLBuilder.() -> Unit = {},
) {
val baseUrl = checkNotNull(serverUrlProvider.getUrl()) { "Server URL is not set" }
endpoint(
baseUrl = baseUrl,
path = path,
block = block
)
}
private fun HttpRequestBuilder.endpoint(
baseUrl: String,
path: String,
block: URLBuilder.() -> Unit = {},
) {
url {
takeFrom(baseUrl)
path(path)