gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-taler-android] 02/05: [wallet] Deserialize observability event to


From: gnunet
Subject: [taler-taler-android] 02/05: [wallet] Deserialize observability event to JSON object
Date: Mon, 01 Apr 2024 14:34:27 +0200

This is an automated email from the git hooks/post-receive script.

torsten-grote pushed a commit to branch master
in repository taler-android.

commit c3c7cd00b6fd2110bc8ca6c36b4a561d9d3d0f2d
Author: Iván Ávalos <avalos@disroot.org>
AuthorDate: Wed Mar 27 12:40:07 2024 -0600

    [wallet] Deserialize observability event to JSON object
    
    bug 0008509
---
 .../net/taler/wallet/events/ObservabilityDialog.kt |   4 +-
 .../net/taler/wallet/events/ObservabilityEvent.kt  | 221 ++++++---------------
 wallet/src/main/res/values/strings.xml             |   4 +-
 3 files changed, 68 insertions(+), 161 deletions(-)

diff --git 
a/wallet/src/main/java/net/taler/wallet/events/ObservabilityDialog.kt 
b/wallet/src/main/java/net/taler/wallet/events/ObservabilityDialog.kt
index 600f143..9164e77 100644
--- a/wallet/src/main/java/net/taler/wallet/events/ObservabilityDialog.kt
+++ b/wallet/src/main/java/net/taler/wallet/events/ObservabilityDialog.kt
@@ -106,9 +106,9 @@ fun ObservabilityComposable(
 
 @Composable
 fun ObservabilityItem(event: ObservabilityEvent) {
-    val title = stringResource(event.titleRes)
-    val body = BackendManager.json.encodeToString(event)
     val context = LocalContext.current
+    val title = event.getTitle(context)
+    val body = BackendManager.json.encodeToString(event.body)
 
     ListItem(
         modifier = Modifier.fillMaxWidth(),
diff --git a/wallet/src/main/java/net/taler/wallet/events/ObservabilityEvent.kt 
b/wallet/src/main/java/net/taler/wallet/events/ObservabilityEvent.kt
index 51e4f7a..cb710f7 100644
--- a/wallet/src/main/java/net/taler/wallet/events/ObservabilityEvent.kt
+++ b/wallet/src/main/java/net/taler/wallet/events/ObservabilityEvent.kt
@@ -16,166 +16,73 @@
 
 package net.taler.wallet.events
 
-import androidx.annotation.StringRes
-import kotlinx.serialization.SerialName
+import android.content.Context
+import kotlinx.serialization.KSerializer
 import kotlinx.serialization.Serializable
+import kotlinx.serialization.descriptors.SerialDescriptor
+import kotlinx.serialization.encoding.Decoder
+import kotlinx.serialization.encoding.Encoder
+import kotlinx.serialization.json.JsonDecoder
 import kotlinx.serialization.json.JsonElement
-import net.taler.common.Timestamp
+import kotlinx.serialization.json.JsonObject
+import kotlinx.serialization.json.jsonObject
+import kotlinx.serialization.json.jsonPrimitive
 import net.taler.wallet.R
-import net.taler.wallet.backend.TalerErrorInfo
 
-@Serializable
-sealed class ObservabilityEvent {
-    @get:StringRes
-    abstract val titleRes: Int
 
-    @Serializable
-    @SerialName("http-fetch-start")
-    data class HttpFetchStart(
-        val id: String,
-        @SerialName("when")
-        val timestamp: Timestamp,
-        val url: String,
-
-        override val titleRes: Int = R.string.event_http_fetch_start,
-    ): ObservabilityEvent()
-
-    @Serializable
-    @SerialName("http-fetch-finish-success")
-    data class HttpFetchFinishSuccess(
-        val id: String,
-        @SerialName("when")
-        val timestamp: Timestamp,
-        val url: String,
-        val status: Int,
-
-        override val titleRes: Int = R.string.event_http_fetch_finish_success,
-    ): ObservabilityEvent()
-
-    @Serializable
-    @SerialName("http-fetch-finish-error")
-    data class HttpFetchFinishError(
-        val id: String,
-        @SerialName("when")
-        val timestamp: Timestamp,
-        val url: String,
-        val error: TalerErrorInfo,
-
-        override val titleRes: Int = R.string.event_http_fetch_finish_error,
-    ): ObservabilityEvent()
-
-    @Serializable
-    @SerialName("db-query-start")
-    data class DbQueryStart(
-        val name: String,
-        val location: String,
-
-        override val titleRes: Int = R.string.event_db_query_start,
-    ): ObservabilityEvent()
-
-    @Serializable
-    @SerialName("db-query-finish-success")
-    data class DbQueryFinishSuccess(
-        val name: String,
-        val location: String,
-
-        override val titleRes: Int = R.string.event_db_query_finish_success,
-    ): ObservabilityEvent()
-
-    @Serializable
-    @SerialName("db-query-finish-error")
-    data class DbQueryFinishError(
-        val name: String,
-        val location: String,
-
-        override val titleRes: Int = R.string.event_db_query_finish_error,
-    ): ObservabilityEvent()
-
-    @Serializable
-    @SerialName("request-start")
-    data class RequestStart(
-        override val titleRes: Int = R.string.event_request_start,
-    ): ObservabilityEvent()
-
-    @Serializable
-    @SerialName("request-finish-success")
-    data class RequestFinishSuccess(
-        override val titleRes: Int = R.string.event_request_finish_success,
-    ): ObservabilityEvent()
-
-    @Serializable
-    @SerialName("request-finish-error")
-    data class RequestFinishError(
-        override val titleRes: Int = R.string.event_request_finish_error,
-    ): ObservabilityEvent()
-
-    @Serializable
-    @SerialName("task-start")
-    data class TaskStart(
-        val taskId: String,
-
-        override val titleRes: Int = R.string.event_task_start,
-    ): ObservabilityEvent()
-
-    @Serializable
-    @SerialName("task-stop")
-    data class TaskStop(
-        val taskId: String,
-
-        override val titleRes: Int = R.string.event_task_stop,
-    ): ObservabilityEvent()
-
-    @Serializable
-    @SerialName("task-reset")
-    data class TaskReset(
-        val taskId: String,
-
-        override val titleRes: Int = R.string.event_task_reset,
-    ): ObservabilityEvent()
-
-    @Serializable
-    @SerialName("declare-task-dependency")
-    data class DeclareTaskDependency(
-        val taskId: String,
-
-        override val titleRes: Int = R.string.event_declare_task_dependency,
-    ): ObservabilityEvent()
-
-    @Serializable
-    @SerialName("crypto-start")
-    data class CryptoStart(
-        val operation: String,
-
-        override val titleRes: Int = R.string.event_crypto_start,
-    ): ObservabilityEvent()
-
-    @Serializable
-    @SerialName("crypto-finish-success")
-    data class CryptoFinishSuccess(
-        val operation: String,
-
-        override val titleRes: Int = R.string.event_crypto_finished_success,
-    ): ObservabilityEvent()
-
-    @Serializable
-    @SerialName("crypto-finish-error")
-    data class CryptoFinishError(
-        val operation: String,
-
-        override val titleRes: Int = R.string.event_crypto_finished_error,
-    ): ObservabilityEvent()
-
-    @Serializable
-    @SerialName("sheperd-task-result")
-    data class ShepherdTaskResult(
-        val resultType: String,
-
-        override val titleRes: Int = R.string.event_shepherd_task_result,
-    ): ObservabilityEvent()
-
-    @Serializable
-    @SerialName("unknown")
-    data class Unknown(
-        override val titleRes: Int = R.string.event_unknown,
-    ): ObservabilityEvent()
+@Serializable(with = ObservabilityEventSerializer::class)
+class ObservabilityEvent(
+    val body: JsonObject,
+    val type: String,
+) {
+
+    fun getTitle(c: Context) = when (type) {
+        "http-fetch-start" -> c.getString(R.string.event_http_fetch_start)
+        "http-fetch-finish-error" -> 
c.getString(R.string.event_http_fetch_finish_error)
+        "http-fetch-finish-success" -> 
c.getString(R.string.event_http_fetch_finish_success)
+        "db-query-start" -> c.getString(R.string.event_db_query_start)
+        "db-query-finish-success" -> 
c.getString(R.string.event_db_query_finish_success)
+        "db-query-finish-error" -> 
c.getString(R.string.event_db_query_finish_error)
+        "request-start" -> c.getString(R.string.event_request_start)
+        "request-finish-success" -> 
c.getString(R.string.event_request_finish_success)
+        "request-finish-error" -> 
c.getString(R.string.event_request_finish_error)
+        "task-start" -> c.getString(R.string.event_task_start)
+        "task-stop" -> c.getString(R.string.event_task_stop)
+        "task-reset" -> c.getString(R.string.event_task_reset)
+        "sheperd-task-result" -> 
c.getString(R.string.event_shepherd_task_result)
+        "declare-task-dependency" -> 
c.getString(R.string.event_declare_task_dependency)
+        "crypto-start" -> c.getString(R.string.event_crypto_start)
+        "crypto-finish-success" -> 
c.getString(R.string.event_crypto_finish_success)
+        "crypto-finish-error" -> 
c.getString(R.string.event_crypto_finish_error)
+        "unknown" -> c.getString(R.string.event_unknown)
+        else -> type
+    }
+}
+
+class ObservabilityEventSerializer: KSerializer<ObservabilityEvent> {
+    private val jsonElementSerializer = JsonElement.serializer()
+
+    override val descriptor: SerialDescriptor
+        get() = jsonElementSerializer.descriptor
+
+    override fun deserialize(decoder: Decoder): ObservabilityEvent {
+        require(decoder is JsonDecoder)
+        val jsonObject = decoder
+            .decodeJsonElement()
+            .jsonObject
+
+        val type = jsonObject["type"]
+            ?.jsonPrimitive
+            ?.content
+            ?: "unknown"
+
+        return ObservabilityEvent(
+            body = jsonObject,
+            type = type,
+        )
+    }
+
+    override fun serialize(encoder: Encoder, value: ObservabilityEvent) {
+        encoder.encodeSerializableValue(JsonObject.serializer(), value.body)
+    }
 }
\ No newline at end of file
diff --git a/wallet/src/main/res/values/strings.xml 
b/wallet/src/main/res/values/strings.xml
index db2630f..31d007d 100644
--- a/wallet/src/main/res/values/strings.xml
+++ b/wallet/src/main/res/values/strings.xml
@@ -287,8 +287,8 @@ GNU Taler is immune against many types of fraud, such as 
phishing of credit card
     <string name="event_task_reset">Task reset</string>
     <string name="event_declare_task_dependency">Task dependency 
declared</string>
     <string name="event_crypto_start">Crypto operation started</string>
-    <string name="event_crypto_finished_success">Crypto operation 
succeeded</string>
-    <string name="event_crypto_finished_error">Crypto operation 
finished</string>
+    <string name="event_crypto_finish_success">Crypto operation 
succeeded</string>
+    <string name="event_crypto_finish_error">Crypto operation finished</string>
     <string name="event_shepherd_task_result">Shepherd task result</string>
     <string name="event_unknown">Unknown event</string>
 

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]