Skip to content

Commit f33588e

Browse files
committed
Fix crash on older Android versions
decodeFromStream crashes on API 21-23, but decodeFromBufferedSource doesn't.
1 parent 8688834 commit f33588e

File tree

2 files changed

+9
-4
lines changed

2 files changed

+9
-4
lines changed

app/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ dependencies {
117117
implementation(libs.fastscroll)
118118
implementation(libs.timber)
119119
implementation(libs.threetenabp)
120+
implementation(libs.serialization.json.okio)
120121

121122
debugImplementation(libs.leakcanary)
122123

rpc/src/main/kotlin/org/equeim/tremotesf/torrentfile/rpc/Servers.kt

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,10 @@ import kotlinx.serialization.SerialName
1515
import kotlinx.serialization.Serializable
1616
import kotlinx.serialization.SerializationException
1717
import kotlinx.serialization.json.Json
18-
import kotlinx.serialization.json.decodeFromStream
1918
import kotlinx.serialization.json.encodeToStream
19+
import kotlinx.serialization.json.okio.decodeFromBufferedSource
20+
import okio.buffer
21+
import okio.source
2022
import org.equeim.tremotesf.common.DefaultTremotesfDispatchers
2123
import org.equeim.tremotesf.common.TremotesfDispatchers
2224
import timber.log.Timber
@@ -63,19 +65,21 @@ abstract class Servers(
6365
@OptIn(ExperimentalSerializationApi::class)
6466
private fun load() {
6567
try {
66-
val (servers, changed) = context.openFileInput(FILE_NAME).buffered().use {
67-
json.decodeFromStream(ServersState.serializer(), it)
68+
val (servers, changed) = context.openFileInput(FILE_NAME).use {
69+
json.decodeFromBufferedSource(ServersState.serializer(), it.source().buffer())
6870
}.validateLoaded()
6971
_serversState.value = servers
7072
if (changed) {
7173
save()
7274
}
7375
} catch (error: FileNotFoundException) {
74-
Timber.w(error, "Servers file does not exist")
76+
Timber.d("Servers file does not exist")
7577
} catch (error: IOException) {
7678
Timber.e(error, "Error reading servers file")
7779
} catch (error: SerializationException) {
7880
Timber.e(error, "Error parsing servers file")
81+
} catch (error: Exception) {
82+
Timber.e(error, "Unexpected error when parsing error file")
7983
}
8084
}
8185

0 commit comments

Comments
 (0)