From 04addc4cbabe47423fc5cc76855edf7fec4bfc38 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Sun, 10 Dec 2023 21:27:47 -0500 Subject: [PATCH] Adds support for the FileServers kind --- .../vitorpamplona/amethyst/model/Account.kt | 15 +++++++ .../amethyst/model/LocalCache.kt | 3 ++ .../quartz/events/EventFactory.kt | 1 + .../quartz/events/FileServersEvent.kt | 43 +++++++++++++++++++ 4 files changed, 62 insertions(+) create mode 100644 quartz/src/main/java/com/vitorpamplona/quartz/events/FileServersEvent.kt 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 41593a595..ba1309fa7 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt @@ -40,6 +40,7 @@ import com.vitorpamplona.quartz.events.EmojiPackSelectionEvent import com.vitorpamplona.quartz.events.EmojiUrl import com.vitorpamplona.quartz.events.Event import com.vitorpamplona.quartz.events.FileHeaderEvent +import com.vitorpamplona.quartz.events.FileServersEvent import com.vitorpamplona.quartz.events.FileStorageEvent import com.vitorpamplona.quartz.events.FileStorageHeaderEvent import com.vitorpamplona.quartz.events.GeneralListEvent @@ -1610,6 +1611,16 @@ class Account( return LocalCache.getOrCreateAddressableNote(aTag) } + fun getFileServersNote(): AddressableNote { + val aTag = ATag( + FileServersEvent.kind, + userProfile().pubkeyHex, + "", + null + ) + return LocalCache.getOrCreateAddressableNote(aTag) + } + fun getBlockList(): PeopleListEvent? { return getBlockListNote().event as? PeopleListEvent } @@ -1618,6 +1629,10 @@ class Account( return getMuteListNote().event as? MuteListEvent } + fun getFileServersList(): FileServersEvent? { + return getFileServersNote().event as? FileServersEvent + } + fun hideWord(word: String) { val muteList = getMuteList() 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 d0c7453c4..abecb858f 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/LocalCache.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/LocalCache.kt @@ -44,6 +44,7 @@ import com.vitorpamplona.quartz.events.EmojiPackEvent import com.vitorpamplona.quartz.events.EmojiPackSelectionEvent import com.vitorpamplona.quartz.events.Event import com.vitorpamplona.quartz.events.FileHeaderEvent +import com.vitorpamplona.quartz.events.FileServersEvent import com.vitorpamplona.quartz.events.FileStorageEvent import com.vitorpamplona.quartz.events.FileStorageHeaderEvent import com.vitorpamplona.quartz.events.GenericRepostEvent @@ -427,6 +428,7 @@ object LocalCache { } fun consume(event: MuteListEvent, relay: Relay?) { consumeBaseReplaceable(event, relay) } + fun consume(event: FileServersEvent, relay: Relay?) { consumeBaseReplaceable(event, relay) } fun consume(event: PeopleListEvent, relay: Relay?) { consumeBaseReplaceable(event, relay) } private fun consume(event: AdvertisedRelayListEvent, relay: Relay?) { consumeBaseReplaceable(event, relay) } private fun consume(event: CommunityDefinitionEvent, relay: Relay?) { consumeBaseReplaceable(event, relay) } @@ -1548,6 +1550,7 @@ object LocalCache { is SealedGossipEvent -> consume(event, relay) is FileHeaderEvent -> consume(event, relay) + is FileServersEvent -> consume(event, relay) is FileStorageEvent -> consume(event, relay) is FileStorageHeaderEvent -> consume(event, relay) is GiftWrapEvent -> consume(event, relay) diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/EventFactory.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/EventFactory.kt index f490b4fec..80a05e6a5 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/EventFactory.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/EventFactory.kt @@ -51,6 +51,7 @@ class EventFactory { SealedGossipEvent.kind -> SealedGossipEvent(id, pubKey, createdAt, tags, content, sig) FileHeaderEvent.kind -> FileHeaderEvent(id, pubKey, createdAt, tags, content, sig) + FileServersEvent.kind -> FileServersEvent(id, pubKey, createdAt, tags, content, sig) FileStorageEvent.kind -> FileStorageEvent(id, pubKey, createdAt, tags, content, sig) FileStorageHeaderEvent.kind -> FileStorageHeaderEvent(id, pubKey, createdAt, tags, content, sig) GenericRepostEvent.kind -> GenericRepostEvent(id, pubKey, createdAt, tags, content, sig) diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/FileServersEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/FileServersEvent.kt new file mode 100644 index 000000000..9f5480dda --- /dev/null +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/FileServersEvent.kt @@ -0,0 +1,43 @@ +package com.vitorpamplona.quartz.events + +import androidx.compose.runtime.Immutable +import com.vitorpamplona.quartz.utils.TimeUtils +import com.vitorpamplona.quartz.encoders.toHexKey +import com.vitorpamplona.quartz.crypto.CryptoUtils +import com.vitorpamplona.quartz.crypto.KeyPair +import com.vitorpamplona.quartz.encoders.ATag +import com.vitorpamplona.quartz.encoders.HexKey +import com.vitorpamplona.quartz.signers.NostrSigner + +@Immutable +class FileServersEvent( + id: HexKey, + pubKey: HexKey, + createdAt: Long, + tags: Array>, + content: String, + sig: HexKey +) : BaseAddressableEvent(id, pubKey, createdAt, kind, tags, content, sig) { + override fun dTag() = fixedDTag + + companion object { + const val kind = 10096 + const val fixedDTag = "" + + fun create( + listOfServers: List, + signer: NostrSigner, + createdAt: Long = TimeUtils.now(), + onReady: (FileServersEvent) -> Unit + ) { + val msg = "" + val tags = mutableListOf>() + + listOfServers.forEach { + tags.add(arrayOf("server", it)) + } + + signer.sign(createdAt, kind, tags.toTypedArray(), msg, onReady) + } + } +}