diff --git a/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt b/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt index f8ae34926..3ded4fd14 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt @@ -1346,6 +1346,7 @@ class Account( Client.send(draftEvent, relayList = relayList) LocalCache.justConsume(draftEvent, null) LocalCache.justConsume(it, null) + LocalCache.addDraft(draftTag, it.id()) } } else { Client.send(it, relayList = relayList) @@ -1407,6 +1408,7 @@ class Account( Client.send(draftEvent, relayList = relayList) LocalCache.justConsume(draftEvent, null) LocalCache.justConsume(it, null) + LocalCache.addDraft(draftTag, it.id()) } } else { Client.send(it, relayList = relayList) @@ -1474,6 +1476,7 @@ class Account( Client.send(draftEvent, relayList = relayList) LocalCache.justConsume(draftEvent, null) LocalCache.justConsume(it, null) + LocalCache.addDraft(draftTag, it.id()) } } else { Client.send(it, relayList = relayList) @@ -1564,6 +1567,7 @@ class Account( Client.send(draftEvent, relayList = relayList) LocalCache.justConsume(draftEvent, null) LocalCache.justConsume(it, null) + LocalCache.addDraft(draftTag, it.id()) } } else { Client.send(it, relayList = relayList) @@ -1615,6 +1619,7 @@ class Account( Client.send(draftEvent) LocalCache.justConsume(draftEvent, null) LocalCache.justConsume(it, null) + LocalCache.addDraft(draftTag, it.id()) } } else { Client.send(it) @@ -1659,6 +1664,7 @@ class Account( Client.send(draftEvent) LocalCache.justConsume(draftEvent, null) LocalCache.justConsume(it, null) + LocalCache.addDraft(draftTag, it.id()) } } else { Client.send(it) @@ -1730,6 +1736,7 @@ class Account( Client.send(draftEvent) LocalCache.justConsume(draftEvent, null) LocalCache.justConsume(it, null) + LocalCache.addDraft(draftTag, it.id()) } } else { Client.send(it) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/model/LocalCache.kt b/app/src/main/java/com/vitorpamplona/amethyst/model/LocalCache.kt index b85500186..ccde9523a 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/LocalCache.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/LocalCache.kt @@ -129,7 +129,7 @@ object LocalCache { val users = LargeCache() val notes = LargeCache() val addressables = LargeCache() - + val drafts = ConcurrentHashMap>() val channels = ConcurrentHashMap() val awaitingPaymentRequests = ConcurrentHashMap Unit>>(10) @@ -143,11 +143,18 @@ object LocalCache { } fun draftNotes(draftTag: String): List { - return notes.filter { _, it -> - it.event?.tags()?.filter { it.size > 1 && it[0] == "d" }?.map { - it[1] - }?.firstOrNull() == draftTag - } + return drafts[draftTag]?.mapNotNull { + checkGetOrCreateNote(it) + } ?: listOf() + } + + fun addDraft( + key: String, + value: String, + ) { + val data = drafts[key] ?: mutableListOf() + data.add(value) + drafts[key] = data } fun getOrCreateUser(key: HexKey): User { diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrAccountDataSource.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrAccountDataSource.kt index f0067ed74..9afedce15 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrAccountDataSource.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrAccountDataSource.kt @@ -276,11 +276,20 @@ object NostrAccountDataSource : NostrDataSource("AccountData") { when (event) { is DraftEvent -> { // Avoid decrypting over and over again if the event already exist. + val note = LocalCache.getNoteIfExists(event.id) if (note != null && relay.brief in note.relays) return event.plainContent(account.signer) { + val tag = + event.tags().filter { it.size > 1 && it[0] == "d" }.map { + it[1] + }.firstOrNull() + LocalCache.justConsume(it, relay) + tag?.let { lTag -> + LocalCache.addDraft(lTag, it.id()) + } } } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostViewModel.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostViewModel.kt index 38fc5862a..8c5a03ae5 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostViewModel.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostViewModel.kt @@ -83,7 +83,7 @@ enum class UserSuggestionAnchor { @Stable open class NewPostViewModel() : ViewModel() { - var draftTag: String = UUID.randomUUID().toString() + private var draftTag: String = UUID.randomUUID().toString() var accountViewModel: AccountViewModel? = null var account: Account? = null var requiresNIP24: Boolean = false @@ -309,7 +309,9 @@ open class NewPostViewModel() : ViewModel() { draft: Note, accountViewModel: AccountViewModel, ) { - Log.d("draft", draft.event?.toJson().toString()) + draftTag = LocalCache.drafts.filter { + it.value.contains(draft.idHex) + }.keys.firstOrNull() ?: draftTag canAddInvoice = accountViewModel.userProfile().info?.lnAddress() != null canAddZapRaiser = accountViewModel.userProfile().info?.lnAddress() != null