From f925a82f7e0b38d1acfe8391c0aaef6b01561ec4 Mon Sep 17 00:00:00 2001 From: antonijzelinskij Date: Fri, 19 Jan 2024 11:29:29 +0100 Subject: [PATCH 1/4] Prepare identity to runtime upgrade --- .../data/model/OnChainIdentity.kt | 4 ++-- .../mixin/identity/IdentityModel.kt | 4 ++-- .../mixin/identity/IdentityView.kt | 2 +- .../network/blockchain/bindings/Identity.kt | 21 ++++++++++++++----- .../presentation/mappers/Identity.kt | 8 +++---- .../validators/parcel/IdentityParcelModel.kt | 2 +- 6 files changed, 26 insertions(+), 15 deletions(-) diff --git a/feature-account-api/src/main/java/io/novafoundation/nova/feature_account_api/data/model/OnChainIdentity.kt b/feature-account-api/src/main/java/io/novafoundation/nova/feature_account_api/data/model/OnChainIdentity.kt index dc0423c530..985d72b54c 100644 --- a/feature-account-api/src/main/java/io/novafoundation/nova/feature_account_api/data/model/OnChainIdentity.kt +++ b/feature-account-api/src/main/java/io/novafoundation/nova/feature_account_api/data/model/OnChainIdentity.kt @@ -6,7 +6,7 @@ interface OnChainIdentity { val display: String? val legal: String? val web: String? - val riot: String? + val matrix: String? val email: String? val pgpFingerprint: String? val image: String? @@ -17,7 +17,7 @@ class RootIdentity( override val display: String?, override val legal: String?, override val web: String?, - override val riot: String?, + override val matrix: String?, override val email: String?, override val pgpFingerprint: String?, override val image: String?, diff --git a/feature-account-api/src/main/java/io/novafoundation/nova/feature_account_api/presenatation/mixin/identity/IdentityModel.kt b/feature-account-api/src/main/java/io/novafoundation/nova/feature_account_api/presenatation/mixin/identity/IdentityModel.kt index b071bb4f25..f13c87ced0 100644 --- a/feature-account-api/src/main/java/io/novafoundation/nova/feature_account_api/presenatation/mixin/identity/IdentityModel.kt +++ b/feature-account-api/src/main/java/io/novafoundation/nova/feature_account_api/presenatation/mixin/identity/IdentityModel.kt @@ -6,7 +6,7 @@ class IdentityModel( val display: String?, val legal: String?, val web: String?, - val riot: String?, + val matrix: String?, val email: String?, val image: String?, val twitter: String? @@ -21,7 +21,7 @@ fun IdentityModel.Companion.from(identity: OnChainIdentity): IdentityModel { display = display, legal = legal, web = web, - riot = riot, + matrix = matrix, email = email, image = image, twitter = twitter diff --git a/feature-account-api/src/main/java/io/novafoundation/nova/feature_account_api/presenatation/mixin/identity/IdentityView.kt b/feature-account-api/src/main/java/io/novafoundation/nova/feature_account_api/presenatation/mixin/identity/IdentityView.kt index 0f77d6d32a..cb5423a365 100644 --- a/feature-account-api/src/main/java/io/novafoundation/nova/feature_account_api/presenatation/mixin/identity/IdentityView.kt +++ b/feature-account-api/src/main/java/io/novafoundation/nova/feature_account_api/presenatation/mixin/identity/IdentityView.kt @@ -29,7 +29,7 @@ class IdentityView @JvmOverloads constructor( viewIdentityLegalName.showValueOrHide(legal) viewIdentityEmail.showValueOrHide(email) viewIdentityTwitter.showValueOrHide(twitter) - viewIdentityElementName.showValueOrHide(riot) + viewIdentityElementName.showValueOrHide(matrix) viewIdentityWeb.showValueOrHide(web) } diff --git a/feature-account-impl/src/main/java/io/novafoundation/nova/feature_account_impl/data/network/blockchain/bindings/Identity.kt b/feature-account-impl/src/main/java/io/novafoundation/nova/feature_account_impl/data/network/blockchain/bindings/Identity.kt index b73c15a673..1ec6ed9ef9 100644 --- a/feature-account-impl/src/main/java/io/novafoundation/nova/feature_account_impl/data/network/blockchain/bindings/Identity.kt +++ b/feature-account-impl/src/main/java/io/novafoundation/nova/feature_account_impl/data/network/blockchain/bindings/Identity.kt @@ -15,20 +15,25 @@ import jp.co.soramitsu.fearless_utils.extensions.toHexString import jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite.Struct @UseCaseBinding -fun bindIdentity(dynamic: Any?,): OnChainIdentity? { +fun bindIdentity(dynamic: Any?): OnChainIdentity? { if (dynamic == null) return null val decoded = dynamic.castToStruct() - val identityInfo = decoded.get("info") ?: incompatible() + val identityInfo = decoded.get("registration") + ?.get("info") + ?: decoded.get("info") ?: incompatible() val pgpFingerprint = identityInfo.get("pgpFingerprint") + val matrix = bindIdentityData(identityInfo, "riot", onIncompatibleField = null) + ?: bindIdentityData(identityInfo, "matrix", onIncompatibleField = null) + return RootIdentity( display = bindIdentityData(identityInfo, "display"), legal = bindIdentityData(identityInfo, "legal"), web = bindIdentityData(identityInfo, "web"), - riot = bindIdentityData(identityInfo, "riot"), + matrix = matrix, email = bindIdentityData(identityInfo, "email"), pgpFingerprint = pgpFingerprint?.toHexString(withPrefix = true), image = bindIdentityData(identityInfo, "image"), @@ -51,8 +56,14 @@ fun bindSuperOf(decoded: Any?): SuperOf? { } @HelperBinding -fun bindIdentityData(identityInfo: Struct.Instance, field: String): String? { - val value = identityInfo.get(field) ?: incompatible() +fun bindIdentityData( + identityInfo: Struct.Instance, + field: String, + onIncompatibleField: (() -> Unit)? = { incompatible() } +): String? { + val value = identityInfo.get(field) + ?: onIncompatibleField?.invoke() + ?: return null return bindData(value).asString() } diff --git a/feature-staking-impl/src/main/java/io/novafoundation/nova/feature_staking_impl/presentation/mappers/Identity.kt b/feature-staking-impl/src/main/java/io/novafoundation/nova/feature_staking_impl/presentation/mappers/Identity.kt index 198143f777..ca495d31e1 100644 --- a/feature-staking-impl/src/main/java/io/novafoundation/nova/feature_staking_impl/presentation/mappers/Identity.kt +++ b/feature-staking-impl/src/main/java/io/novafoundation/nova/feature_staking_impl/presentation/mappers/Identity.kt @@ -16,24 +16,24 @@ fun mapIdentityToIdentityParcelModel(identity: OnChainIdentity): IdentityParcelM ) } - IdentityParcelModel(display, legal, web, riot, email, pgpFingerprint, image, twitter, childInfo) + IdentityParcelModel(display, legal, web, matrix, email, pgpFingerprint, image, twitter, childInfo) } } fun mapIdentityParcelModelToIdentity(identity: IdentityParcelModel): OnChainIdentity { return with(identity) { if (childInfo != null) { - val parent = RootIdentity(childInfo.parentSeparateDisplay, legal, web, riot, email, pgpFingerprint, image, twitter) + val parent = RootIdentity(childInfo.parentSeparateDisplay, legal, web, matrix, email, pgpFingerprint, image, twitter) ChildIdentity(childInfo.childName, parent) } else { - RootIdentity(display, legal, web, riot, email, pgpFingerprint, image, twitter) + RootIdentity(display, legal, web, matrix, email, pgpFingerprint, image, twitter) } } } fun mapIdentityParcelModelToIdentityModel(identity: IdentityParcelModel): IdentityModel { return with(identity) { - IdentityModel(display, legal, web, riot, email, image, twitter) + IdentityModel(display, legal, web, matrix, email, image, twitter) } } diff --git a/feature-staking-impl/src/main/java/io/novafoundation/nova/feature_staking_impl/presentation/validators/parcel/IdentityParcelModel.kt b/feature-staking-impl/src/main/java/io/novafoundation/nova/feature_staking_impl/presentation/validators/parcel/IdentityParcelModel.kt index 62c681ee57..c3da0de72e 100644 --- a/feature-staking-impl/src/main/java/io/novafoundation/nova/feature_staking_impl/presentation/validators/parcel/IdentityParcelModel.kt +++ b/feature-staking-impl/src/main/java/io/novafoundation/nova/feature_staking_impl/presentation/validators/parcel/IdentityParcelModel.kt @@ -8,7 +8,7 @@ class IdentityParcelModel( val display: String?, val legal: String?, val web: String?, - val riot: String?, + val matrix: String?, val email: String?, val pgpFingerprint: String?, val image: String?, From fc6d0031d7809648f2ce246717c6c470293e7b84 Mon Sep 17 00:00:00 2001 From: antonijzelinskij Date: Fri, 19 Jan 2024 11:52:35 +0100 Subject: [PATCH 2/4] Fixed identity binding --- .../network/blockchain/bindings/Identity.kt | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/feature-account-impl/src/main/java/io/novafoundation/nova/feature_account_impl/data/network/blockchain/bindings/Identity.kt b/feature-account-impl/src/main/java/io/novafoundation/nova/feature_account_impl/data/network/blockchain/bindings/Identity.kt index 1ec6ed9ef9..2707e69a54 100644 --- a/feature-account-impl/src/main/java/io/novafoundation/nova/feature_account_impl/data/network/blockchain/bindings/Identity.kt +++ b/feature-account-impl/src/main/java/io/novafoundation/nova/feature_account_impl/data/network/blockchain/bindings/Identity.kt @@ -6,6 +6,7 @@ import io.novafoundation.nova.common.data.network.runtime.binding.bindData import io.novafoundation.nova.common.data.network.runtime.binding.cast import io.novafoundation.nova.common.data.network.runtime.binding.castToList import io.novafoundation.nova.common.data.network.runtime.binding.castToStruct +import io.novafoundation.nova.common.data.network.runtime.binding.castToStructOrNull import io.novafoundation.nova.common.data.network.runtime.binding.incompatible import io.novafoundation.nova.common.utils.second import io.novafoundation.nova.feature_account_api.data.model.OnChainIdentity @@ -18,11 +19,9 @@ import jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite.Struct fun bindIdentity(dynamic: Any?): OnChainIdentity? { if (dynamic == null) return null - val decoded = dynamic.castToStruct() + val decoded = dynamic.castIdentityLegacy() ?: dynamic.castToIdentity() - val identityInfo = decoded.get("registration") - ?.get("info") - ?: decoded.get("info") ?: incompatible() + val identityInfo = decoded.get("info") ?: incompatible() val pgpFingerprint = identityInfo.get("pgpFingerprint") @@ -41,6 +40,16 @@ fun bindIdentity(dynamic: Any?): OnChainIdentity? { ) } +private fun Any?.castIdentityLegacy(): Struct.Instance? { + return this.castToStructOrNull() +} + +private fun Any?.castToIdentity(): Struct.Instance { + return this.castToList() + .first() + .castToStruct() +} + @UseCaseBinding fun bindSuperOf(decoded: Any?): SuperOf? { if (decoded == null) return null From d6a7fcaca8820b1819a8d592c6a04cad3b29c555 Mon Sep 17 00:00:00 2001 From: antonijzelinskij Date: Fri, 19 Jan 2024 12:11:59 +0100 Subject: [PATCH 3/4] Fixed runtime sync test --- .../runtime/multiNetwork/runtime/RuntimeSyncService.kt | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/runtime/src/main/java/io/novafoundation/nova/runtime/multiNetwork/runtime/RuntimeSyncService.kt b/runtime/src/main/java/io/novafoundation/nova/runtime/multiNetwork/runtime/RuntimeSyncService.kt index 17a0b438d2..fe5e120bd0 100644 --- a/runtime/src/main/java/io/novafoundation/nova/runtime/multiNetwork/runtime/RuntimeSyncService.kt +++ b/runtime/src/main/java/io/novafoundation/nova/runtime/multiNetwork/runtime/RuntimeSyncService.kt @@ -97,12 +97,13 @@ class RuntimeSyncService( cancelExistingSync(chainId) syncingChains[chainId] = launch(syncDispatcher) { - runCatching { - val syncResult = sync(chainId, forceFullSync) - syncResult?.let { _syncStatusFlow.emit(it) } - } + val syncResult = runCatching { + sync(chainId, forceFullSync) + }.getOrNull() syncFinished(chainId) + + syncResult?.let { _syncStatusFlow.emit(it) } } } From 13016ef56d92e5658c4072824eb1130bd32c3c03 Mon Sep 17 00:00:00 2001 From: antonijzelinskij Date: Fri, 19 Jan 2024 13:09:42 +0100 Subject: [PATCH 4/4] Bump version --- build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 8fae7919ba..cc8262b6f2 100644 --- a/build.gradle +++ b/build.gradle @@ -1,8 +1,8 @@ buildscript { ext { // App version - versionName = '7.7.2' - versionCode = 110 + versionName = '7.7.3' + versionCode = 111 applicationId = "io.novafoundation.nova" releaseApplicationSuffix = "market"