Skip to content
Snippets Groups Projects
Commit 41687038 authored by Jonas Broeckmann's avatar Jonas Broeckmann
Browse files

Fix nullable value in hiwi tracker api + Add additional error details

parent 5f68b0e7
Branches
Tags
No related merge requests found
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="KotlinJpsPluginSettings"> <component name="KotlinJpsPluginSettings">
<option name="version" value="2.0.0" /> <option name="version" value="2.0.10" />
</component> </component>
</project> </project>
\ No newline at end of file
...@@ -124,7 +124,7 @@ data class MonthDataResponse( ...@@ -124,7 +124,7 @@ data class MonthDataResponse(
val secondsWorked: Int, val secondsWorked: Int,
val holidays: Int, val holidays: Int,
@SerialName("last_reset") @SerialName("last_reset")
val lastReset: String, val lastReset: String?,
@SerialName("vacation_days") @SerialName("vacation_days")
val vacationDays: Int?, val vacationDays: Int?,
@SerialName("hours_worked") @SerialName("hours_worked")
......
...@@ -43,6 +43,7 @@ import net.novagamestudios.kaffeekasse.api.portal.model.PortalAPIResponse ...@@ -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.Login
import net.novagamestudios.kaffeekasse.model.credentials.isValid import net.novagamestudios.kaffeekasse.model.credentials.isValid
import net.novagamestudios.kaffeekasse.util.MutableCookiesStorage import net.novagamestudios.kaffeekasse.util.MutableCookiesStorage
import net.novagamestudios.kaffeekasse.util.WrappedJsonSerializationException
class PortalClient( class PortalClient(
coroutineScope: CoroutineScope coroutineScope: CoroutineScope
...@@ -72,7 +73,11 @@ class PortalClient( ...@@ -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") { private val portal = object : Module(this, "portal") {
......
...@@ -112,6 +112,7 @@ import net.novagamestudios.kaffeekasse.ui.util.HorizontalPagedLayout ...@@ -112,6 +112,7 @@ import net.novagamestudios.kaffeekasse.ui.util.HorizontalPagedLayout
import net.novagamestudios.kaffeekasse.ui.util.KeyedPagerState import net.novagamestudios.kaffeekasse.ui.util.KeyedPagerState
import net.novagamestudios.kaffeekasse.ui.util.onClickComingSoon import net.novagamestudios.kaffeekasse.ui.util.onClickComingSoon
import net.novagamestudios.kaffeekasse.ui.util.synchronizePagerState 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.RichData
import net.novagamestudios.kaffeekasse.util.richdata.RichDataState import net.novagamestudios.kaffeekasse.util.richdata.RichDataState
import net.novagamestudios.kaffeekasse.util.richdata.collectAsRichStateHere import net.novagamestudios.kaffeekasse.util.richdata.collectAsRichStateHere
...@@ -297,6 +298,12 @@ fun Overview( ...@@ -297,6 +298,12 @@ fun Overview(
message = "Failed to fetch data", message = "Failed to fetch data",
Modifier.fillMaxSize(), Modifier.fillMaxSize(),
exceptions = data.exceptions, exceptions = data.exceptions,
additionalDetails = data.exceptions.mapNotNull { exception ->
when (exception) {
is WrappedJsonSerializationException -> exception.json
else -> null
}
},
onRetry = { model.refreshMonth(model.currentMonth) } onRetry = { model.refreshMonth(model.currentMonth) }
) )
......
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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment