diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml index 6d0ee1c2a93d68c40488d9db245d48a739c69277..5815a4a6c034b970cce7048e2bef94c2f1ae0eb4 100644 --- a/.idea/kotlinc.xml +++ b/.idea/kotlinc.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <project version="4"> <component name="KotlinJpsPluginSettings"> - <option name="version" value="2.0.0" /> + <option name="version" value="2.0.10" /> </component> </project> \ No newline at end of file diff --git a/app/src/main/java/net/novagamestudios/kaffeekasse/api/hiwi_tracker/model/MonthDataResponse.kt b/app/src/main/java/net/novagamestudios/kaffeekasse/api/hiwi_tracker/model/MonthDataResponse.kt index 3b735e22345f0b4044e8c1a43fe601fc6293de0a..a345bb86d4f3eb94a32626f631b9660bf3d4693c 100644 --- a/app/src/main/java/net/novagamestudios/kaffeekasse/api/hiwi_tracker/model/MonthDataResponse.kt +++ b/app/src/main/java/net/novagamestudios/kaffeekasse/api/hiwi_tracker/model/MonthDataResponse.kt @@ -124,7 +124,7 @@ data class MonthDataResponse( val secondsWorked: Int, val holidays: Int, @SerialName("last_reset") - val lastReset: String, + val lastReset: String?, @SerialName("vacation_days") val vacationDays: Int?, @SerialName("hours_worked") diff --git a/app/src/main/java/net/novagamestudios/kaffeekasse/api/portal/PortalClient.kt b/app/src/main/java/net/novagamestudios/kaffeekasse/api/portal/PortalClient.kt index 2d9406c0cbd5accf0ebfbdabad9b10569dfd760f..d6018be83e132d7c5613d35fea9319579374035f 100644 --- a/app/src/main/java/net/novagamestudios/kaffeekasse/api/portal/PortalClient.kt +++ b/app/src/main/java/net/novagamestudios/kaffeekasse/api/portal/PortalClient.kt @@ -43,6 +43,7 @@ import net.novagamestudios.kaffeekasse.api.portal.model.PortalAPIResponse import net.novagamestudios.kaffeekasse.model.credentials.Login import net.novagamestudios.kaffeekasse.model.credentials.isValid import net.novagamestudios.kaffeekasse.util.MutableCookiesStorage +import net.novagamestudios.kaffeekasse.util.WrappedJsonSerializationException class PortalClient( coroutineScope: CoroutineScope @@ -72,7 +73,11 @@ class PortalClient( } } - internal inline fun <reified T> JsonElement.decodeAs() = jsonFormat.decodeFromJsonElement<T>(this) + internal inline fun <reified T> JsonElement.decodeAs() = try { + jsonFormat.decodeFromJsonElement<T>(this) + } catch (e: Exception) { + throw WrappedJsonSerializationException(e, this) + } private val portal = object : Module(this, "portal") { diff --git a/app/src/main/java/net/novagamestudios/kaffeekasse/ui/hiwi_tracker/Overview.kt b/app/src/main/java/net/novagamestudios/kaffeekasse/ui/hiwi_tracker/Overview.kt index da8beb20884a96ebd4db954af6ad9c0055df50fe..b8724990ac7aff7f8714f9c08a79ceea51d0012e 100644 --- a/app/src/main/java/net/novagamestudios/kaffeekasse/ui/hiwi_tracker/Overview.kt +++ b/app/src/main/java/net/novagamestudios/kaffeekasse/ui/hiwi_tracker/Overview.kt @@ -112,6 +112,7 @@ import net.novagamestudios.kaffeekasse.ui.util.HorizontalPagedLayout import net.novagamestudios.kaffeekasse.ui.util.KeyedPagerState import net.novagamestudios.kaffeekasse.ui.util.onClickComingSoon import net.novagamestudios.kaffeekasse.ui.util.synchronizePagerState +import net.novagamestudios.kaffeekasse.util.WrappedJsonSerializationException import net.novagamestudios.kaffeekasse.util.richdata.RichData import net.novagamestudios.kaffeekasse.util.richdata.RichDataState import net.novagamestudios.kaffeekasse.util.richdata.collectAsRichStateHere @@ -297,6 +298,12 @@ fun Overview( message = "Failed to fetch data", Modifier.fillMaxSize(), exceptions = data.exceptions, + additionalDetails = data.exceptions.mapNotNull { exception -> + when (exception) { + is WrappedJsonSerializationException -> exception.json + else -> null + } + }, onRetry = { model.refreshMonth(model.currentMonth) } ) diff --git a/app/src/main/java/net/novagamestudios/kaffeekasse/util/WrappedSerializationException.kt b/app/src/main/java/net/novagamestudios/kaffeekasse/util/WrappedSerializationException.kt new file mode 100644 index 0000000000000000000000000000000000000000..55694a2145ca1ea92fa2b1ce7859e3002f92e0ce --- /dev/null +++ b/app/src/main/java/net/novagamestudios/kaffeekasse/util/WrappedSerializationException.kt @@ -0,0 +1,11 @@ +package net.novagamestudios.kaffeekasse.util + +import kotlinx.serialization.json.JsonElement + +open class WrappedJsonSerializationException( + message: String?, + cause: Throwable?, + val json: JsonElement +) : IllegalArgumentException(message, cause) { + constructor(e: Exception, json: JsonElement) : this(e.message, e, json) +} \ No newline at end of file