@@ -6,18 +6,13 @@ import com.synonym.bitkitcore.ActivityFilter
66import com.synonym.bitkitcore.PaymentType
77import com.synonym.bitkitcore.SortDirection
88import kotlinx.coroutines.CoroutineDispatcher
9- import kotlinx.coroutines.CoroutineScope
10- import kotlinx.coroutines.SupervisorJob
119import kotlinx.coroutines.TimeoutCancellationException
1210import kotlinx.coroutines.flow.MutableStateFlow
1311import kotlinx.coroutines.flow.first
1412import kotlinx.coroutines.flow.map
15- import kotlinx.coroutines.launch
1613import kotlinx.coroutines.withContext
1714import kotlinx.coroutines.withTimeout
1815import org.lightningdevkit.ldknode.PaymentDetails
19- import org.lightningdevkit.ldknode.PaymentDirection
20- import org.lightningdevkit.ldknode.PaymentKind
2116import to.bitkit.data.AppDb
2217import to.bitkit.data.CacheStore
2318import 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