Skip to content

Commit 4ecd67b

Browse files
committed
feat: integrate bitkit-core 0.1.27 minimally
1 parent ca35a69 commit 4ecd67b

File tree

6 files changed

+87
-41
lines changed

6 files changed

+87
-41
lines changed
Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,31 @@
11
package to.bitkit.ext
22

3-
import com.synonym.bitkitcore.ActivityTagsMetadata
3+
import com.synonym.bitkitcore.PreActivityMetadata
44
import to.bitkit.data.entities.TagMetadataEntity
55

6-
fun TagMetadataEntity.toActivityTagsMetadata() = ActivityTagsMetadata(
7-
id,
8-
paymentHash,
9-
txId,
10-
address,
11-
isReceive,
12-
tags,
13-
createdAt.toULong(),
6+
// TODO use PreActivityMetadata
7+
fun TagMetadataEntity.toActivityTagsMetadata() = PreActivityMetadata(
8+
paymentId = id,
9+
createdAt = createdAt.toULong(),
10+
tags = tags,
11+
paymentHash = paymentHash,
12+
txId = txId,
13+
address = address,
14+
isReceive = isReceive,
15+
feeRate = 0u,
16+
isTransfer = false,
17+
channelId = "",
1418
)
1519

16-
fun ActivityTagsMetadata.toTagMetadataEntity() = TagMetadataEntity(
17-
id,
18-
paymentHash,
19-
txId,
20-
address,
21-
isReceive,
22-
tags,
23-
createdAt.toLong(),
20+
fun PreActivityMetadata.toTagMetadataEntity() = TagMetadataEntity(
21+
id = paymentId,
22+
createdAt = createdAt.toLong(),
23+
tags = tags,
24+
paymentHash = paymentHash,
25+
txId = txId,
26+
address = address.orEmpty(),
27+
isReceive = isReceive,
28+
// feeRate = 0u,
29+
// isTransfer = false,
30+
// channelId = "",
2431
)

app/src/main/java/to/bitkit/models/BackupPayloads.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ package to.bitkit.models
22

33
import com.synonym.bitkitcore.Activity
44
import com.synonym.bitkitcore.ActivityTags
5-
import com.synonym.bitkitcore.ActivityTagsMetadata
65
import com.synonym.bitkitcore.ClosedChannelDetails
76
import com.synonym.bitkitcore.IBtInfo
87
import com.synonym.bitkitcore.IBtOrder
98
import com.synonym.bitkitcore.IcJitEntry
9+
import com.synonym.bitkitcore.PreActivityMetadata
1010
import kotlinx.serialization.Serializable
1111
import to.bitkit.data.AppCacheData
1212
import to.bitkit.data.entities.TransferEntity
@@ -22,7 +22,7 @@ data class WalletBackupV1(
2222
data class MetadataBackupV1(
2323
val version: Int = 1,
2424
val createdAt: Long,
25-
val tagMetadata: List<ActivityTagsMetadata>,
25+
val tagMetadata: List<PreActivityMetadata>,
2626
val cache: AppCacheData,
2727
)
2828

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

Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import com.synonym.bitkitcore.IcJitEntry
99
import com.synonym.bitkitcore.LightningActivity
1010
import com.synonym.bitkitcore.PaymentState
1111
import com.synonym.bitkitcore.PaymentType
12+
import com.synonym.bitkitcore.PreActivityMetadata
1213
import com.synonym.bitkitcore.SortDirection
1314
import kotlinx.coroutines.CoroutineDispatcher
1415
import kotlinx.coroutines.TimeoutCancellationException
@@ -628,14 +629,36 @@ class ActivityRepo @Inject constructor(
628629
/**
629630
* Get all [ActivityTags] for backup
630631
*/
631-
suspend fun getAllActivityTags(): Result<List<ActivityTags>> = withContext(bgDispatcher) {
632+
suspend fun getAllActivitiesTags(): Result<List<ActivityTags>> = withContext(bgDispatcher) {
632633
return@withContext runCatching {
633-
coreService.activity.getAllActivityTags()
634+
coreService.activity.getAllActivitiesTags()
634635
}.onFailure { e ->
635636
Logger.error("getAllActivityTags error", e, context = TAG)
636637
}
637638
}
638639

640+
/**
641+
* Get all [PreActivityMetadata] for backup
642+
*/
643+
suspend fun getAllPreActivityMetadata(): Result<List<PreActivityMetadata>> = withContext(bgDispatcher) {
644+
return@withContext runCatching {
645+
coreService.activity.getAllPreActivityMetadata()
646+
}.onFailure { e ->
647+
Logger.error("getAllPreActivityMetadata error", e, context = TAG)
648+
}
649+
}
650+
651+
/**
652+
* Upsert all [PreActivityMetadata]
653+
*/
654+
suspend fun upsertPreActivityMetadata(list: List<PreActivityMetadata>): Result<Unit> = withContext(bgDispatcher) {
655+
return@withContext runCatching {
656+
coreService.activity.upsertPreActivityMetadata(list)
657+
}.onFailure { e ->
658+
Logger.error("upsertPreActivityMetadata error", e, context = TAG)
659+
}
660+
}
661+
639662
suspend fun saveTagsMetadata(
640663
id: String,
641664
paymentHash: String? = null,
@@ -663,12 +686,19 @@ class ActivityRepo @Inject constructor(
663686
}
664687
}
665688

666-
suspend fun restoreFromBackup(backup: ActivityBackupV1): Result<Unit> = withContext(bgDispatcher) {
689+
suspend fun restoreFromBackup(payload: ActivityBackupV1): Result<Unit> = withContext(bgDispatcher) {
667690
return@withContext runCatching {
668-
coreService.activity.upsertList(backup.activities)
669-
coreService.activity.upsertTags(backup.activityTags)
670-
coreService.activity.upsertClosedChannelList(backup.closedChannels)
691+
coreService.activity.upsertList(payload.activities)
692+
coreService.activity.upsertTags(payload.activityTags)
693+
coreService.activity.upsertClosedChannelList(payload.closedChannels)
694+
}.onSuccess {
695+
Logger.debug(
696+
"Restored ${payload.activities.size} activities, ${payload.activityTags.size} activity tags, " +
697+
"${payload.closedChannels.size} closed channels",
698+
context = TAG,
699+
)
671700
}
701+
672702
}
673703

674704
// MARK: - Development/Testing Methods

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

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import kotlinx.coroutines.CoroutineDispatcher
66
import kotlinx.coroutines.CoroutineScope
77
import kotlinx.coroutines.Job
88
import kotlinx.coroutines.SupervisorJob
9+
import kotlinx.coroutines.currentCoroutineContext
910
import kotlinx.coroutines.delay
1011
import kotlinx.coroutines.flow.MutableStateFlow
1112
import kotlinx.coroutines.flow.StateFlow
@@ -15,6 +16,7 @@ import kotlinx.coroutines.flow.drop
1516
import kotlinx.coroutines.flow.first
1617
import kotlinx.coroutines.flow.map
1718
import kotlinx.coroutines.flow.update
19+
import kotlinx.coroutines.isActive
1820
import kotlinx.coroutines.launch
1921
import kotlinx.coroutines.withContext
2022
import kotlinx.datetime.Clock
@@ -190,6 +192,7 @@ class BackupRepo @Inject constructor(
190192
dataListenerJobs.add(tagMetadataJob)
191193

192194
// METADATA - Observe entire CacheStore excluding backup statuses
195+
// TODO use PreActivityMetadata
193196
val cacheMetadataJob = scope.launch {
194197
cacheStore.data
195198
.map { it.copy(backupStatuses = mapOf()) }
@@ -244,7 +247,7 @@ class BackupRepo @Inject constructor(
244247

245248
private fun startPeriodicBackupFailureCheck() {
246249
periodicCheckJob = scope.launch {
247-
while (true) {
250+
while (currentCoroutineContext().isActive) {
248251
delay(BACKUP_CHECK_INTERVAL)
249252
checkForFailedBackups()
250253
}
@@ -374,6 +377,8 @@ class BackupRepo @Inject constructor(
374377
BackupCategory.METADATA -> {
375378
val tagMetadata = db.tagMetadataDao().getAll().map { it.toActivityTagsMetadata() }
376379
val cacheData = cacheStore.data.first().copy(onchainAddress = "") // Force onchain address rotation
380+
// TODO use PreActivityMetadata
381+
// val preActivityMetadata = activityRepo.getAllPreActivityMetadata().getOrDefault(emptyList())
377382

378383
val payload = MetadataBackupV1(
379384
createdAt = currentTimeMillis(),
@@ -400,7 +405,7 @@ class BackupRepo @Inject constructor(
400405
BackupCategory.ACTIVITY -> {
401406
val activities = activityRepo.getActivities().getOrDefault(emptyList())
402407
val closedChannels = activityRepo.getClosedChannels().getOrDefault(emptyList())
403-
val activityTags = activityRepo.getAllActivityTags().getOrDefault(emptyList())
408+
val activityTags = activityRepo.getAllActivitiesTags().getOrDefault(emptyList())
404409

405410
val payload = ActivityBackupV1(
406411
createdAt = currentTimeMillis(),
@@ -430,9 +435,11 @@ class BackupRepo @Inject constructor(
430435
}
431436
Logger.debug("Restored caches: ${jsonLogOf(parsed.cache.copy(cachedRates = emptyList()))}", TAG)
432437
onCacheRestored()
438+
// TODO use PreActivityMetadata
439+
// activityRepo.upsertPreActivityMetadata(parsed.tagMetadata)
433440
val tagMetadata = parsed.tagMetadata.map { it.toTagMetadataEntity() }
434441
db.tagMetadataDao().upsert(tagMetadata)
435-
Logger.debug("Restored caches and ${tagMetadata.size} tags metadata records", TAG)
442+
Logger.debug("Restored caches, ${tagMetadata.size} pre-activity metadata", TAG)
436443
}
437444

438445
performRestore(BackupCategory.SETTINGS) { dataBytes ->
@@ -456,13 +463,7 @@ class BackupRepo @Inject constructor(
456463
}
457464
performRestore(BackupCategory.ACTIVITY) { dataBytes ->
458465
val parsed = json.decodeFromString<ActivityBackupV1>(String(dataBytes))
459-
activityRepo.restoreFromBackup(parsed).onSuccess {
460-
Logger.debug(
461-
"Restored ${parsed.activities.size} activities, ${parsed.activityTags.size} activity tags, " +
462-
"${parsed.closedChannels.size} closed channels",
463-
context = TAG,
464-
)
465-
}
466+
activityRepo.restoreFromBackup(parsed)
466467
}
467468

468469
Logger.info("Full restore success", context = TAG)

app/src/main/java/to/bitkit/services/CoreService.kt

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import com.synonym.bitkitcore.LightningActivity
1919
import com.synonym.bitkitcore.OnchainActivity
2020
import com.synonym.bitkitcore.PaymentState
2121
import com.synonym.bitkitcore.PaymentType
22+
import com.synonym.bitkitcore.PreActivityMetadata
2223
import com.synonym.bitkitcore.SortDirection
2324
import com.synonym.bitkitcore.WordCount
2425
import com.synonym.bitkitcore.addTags
@@ -29,7 +30,6 @@ import com.synonym.bitkitcore.estimateOrderFeeFull
2930
import com.synonym.bitkitcore.getActivities
3031
import com.synonym.bitkitcore.getActivityById
3132
import com.synonym.bitkitcore.getAllClosedChannels
32-
import com.synonym.bitkitcore.getAllTagMetadata
3333
import com.synonym.bitkitcore.getAllUniqueTags
3434
import com.synonym.bitkitcore.getCjitEntries
3535
import com.synonym.bitkitcore.getInfo
@@ -190,7 +190,7 @@ class CoreService @Inject constructor(
190190
private const val CHUNK_SIZE = 50
191191

192192
class ActivityService(
193-
private val coreService: CoreService,
193+
@Suppress("unused") private val coreService: CoreService, // used to ensure CoreService inits first
194194
private val cacheStore: CacheStore,
195195
) {
196196
suspend fun removeAll() {
@@ -296,8 +296,16 @@ class ActivityService(
296296
com.synonym.bitkitcore.upsertTags(activityTags)
297297
}
298298

299-
suspend fun getAllActivityTags(): List<ActivityTags> = ServiceQueue.CORE.background {
300-
getAllTagMetadata().map { ActivityTags(it.id, tags = it.tags) }
299+
suspend fun getAllActivitiesTags(): List<ActivityTags> = ServiceQueue.CORE.background {
300+
com.synonym.bitkitcore.getAllActivitiesTags()
301+
}
302+
303+
suspend fun getAllPreActivityMetadata(): List<PreActivityMetadata> = ServiceQueue.CORE.background {
304+
com.synonym.bitkitcore.getAllPreActivityMetadata()
305+
}
306+
307+
suspend fun upsertPreActivityMetadata(list: List<PreActivityMetadata>) = ServiceQueue.CORE.background {
308+
com.synonym.bitkitcore.upsertPreActivityMetadata(list)
301309
}
302310

303311
suspend fun upsertClosedChannelList(closedChannels: List<ClosedChannelDetails>) = ServiceQueue.CORE.background {
@@ -595,7 +603,7 @@ class ActivityService(
595603
// region Blocktank
596604

597605
class BlocktankService(
598-
private val coreService: CoreService,
606+
@Suppress("unused") private val coreService: CoreService, // used to ensure CoreService inits first
599607
private val lightningService: LightningService,
600608
) {
601609
suspend fun info(refresh: Boolean = true): IBtInfo? {

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ activity-compose = { module = "androidx.activity:activity-compose", version.ref
4444
appcompat = { module = "androidx.appcompat:appcompat", version.ref = "appcompat" }
4545
barcode-scanning = { module = "com.google.mlkit:barcode-scanning", version.ref = "barcodeScanning" }
4646
biometric = { module = "androidx.biometric:biometric", version.ref = "biometric" }
47-
bitkitcore = { module = "com.synonym:bitkit-core-android", version = "0.1.24" }
47+
bitkitcore = { module = "com.synonym:bitkit-core-android", version = "0.1.27" }
4848
bouncycastle-provider-jdk = { module = "org.bouncycastle:bcprov-jdk18on", version.ref = "bouncyCastle" }
4949
camera-camera2 = { module = "androidx.camera:camera-camera2", version.ref = "camera" }
5050
camera-lifecycle = { module = "androidx.camera:camera-lifecycle", version.ref = "camera" }

0 commit comments

Comments
 (0)