fix(@desktop/communities): Update UI when receiving information about token actions made by other owner/tokenmaster
Fix #13371
This commit is contained in:
parent
862a1400d1
commit
d0b82bc8dc
|
@ -1,9 +1,11 @@
|
||||||
import json, tables
|
import json, tables, chronicles
|
||||||
import base
|
import base
|
||||||
|
|
||||||
import ../../../../app_service/service/community/dto/[community]
|
import ../../../../app_service/service/community/dto/[community]
|
||||||
import ../../../../app_service/service/community_tokens/dto/community_token
|
import ../../../../app_service/service/community_tokens/dto/community_token
|
||||||
import ../../../../app_service/service/chat/dto/[chat]
|
import ../../../../app_service/service/chat/dto/[chat]
|
||||||
|
from ../../../../app_service/common/conversion import intToEnum
|
||||||
|
|
||||||
import signal_type
|
import signal_type
|
||||||
|
|
||||||
include app_service/common/json_utils
|
include app_service/common/json_utils
|
||||||
|
@ -85,6 +87,17 @@ type CommunityTokenTransactionStatusChangedSignal* = ref object of Signal
|
||||||
masterToken*: CommunityTokenDto
|
masterToken*: CommunityTokenDto
|
||||||
errorString*: string
|
errorString*: string
|
||||||
|
|
||||||
|
type
|
||||||
|
CommunityTokenActionType* {.pure.} = enum
|
||||||
|
Unknown = 0,
|
||||||
|
Airdrop,
|
||||||
|
Burn,
|
||||||
|
RemoteDestruct,
|
||||||
|
|
||||||
|
type CommunityTokenActionSignal* = ref object of Signal
|
||||||
|
communityToken*: CommunityTokenDto
|
||||||
|
actionType*: CommunityTokenActionType
|
||||||
|
|
||||||
proc fromEvent*(T: type CommunitySignal, event: JsonNode): CommunitySignal =
|
proc fromEvent*(T: type CommunitySignal, event: JsonNode): CommunitySignal =
|
||||||
result = CommunitySignal()
|
result = CommunitySignal()
|
||||||
result.signalType = SignalType.CommunityFound
|
result.signalType = SignalType.CommunityFound
|
||||||
|
@ -273,3 +286,14 @@ proc fromEvent*(T: type CommunityTokenTransactionStatusChangedSignal, event: Jso
|
||||||
result.masterToken = toCommunityTokenDto(event["event"]{"masterToken"})
|
result.masterToken = toCommunityTokenDto(event["event"]{"masterToken"})
|
||||||
result.errorString = event["event"]{"errorString"}.getStr()
|
result.errorString = event["event"]{"errorString"}.getStr()
|
||||||
result.signalType = SignalType.CommunityTokenTransactionStatusChanged
|
result.signalType = SignalType.CommunityTokenTransactionStatusChanged
|
||||||
|
|
||||||
|
proc fromEvent*(T: type CommunityTokenActionSignal, event: JsonNode): CommunityTokenActionSignal =
|
||||||
|
result = CommunityTokenActionSignal()
|
||||||
|
result.actionType = CommunityTokenActionType.Unknown
|
||||||
|
if event["event"].hasKey("communityToken"):
|
||||||
|
result.communityToken = toCommunityTokenDto(event["event"]{"communityToken"})
|
||||||
|
try:
|
||||||
|
result.actionType = intToEnum[CommunityTokenActionType](event["event"]{"actionType"}.getInt())
|
||||||
|
except Exception as e:
|
||||||
|
error "CommunityTokenActionSignal: can't read actionType:", error=e.msg
|
||||||
|
result.signalType = SignalType.CommunityTokenAction
|
||||||
|
|
|
@ -62,6 +62,7 @@ type SignalType* {.pure.} = enum
|
||||||
DBReEncryptionStarted = "db.reEncryption.started"
|
DBReEncryptionStarted = "db.reEncryption.started"
|
||||||
DBReEncryptionFinished = "db.reEncryption.finished"
|
DBReEncryptionFinished = "db.reEncryption.finished"
|
||||||
CommunityTokenTransactionStatusChanged = "communityToken.communityTokenTransactionStatusChanged"
|
CommunityTokenTransactionStatusChanged = "communityToken.communityTokenTransactionStatusChanged"
|
||||||
|
CommunityTokenAction = "communityToken.communityTokenAction"
|
||||||
Unknown
|
Unknown
|
||||||
|
|
||||||
proc event*(self:SignalType):string =
|
proc event*(self:SignalType):string =
|
||||||
|
|
|
@ -131,6 +131,7 @@ QtObject:
|
||||||
# pairing
|
# pairing
|
||||||
of SignalType.LocalPairing: LocalPairingSignal.fromEvent(jsonSignal)
|
of SignalType.LocalPairing: LocalPairingSignal.fromEvent(jsonSignal)
|
||||||
of SignalType.CommunityTokenTransactionStatusChanged: CommunityTokenTransactionStatusChangedSignal.fromEvent(jsonSignal)
|
of SignalType.CommunityTokenTransactionStatusChanged: CommunityTokenTransactionStatusChangedSignal.fromEvent(jsonSignal)
|
||||||
|
of SignalType.CommunityTokenAction: CommunityTokenActionSignal.fromEvent(jsonSignal)
|
||||||
else: Signal()
|
else: Signal()
|
||||||
|
|
||||||
result.signalType = signalType
|
result.signalType = signalType
|
||||||
|
|
|
@ -355,6 +355,14 @@ proc init*(self: Controller) =
|
||||||
self.getRemoteDestructedAmount(communityToken.chainId, communityToken.address))
|
self.getRemoteDestructedAmount(communityToken.chainId, communityToken.address))
|
||||||
self.delegate.onBurnStateChanged(communityToken.communityId, communityToken.chainId, communityToken.address, args.status)
|
self.delegate.onBurnStateChanged(communityToken.communityId, communityToken.chainId, communityToken.address, args.status)
|
||||||
|
|
||||||
|
self.events.on(SIGNAL_BURN_ACTION_RECEIVED) do(e: Args):
|
||||||
|
let args = RemoteDestructArgs(e)
|
||||||
|
let communityToken = args.communityToken
|
||||||
|
self.delegate.onCommunityTokenSupplyChanged(communityToken.communityId, communityToken.chainId,
|
||||||
|
communityToken.address, communityToken.supply,
|
||||||
|
self.getRemainingSupply(communityToken.chainId, communityToken.address),
|
||||||
|
self.getRemoteDestructedAmount(communityToken.chainId, communityToken.address))
|
||||||
|
|
||||||
self.events.on(SIGNAL_FINALISE_OWNERSHIP_STATUS) do(e: Args):
|
self.events.on(SIGNAL_FINALISE_OWNERSHIP_STATUS) do(e: Args):
|
||||||
let args = FinaliseOwnershipStatusArgs(e)
|
let args = FinaliseOwnershipStatusArgs(e)
|
||||||
self.delegate.onFinaliseOwnershipStatusChanged(args.isPending, args.communityId)
|
self.delegate.onFinaliseOwnershipStatusChanged(args.isPending, args.communityId)
|
||||||
|
|
|
@ -87,3 +87,5 @@ proc wei2Gwei*(input: string): string =
|
||||||
proc intToEnum*[T](intVal: int, defaultVal: T): T =
|
proc intToEnum*[T](intVal: int, defaultVal: T): T =
|
||||||
result = if (intVal >= ord(low(T)) and intVal <= ord(high(T))): T(intVal) else: defaultVal
|
result = if (intVal >= ord(low(T)) and intVal <= ord(high(T))): T(intVal) else: defaultVal
|
||||||
|
|
||||||
|
proc intToEnum*[T](intVal: int): T =
|
||||||
|
result = if (intVal >= ord(low(T)) and intVal <= ord(high(T))): T(intVal) else: raise newException(ValueError, "Can't convert int to enum")
|
|
@ -261,6 +261,7 @@ const SIGNAL_COMPUTE_AIRDROP_FEE* = "communityTokens-computeAirdropFee"
|
||||||
const SIGNAL_COMMUNITY_TOKEN_OWNERS_FETCHED* = "communityTokens-communityTokenOwnersFetched"
|
const SIGNAL_COMMUNITY_TOKEN_OWNERS_FETCHED* = "communityTokens-communityTokenOwnersFetched"
|
||||||
const SIGNAL_REMOTE_DESTRUCT_STATUS* = "communityTokens-communityTokenRemoteDestructStatus"
|
const SIGNAL_REMOTE_DESTRUCT_STATUS* = "communityTokens-communityTokenRemoteDestructStatus"
|
||||||
const SIGNAL_BURN_STATUS* = "communityTokens-communityTokenBurnStatus"
|
const SIGNAL_BURN_STATUS* = "communityTokens-communityTokenBurnStatus"
|
||||||
|
const SIGNAL_BURN_ACTION_RECEIVED* = "communityTokens-communityTokenBurnActionReceived"
|
||||||
const SIGNAL_AIRDROP_STATUS* = "communityTokens-airdropStatus"
|
const SIGNAL_AIRDROP_STATUS* = "communityTokens-airdropStatus"
|
||||||
const SIGNAL_REMOVE_COMMUNITY_TOKEN_FAILED* = "communityTokens-removeCommunityTokenFailed"
|
const SIGNAL_REMOVE_COMMUNITY_TOKEN_FAILED* = "communityTokens-removeCommunityTokenFailed"
|
||||||
const SIGNAL_COMMUNITY_TOKEN_REMOVED* = "communityTokens-communityTokenRemoved"
|
const SIGNAL_COMMUNITY_TOKEN_REMOVED* = "communityTokens-communityTokenRemoved"
|
||||||
|
@ -570,6 +571,21 @@ QtObject:
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
error "Error processing owner token deployment pending transaction event", msg=e.msg
|
error "Error processing owner token deployment pending transaction event", msg=e.msg
|
||||||
|
|
||||||
|
proc processCommunityTokenAction(self: Service, signalArgs: CommunityTokenActionSignal) =
|
||||||
|
case signalArgs.actionType
|
||||||
|
of CommunityTokenActionType.Airdrop:
|
||||||
|
self.tempTokenOwnersToFetch = signalArgs.communityToken
|
||||||
|
self.tokenOwners1SecTimer.start()
|
||||||
|
of CommunityTokenActionType.Burn:
|
||||||
|
self.updateCommunityTokenCache(signalArgs.communityToken.chainId, signalArgs.communityToken.address, signalArgs.communityToken)
|
||||||
|
let data = RemoteDestructArgs(communityToken: signalArgs.communityToken)
|
||||||
|
self.events.emit(SIGNAL_BURN_ACTION_RECEIVED, data)
|
||||||
|
of CommunityTokenActionType.RemoteDestruct:
|
||||||
|
self.tempTokenOwnersToFetch = signalArgs.communityToken
|
||||||
|
self.tokenOwners1SecTimer.start()
|
||||||
|
else:
|
||||||
|
warn "Unknown token action", actionType=signalArgs.actionType
|
||||||
|
|
||||||
proc tryFetchOwners(self: Service) =
|
proc tryFetchOwners(self: Service) =
|
||||||
# both communities and tokens should be loaded
|
# both communities and tokens should be loaded
|
||||||
if self.allCommunityTokensLoaded and self.communityDataLoaded:
|
if self.allCommunityTokensLoaded and self.communityDataLoaded:
|
||||||
|
@ -590,6 +606,10 @@ QtObject:
|
||||||
self.communityDataLoaded = true
|
self.communityDataLoaded = true
|
||||||
self.tryFetchOwners()
|
self.tryFetchOwners()
|
||||||
|
|
||||||
|
self.events.on(SignalType.CommunityTokenAction.event) do(e:Args):
|
||||||
|
let receivedData = CommunityTokenActionSignal(e)
|
||||||
|
self.processCommunityTokenAction(receivedData)
|
||||||
|
|
||||||
self.events.on(SignalType.CommunityTokenTransactionStatusChanged.event) do(e: Args):
|
self.events.on(SignalType.CommunityTokenTransactionStatusChanged.event) do(e: Args):
|
||||||
let receivedData = CommunityTokenTransactionStatusChangedSignal(e)
|
let receivedData = CommunityTokenTransactionStatusChangedSignal(e)
|
||||||
if receivedData.errorString != "":
|
if receivedData.errorString != "":
|
||||||
|
|
Loading…
Reference in New Issue