mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2025-09-29 13:52:53 +02:00
add support for add/remove public bookmarks
This commit is contained in:
@@ -1381,6 +1381,54 @@ class Account(
|
|||||||
LocalCache.consume(event)
|
LocalCache.consume(event)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun addPublicBookmark(note: Note, decryptedContent: String): BookmarkListEvent? {
|
||||||
|
val bookmarks = userProfile().latestBookmarkList
|
||||||
|
|
||||||
|
val privTags = mutableListOf<List<String>>()
|
||||||
|
|
||||||
|
val privEvents = bookmarks?.privateTaggedEvents(decryptedContent) ?: emptyList()
|
||||||
|
val privUsers = bookmarks?.privateTaggedUsers(decryptedContent) ?: emptyList()
|
||||||
|
val privAddresses = bookmarks?.privateTaggedAddresses(decryptedContent) ?: emptyList()
|
||||||
|
|
||||||
|
privEvents.forEach {
|
||||||
|
privTags.add(listOf("e", it))
|
||||||
|
}
|
||||||
|
privUsers.forEach {
|
||||||
|
privTags.add(listOf("p", it))
|
||||||
|
}
|
||||||
|
privAddresses.forEach {
|
||||||
|
privTags.add(listOf("a", it.toTag()))
|
||||||
|
}
|
||||||
|
val msg = Event.mapper.writeValueAsString(privTags)
|
||||||
|
|
||||||
|
AmberUtils.encryptBookmark(msg, keyPair.pubKey.toHexKey())
|
||||||
|
|
||||||
|
if (AmberUtils.content.isBlank()) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
val event = if (note is AddressableNote) {
|
||||||
|
BookmarkListEvent.create(
|
||||||
|
"bookmark",
|
||||||
|
bookmarks?.taggedEvents() ?: emptyList(),
|
||||||
|
bookmarks?.taggedUsers() ?: emptyList(),
|
||||||
|
bookmarks?.taggedAddresses()?.plus(note.address) ?: listOf(note.address),
|
||||||
|
AmberUtils.content,
|
||||||
|
keyPair.pubKey.toHexKey()
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
BookmarkListEvent.create(
|
||||||
|
"bookmark",
|
||||||
|
bookmarks?.taggedEvents()?.plus(note.idHex) ?: listOf(note.idHex),
|
||||||
|
bookmarks?.taggedUsers() ?: emptyList(),
|
||||||
|
bookmarks?.taggedAddresses() ?: emptyList(),
|
||||||
|
AmberUtils.content,
|
||||||
|
keyPair.pubKey.toHexKey()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
return event
|
||||||
|
}
|
||||||
|
|
||||||
fun addPublicBookmark(note: Note) {
|
fun addPublicBookmark(note: Note) {
|
||||||
if (!isWriteable()) return
|
if (!isWriteable()) return
|
||||||
|
|
||||||
@@ -1498,6 +1546,55 @@ class Account(
|
|||||||
LocalCache.consume(event)
|
LocalCache.consume(event)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun removePublicBookmark(note: Note, decryptedContent: String): BookmarkListEvent? {
|
||||||
|
val bookmarks = userProfile().latestBookmarkList
|
||||||
|
|
||||||
|
val privTags = mutableListOf<List<String>>()
|
||||||
|
|
||||||
|
val privEvents = bookmarks?.privateTaggedEvents(decryptedContent) ?: emptyList()
|
||||||
|
val privUsers = bookmarks?.privateTaggedUsers(decryptedContent) ?: emptyList()
|
||||||
|
val privAddresses = bookmarks?.privateTaggedAddresses(decryptedContent) ?: emptyList()
|
||||||
|
|
||||||
|
privEvents.forEach {
|
||||||
|
privTags.add(listOf("e", it))
|
||||||
|
}
|
||||||
|
privUsers.forEach {
|
||||||
|
privTags.add(listOf("p", it))
|
||||||
|
}
|
||||||
|
privAddresses.forEach {
|
||||||
|
privTags.add(listOf("a", it.toTag()))
|
||||||
|
}
|
||||||
|
val msg = Event.mapper.writeValueAsString(privTags)
|
||||||
|
|
||||||
|
AmberUtils.encryptBookmark(msg, keyPair.pubKey.toHexKey())
|
||||||
|
|
||||||
|
if (AmberUtils.content.isBlank()) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
val event = if (note is AddressableNote) {
|
||||||
|
BookmarkListEvent.create(
|
||||||
|
"bookmark",
|
||||||
|
bookmarks?.taggedEvents() ?: emptyList(),
|
||||||
|
bookmarks?.taggedUsers() ?: emptyList(),
|
||||||
|
bookmarks?.taggedAddresses()?.minus(note.address),
|
||||||
|
AmberUtils.content,
|
||||||
|
keyPair.pubKey.toHexKey()
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
BookmarkListEvent.create(
|
||||||
|
"bookmark",
|
||||||
|
bookmarks?.taggedEvents()?.minus(note.idHex),
|
||||||
|
bookmarks?.taggedUsers() ?: emptyList(),
|
||||||
|
bookmarks?.taggedAddresses() ?: emptyList(),
|
||||||
|
AmberUtils.content,
|
||||||
|
keyPair.pubKey.toHexKey()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
return event
|
||||||
|
}
|
||||||
|
|
||||||
fun isInPrivateBookmarks(note: Note): Boolean {
|
fun isInPrivateBookmarks(note: Note): Boolean {
|
||||||
if (!isWriteable() && !loginWithAmber) return false
|
if (!isWriteable() && !loginWithAmber) return false
|
||||||
|
|
||||||
@@ -1521,7 +1618,7 @@ class Account(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun isInPublicBookmarks(note: Note): Boolean {
|
fun isInPublicBookmarks(note: Note): Boolean {
|
||||||
if (!isWriteable()) return false
|
if (!isWriteable() && !loginWithAmber) return false
|
||||||
|
|
||||||
if (note is AddressableNote) {
|
if (note is AddressableNote) {
|
||||||
return userProfile().latestBookmarkList?.taggedAddresses()?.contains(note.address) == true
|
return userProfile().latestBookmarkList?.taggedAddresses()?.contains(note.address) == true
|
||||||
|
@@ -517,11 +517,53 @@ fun NoteDropDownMenu(note: Note, popupExpanded: MutableState<Boolean>, accountVi
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (state.isPublicBookmarkNote) {
|
if (state.isPublicBookmarkNote) {
|
||||||
DropdownMenuItem(onClick = { scope.launch(Dispatchers.IO) { accountViewModel.removePublicBookmark(note); onDismiss() } }) {
|
DropdownMenuItem(
|
||||||
|
onClick = {
|
||||||
|
scope.launch(Dispatchers.IO) {
|
||||||
|
if (accountViewModel.loggedInWithAmber()) {
|
||||||
|
val bookmarks = accountViewModel.userProfile().latestBookmarkList
|
||||||
|
AmberUtils.decryptBookmark(
|
||||||
|
bookmarks?.content ?: "",
|
||||||
|
accountViewModel.account.keyPair.pubKey.toHexKey()
|
||||||
|
)
|
||||||
|
bookmarks?.decryptedContent = AmberUtils.content
|
||||||
|
AmberUtils.content = ""
|
||||||
|
event = accountViewModel.removePublicBookmark(
|
||||||
|
note,
|
||||||
|
bookmarks?.decryptedContent ?: ""
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
accountViewModel.removePublicBookmark(note)
|
||||||
|
onDismiss()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
) {
|
||||||
Text(stringResource(R.string.remove_from_public_bookmarks))
|
Text(stringResource(R.string.remove_from_public_bookmarks))
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
DropdownMenuItem(onClick = { scope.launch(Dispatchers.IO) { accountViewModel.addPublicBookmark(note); onDismiss() } }) {
|
DropdownMenuItem(
|
||||||
|
onClick = {
|
||||||
|
scope.launch(Dispatchers.IO) {
|
||||||
|
if (accountViewModel.loggedInWithAmber()) {
|
||||||
|
val bookmarks = accountViewModel.userProfile().latestBookmarkList
|
||||||
|
AmberUtils.decryptBookmark(
|
||||||
|
bookmarks?.content ?: "",
|
||||||
|
accountViewModel.account.keyPair.pubKey.toHexKey()
|
||||||
|
)
|
||||||
|
bookmarks?.decryptedContent = AmberUtils.content
|
||||||
|
AmberUtils.content = ""
|
||||||
|
event = accountViewModel.addPublicBookmark(
|
||||||
|
note,
|
||||||
|
bookmarks?.decryptedContent ?: ""
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
accountViewModel.addPublicBookmark(note)
|
||||||
|
onDismiss()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
) {
|
||||||
Text(stringResource(R.string.add_to_public_bookmarks))
|
Text(stringResource(R.string.add_to_public_bookmarks))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -315,6 +315,14 @@ class AccountViewModel(val account: Account) : ViewModel() {
|
|||||||
return account.addPrivateBookmark(note, decryptedContent)
|
return account.addPrivateBookmark(note, decryptedContent)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun addPublicBookmark(note: Note, decryptedContent: String): BookmarkListEvent? {
|
||||||
|
return account.addPublicBookmark(note, decryptedContent)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun removePublicBookmark(note: Note, decryptedContent: String): BookmarkListEvent? {
|
||||||
|
return account.removePublicBookmark(note, decryptedContent)
|
||||||
|
}
|
||||||
|
|
||||||
fun addPublicBookmark(note: Note) {
|
fun addPublicBookmark(note: Note) {
|
||||||
account.addPublicBookmark(note)
|
account.addPublicBookmark(note)
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user