From 3bc12ca344f1e2f4d91e7294eaf95ce8878fe8f9 Mon Sep 17 00:00:00 2001 From: Kgothatso Ngako Date: Fri, 17 Jul 2026 01:02:29 +0200 Subject: [PATCH] Add tag builders --- .../compose/database/model/MantraArtifact.kt | 8 +++++++- .../database/model/MantraArtifactVersion.kt | 6 +++++- .../compose/database/model/MantraChapter.kt | 7 ++++++- .../compose/database/model/MantraChunk.kt | 6 +++++- .../database/model/MantraTranslation.kt | 12 ++++++++++- .../model/MantraTranslationArtifactVersion.kt | 13 +++++++++++- .../MantraTranslationArtifactVersionEditor.kt | 14 ++++++++++++- .../model/MantraTranslationChapter.kt | 12 ++++++++++- .../MantraTranslationChapterProofReader.kt | 12 ++++++++++- .../MantraTranslationChapterTranslator.kt | 12 ++++++++++- .../database/model/MantraTranslationChunk.kt | 16 ++++++++++++--- .../model/MantraTranslationTranslator.kt | 12 ++++++++++- .../nostr/nip30303/tags/ArtifactIdTag.kt | 20 +++++++++++++++++++ .../nip30303/tags/ArtifactVersionIdTag.kt | 20 +++++++++++++++++++ .../nostr/nip30303/tags/ChapterIdTag.kt | 20 +++++++++++++++++++ .../compose/nostr/nip30303/tags/ChunkIdTag.kt | 20 +++++++++++++++++++ .../nostr/nip30303/tags/DialectIdTag.kt | 20 +++++++++++++++++++ .../tags/TranslationArtifactVersionIdTag.kt | 20 +++++++++++++++++++ .../nip30303/tags/TranslationChapterIdTag.kt | 20 +++++++++++++++++++ .../nip30303/tags/TranslationChunkIdTag.kt | 20 +++++++++++++++++++ .../nostr/nip30303/tags/TranslationIdTag.kt | 20 +++++++++++++++++++ 21 files changed, 296 insertions(+), 14 deletions(-) create mode 100644 composeApp/src/commonMain/kotlin/press/mantra/compose/nostr/nip30303/tags/ArtifactIdTag.kt create mode 100644 composeApp/src/commonMain/kotlin/press/mantra/compose/nostr/nip30303/tags/ArtifactVersionIdTag.kt create mode 100644 composeApp/src/commonMain/kotlin/press/mantra/compose/nostr/nip30303/tags/ChapterIdTag.kt create mode 100644 composeApp/src/commonMain/kotlin/press/mantra/compose/nostr/nip30303/tags/ChunkIdTag.kt create mode 100644 composeApp/src/commonMain/kotlin/press/mantra/compose/nostr/nip30303/tags/DialectIdTag.kt create mode 100644 composeApp/src/commonMain/kotlin/press/mantra/compose/nostr/nip30303/tags/TranslationArtifactVersionIdTag.kt create mode 100644 composeApp/src/commonMain/kotlin/press/mantra/compose/nostr/nip30303/tags/TranslationChapterIdTag.kt create mode 100644 composeApp/src/commonMain/kotlin/press/mantra/compose/nostr/nip30303/tags/TranslationChunkIdTag.kt create mode 100644 composeApp/src/commonMain/kotlin/press/mantra/compose/nostr/nip30303/tags/TranslationIdTag.kt diff --git a/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraArtifact.kt b/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraArtifact.kt index 4d66c01e..6ff3572e 100644 --- a/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraArtifact.kt +++ b/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraArtifact.kt @@ -3,8 +3,10 @@ package press.mantra.compose.database.model import androidx.room3.Entity import androidx.room3.PrimaryKey import com.vitorpamplona.quartz.nip01Core.core.HexKey +import com.vitorpamplona.quartz.nip01Core.core.TagArrayBuilder import press.mantra.compose.database.model.traits.TimestampedEntity import press.mantra.compose.nostr.nip30303.ArtifactEvent +import press.mantra.compose.nostr.nip30303.tags.DialectIdTag import kotlin.time.Clock import kotlin.time.Instant @@ -33,7 +35,11 @@ data class MantraArtifact( id = id, pubKey = publicKey, createdAt = createdAt.epochSeconds, - tags = emptyArray(), + tags = TagArrayBuilder() + .addUnique( + DialectIdTag.assemble(dialectId) + ) + .build(), content = "", sig = signature ) diff --git a/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraArtifactVersion.kt b/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraArtifactVersion.kt index fb15ecab..dff98553 100644 --- a/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraArtifactVersion.kt +++ b/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraArtifactVersion.kt @@ -3,8 +3,10 @@ package press.mantra.compose.database.model import androidx.room3.Entity import androidx.room3.PrimaryKey import com.vitorpamplona.quartz.nip01Core.core.HexKey +import com.vitorpamplona.quartz.nip01Core.core.TagArrayBuilder import press.mantra.compose.database.model.traits.TimestampedEntity import press.mantra.compose.nostr.nip30303.ArtifactVersionEvent +import press.mantra.compose.nostr.nip30303.tags.ArtifactIdTag import kotlin.time.Clock import kotlin.time.Instant @@ -33,7 +35,9 @@ data class MantraArtifactVersion( id = id, pubKey = publicKey, createdAt = createdAt.epochSeconds, - tags = emptyArray(), + tags = TagArrayBuilder().addUnique( + ArtifactIdTag.assemble(artifactId) + ).build(), content = "", sig = signature ) diff --git a/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraChapter.kt b/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraChapter.kt index 7a4b4976..7c26e513 100644 --- a/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraChapter.kt +++ b/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraChapter.kt @@ -3,8 +3,11 @@ package press.mantra.compose.database.model import androidx.room3.Entity import androidx.room3.PrimaryKey import com.vitorpamplona.quartz.nip01Core.core.HexKey +import com.vitorpamplona.quartz.nip01Core.core.TagArrayBuilder import press.mantra.compose.database.model.traits.TimestampedEntity +import press.mantra.compose.nostr.nip30303.ArtifactVersionEvent import press.mantra.compose.nostr.nip30303.ChapterEvent +import press.mantra.compose.nostr.nip30303.tags.ArtifactVersionIdTag import kotlin.time.Clock import kotlin.time.Instant @@ -34,7 +37,9 @@ data class MantraChapter( id = id, pubKey = publicKey, createdAt = createdAt.epochSeconds, - tags = emptyArray(), + tags = TagArrayBuilder().addUnique( + ArtifactVersionIdTag.assemble(artifactVersionId) + ).build(), content = "", sig = signature ) diff --git a/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraChunk.kt b/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraChunk.kt index dbad2cc9..8550d5d1 100644 --- a/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraChunk.kt +++ b/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraChunk.kt @@ -3,8 +3,10 @@ package press.mantra.compose.database.model import androidx.room3.Entity import androidx.room3.PrimaryKey import com.vitorpamplona.quartz.nip01Core.core.HexKey +import com.vitorpamplona.quartz.nip01Core.core.TagArrayBuilder import press.mantra.compose.database.model.traits.TimestampedEntity import press.mantra.compose.nostr.nip30303.ChunkEvent +import press.mantra.compose.nostr.nip30303.tags.ChapterIdTag import kotlin.time.Clock import kotlin.time.Instant @@ -33,7 +35,9 @@ data class MantraChunk( id = id, pubKey = publicKey, createdAt = createdAt.epochSeconds, - tags = emptyArray(), + tags = TagArrayBuilder().addUnique( + ChapterIdTag.assemble(chapterId) + ).build(), content = "", sig = signature ) diff --git a/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslation.kt b/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslation.kt index 832dda5a..72879883 100644 --- a/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslation.kt +++ b/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslation.kt @@ -3,8 +3,11 @@ package press.mantra.compose.database.model import androidx.room3.Entity import androidx.room3.PrimaryKey import com.vitorpamplona.quartz.nip01Core.core.HexKey +import com.vitorpamplona.quartz.nip01Core.core.TagArrayBuilder import press.mantra.compose.database.model.traits.TimestampedEntity import press.mantra.compose.nostr.nip30303.TranslationEvent +import press.mantra.compose.nostr.nip30303.tags.TranslationArtifactVersionIdTag +import press.mantra.compose.nostr.nip30303.tags.TranslationChunkIdTag import kotlin.time.Clock import kotlin.time.Instant @@ -31,7 +34,14 @@ data class MantraTranslation( id = id, pubKey = publicKey, createdAt = createdAt.epochSeconds, - tags = emptyArray(), + tags = TagArrayBuilder() + .addUnique( + TranslationArtifactVersionIdTag.assemble(translationArtifactVersionId) + ) + .addUnique( + TranslationChunkIdTag.assemble(translationChunkId) + ) + .build(), content = "", sig = signature ) diff --git a/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationArtifactVersion.kt b/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationArtifactVersion.kt index fa61f3cd..fc1e2daf 100644 --- a/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationArtifactVersion.kt +++ b/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationArtifactVersion.kt @@ -3,8 +3,12 @@ package press.mantra.compose.database.model import androidx.room3.Entity import androidx.room3.PrimaryKey import com.vitorpamplona.quartz.nip01Core.core.HexKey +import com.vitorpamplona.quartz.nip01Core.core.TagArrayBuilder import press.mantra.compose.database.model.traits.TimestampedEntity +import press.mantra.compose.nostr.nip30303.ArtifactVersionEvent import press.mantra.compose.nostr.nip30303.TranslationArtifactVersionEvent +import press.mantra.compose.nostr.nip30303.tags.ArtifactVersionIdTag +import press.mantra.compose.nostr.nip30303.tags.DialectIdTag import kotlin.time.Clock import kotlin.time.Instant @@ -32,7 +36,14 @@ data class MantraTranslationArtifactVersion( id = id, pubKey = publicKey, createdAt = createdAt.epochSeconds, - tags = emptyArray(), + tags = TagArrayBuilder() + .addUnique( + ArtifactVersionIdTag.assemble(artifactVersionId) + ) + .addUnique( + DialectIdTag.assemble(dialectId) + ) + .build(), content = "", sig = signature ) diff --git a/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationArtifactVersionEditor.kt b/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationArtifactVersionEditor.kt index 427acad3..4fa2c08e 100644 --- a/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationArtifactVersionEditor.kt +++ b/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationArtifactVersionEditor.kt @@ -3,9 +3,13 @@ package press.mantra.compose.database.model import androidx.room3.Entity import androidx.room3.PrimaryKey import com.vitorpamplona.quartz.nip01Core.core.HexKey +import com.vitorpamplona.quartz.nip01Core.core.TagArrayBuilder +import com.vitorpamplona.quartz.nipF4Podcasts.metadata.tags.AuthorTag import com.vitorpamplona.quartz.utils.TimeUtils import press.mantra.compose.database.model.traits.TimestampedEntity import press.mantra.compose.nostr.nip30303.TranslationArtifactVersionEditorListEvent +import press.mantra.compose.nostr.nip30303.TranslationChapterProofReaderListEvent +import press.mantra.compose.nostr.nip30303.tags.TranslationArtifactVersionIdTag import kotlin.time.Clock import kotlin.time.Instant @@ -33,7 +37,15 @@ data class MantraTranslationArtifactVersionEditor( id = "", pubKey = "", createdAt = TimeUtils.now(), - tags = emptyArray(), + tags = TagArrayBuilder() + .addUnique( + TranslationArtifactVersionIdTag.assemble("") // TODO: use actual value.. + ) + // TODO: Add tag for editorPublicKey + .addUnique( + AuthorTag.assemble("") // TODO: Get piblicKeyList... + ) + .build(), content = "", sig = "" ) diff --git a/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationChapter.kt b/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationChapter.kt index 7485c8d4..5bbc7acd 100644 --- a/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationChapter.kt +++ b/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationChapter.kt @@ -2,8 +2,11 @@ package press.mantra.compose.database.model import androidx.room3.Entity import com.vitorpamplona.quartz.nip01Core.core.HexKey +import com.vitorpamplona.quartz.nip01Core.core.TagArrayBuilder import press.mantra.compose.database.model.traits.TimestampedEntity import press.mantra.compose.nostr.nip30303.TranslationChapterEvent +import press.mantra.compose.nostr.nip30303.tags.ChapterIdTag +import press.mantra.compose.nostr.nip30303.tags.TranslationArtifactVersionIdTag import kotlin.time.Clock import kotlin.time.Instant @@ -28,7 +31,14 @@ data class MantraTranslationChapter( id = id, pubKey = publicKey, createdAt = createdAt.epochSeconds, - tags = emptyArray(), + tags = TagArrayBuilder() + .addUnique( + TranslationArtifactVersionIdTag.assemble(translationArtifactVersionId) + ) + .addUnique( + ChapterIdTag.assemble(chapterId) + ) + .build(), content = "", sig = signature ) diff --git a/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationChapterProofReader.kt b/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationChapterProofReader.kt index 2f0d58fb..fc146a10 100644 --- a/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationChapterProofReader.kt +++ b/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationChapterProofReader.kt @@ -3,9 +3,12 @@ package press.mantra.compose.database.model import androidx.room3.Entity import androidx.room3.PrimaryKey import com.vitorpamplona.quartz.nip01Core.core.HexKey +import com.vitorpamplona.quartz.nip01Core.core.TagArrayBuilder +import com.vitorpamplona.quartz.nipF4Podcasts.metadata.tags.AuthorTag import com.vitorpamplona.quartz.utils.TimeUtils import press.mantra.compose.database.model.traits.TimestampedEntity import press.mantra.compose.nostr.nip30303.TranslationChapterProofReaderListEvent +import press.mantra.compose.nostr.nip30303.tags.TranslationChapterIdTag import kotlin.time.Clock import kotlin.time.Instant @@ -33,7 +36,14 @@ data class MantraTranslationChapterProofReader( id = "", pubKey = "", createdAt = TimeUtils.now(), - tags = emptyArray(), + tags = TagArrayBuilder() + .addUnique( + TranslationChapterIdTag.assemble("") + ) + .addUnique( + AuthorTag.assemble("") // TODO: PublicKeyListTag + ) + .build(), content = "", sig = "" ) diff --git a/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationChapterTranslator.kt b/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationChapterTranslator.kt index 768adcbe..4f9e6d04 100644 --- a/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationChapterTranslator.kt +++ b/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationChapterTranslator.kt @@ -3,9 +3,12 @@ package press.mantra.compose.database.model import androidx.room3.Entity import androidx.room3.PrimaryKey import com.vitorpamplona.quartz.nip01Core.core.HexKey +import com.vitorpamplona.quartz.nip01Core.core.TagArrayBuilder +import com.vitorpamplona.quartz.nipF4Podcasts.metadata.tags.AuthorTag import com.vitorpamplona.quartz.utils.TimeUtils import press.mantra.compose.database.model.traits.TimestampedEntity import press.mantra.compose.nostr.nip30303.TranslationChapterTranslatorListEvent +import press.mantra.compose.nostr.nip30303.tags.TranslationChapterIdTag import kotlin.time.Clock import kotlin.time.Instant @@ -33,7 +36,14 @@ data class MantraTranslationChapterTranslator( id = "", pubKey = "", createdAt = TimeUtils.now(), - tags = emptyArray(), + tags = TagArrayBuilder() + .addUnique( + TranslationChapterIdTag.assemble("") + ) + .addUnique( + AuthorTag.assemble("") // TODO: PublicKeyListTag + ) + .build(), content = "", sig = "" ) diff --git a/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationChunk.kt b/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationChunk.kt index c6a80910..211f380b 100644 --- a/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationChunk.kt +++ b/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationChunk.kt @@ -3,8 +3,11 @@ package press.mantra.compose.database.model import androidx.room3.Entity import androidx.room3.PrimaryKey import com.vitorpamplona.quartz.nip01Core.core.HexKey +import com.vitorpamplona.quartz.nip01Core.core.TagArrayBuilder import press.mantra.compose.database.model.traits.TimestampedEntity import press.mantra.compose.nostr.nip30303.TranslationChunkEvent +import press.mantra.compose.nostr.nip30303.tags.ChunkIdTag +import press.mantra.compose.nostr.nip30303.tags.TranslationChapterIdTag import kotlin.time.Clock import kotlin.time.Instant @@ -16,10 +19,10 @@ data class MantraTranslationChunk( @PrimaryKey val id: HexKey, val publicKey: HexKey, - val text: String, - val index: Int, val chunkId: HexKey, val translationChapterId: HexKey, + val text: String, + val index: Int, val signature: String, @@ -32,7 +35,14 @@ data class MantraTranslationChunk( id = id, pubKey = publicKey, createdAt = createdAt.epochSeconds, - tags = emptyArray(), + tags = TagArrayBuilder() + .addUnique( + TranslationChapterIdTag.assemble(translationChapterId) + ) + .addUnique( + ChunkIdTag.assemble(chunkId) // TODO: PublicKeyListTag + ) + .build(), content = "", sig = signature ) diff --git a/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationTranslator.kt b/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationTranslator.kt index c0fa9c17..1a716fa2 100644 --- a/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationTranslator.kt +++ b/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationTranslator.kt @@ -3,9 +3,12 @@ package press.mantra.compose.database.model import androidx.room3.Entity import androidx.room3.PrimaryKey import com.vitorpamplona.quartz.nip01Core.core.HexKey +import com.vitorpamplona.quartz.nip01Core.core.TagArrayBuilder +import com.vitorpamplona.quartz.nipF4Podcasts.metadata.tags.AuthorTag import com.vitorpamplona.quartz.utils.TimeUtils import press.mantra.compose.database.model.traits.TimestampedEntity import press.mantra.compose.nostr.nip30303.TranslationTranslatorListEvent +import press.mantra.compose.nostr.nip30303.tags.TranslationIdTag import kotlin.time.Clock import kotlin.time.Instant @@ -33,7 +36,14 @@ data class MantraTranslationTranslator( id = "", pubKey = "", createdAt = TimeUtils.now(), - tags = emptyArray(), + tags = TagArrayBuilder() + .addUnique( + TranslationIdTag.assemble("") // TODO: Use actual translationId + ) + .addUnique( + AuthorTag.assemble("") // TODO: PublicKeyListTag + ) + .build(), content = "", sig = "" ) diff --git a/composeApp/src/commonMain/kotlin/press/mantra/compose/nostr/nip30303/tags/ArtifactIdTag.kt b/composeApp/src/commonMain/kotlin/press/mantra/compose/nostr/nip30303/tags/ArtifactIdTag.kt new file mode 100644 index 00000000..b1361971 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/press/mantra/compose/nostr/nip30303/tags/ArtifactIdTag.kt @@ -0,0 +1,20 @@ +package press.mantra.compose.nostr.nip30303.tags + +import com.vitorpamplona.quartz.nip01Core.core.HexKey +import com.vitorpamplona.quartz.nip01Core.core.has +import com.vitorpamplona.quartz.utils.ensure + +class ArtifactIdTag { + companion object { + const val TAG_NAME = "artifactId" + + fun parse(tag: Array): HexKey? { + ensure(tag.has(1)) { return null } + ensure(tag[0] == TAG_NAME) { return null } + ensure(tag[1].isNotBlank()) { return null } + return tag[1] + } + + fun assemble(artifactId: HexKey) = arrayOf(TAG_NAME, artifactId) + } +} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/press/mantra/compose/nostr/nip30303/tags/ArtifactVersionIdTag.kt b/composeApp/src/commonMain/kotlin/press/mantra/compose/nostr/nip30303/tags/ArtifactVersionIdTag.kt new file mode 100644 index 00000000..1575dfc7 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/press/mantra/compose/nostr/nip30303/tags/ArtifactVersionIdTag.kt @@ -0,0 +1,20 @@ +package press.mantra.compose.nostr.nip30303.tags + +import com.vitorpamplona.quartz.nip01Core.core.HexKey +import com.vitorpamplona.quartz.nip01Core.core.has +import com.vitorpamplona.quartz.utils.ensure + +class ArtifactVersionIdTag { + companion object { + const val TAG_NAME = "artifactVersionId" + + fun parse(tag: Array): HexKey? { + ensure(tag.has(1)) { return null } + ensure(tag[0] == TAG_NAME) { return null } + ensure(tag[1].isNotBlank()) { return null } + return tag[1] + } + + fun assemble(artifactVersionId: HexKey) = arrayOf(TAG_NAME, artifactVersionId) + } +} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/press/mantra/compose/nostr/nip30303/tags/ChapterIdTag.kt b/composeApp/src/commonMain/kotlin/press/mantra/compose/nostr/nip30303/tags/ChapterIdTag.kt new file mode 100644 index 00000000..835c11e2 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/press/mantra/compose/nostr/nip30303/tags/ChapterIdTag.kt @@ -0,0 +1,20 @@ +package press.mantra.compose.nostr.nip30303.tags + +import com.vitorpamplona.quartz.nip01Core.core.HexKey +import com.vitorpamplona.quartz.nip01Core.core.has +import com.vitorpamplona.quartz.utils.ensure + +class ChapterIdTag { + companion object { + const val TAG_NAME = "chapterIdTag" + + fun parse(tag: Array): HexKey? { + ensure(tag.has(1)) { return null } + ensure(tag[0] == TAG_NAME) { return null } + ensure(tag[1].isNotBlank()) { return null } + return tag[1] + } + + fun assemble(chapterIdTag: HexKey) = arrayOf(TAG_NAME, chapterIdTag) + } +} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/press/mantra/compose/nostr/nip30303/tags/ChunkIdTag.kt b/composeApp/src/commonMain/kotlin/press/mantra/compose/nostr/nip30303/tags/ChunkIdTag.kt new file mode 100644 index 00000000..42937ff9 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/press/mantra/compose/nostr/nip30303/tags/ChunkIdTag.kt @@ -0,0 +1,20 @@ +package press.mantra.compose.nostr.nip30303.tags + +import com.vitorpamplona.quartz.nip01Core.core.HexKey +import com.vitorpamplona.quartz.nip01Core.core.has +import com.vitorpamplona.quartz.utils.ensure + +class ChunkIdTag { + companion object { + const val TAG_NAME = "chunkIdTag" + + fun parse(tag: Array): HexKey? { + ensure(tag.has(1)) { return null } + ensure(tag[0] == TAG_NAME) { return null } + ensure(tag[1].isNotBlank()) { return null } + return tag[1] + } + + fun assemble(chunkIdTag: HexKey) = arrayOf(TAG_NAME, chunkIdTag) + } +} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/press/mantra/compose/nostr/nip30303/tags/DialectIdTag.kt b/composeApp/src/commonMain/kotlin/press/mantra/compose/nostr/nip30303/tags/DialectIdTag.kt new file mode 100644 index 00000000..dc675678 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/press/mantra/compose/nostr/nip30303/tags/DialectIdTag.kt @@ -0,0 +1,20 @@ +package press.mantra.compose.nostr.nip30303.tags + +import com.vitorpamplona.quartz.nip01Core.core.HexKey +import com.vitorpamplona.quartz.nip01Core.core.has +import com.vitorpamplona.quartz.utils.ensure + +class DialectIdTag { + companion object { + const val TAG_NAME = "dialectIdTag" + + fun parse(tag: Array): HexKey? { + ensure(tag.has(1)) { return null } + ensure(tag[0] == TAG_NAME) { return null } + ensure(tag[1].isNotBlank()) { return null } + return tag[1] + } + + fun assemble(dialectIdTag: HexKey) = arrayOf(TAG_NAME, dialectIdTag) + } +} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/press/mantra/compose/nostr/nip30303/tags/TranslationArtifactVersionIdTag.kt b/composeApp/src/commonMain/kotlin/press/mantra/compose/nostr/nip30303/tags/TranslationArtifactVersionIdTag.kt new file mode 100644 index 00000000..4063df72 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/press/mantra/compose/nostr/nip30303/tags/TranslationArtifactVersionIdTag.kt @@ -0,0 +1,20 @@ +package press.mantra.compose.nostr.nip30303.tags + +import com.vitorpamplona.quartz.nip01Core.core.HexKey +import com.vitorpamplona.quartz.nip01Core.core.has +import com.vitorpamplona.quartz.utils.ensure + +class TranslationArtifactVersionIdTag { + companion object { + const val TAG_NAME = "translationArtifactVersionId" + + fun parse(tag: Array): HexKey? { + ensure(tag.has(1)) { return null } + ensure(tag[0] == TAG_NAME) { return null } + ensure(tag[1].isNotBlank()) { return null } + return tag[1] + } + + fun assemble(translationArtifactVersionId: HexKey) = arrayOf(TAG_NAME, translationArtifactVersionId) + } +} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/press/mantra/compose/nostr/nip30303/tags/TranslationChapterIdTag.kt b/composeApp/src/commonMain/kotlin/press/mantra/compose/nostr/nip30303/tags/TranslationChapterIdTag.kt new file mode 100644 index 00000000..4a40e990 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/press/mantra/compose/nostr/nip30303/tags/TranslationChapterIdTag.kt @@ -0,0 +1,20 @@ +package press.mantra.compose.nostr.nip30303.tags + +import com.vitorpamplona.quartz.nip01Core.core.HexKey +import com.vitorpamplona.quartz.nip01Core.core.has +import com.vitorpamplona.quartz.utils.ensure + +class TranslationChapterIdTag { + companion object { + const val TAG_NAME = "translationChapterIdTag" + + fun parse(tag: Array): HexKey? { + ensure(tag.has(1)) { return null } + ensure(tag[0] == TAG_NAME) { return null } + ensure(tag[1].isNotBlank()) { return null } + return tag[1] + } + + fun assemble(translationChapterIdTag: HexKey) = arrayOf(TAG_NAME, translationChapterIdTag) + } +} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/press/mantra/compose/nostr/nip30303/tags/TranslationChunkIdTag.kt b/composeApp/src/commonMain/kotlin/press/mantra/compose/nostr/nip30303/tags/TranslationChunkIdTag.kt new file mode 100644 index 00000000..366bb43d --- /dev/null +++ b/composeApp/src/commonMain/kotlin/press/mantra/compose/nostr/nip30303/tags/TranslationChunkIdTag.kt @@ -0,0 +1,20 @@ +package press.mantra.compose.nostr.nip30303.tags + +import com.vitorpamplona.quartz.nip01Core.core.HexKey +import com.vitorpamplona.quartz.nip01Core.core.has +import com.vitorpamplona.quartz.utils.ensure + +class TranslationChunkIdTag { + companion object { + const val TAG_NAME = "translationChunkIdTag" + + fun parse(tag: Array): HexKey? { + ensure(tag.has(1)) { return null } + ensure(tag[0] == TAG_NAME) { return null } + ensure(tag[1].isNotBlank()) { return null } + return tag[1] + } + + fun assemble(translationChunkIdTag: HexKey) = arrayOf(TAG_NAME, translationChunkIdTag) + } +} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/press/mantra/compose/nostr/nip30303/tags/TranslationIdTag.kt b/composeApp/src/commonMain/kotlin/press/mantra/compose/nostr/nip30303/tags/TranslationIdTag.kt new file mode 100644 index 00000000..652288bf --- /dev/null +++ b/composeApp/src/commonMain/kotlin/press/mantra/compose/nostr/nip30303/tags/TranslationIdTag.kt @@ -0,0 +1,20 @@ +package press.mantra.compose.nostr.nip30303.tags + +import com.vitorpamplona.quartz.nip01Core.core.HexKey +import com.vitorpamplona.quartz.nip01Core.core.has +import com.vitorpamplona.quartz.utils.ensure + +class TranslationIdTag { + companion object { + const val TAG_NAME = "translationIdTag" + + fun parse(tag: Array): HexKey? { + ensure(tag.has(1)) { return null } + ensure(tag[0] == TAG_NAME) { return null } + ensure(tag[1].isNotBlank()) { return null } + return tag[1] + } + + fun assemble(translationIdTag: HexKey) = arrayOf(TAG_NAME, translationIdTag) + } +} \ No newline at end of file