fix(@desktop/communities): add hidden button to refresh (retrack transaction) community tokens

Issue #14699
This commit is contained in:
Michal Iskierko 2024-05-21 10:53:33 +02:00 committed by Michał Iskierko
parent 9d8542c95d
commit 6d310c33cd
12 changed files with 69 additions and 0 deletions

View File

@ -24,6 +24,7 @@ const DEFAULT_LAS_KEY_SHARDED_COMMUNITIES_ENABLED = false
const LAS_KEY_TRANSLATIONS_ENABLED = "global/translations_enabled"
const DEFAULT_LAS_KEY_TRANSLATIONS_ENABLED = false
const DEFAULT_LAS_KEY_CREATE_COMMUNITIES_ENABLED = false
const LAS_KEY_REFRESH_TOKEN_ENABLED = "global/refresh_token_enabled"
QtObject:
type LocalAppSettings* = ref object of QObject
@ -150,6 +151,18 @@ QtObject:
write = setFakeLoadingScreenEnabled
notify = fakeLoadingScreenEnabledChanged
proc refreshTokenEnabledChanged*(self: LocalAppSettings) {.signal.}
proc getRefreshTokenEnabled*(self: LocalAppSettings): bool {.slot.} =
self.settings.value(LAS_KEY_REFRESH_TOKEN_ENABLED, newQVariant(false)).boolVal
proc setRefreshTokenEnabled*(self: LocalAppSettings, enabled: bool) {.slot.} =
self.settings.setValue(LAS_KEY_REFRESH_TOKEN_ENABLED, newQVariant(enabled))
self.refreshTokenEnabledChanged()
QtProperty[bool] refreshTokenEnabled:
read = getRefreshTokenEnabled
write = setRefreshTokenEnabled
notify = refreshTokenEnabledChanged
proc createCommunityEnabledChanged*(self: LocalAppSettings) {.signal.}
proc getCreateCommunityEnabled*(self: LocalAppSettings): bool {.slot.} =
self.settings.value(LAS_KEY_CREATE_COMMUNITIES_ENABLED, newQVariant(DEFAULT_LAS_KEY_CREATE_COMMUNITIES_ENABLED)).boolVal

View File

