Skip to content

Commit 6d9de92

Browse files
committed
chore: optimizing usage of signals that are related to market prices/details
1 parent aad2012 commit 6d9de92

File tree

8 files changed

+38
-36
lines changed

8 files changed

+38
-36
lines changed

src/app/modules/main/profile_section/wallet/accounts/module.nim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ method load*(self: Module) =
143143
let arg = TokensPerAccountArgs(e)
144144
self.setBalance(arg.accountAddresses)
145145

146-
self.events.on(SIGNAL_TOKENS_PRICES_UPDATED) do(e: Args):
146+
self.events.on(SIGNAL_TOKENS_MARKET_VALUES_UPDATED) do(e: Args):
147147
self.refreshWalletAccounts()
148148

149149
self.events.on(SIGNAL_WALLET_ACCOUNT_UPDATED) do(e:Args):

src/app/modules/main/wallet_section/accounts/module.nim

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,8 +100,6 @@ method load*(self: Module) =
100100

101101
self.events.on(SIGNAL_TOKENS_MARKET_VALUES_UPDATED) do(e:Args):
102102
self.refreshAllWalletAccountsBalances()
103-
self.events.on(SIGNAL_TOKENS_PRICES_UPDATED) do(e:Args):
104-
self.refreshAllWalletAccountsBalances()
105103
self.events.on(SIGNAL_CURRENCY_FORMATS_UPDATED) do(e:Args):
106104
self.refreshAllWalletAccountsBalances()
107105
self.events.on(SIGNAL_WALLET_ACCOUNT_TOKENS_REBUILT) do(e:Args):

src/app/modules/main/wallet_section/all_tokens/module.nim

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,6 @@ method load*(self: Module) =
5959
self.view.tokensMarketValuesAboutToUpdate()
6060
self.events.on(SIGNAL_TOKENS_MARKET_VALUES_UPDATED) do(e: Args):
6161
self.view.tokensMarketValuesUpdated()
62-
self.events.on(SIGNAL_TOKENS_PRICES_ABOUT_TO_BE_UPDATED) do(e: Args):
63-
self.view.tokensMarketValuesAboutToUpdate()
64-
self.events.on(SIGNAL_TOKENS_PRICES_UPDATED) do(e: Args):
65-
self.view.tokensMarketValuesUpdated()
6662
self.events.on(SIGNAL_TOKEN_PREFERENCES_UPDATED) do(e: Args):
6763
self.view.tokenPreferencesUpdated()
6864
self.events.on(SIGNAL_COMMUNITY_TOKENS_DETAILS_LOADED) do(e: Args):

src/app/modules/main/wallet_section/assets/module.nim

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,6 @@ method load*(self: Module) =
5353
self.view.setHasBalanceCache(self.controller.getHasBalanceCache())
5454
self.view.setHasMarketValuesCache(self.controller.getHasMarketValuesCache())
5555

56-
self.events.on(SIGNAL_TOKENS_PRICES_UPDATED) do(e:Args):
57-
self.view.setHasBalanceCache(self.controller.getHasBalanceCache())
58-
self.view.setHasMarketValuesCache(self.controller.getHasMarketValuesCache())
59-
6056
self.controller.init()
6157
self.view.load()
6258

src/app/modules/main/wallet_section/module.nim

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -304,9 +304,6 @@ method load*(self: Module) =
304304
self.notifyModulesBalanceIsLoaded()
305305
self.view.setLastReloadTimestamp(args.timestamp)
306306
self.view.setIsAccountTokensReloading(false)
307-
self.events.on(SIGNAL_TOKENS_PRICES_UPDATED) do(e:Args):
308-
self.setTotalCurrencyBalance()
309-
self.notifyFilterChanged()
310307
self.events.on(SIGNAL_TOKENS_MARKET_VALUES_UPDATED) do(e:Args):
311308
self.setTotalCurrencyBalance()
312309
self.notifyFilterChanged()

src/app_service/service/token/service_main.nim

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -154,21 +154,9 @@ proc getPriceForToken*(self: Service, tokenKey: string): float64 =
154154
proc getTokensDetailsLoading*(self: Service): bool =
155155
return self.tokensDetailsLoading
156156

157-
proc getTokensMarketValuesLoading*(self: Service): bool =
158-
return self.tokensPricesLoading or self.tokensMarketDetailsLoading
159-
160157
proc getHasMarketValuesCache*(self: Service): bool =
161158
return self.hasMarketDetailsCache and self.hasPriceValuesCache
162159

163-
proc updateTokenPrices*(self: Service, updatedPrices: Table[string, float64]) =
164-
var anyUpdated = false
165-
for tokenKey, price in updatedPrices:
166-
if not self.tokenPriceTable.hasKey(tokenKey) or self.tokenPriceTable[tokenKey] != price:
167-
anyUpdated = true
168-
self.tokenPriceTable[tokenKey] = price
169-
if anyUpdated:
170-
self.events.emit(SIGNAL_TOKENS_PRICES_UPDATED, Args())
171-
172160
proc addNewCommunityToken*(self: Service, token: TokenItem) =
173161
if self.groupsOfInterestByKey.hasKey(token.groupKey):
174162
let tokens = self.groupsOfInterestByKey[token.groupKey].tokens

src/app_service/service/token/service_tokens_details.nim

