Skip to content

Commit 9e5b897

Browse files
committed
fix: get last activities instead of payments to reduce the amount of data
1 parent dc113fd commit 9e5b897

File tree

1 file changed

+18
-33
lines changed

1 file changed

+18
-33
lines changed

app/src/main/java/to/bitkit/repositories/ActivityRepo.kt

Lines changed: 18 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,13 @@ import com.synonym.bitkitcore.ActivityFilter
66
import com.synonym.bitkitcore.PaymentType
77
import com.synonym.bitkitcore.SortDirection
88
import kotlinx.coroutines.CoroutineDispatcher
9-
import kotlinx.coroutines.CoroutineScope
10-
import kotlinx.coroutines.SupervisorJob
119
import kotlinx.coroutines.TimeoutCancellationException
1210
import kotlinx.coroutines.flow.MutableStateFlow
1311
import kotlinx.coroutines.flow.first
1412
import kotlinx.coroutines.flow.map
15-
import kotlinx.coroutines.launch
1613
import kotlinx.coroutines.withContext
1714
import kotlinx.coroutines.withTimeout
1815
import org.lightningdevkit.ldknode.PaymentDetails
19-
import org.lightningdevkit.ldknode.PaymentDirection
20-
import org.lightningdevkit.ldknode.PaymentKind
2116
import to.bitkit.data.AppDb
2217
import to.bitkit.data.CacheStore
2318
import to.bitkit.data.dto.InProgressTransfer
@@ -47,7 +42,6 @@ class ActivityRepo @Inject constructor(
4742
private val addressChecker: AddressChecker,
4843
) {
4944
val isSyncingLdkNodePayments = MutableStateFlow(false)
50-
private val scope = CoroutineScope(bgDispatcher + SupervisorJob())
5145

5246
val inProgressTransfers = cacheStore.data.map { it.inProgressTransfers }
5347

@@ -66,13 +60,11 @@ class ActivityRepo @Inject constructor(
6660
return@withContext lightningRepo.getPayments()
6761
.onSuccess { payments ->
6862
Logger.debug("Got payments with success, syncing activities", context = TAG)
69-
val syncResult = syncLdkNodePayments(payments = payments).onFailure { e ->
63+
syncLdkNodePayments(payments = payments).onFailure { e ->
7064
return@withContext Result.failure(e)
7165
}
72-
scope.launch {
73-
syncResult.getOrNull()?.let { syncTagsMetaData(it) }
74-
}
7566
updateActivitiesMetadata()
67+
syncTagsMetaData()
7668
boostPendingActivities()
7769
updateInProgressTransfers()
7870
isSyncingLdkNodePayments.value = false
@@ -103,14 +95,9 @@ class ActivityRepo @Inject constructor(
10395
*/
10496
private suspend fun syncLdkNodePayments(
10597
payments: List<PaymentDetails>,
106-
): Result<List<PaymentDetails>> {
107-
// TODO Reduce getActivity calls
108-
val paymentsToAdd = payments.filter { payment -> coreService.activity.getActivity(payment.id) == null }
109-
val paymentsToUpdate = payments.filter { it !in paymentsToAdd }
98+
): Result<Unit> {
11099
return runCatching {
111100
coreService.activity.syncLdkNodePayments(payments)
112-
Logger.debug("syncLdkNodePayments added ${paymentsToAdd.count()}, updated ${paymentsToUpdate.count()}")
113-
paymentsToAdd
114101
}.onFailure { e ->
115102
Logger.error("Error syncing LDK payment:", e, context = TAG)
116103
}
@@ -336,15 +323,15 @@ class ActivityRepo @Inject constructor(
336323
}
337324

338325
private suspend fun syncTagsMetaData(
339-
newPayments: List<PaymentDetails>,
340326
) = withContext(context = bgDispatcher) {
341327
runCatching {
342328
if (db.tagMetadataDao().getAll().isEmpty()) return@withContext
329+
val lastActivities = getActivities(limit = 10u).getOrNull() ?: return@withContext
343330
Logger.debug("syncTagsMetaData called")
344-
newPayments.forEach { payment ->
345-
when (val kind = payment.kind) {
346-
is PaymentKind.Bolt11 -> {
347-
val paymentHash = kind.hash
331+
lastActivities.forEach { activity ->
332+
when (activity) {
333+
is Activity.Lightning -> {
334+
val paymentHash = activity.rawId()
348335
db.tagMetadataDao().searchByPaymentHash(paymentHash = paymentHash)?.let { tagMetadata ->
349336
Logger.debug("Tags metadata found! $tagMetadata", context = TAG)
350337
addTagsToTransaction(
@@ -359,12 +346,12 @@ class ActivityRepo @Inject constructor(
359346
}
360347
}
361348

362-
is PaymentKind.Onchain -> {
363-
when (payment.direction) {
364-
PaymentDirection.INBOUND -> {
349+
is Onchain -> {
350+
when (activity.v1.txType) {
351+
PaymentType.RECEIVED -> {
365352
// TODO Temporary solution while whe ldk-node doesn't return the address directly
366-
Logger.debug("Fetching data for txId: ${kind.txid}", context = TAG)
367-
runCatching { addressChecker.getTransaction(kind.txid) }.onSuccess { txDetails ->
353+
Logger.debug("Fetching data for txId: ${activity.v1.txId}", context = TAG)
354+
runCatching { addressChecker.getTransaction(activity.v1.txId) }.onSuccess { txDetails ->
368355
Logger.debug("Tx detail fetched with success: $txDetails", context = TAG)
369356
txDetails.vout.forEach { vOut ->
370357
vOut.scriptpubkey_address?.let {
@@ -379,7 +366,7 @@ class ActivityRepo @Inject constructor(
379366
tags = tagMetadata.tags
380367
).onSuccess {
381368
Logger.debug("Tags synced with success! $tagMetadata", context = TAG)
382-
db.tagMetadataDao().deleteByTxId(kind.txid)
369+
db.tagMetadataDao().deleteByTxId(activity.v1.txId)
383370
}
384371
}
385372
}
@@ -388,23 +375,21 @@ class ActivityRepo @Inject constructor(
388375
}
389376
}
390377

391-
PaymentDirection.OUTBOUND -> {
392-
db.tagMetadataDao().searchByTxId(kind.txid)?.let { tagMetadata ->
378+
PaymentType.SENT -> {
379+
db.tagMetadataDao().searchByTxId(activity.v1.txId)?.let { tagMetadata ->
393380
addTagsToTransaction(
394-
paymentHashOrTxId = kind.txid,
381+
paymentHashOrTxId = activity.v1.txId,
395382
type = ActivityFilter.ONCHAIN,
396383
txType = PaymentType.SENT,
397384
tags = tagMetadata.tags
398385
).onSuccess {
399386
Logger.debug("Tags synced with success! $tagMetadata", context = TAG)
400-
db.tagMetadataDao().deleteByTxId(kind.txid)
387+
db.tagMetadataDao().deleteByTxId(activity.v1.txId)
401388
}
402389
}
403390
}
404391
}
405392
}
406-
407-
else -> Unit
408393
}
409394
}
410395
}

0 commit comments

Comments
 (0)