only check moshi numbers for rust-sdk
This commit is contained in:
parent
d9342707fd
commit
fb1995e9c9
@ -32,7 +32,6 @@ import org.matrix.android.sdk.api.session.room.model.message.MessageTextContent
|
|||||||
import org.matrix.android.sdk.api.session.room.model.message.MessageType
|
import org.matrix.android.sdk.api.session.room.model.message.MessageType
|
||||||
import org.matrix.android.sdk.api.session.room.model.message.MessageVerificationRequestContent
|
import org.matrix.android.sdk.api.session.room.model.message.MessageVerificationRequestContent
|
||||||
import org.matrix.android.sdk.api.session.room.model.message.MessageVideoContent
|
import org.matrix.android.sdk.api.session.room.model.message.MessageVideoContent
|
||||||
import org.matrix.android.sdk.internal.network.parsing.CheckNumberType
|
|
||||||
import org.matrix.android.sdk.internal.network.parsing.CipherSuiteMoshiAdapter
|
import org.matrix.android.sdk.internal.network.parsing.CipherSuiteMoshiAdapter
|
||||||
import org.matrix.android.sdk.internal.network.parsing.ForceToBooleanJsonAdapter
|
import org.matrix.android.sdk.internal.network.parsing.ForceToBooleanJsonAdapter
|
||||||
import org.matrix.android.sdk.internal.network.parsing.RuntimeJsonAdapterFactory
|
import org.matrix.android.sdk.internal.network.parsing.RuntimeJsonAdapterFactory
|
||||||
@ -43,9 +42,6 @@ import org.matrix.android.sdk.internal.session.sync.parsing.DefaultLazyRoomSyncE
|
|||||||
internal object MoshiProvider {
|
internal object MoshiProvider {
|
||||||
|
|
||||||
private val moshi: Moshi = Moshi.Builder()
|
private val moshi: Moshi = Moshi.Builder()
|
||||||
// By default all numbers are transformed into floats by moshi
|
|
||||||
// this adapter tries to see first if it's a natural number before using float
|
|
||||||
.add(CheckNumberType.JSON_ADAPTER_FACTORY)
|
|
||||||
.add(UriMoshiAdapter())
|
.add(UriMoshiAdapter())
|
||||||
.add(ForceToBooleanJsonAdapter())
|
.add(ForceToBooleanJsonAdapter())
|
||||||
.add(CipherSuiteMoshiAdapter())
|
.add(CipherSuiteMoshiAdapter())
|
||||||
|
@ -24,6 +24,8 @@ import com.squareup.moshi.Moshi
|
|||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
import java.lang.reflect.Type
|
import java.lang.reflect.Type
|
||||||
import java.math.BigDecimal
|
import java.math.BigDecimal
|
||||||
|
import kotlin.math.ceil
|
||||||
|
import kotlin.math.floor
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This is used to check if NUMBER in json is integer or double, so we can preserve typing when serializing/deserializing in a row.
|
* This is used to check if NUMBER in json is integer or double, so we can preserve typing when serializing/deserializing in a row.
|
||||||
@ -56,7 +58,16 @@ internal interface CheckNumberType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun toJson(writer: JsonWriter, value: Any?) {
|
override fun toJson(writer: JsonWriter, value: Any?) {
|
||||||
delegate.toJson(writer, value)
|
if (value is Number) {
|
||||||
|
val double = value.toDouble()
|
||||||
|
if (ceil(double) == floor(double)) {
|
||||||
|
writer.value(value.toLong())
|
||||||
|
} else {
|
||||||
|
writer.value(value.toDouble())
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
delegate.toJson(writer, value)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -261,16 +261,17 @@ internal class OlmMachine @Inject constructor(
|
|||||||
val devices =
|
val devices =
|
||||||
DeviceLists(deviceChanges?.changed.orEmpty(), deviceChanges?.left.orEmpty())
|
DeviceLists(deviceChanges?.changed.orEmpty(), deviceChanges?.left.orEmpty())
|
||||||
|
|
||||||
val adapter = MoshiProvider.providesMoshi().adapter(ToDeviceSyncResponse::class.java)
|
val adapter = MoshiProvider.providesMoshi()
|
||||||
val events = adapter.toJson(toDevice ?: ToDeviceSyncResponse()).also {
|
.newBuilder()
|
||||||
Timber.w("## VALR events: $it")
|
.add(CheckNumberType.JSON_ADAPTER_FACTORY)
|
||||||
}
|
.build()
|
||||||
|
.adapter(ToDeviceSyncResponse::class.java)
|
||||||
|
val events = adapter.toJson(toDevice ?: ToDeviceSyncResponse())
|
||||||
|
|
||||||
// TODO once our sync response type parses the unused fallback key
|
// TODO once our sync response type parses the unused fallback key
|
||||||
// field pass in the list of unused fallback keys here
|
// field pass in the list of unused fallback keys here
|
||||||
val receiveSyncChanges = inner.receiveSyncChanges(events, devices, counts, unusedFallbackKeys = null).also {
|
val receiveSyncChanges = inner.receiveSyncChanges(events, devices, counts, unusedFallbackKeys = null)
|
||||||
Timber.w("## VALR $it")
|
|
||||||
}
|
|
||||||
val outAdapter = moshi.adapter<List<Event>>(
|
val outAdapter = moshi.adapter<List<Event>>(
|
||||||
Types.newParameterizedType(
|
Types.newParameterizedType(
|
||||||
List::class.java,
|
List::class.java,
|
||||||
|
@ -21,6 +21,7 @@ import org.junit.Test
|
|||||||
import org.matrix.android.sdk.api.session.events.model.Event
|
import org.matrix.android.sdk.api.session.events.model.Event
|
||||||
import org.matrix.android.sdk.api.session.sync.model.ToDeviceSyncResponse
|
import org.matrix.android.sdk.api.session.sync.model.ToDeviceSyncResponse
|
||||||
import org.matrix.android.sdk.internal.di.MoshiProvider
|
import org.matrix.android.sdk.internal.di.MoshiProvider
|
||||||
|
import org.matrix.android.sdk.internal.network.parsing.CheckNumberType
|
||||||
|
|
||||||
class MoshiNumbersAsInt {
|
class MoshiNumbersAsInt {
|
||||||
|
|
||||||
@ -51,4 +52,26 @@ class MoshiNumbersAsInt {
|
|||||||
|
|
||||||
jsonString shouldNotContain "1.0"
|
jsonString shouldNotContain "1.0"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testParseThenSerialize() {
|
||||||
|
val raw = """
|
||||||
|
{"events":[{"type":"m.room.encrypted","content":{"algorithm":"m.olm.v1.curve25519-aes-sha2","ciphertext":{"cfA3dINwtmMW0DbJmnT6NiGAbOSa299Hxs6KxHgbDBw":{"body":"Awogc5L3QuIyvkluB1O/UAJp0","type":1}},"sender_key":"fqhBEOHXSSQ7ZKt1xlBg+hSTY1NEM8hezMXZ5lyBR1M"},"sender":"@web:localhost:8481"}]}
|
||||||
|
""".trimIndent()
|
||||||
|
|
||||||
|
val moshi = MoshiProvider.providesMoshi()
|
||||||
|
val adapter = moshi.adapter(ToDeviceSyncResponse::class.java)
|
||||||
|
|
||||||
|
val content = adapter.fromJson(raw)
|
||||||
|
|
||||||
|
val serialized = MoshiProvider.providesMoshi()
|
||||||
|
.newBuilder()
|
||||||
|
.add(CheckNumberType.JSON_ADAPTER_FACTORY)
|
||||||
|
.build()
|
||||||
|
.adapter(ToDeviceSyncResponse::class.java).toJson(content)
|
||||||
|
|
||||||
|
serialized shouldNotContain "1.0"
|
||||||
|
|
||||||
|
println(serialized)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -41,7 +41,6 @@ import im.vector.app.features.html.EventHtmlRenderer
|
|||||||
import im.vector.lib.core.utils.epoxy.charsequence.toEpoxyCharSequence
|
import im.vector.lib.core.utils.epoxy.charsequence.toEpoxyCharSequence
|
||||||
import org.matrix.android.sdk.api.session.crypto.verification.CancelCode
|
import org.matrix.android.sdk.api.session.crypto.verification.CancelCode
|
||||||
import org.matrix.android.sdk.api.session.crypto.verification.EVerificationState
|
import org.matrix.android.sdk.api.session.crypto.verification.EVerificationState
|
||||||
import timber.log.Timber
|
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
class SelfVerificationController @Inject constructor(
|
class SelfVerificationController @Inject constructor(
|
||||||
@ -61,7 +60,7 @@ class SelfVerificationController @Inject constructor(
|
|||||||
var state: SelfVerificationViewState? = null
|
var state: SelfVerificationViewState? = null
|
||||||
|
|
||||||
fun update(state: SelfVerificationViewState) {
|
fun update(state: SelfVerificationViewState) {
|
||||||
Timber.w("VALR controller updated $state")
|
// Timber.w("VALR controller updated $state")
|
||||||
this.state = state
|
this.state = state
|
||||||
requestModelBuild()
|
requestModelBuild()
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user