diff --git a/feature-staking-impl/src/main/java/io/novafoundation/nova/feature_staking_impl/data/dashboard/network/updaters/StakingDashboardUpdateSystem.kt b/feature-staking-impl/src/main/java/io/novafoundation/nova/feature_staking_impl/data/dashboard/network/updaters/StakingDashboardUpdateSystem.kt index 69f8db8..e4d663c 100644 --- a/feature-staking-impl/src/main/java/io/novafoundation/nova/feature_staking_impl/data/dashboard/network/updaters/StakingDashboardUpdateSystem.kt +++ b/feature-staking-impl/src/main/java/io/novafoundation/nova/feature_staking_impl/data/dashboard/network/updaters/StakingDashboardUpdateSystem.kt @@ -90,8 +90,8 @@ class RealStakingDashboardUpdateSystem( sharedRequestsBuilder.subscribe(accountScope) chainUpdates.mergeIfMultiple() - }.catch { - Log.d("StakingDashboardUpdateSystem", "Failed to sync staking dashboard status for ${stakingChain.name}") + }.catch { error -> + Log.e("StakingDashboardUpdateSystem", "Failed to sync staking dashboard status for ${stakingChain.name}", error) } } diff --git a/feature-staking-impl/src/main/java/io/novafoundation/nova/feature_staking_impl/domain/dashboard/RealStakingDashboardInteractor.kt b/feature-staking-impl/src/main/java/io/novafoundation/nova/feature_staking_impl/domain/dashboard/RealStakingDashboardInteractor.kt index 55fd1ff..ffc403c 100644 --- a/feature-staking-impl/src/main/java/io/novafoundation/nova/feature_staking_impl/domain/dashboard/RealStakingDashboardInteractor.kt +++ b/feature-staking-impl/src/main/java/io/novafoundation/nova/feature_staking_impl/domain/dashboard/RealStakingDashboardInteractor.kt @@ -2,6 +2,7 @@ package io.novafoundation.nova.feature_staking_impl.domain.dashboard +import android.util.Log import io.novafoundation.nova.common.domain.ExtendedLoadingState import io.novafoundation.nova.common.domain.asLoaded import io.novafoundation.nova.common.domain.dataOrNull @@ -224,9 +225,13 @@ class RealStakingDashboardInteractor( noPriceStakingDashboard: NoPriceStakingDashboard, assets: Map, ): ExtendedLoadingState { - val hasStakeOptions = noPriceStakingDashboard.hasStake.map { addPriceToHasStakeItem(it, assets) } - val noStakeOptions = noPriceStakingDashboard.noStake.map { addAssetInfoToNoStakeItem(it, assets) } - val notYetResolvedOptions = noPriceStakingDashboard.notYetResolved.map { addAssetInfoToNotYetResolvedItem(it, assets) } + Log.d("StakingDashboard", "addPricesToDashboard: hasStake=${noPriceStakingDashboard.hasStake.size}, " + + "noStake=${noPriceStakingDashboard.noStake.size}, notYetResolved=${noPriceStakingDashboard.notYetResolved.size}, " + + "assets=${assets.size}") + + val hasStakeOptions = noPriceStakingDashboard.hasStake.mapNotNull { addPriceToHasStakeItem(it, assets) } + val noStakeOptions = noPriceStakingDashboard.noStake.mapNotNull { addAssetInfoToNoStakeItem(it, assets) } + val notYetResolvedOptions = noPriceStakingDashboard.notYetResolved.mapNotNull { addAssetInfoToNotYetResolvedItem(it, assets) } return StakingDashboard( hasStake = hasStakeOptions.sortedByChain(), @@ -239,8 +244,8 @@ class RealStakingDashboardInteractor( assets: Map, stakingDApps: ExtendedLoadingState>, ): MoreStakingOptions { - val noStakeOptions = noPriceMoreStakingOptions.noStake.map { addAssetInfoToNoStakeItem(it, assets) } - val notYetResolvedOptions = noPriceMoreStakingOptions.notYetResolved.map { addAssetInfoToNotYetResolvedItem(it, assets) } + val noStakeOptions = noPriceMoreStakingOptions.noStake.mapNotNull { addAssetInfoToNoStakeItem(it, assets) } + val notYetResolvedOptions = noPriceMoreStakingOptions.notYetResolved.mapNotNull { addAssetInfoToNotYetResolvedItem(it, assets) } return MoreStakingOptions( inAppStaking = (noStakeOptions + notYetResolvedOptions).sortedByChain(), @@ -251,10 +256,16 @@ class RealStakingDashboardInteractor( private fun addPriceToHasStakeItem( item: NoPriceStakingDashboardOption, assets: Map, - ): AggregatedStakingDashboardOption { + ): AggregatedStakingDashboardOption? { + val asset = assets[item.chainAsset.fullId] + if (asset == null) { + Log.w("StakingDashboard", "Missing asset for hasStake: chain=${item.chain.name}, asset=${item.chainAsset.symbol} (${item.chainAsset.fullId})") + return null + } + return AggregatedStakingDashboardOption( chain = item.chain, - token = assets.getValue(item.chainAsset.fullId).token, + token = asset.token, stakingState = item.stakingState, syncingStage = item.syncingStage ) @@ -263,8 +274,12 @@ class RealStakingDashboardInteractor( private fun addAssetInfoToNoStakeItem( item: NoPriceStakingDashboardOption, assets: Map, - ): AggregatedStakingDashboardOption { - val asset = assets.getValue(item.chainAsset.fullId) + ): AggregatedStakingDashboardOption? { + val asset = assets[item.chainAsset.fullId] + if (asset == null) { + Log.w("StakingDashboard", "Missing asset for noStake: chain=${item.chain.name}, asset=${item.chainAsset.symbol} (${item.chainAsset.fullId})") + return null + } return AggregatedStakingDashboardOption( chain = item.chain, @@ -281,8 +296,12 @@ class RealStakingDashboardInteractor( private fun addAssetInfoToNotYetResolvedItem( item: NoPriceStakingDashboardOption, assets: Map, - ): AggregatedStakingDashboardOption { - val asset = assets.getValue(item.chainAsset.fullId) + ): AggregatedStakingDashboardOption? { + val asset = assets[item.chainAsset.fullId] + if (asset == null) { + Log.w("StakingDashboard", "Missing asset for notYetResolved: chain=${item.chain.name}, asset=${item.chainAsset.symbol} (${item.chainAsset.fullId})") + return null + } return AggregatedStakingDashboardOption( chain = item.chain,