Skip to content

Commit e152d6e

Browse files
committed
Handle errors when parsing remote config JSON
1 parent 275a307 commit e152d6e

File tree

2 files changed

+24
-14
lines changed

2 files changed

+24
-14
lines changed

turbo/src/main/kotlin/dev/hotwire/turbo/config/TurboPathConfigurationLoader.kt

+13-13
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package dev.hotwire.turbo.config
22

33
import android.content.Context
4-
import dev.hotwire.turbo.util.toObject
5-
import com.google.gson.reflect.TypeToken
64
import dev.hotwire.turbo.util.dispatcherProvider
75
import kotlinx.coroutines.CoroutineScope
86
import kotlinx.coroutines.Job
@@ -30,29 +28,31 @@ internal class TurboPathConfigurationLoader(val context: Context) : CoroutineSco
3028
loadCachedConfigurationForUrl(url, onCompletion)
3129

3230
launch {
33-
repository.getRemoteConfiguration(url)?.let {
34-
onCompletion(load(it))
35-
cacheConfigurationForUrl(url, load(it))
31+
repository.getRemoteConfiguration(url)?.let { remoteConfigJson ->
32+
repository.parseFromJson(remoteConfigJson)?.let { config ->
33+
onCompletion(config)
34+
cacheConfigurationForUrl(url, config)
35+
}
3636
}
3737
}
3838
}
3939

4040
private fun loadBundledAssetConfiguration(filePath: String, onCompletion: (TurboPathConfiguration) -> Unit) {
41-
val configuration = repository.getBundledConfiguration(context, filePath)
42-
onCompletion(load(configuration))
41+
val bundledConfigJson = repository.getBundledConfiguration(context, filePath)
42+
repository.parseFromJson(bundledConfigJson)?.let { config ->
43+
onCompletion(config)
44+
}
4345
}
4446

4547
private fun loadCachedConfigurationForUrl(url: String, onCompletion: (TurboPathConfiguration) -> Unit) {
46-
repository.getCachedConfigurationForUrl(context, url)?.let {
47-
onCompletion(load(it))
48+
repository.getCachedConfigurationForUrl(context, url)?.let { cachedConfigJson ->
49+
repository.parseFromJson(cachedConfigJson)?.let { config ->
50+
onCompletion(config)
51+
}
4852
}
4953
}
5054

5155
private fun cacheConfigurationForUrl(url: String, pathConfiguration: TurboPathConfiguration) {
5256
repository.cacheConfigurationForUrl(context, url, pathConfiguration)
5357
}
54-
55-
private fun load(json: String): TurboPathConfiguration {
56-
return json.toObject(object : TypeToken<TurboPathConfiguration>() {})
57-
}
5858
}

turbo/src/main/kotlin/dev/hotwire/turbo/config/TurboPathConfigurationRepository.kt

+11-1
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,14 @@ package dev.hotwire.turbo.config
33
import android.content.Context
44
import android.content.SharedPreferences
55
import androidx.core.content.edit
6+
import com.google.gson.reflect.TypeToken
67
import dev.hotwire.turbo.http.TurboHttpClient
78
import dev.hotwire.turbo.util.dispatcherProvider
89
import dev.hotwire.turbo.util.logError
910
import dev.hotwire.turbo.util.toJson
11+
import dev.hotwire.turbo.util.toObject
1012
import kotlinx.coroutines.withContext
1113
import okhttp3.Request
12-
import java.io.IOException
1314

1415
internal class TurboPathConfigurationRepository {
1516
private val cacheFile = "turbo"
@@ -66,4 +67,13 @@ internal class TurboPathConfigurationRepository {
6667
String(it.readBytes())
6768
}
6869
}
70+
71+
fun parseFromJson(json: String): TurboPathConfiguration? {
72+
return try {
73+
json.toObject(object : TypeToken<TurboPathConfiguration>() {})
74+
} catch (e: Exception) {
75+
logError("PathConfigurationLoadingException", e)
76+
null
77+
}
78+
}
6979
}

0 commit comments

Comments
 (0)