diff --git a/novawallet/Common/Configs/ApplicationConfigs.swift b/novawallet/Common/Configs/ApplicationConfigs.swift index c4c6119e10..89d5be432c 100644 --- a/novawallet/Common/Configs/ApplicationConfigs.swift +++ b/novawallet/Common/Configs/ApplicationConfigs.swift @@ -159,7 +159,7 @@ extension ApplicationConfig: ApplicationConfigProtocol { #if F_RELEASE URL(string: "https://api.subquery.network/sq/nova-wallet/subquery-staking")! #else - URL(string: "https://api.subquery.network/sq/nova-wallet/subquery-staking")! + URL(string: "https://subquery-multi-staking-prod.k8s-1.novasama.co")! #endif } diff --git a/novawallet/Common/DataProvider/PriceProviderFactory.swift b/novawallet/Common/DataProvider/PriceProviderFactory.swift index d0d4fa73ec..e4cedb99b0 100644 --- a/novawallet/Common/DataProvider/PriceProviderFactory.swift +++ b/novawallet/Common/DataProvider/PriceProviderFactory.swift @@ -173,7 +173,8 @@ extension PriceProviderFactory: PriceProviderFactoryProtocol { let source = CoingeckoPriceHistoryProviderSource( priceId: priceId, currency: currency, - operationFactory: CoingeckoOperationFactory() + operationFactory: CoingeckoOperationFactory(), + logger: logger ) let singleValueProvider = SingleValueProvider( diff --git a/novawallet/Common/DataProvider/Sources/CoingeckoPriceHistorySource.swift b/novawallet/Common/DataProvider/Sources/CoingeckoPriceHistorySource.swift index 1ab8fbe4c5..b257145221 100644 --- a/novawallet/Common/DataProvider/Sources/CoingeckoPriceHistorySource.swift +++ b/novawallet/Common/DataProvider/Sources/CoingeckoPriceHistorySource.swift @@ -2,18 +2,34 @@ import Foundation import RobinHood final class CoingeckoPriceHistoryProviderSource { + static let maxAllowedRange = 365.secondsFromDays + let operationFactory: CoingeckoOperationFactoryProtocol let currency: Currency let priceId: AssetModel.PriceId + let logger: LoggerProtocol init( priceId: AssetModel.PriceId, currency: Currency, - operationFactory: CoingeckoOperationFactoryProtocol + operationFactory: CoingeckoOperationFactoryProtocol, + logger: LoggerProtocol ) { self.priceId = priceId self.currency = currency self.operationFactory = operationFactory + self.logger = logger + } + + private func logFetchResult(for result: Result?) { + switch result { + case .success: + logger.debug("Price history fetched for \(priceId)") + case let .failure(error): + logger.error("Price history fetch failed \(error)") + case nil: + logger.error("No result") + } } } @@ -21,15 +37,19 @@ extension CoingeckoPriceHistoryProviderSource: SingleValueProviderSourceProtocol typealias Model = PriceHistory func fetchOperation() -> CompoundOperationWrapper { + let toTimeInterval = Date().timeIntervalSince1970 + let fromTimeInterval = max(toTimeInterval - Self.maxAllowedRange, 0) + let historyOperation = operationFactory.fetchPriceHistory( for: priceId, currency: currency, - startDate: Date(timeIntervalSince1970: 0), - endDate: Date(timeIntervalSince1970: TimeInterval(UInt32.max)) + startDate: Date(timeIntervalSince1970: fromTimeInterval), + endDate: Date(timeIntervalSince1970: toTimeInterval) ) - let mapOperation = ClosureOperation { - try historyOperation.extractNoCancellableResultData() + let mapOperation = ClosureOperation { [weak self] in + self?.logFetchResult(for: historyOperation.result) + return try historyOperation.extractNoCancellableResultData() } mapOperation.addDependency(historyOperation) diff --git a/novawallet/Common/Network/GovMetadataOperationFactory/Subsquare/BaseSubsquareOperationFactory.swift b/novawallet/Common/Network/GovMetadataOperationFactory/Subsquare/BaseSubsquareOperationFactory.swift index 7fd81115f9..154a6db98c 100644 --- a/novawallet/Common/Network/GovMetadataOperationFactory/Subsquare/BaseSubsquareOperationFactory.swift +++ b/novawallet/Common/Network/GovMetadataOperationFactory/Subsquare/BaseSubsquareOperationFactory.swift @@ -8,7 +8,7 @@ class BaseSubsquareOperationFactory { let timeout: TimeInterval let pageSize: Int - init(baseUrl: URL, chainId: String, pageSize: Int = 1000, timeout: TimeInterval = 10) { + init(baseUrl: URL, chainId: String, pageSize: Int = 100, timeout: TimeInterval = 10) { self.baseUrl = baseUrl self.chainId = chainId self.pageSize = pageSize diff --git a/novawallet/Modules/Vote/Governance/Referendums/ReferendumsInteractor+Protocol.swift b/novawallet/Modules/Vote/Governance/Referendums/ReferendumsInteractor+Protocol.swift index 88a52764ca..4416aed719 100644 --- a/novawallet/Modules/Vote/Governance/Referendums/ReferendumsInteractor+Protocol.swift +++ b/novawallet/Modules/Vote/Governance/Referendums/ReferendumsInteractor+Protocol.swift @@ -46,19 +46,21 @@ extension ReferendumsInteractor: ReferendumsInteractorInputProtocol { if let chain = governanceState.settings.value?.chain { subscribeToBlockNumber(for: chain) } + + if governanceState.settings.value != nil { + metadataProvider?.refresh() + } } func putOffline() { clearBlockNumberSubscription() } - func refresh() { + func refreshReferendums() { if governanceState.settings.value != nil { provideReferendumsIfNeeded() provideBlockTime() - metadataProvider?.refresh() - provideOffchainVotingIfNeeded() } } diff --git a/novawallet/Modules/Vote/Governance/Referendums/ReferendumsPresenter.swift b/novawallet/Modules/Vote/Governance/Referendums/ReferendumsPresenter.swift index e8ea1e3715..e7b79bec1f 100644 --- a/novawallet/Modules/Vote/Governance/Referendums/ReferendumsPresenter.swift +++ b/novawallet/Modules/Vote/Governance/Referendums/ReferendumsPresenter.swift @@ -419,7 +419,7 @@ extension ReferendumsPresenter: ReferendumsInteractorOutputProtocol { func didReceiveBlockNumber(_ blockNumber: BlockNumber) { self.blockNumber = blockNumber - interactor.refresh() + interactor.refreshReferendums() } func didReceiveBlockTime(_ blockTime: BlockTime) { @@ -479,7 +479,7 @@ extension ReferendumsPresenter: ReferendumsInteractorOutputProtocol { } case .referendumsFetchFailed: wireframe.presentRequestStatus(on: view, locale: selectedLocale) { [weak self] in - self?.interactor.refresh() + self?.interactor.refreshReferendums() } case .blockNumberSubscriptionFailed, .priceSubscriptionFailed, .balanceSubscriptionFailed, .metadataSubscriptionFailed, .blockTimeServiceFailed, .votingSubscriptionFailed: diff --git a/novawallet/Modules/Vote/Governance/Referendums/ReferendumsProtocols.swift b/novawallet/Modules/Vote/Governance/Referendums/ReferendumsProtocols.swift index e353c8558c..9e829c87ee 100644 --- a/novawallet/Modules/Vote/Governance/Referendums/ReferendumsProtocols.swift +++ b/novawallet/Modules/Vote/Governance/Referendums/ReferendumsProtocols.swift @@ -22,7 +22,7 @@ protocol ReferendumsInteractorInputProtocol: AnyObject { func saveSelected(option: GovernanceSelectedOption) func becomeOnline() func putOffline() - func refresh() + func refreshReferendums() func refreshUnlockSchedule(for tracksVoting: ReferendumTracksVotingDistribution, blockHash: Data?) func remakeSubscriptions() func retryBlockTime()