diff --git a/src/app/modules/main/wallet_section/activity/controller.nim b/src/app/modules/main/wallet_section/activity/controller.nim index bc696c8037..a540b0e7fc 100644 --- a/src/app/modules/main/wallet_section/activity/controller.nim +++ b/src/app/modules/main/wallet_section/activity/controller.nim @@ -1,4 +1,4 @@ -import NimQml, logging, std/json, sequtils, sugar, options, strutils +import NimQml, logging, std/json, sequtils, sugar, options, strutils, times import tables, stint, sets import model @@ -52,6 +52,8 @@ QtObject: # call updateAssetsIdentities after updating chainIds chainIds: seq[int] + startTimestamp: int + proc setup(self: Controller) = self.QObject.setup @@ -224,6 +226,22 @@ QtObject: self.currentActivityFilter.types = types + proc startTimestampChanged*(self: Controller) {.signal.} + + proc getOldestActivityTimestamp(self: Controller): int {.slot.} = + let resJson = backend_activity.getOldestActivityTimestamp(self.addresses) + if resJson.error != nil or resJson.result.kind != JInt: + error "error fetching oldest activity timestamp: ", resJson.error, ", ", resJson.result.kind + return + + return resJson.result.getInt() + + # Call this method on every data update (ideally only if updates are before the last timestamp retrieved) + # This depends on self.addresses being set, call on every address change + proc updateStartTimestamp*(self: Controller) {.slot.} = + self.startTimestamp = self.getOldestActivityTimestamp() + self.startTimestampChanged() + proc newController*(transactionsModule: transactions_module.AccessInterface, currencyService: currency_service.Service, tokenService: token_service.Service, @@ -322,6 +340,7 @@ QtObject: proc setFilterAddresses*(self: Controller, addresses: seq[string]) = self.addresses = addresses + self.updateStartTimestamp() proc setFilterToAddresses*(self: Controller, addresses: seq[string]) = self.currentActivityFilter.counterpartyAddresses = addresses @@ -361,4 +380,17 @@ QtObject: return let result = json.to(response.result, backend_activity.GetAllRecipientsResponse) - self.recipientsModel.addAddresses(result.addresses, self.recipientsModel.getCount(), result.hasMore) \ No newline at end of file + self.recipientsModel.addAddresses(result.addresses, self.recipientsModel.getCount(), result.hasMore) + + proc getStartTimestamp*(self: Controller): int {.slot.} = + return if self.startTimestamp > 0: + self.startTimestamp + else: + int(times.parse("2000-01-01", "yyyy-MM-dd").toTime().toUnix()) + + QtProperty[int] startTimestamp: + read = getStartTimestamp + notify = startTimestampChanged + + proc updateFilterBase(self: Controller) {.slot.} = + self.updateStartTimestamp() diff --git a/src/backend/activity.nim b/src/backend/activity.nim index a985767aa4..fedce02909 100644 --- a/src/backend/activity.nim +++ b/src/backend/activity.nim @@ -313,4 +313,7 @@ type GetAllRecipientsResponse* = object rpc(getAllRecipients, "wallet"): offset: int - limit: int \ No newline at end of file + limit: int + +rpc(getOldestActivityTimestamp, "wallet"): + addresses: seq[string] diff --git a/ui/app/AppLayouts/Wallet/panels/ActivityFilterPanel.qml b/ui/app/AppLayouts/Wallet/panels/ActivityFilterPanel.qml index d3c9f54693..77e3cb6708 100644 --- a/ui/app/AppLayouts/Wallet/panels/ActivityFilterPanel.qml +++ b/ui/app/AppLayouts/Wallet/panels/ActivityFilterPanel.qml @@ -18,6 +18,10 @@ Flow { spacing: 8 + Component.onCompleted: { + activityFilterStore.updateFilterBase() + } + StatusRoundButton { id: filterButton width: 32 diff --git a/ui/app/AppLayouts/Wallet/stores/ActivityFiltersStore.qml b/ui/app/AppLayouts/Wallet/stores/ActivityFiltersStore.qml index 9d5bf4edbb..5a17de5d7b 100644 --- a/ui/app/AppLayouts/Wallet/stores/ActivityFiltersStore.qml +++ b/ui/app/AppLayouts/Wallet/stores/ActivityFiltersStore.qml @@ -18,8 +18,7 @@ QtObject { // Time filters property int selectedTime: Constants.TransactionTimePeriod.All - // To-do get this from the backend once oldest Tx timestamp is available - property double fromTimestamp + property double fromTimestamp: activityController.startTimestamp * 1000 property double toTimestamp: new Date().valueOf() function setSelectedTimestamp(selcTime) { selectedTime = selcTime @@ -173,4 +172,8 @@ QtObject { } return tempFilters } + + function updateFilterBase() { + activityController.updateFilterBase() + } } diff --git a/ui/imports/shared/stores/RootStore.qml b/ui/imports/shared/stores/RootStore.qml index 2141a7d3ea..1c1f42bdfc 100644 --- a/ui/imports/shared/stores/RootStore.qml +++ b/ui/imports/shared/stores/RootStore.qml @@ -241,7 +241,6 @@ QtObject { property bool marketHistoryIsLoading: Global.appIsReady? walletSectionAllTokens.marketHistoryIsLoading : false - // TODO: range until we optimize to cache the data and abuse the requests function fetchHistoricalBalanceForTokenAsJson(address, tokenSymbol, currencySymbol, timeIntervalEnum) { if (Global.appIsReady) walletSectionAllTokens.fetchHistoricalBalanceForTokenAsJson(address, tokenSymbol, currencySymbol, timeIntervalEnum) diff --git a/vendor/status-go b/vendor/status-go index bf54a57780..ea7a389075 160000 --- a/vendor/status-go +++ b/vendor/status-go @@ -1 +1 @@ -Subproject commit bf54a577805671df7f07c69b414184764b79e091 +Subproject commit ea7a3890755b25856ec8f8da7bdda0189a3fcc68