Lines changed: 37 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,39 @@
1+
proc getTokensMarketValuesLoading*(self: Service): bool =
2+
return self.tokensPricesLoading or self.tokensMarketDetailsLoading
3+
4+
# resolveTokensMarketValuesLoadingStateAndNotify ensures that only a single signal is emitted when:
5+
# - either tokens prices or tokens market details are about to be updated
6+
# - tokens prices and tokens market details are updated (when both are loaded)
7+
proc resolveTokensMarketValuesLoadingStateAndNotify(self: Service, tokensPricesLoading: bool, tokensMarketDetailsLoading: bool) =
8+
if not self.getTokensMarketValuesLoading():
9+
self.tokensPricesLoading = tokensPricesLoading
10+
self.tokensMarketDetailsLoading = tokensMarketDetailsLoading
11+
if self.getTokensMarketValuesLoading():
12+
self.events.emit(SIGNAL_TOKENS_MARKET_VALUES_ABOUT_TO_BE_UPDATED, Args())
13+
return
14+
self.tokensPricesLoading = tokensPricesLoading
15+
self.tokensMarketDetailsLoading = tokensMarketDetailsLoading
16+
if not self.getTokensMarketValuesLoading():
17+
self.events.emit(SIGNAL_TOKENS_MARKET_VALUES_UPDATED, Args())
18+
19+
proc setTokensMarketDetailsLoadingStateAndNotify(self: Service, state: bool) =
20+
self.resolveTokensMarketValuesLoadingStateAndNotify(self.tokensPricesLoading, state)
21+
22+
proc setTokensPricesLoadingStateAndNotify(self: Service, state: bool) =
23+
self.resolveTokensMarketValuesLoadingStateAndNotify(state, self.tokensMarketDetailsLoading)
24+
25+
proc updateTokenPrices*(self: Service, updatedPrices: Table[string, float64]) =
26+
var anyUpdated = false
27+
for tokenKey, price in updatedPrices:
28+
if not self.tokenPriceTable.hasKey(tokenKey) or self.tokenPriceTable[tokenKey] != price:
29+
anyUpdated = true
30+
self.tokenPriceTable[tokenKey] = price
31+
if anyUpdated:
32+
self.events.emit(SIGNAL_TOKENS_MARKET_VALUES_UPDATED, Args())
33+
134
# if tokensKeys is empty, market values for all tokens will be fetched
235
proc fetchTokensMarketValues(self: Service, tokensKeys: seq[string] = @[]) =
3-
self.tokensMarketDetailsLoading = true
4-
defer: self.events.emit(SIGNAL_TOKENS_MARKET_VALUES_ABOUT_TO_BE_UPDATED, Args())
36+
defer: self.setTokensMarketDetailsLoadingStateAndNotify(true)
537
let arg = FetchTokensMarketValuesTaskArg(
638
tptr: fetchTokensMarketValuesTask,
739
vptr: cast[uint](self.vptr),
@@ -13,8 +45,7 @@ proc fetchTokensMarketValues(self: Service, tokensKeys: seq[string] = @[]) =
1345

1446
proc tokensMarketValuesRetrieved(self: Service, response: string) {.slot.} =
1547
# this is emited so that the models can notify about market values being available
16-
self.tokensMarketDetailsLoading = false
17-
defer: self.events.emit(SIGNAL_TOKENS_MARKET_VALUES_UPDATED, Args())
48+
defer: self.setTokensMarketDetailsLoadingStateAndNotify(false)
1849
try:
1950
let parsedJson = response.parseJson
2051
var errorString: string
@@ -82,8 +113,7 @@ proc tokensDetailsRetrieved(self: Service, response: string) {.slot.} =
82113

83114
# if tokensKeys is empty, prices for all tokens will be fetched
84115
proc fetchTokensPrices(self: Service, tokensKeys: seq[string] = @[]) =
85-
self.tokensPricesLoading = true
86-
defer: self.events.emit(SIGNAL_TOKENS_PRICES_ABOUT_TO_BE_UPDATED, Args())
116+
defer: self.setTokensPricesLoadingStateAndNotify(true)
87117
let arg = FetchTokensPricesTaskArg(
88118
tptr: fetchTokensPricesTask,
89119
vptr: cast[uint](self.vptr),
@@ -94,9 +124,8 @@ proc fetchTokensPrices(self: Service, tokensKeys: seq[string] = @[]) =
94124
self.threadpool.start(arg)
95125

96126
proc tokensPricesRetrieved(self: Service, response: string) {.slot.} =
97-
self.tokensPricesLoading = false
98127
# this is emited so that the models can notify about prices being available
99-
defer: self.events.emit(SIGNAL_TOKENS_PRICES_UPDATED, Args())
128+
defer: self.setTokensPricesLoadingStateAndNotify(false)
100129
try:
101130
let parsedJson = response.parseJson
102131
var errorString: string

src/app_service/service/token/signals_and_payloads.nim

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,7 @@ const SIGNAL_TOKEN_HISTORICAL_DATA_LOADED* = "tokenHistoricalDataLoaded"
66
const SIGNAL_TOKENS_LIST_UPDATED* = "tokensListUpdated"
77
const SIGNAL_TOKENS_DETAILS_UPDATED* = "tokensDetailsUpdated"
88
const SIGNAL_TOKENS_MARKET_VALUES_ABOUT_TO_BE_UPDATED* = "tokensMarketValuesAboutToBeUpdated"
9-
const SIGNAL_TOKENS_PRICES_ABOUT_TO_BE_UPDATED* = "tokensPricesValuesAboutToBeUpdated"
109
const SIGNAL_TOKENS_MARKET_VALUES_UPDATED* = "tokensMarketValuesUpdated"
11-
const SIGNAL_TOKENS_PRICES_UPDATED* = "tokensPricesValuesUpdated"
1210
const SIGNAL_TOKEN_PREFERENCES_UPDATED* = "tokenPreferencesUpdated"
1311

1412
#################################################

0 commit comments

Comments
 (0)