Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 48 additions & 0 deletions app/src/main/java/to/bitkit/services/MigrationService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ import to.bitkit.env.Env
import to.bitkit.models.BitcoinDisplayUnit
import to.bitkit.models.CoinSelectionPreference
import to.bitkit.models.PrimaryDisplay
import to.bitkit.models.Suggestion
import to.bitkit.models.TransactionSpeed
import to.bitkit.models.WidgetType
import to.bitkit.models.WidgetWithPosition
Expand Down Expand Up @@ -520,6 +521,24 @@ class MigrationService @Inject constructor(
}
}

@Suppress("TooGenericExceptionCaught")
private suspend fun extractRNTodos(mmkvData: Map<String, String>): RNTodos? {
val rootJson = mmkvData["persist:root"] ?: return null

return try {
val jsonStart = rootJson.indexOf("{")
val jsonString = if (jsonStart >= 0) rootJson.substring(jsonStart) else rootJson

val root = json.parseToJsonElement(jsonString).jsonObject
val todosJsonString = root["todos"]?.jsonPrimitive?.content ?: return null

json.decodeFromString<RNTodos>(todosJsonString)
} catch (e: Exception) {
Logger.error("Failed to decode RN todos: $e", e, context = TAG)
null
}
}

@Suppress("TooGenericExceptionCaught")
private suspend fun extractRNWidgets(mmkvData: Map<String, String>): RNWidgetsWithOptions? {
val rootJson = mmkvData["persist:root"] ?: return null
Expand Down Expand Up @@ -759,6 +778,26 @@ class MigrationService @Inject constructor(
}
}

private suspend fun applyRNTodos(todos: RNTodos) {
val mapping = mapOf(
"backupSeedPhrase" to Suggestion.BACK_UP,
"buyBitcoin" to Suggestion.BUY,
"lightning" to Suggestion.LIGHTNING,
"quickpay" to Suggestion.QUICK_PAY,
"shop" to Suggestion.SHOP,
"slashtagsProfile" to Suggestion.PROFILE,
"support" to Suggestion.SUPPORT,
"invite" to Suggestion.INVITE,
"pin" to Suggestion.SECURE,
)

todos.hide?.keys?.forEach { rnTodoType ->
mapping[rnTodoType]?.let { suggestion ->
settingsStore.addDismissedSuggestion(suggestion)
}
}
}

private suspend fun applyRNActivities(items: List<RNActivityItem>) {
val activities = items.filter { it.activityType == "lightning" }.map { item ->
val txType = if (item.txType == "sent") PaymentType.SENT else PaymentType.RECEIVED
Expand Down Expand Up @@ -1020,6 +1059,10 @@ class MigrationService @Inject constructor(
extractRNWidgets(mmkvData)?.let { widgets ->
applyRNWidgets(widgets)
}

extractRNTodos(mmkvData)?.let { todos ->
applyRNTodos(todos)
}
}

suspend fun hasRNRemoteBackup(): Boolean = runCatching {
Expand Down Expand Up @@ -1602,6 +1645,11 @@ data class RNMetadata(
val lastUsedTags: List<String>? = null,
)

@Serializable
data class RNTodos(
val hide: Map<String, Long>? = null,
)

@Serializable
data class RNActivityState(
val items: List<RNActivityItem>? = null,
Expand Down
Loading