@@ -37,7 +37,7 @@ class DeriveBalanceStateUseCase @Inject constructor(
3737 val channels = lightningRepo.getChannels().orEmpty()
3838 val activeTransfers = transferRepo.activeTransfers.first()
3939
40- val paidOrdersSats = getOrderPaymentsSats(activeTransfers)
40+ val paidOrdersSats = getOrderPaymentsSats(activeTransfers, channels, balanceDetails )
4141 val pendingChannelsSats = getPendingChannelsSats(activeTransfers, channels, balanceDetails)
4242
4343 val toSavingsAmount = getTransferToSavingsSats(activeTransfers, channels, balanceDetails)
@@ -69,25 +69,41 @@ class DeriveBalanceStateUseCase @Inject constructor(
6969 }
7070 }
7171
72- private fun getOrderPaymentsSats (transfers : List <TransferEntity >): ULong {
73- return transfers
74- .filter { it.type.isToSpending() && it.lspOrderId != null }
75- .sumOf { it.amountSats.toULong() }
72+ private suspend fun getOrderPaymentsSats (
73+ transfers : List <TransferEntity >,
74+ channels : List <ChannelDetails >,
75+ balances : BalanceDetails ,
76+ ): ULong {
77+ var amount = 0uL
78+ val paidOrders = transfers.filter { it.type.isToSpending() && it.lspOrderId != null }
79+
80+ for (transfer in paidOrders) {
81+ val channelId = transferRepo.resolveChannelIdForTransfer(transfer, channels)
82+ val channelBalance = channelId?.let { id ->
83+ balances.lightningBalances.find { it.channelId() == id }
84+ }
85+ if (channelBalance == null ) {
86+ amount = amount.safe() + transfer.amountSats.toULong().safe()
87+ }
88+ }
89+
90+ return amount
7691 }
7792
78- private fun getPendingChannelsSats (
93+ private suspend fun getPendingChannelsSats (
7994 transfers : List <TransferEntity >,
8095 channels : List <ChannelDetails >,
8196 balances : BalanceDetails ,
8297 ): ULong {
8398 var amount = 0uL
84- val pendingTransfers = transfers.filter { it.type.isToSpending() && it.channelId != null }
99+ val pendingTransfers = transfers.filter { it.type.isToSpending() }
85100
86101 for (transfer in pendingTransfers) {
87- val channel = channels.find { it.channelId == transfer.channelId }
102+ val channelId = transferRepo.resolveChannelIdForTransfer(transfer, channels)
103+ val channel = channels.find { it.channelId == channelId }
88104 if (channel != null && ! channel.isChannelReady) {
89105 val channelBalance = balances.lightningBalances.find { it.channelId() == channel.channelId }
90- amount + = channelBalance?.amountSats() ? : 0u
106+ amount = amount.safe() + ( channelBalance?.amountSats() ? : 0uL ).safe()
91107 }
92108 }
93109
@@ -105,7 +121,7 @@ class DeriveBalanceStateUseCase @Inject constructor(
105121 for (transfer in toSavings) {
106122 val channelId = transferRepo.resolveChannelIdForTransfer(transfer, channels)
107123 val channelBalance = balanceDetails.lightningBalances.find { it.channelId() == channelId }
108- toSavingsAmount + = channelBalance?.amountSats() ? : 0u
124+ toSavingsAmount = toSavingsAmount.safe() + ( channelBalance?.amountSats() ? : 0uL ).safe()
109125 }
110126
111127 return toSavingsAmount
@@ -134,7 +150,7 @@ class DeriveBalanceStateUseCase @Inject constructor(
134150 for (transfer in transfers.filter { it.type == TransferType .COOP_CLOSE }) {
135151 val channelId = transferRepo.resolveChannelIdForTransfer(transfer, channels)
136152 val channelBalance = balanceDetails.lightningBalances.find { it.channelId() == channelId }
137- amount + = channelBalance?.amountSats() ? : 0u
153+ amount = amount.safe() + ( channelBalance?.amountSats() ? : 0uL ).safe()
138154 }
139155 return amount
140156 }
0 commit comments