Catch serialization exception

In case serialized notifications cannot be deserialized, continue with an empty map of active notifications
pull/1509/head
Felix Wiemuth 3 years ago
parent 41743595d5
commit f1c104a942

@ -18,6 +18,7 @@
*/ */
package org.isoron.uhabits.core.preferences package org.isoron.uhabits.core.preferences
import kotlinx.serialization.SerializationException
import kotlinx.serialization.builtins.MapSerializer import kotlinx.serialization.builtins.MapSerializer
import kotlinx.serialization.builtins.serializer import kotlinx.serialization.builtins.serializer
import kotlinx.serialization.encodeToString import kotlinx.serialization.encodeToString
@ -152,9 +153,18 @@ open class Preferences(private val storage: Storage) {
return if (serialized == "") { return if (serialized == "") {
HashMap() HashMap()
} else { } else {
val activeById = Json.decodeFromString(MapSerializer(Long.serializer(), NotificationTray.NotificationData.serializer()), serialized) try {
val activeById = Json.decodeFromString(
MapSerializer(Long.serializer(), NotificationTray.NotificationData.serializer()),
serialized
)
val activeByHabit = activeById.mapNotNull { (id, v) -> habitList.getById(id)?.let { it to v } } val activeByHabit = activeById.mapNotNull { (id, v) -> habitList.getById(id)?.let { it to v } }
activeByHabit.toMap(HashMap()) activeByHabit.toMap(HashMap())
} catch (e : IllegalArgumentException) {
HashMap()
} catch (e : SerializationException) {
HashMap()
}
} }
} }

Loading…
Cancel
Save