@ -118,6 +118,9 @@ proc deployOwnerContracts*(self: Controller, communityId: string, addressFrom: s
proc removeCommunityToken*(self: Controller, communityId: string, chainId: int, address: string) =
self.communityTokensService.removeCommunityToken(communityId, chainId, address)
proc refreshCommunityToken*(self: Controller, chainId: int, address: string) =
self.communityTokensService.refreshCommunityToken(chainId, address)
proc airdropTokens*(self: Controller, communityId: string, password: string, tokensAndAmounts: seq[CommunityTokenAndAmount], walletAddresses: seq[string], addressFrom: string) =
self.communityTokensService.airdropTokens(communityId, password, tokensAndAmounts, walletAddresses, addressFrom)

View File

@ -93,6 +93,9 @@ method onAirdropStateChanged*(self: AccessInterface, communityId: string, tokenN
method removeCommunityToken*(self: AccessInterface, communityId: string, chainId: int, address: string) {.base.} =
raise newException(ValueError, "No implementation available")
method refreshCommunityToken*(self: AccessInterface, chainId: int, address: string) {.base.} =
raise newException(ValueError, "No implementation available")
method onOwnerTokenReceived*(self: AccessInterface, communityId: string, communityName: string, chainId: int, contractAddress: string) {.base.} =
raise newException(ValueError, "No implementation available")

View File

@ -249,6 +249,9 @@ method deployAssets*(self: Module, communityId: string, fromAddress: string, nam
method removeCommunityToken*(self: Module, communityId: string, chainId: int, address: string) =
self.controller.removeCommunityToken(communityId, chainId, address)
method refreshCommunityToken*(self: Module, chainId: int, address: string) =
self.controller.refreshCommunityToken(chainId, address)
method onUserAuthenticated*(self: Module, password: string) =
defer: self.resetTempValues()
if password.len == 0:

View File

@ -34,6 +34,9 @@ QtObject:
proc removeCommunityToken*(self: View, communityId: string, chainId: int, address: string) {.slot.} =
self.communityTokensModule.removeCommunityToken(communityId, chainId, address)
proc refreshCommunityToken*(self: View, chainId: int, address: string) {.slot.} =
self.communityTokensModule.refreshCommunityToken(chainId, address)
proc airdropTokens*(self: View, communityId: string, tokensJsonString: string, walletsJsonString: string, addressFrom: string) {.slot.} =
self.communityTokensModule.airdropTokens(communityId, tokensJsonString, walletsJsonString, addressFrom)

View File

@ -1383,3 +1383,9 @@ QtObject:
except Exception:
error "can't get owner token owner address", message = getCurrentExceptionMsg()
self.events.emit(SIGNAL_OWNER_TOKEN_OWNER_ADDRESS, ownerTokenArgs)
proc refreshCommunityToken*(self: Service, chainId: int, contractAddress: string) =
try:
discard tokens_backend.reTrackOwnerTokenDeploymentTransaction(chainId, contractAddress)
except Exception:
error "can't retrack token transaction", message = getCurrentExceptionMsg()

View File

@ -144,6 +144,10 @@ proc getOwnerTokenOwnerAddress*(chainId: int, contractAddress: string): RpcRespo
let payload = %*[chainId, contractAddress]
return core.callPrivateRPC("communitytokens_ownerTokenOwnerAddress", payload)
proc reTrackOwnerTokenDeploymentTransaction*(chainId: int, contractAddress: string): RpcResponse[JsonNode] =
let payload = %*[chainId, contractAddress]
return core.callPrivateRPC("communitytokens_reTrackOwnerTokenDeploymentTransaction", payload)
rpc(registerReceivedCommunityTokenNotification, "wakuext"):
communityId: string
isFirst: bool

View File

@ -74,6 +74,7 @@ StackView {
signal burnToken(string tokenKey, string amount, string accountAddress)
signal airdropToken(string tokenKey, string amount, int type, var addresses)
signal deleteToken(string tokenKey)
signal refreshToken(string tokenKey)
signal registerDeployFeesSubscriber(var feeSubscriber)
signal registerSelfDestructFeesSubscriber(var feeSubscriber)
signal registerBurnTokenFeesSubscriber(var feeSubscriber)
@ -519,6 +520,12 @@ StackView {
retryAssetOrCollectible()
}
}
},
StatusButton {
text: qsTr("Refresh")
visible: localAppSettings.refreshTokenEnabled && (tokenViewPage.token.deployState === Constants.ContractTransactionStatus.InProgress)
onClicked: root.refreshToken(tokenViewPage.token.key)
tooltip.text: qsTr("Restart token's transaction listening if the token got stuck in minting state")
}
]

View File

@ -397,6 +397,9 @@ StatusSectionLayout {
onDeleteToken:
communityTokensStore.deleteToken(root.community.id, tokenKey)
onRefreshToken:
communityTokensStore.refreshToken(tokenKey)
onAirdropToken: {
root.goTo(Constants.CommunitySettingsSections.Airdrops)

View File

@ -41,6 +41,8 @@ QtObject {
readonly property real scrollVelocity: localAppSettings.scrollVelocity
readonly property real scrollDeceleration: localAppSettings.scrollDeceleration
readonly property bool refreshTokenEnabled: localAppSettings.refreshTokenEnabled ?? false
readonly property bool isGoerliEnabled: networksModuleInst.isGoerliEnabled
function logDir() {
@ -173,6 +175,12 @@ QtObject {
localAppSettings.wakuV2ShardedCommunitiesEnabled = !localAppSettings.wakuV2ShardedCommunitiesEnabled
}
function toggleRefreshTokenEnabled() {
if(!localAppSettings)
return
localAppSettings.refreshTokenEnabled = !localAppSettings.refreshTokenEnabled
}
function setCustomScrollingEnabled(value) {
if(!localAppSettings)
return

View File

@ -485,6 +485,17 @@ SettingsContentBase {
}
}
StatusSettingsLineButton {
anchors.leftMargin: 0
anchors.rightMargin: 0
text: qsTr("Enable community tokens refreshing")
isSwitch: true
switchChecked: root.advancedStore.refreshTokenEnabled
onClicked: {
root.advancedStore.toggleRefreshTokenEnabled()
}
}
StatusSettingsLineButton {
anchors.leftMargin: 0
anchors.rightMargin: 0

View File

@ -80,6 +80,11 @@ QtObject {
communityTokensModuleInst.removeCommunityToken(communityId, parts[0], parts[1])
}
function refreshToken(contractUniqueKey) {
let parts = contractUniqueKey.split("_");
communityTokensModuleInst.refreshCommunityToken(parts[0], parts[1])
}
function updateSmartContract(communityId, chainId, contractAddress, accountAddress) {
communityTokensModuleInst.setSigner(communityId, chainId, contractAddress, accountAddress)
}