Merge pull request #2454 from vitorpamplona/claude/add-thumbhash-support-ZfNS1
Add ThumbHash support for image placeholders
This commit is contained in:
+3
@@ -43,6 +43,7 @@ import com.vitorpamplona.quartz.nip94FileMetadata.tags.ServiceTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.SizeTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.SummaryTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.ThumbTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.ThumbhashTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.TorrentInfoHash
|
||||
import com.vitorpamplona.quartz.utils.TimeUtils
|
||||
|
||||
@@ -75,6 +76,8 @@ class FileStorageHeaderEvent(
|
||||
|
||||
fun blurhash() = tags.firstNotNullOfOrNull(BlurhashTag::parse)
|
||||
|
||||
fun thumbhash() = tags.firstNotNullOfOrNull(ThumbhashTag::parse)
|
||||
|
||||
fun image() = tags.firstNotNullOfOrNull(ImageTag::parse)
|
||||
|
||||
fun thumb() = tags.firstNotNullOfOrNull(ThumbTag::parse)
|
||||
|
||||
+3
@@ -33,6 +33,7 @@ import com.vitorpamplona.quartz.nip94FileMetadata.tags.ServiceTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.SizeTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.SummaryTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.ThumbTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.ThumbhashTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.TorrentInfoHash
|
||||
|
||||
fun TagArrayBuilder<FileStorageHeaderEvent>.mimeType(mimeType: String) = add(MimeTypeTag.assemble(mimeType))
|
||||
@@ -45,6 +46,8 @@ fun TagArrayBuilder<FileStorageHeaderEvent>.dimension(dim: DimensionTag) = add(D
|
||||
|
||||
fun TagArrayBuilder<FileStorageHeaderEvent>.blurhash(blurhash: String) = add(BlurhashTag.assemble(blurhash))
|
||||
|
||||
fun TagArrayBuilder<FileStorageHeaderEvent>.thumbhash(thumbhash: String) = add(ThumbhashTag.assemble(thumbhash))
|
||||
|
||||
fun TagArrayBuilder<FileStorageHeaderEvent>.torrentInfohash(hash: String) = add(TorrentInfoHash.assemble(hash))
|
||||
|
||||
fun TagArrayBuilder<FileStorageHeaderEvent>.magnet(magnetUri: String) = add(MagnetTag.assemble(magnetUri))
|
||||
|
||||
+3
@@ -39,6 +39,7 @@ import com.vitorpamplona.quartz.nip94FileMetadata.tags.ServiceTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.SizeTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.SummaryTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.ThumbTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.ThumbhashTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.TorrentInfoHash
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.UrlTag
|
||||
import com.vitorpamplona.quartz.utils.TimeUtils
|
||||
@@ -70,6 +71,8 @@ class ProfileGalleryEntryEvent(
|
||||
|
||||
fun blurhash() = tags.firstNotNullOfOrNull(BlurhashTag::parse)
|
||||
|
||||
fun thumbhash() = tags.firstNotNullOfOrNull(ThumbhashTag::parse)
|
||||
|
||||
fun image() = tags.firstNotNullOfOrNull(ImageTag::parse)
|
||||
|
||||
fun thumb() = tags.firstNotNullOfOrNull(ThumbTag::parse)
|
||||
|
||||
+3
@@ -36,6 +36,7 @@ import com.vitorpamplona.quartz.nip94FileMetadata.tags.ServiceTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.SizeTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.SummaryTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.ThumbTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.ThumbhashTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.TorrentInfoHash
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.UrlTag
|
||||
|
||||
@@ -51,6 +52,8 @@ fun TagArrayBuilder<ProfileGalleryEntryEvent>.dimension(dim: DimensionTag) = add
|
||||
|
||||
fun TagArrayBuilder<ProfileGalleryEntryEvent>.blurhash(blurhash: String) = add(BlurhashTag.assemble(blurhash))
|
||||
|
||||
fun TagArrayBuilder<ProfileGalleryEntryEvent>.thumbhash(thumbhash: String) = add(ThumbhashTag.assemble(thumbhash))
|
||||
|
||||
fun TagArrayBuilder<ProfileGalleryEntryEvent>.originalHash(hash: HexKey) = add(OriginalHashTag.assemble(hash))
|
||||
|
||||
fun TagArrayBuilder<ProfileGalleryEntryEvent>.torrentInfohash(hash: String) = add(TorrentInfoHash.assemble(hash))
|
||||
|
||||
+2
@@ -166,6 +166,7 @@ fun buildMip04IMetaTag(
|
||||
nonce: ByteArray,
|
||||
dimensions: String? = null,
|
||||
blurhash: String? = null,
|
||||
thumbhash: String? = null,
|
||||
): IMetaTag =
|
||||
IMetaTagBuilder(url)
|
||||
.apply {
|
||||
@@ -176,4 +177,5 @@ fun buildMip04IMetaTag(
|
||||
add(Mip04Fields.VERSION, Mip04MediaEncryption.VERSION)
|
||||
dimensions?.let { add(Mip04Fields.DIMENSIONS, it) }
|
||||
blurhash?.let { add(Mip04Fields.BLURHASH, it) }
|
||||
thumbhash?.let { add(Mip04Fields.THUMBHASH, it) }
|
||||
}.build()
|
||||
|
||||
+5
@@ -39,6 +39,7 @@ import com.vitorpamplona.quartz.nip94FileMetadata.tags.DimensionTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.HashSha256Tag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.OriginalHashTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.SizeTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.ThumbhashTag
|
||||
import com.vitorpamplona.quartz.utils.TimeUtils
|
||||
import com.vitorpamplona.quartz.utils.ciphers.AESGCM
|
||||
|
||||
@@ -65,6 +66,8 @@ class ChatMessageEncryptedFileHeaderEvent(
|
||||
|
||||
fun blurhash() = tags.firstNotNullOfOrNull(BlurhashTag::parse)
|
||||
|
||||
fun thumbhash() = tags.firstNotNullOfOrNull(ThumbhashTag::parse)
|
||||
|
||||
fun originalHash() = tags.firstNotNullOfOrNull(OriginalHashTag::parse)
|
||||
|
||||
fun algo() = tags.firstNotNullOfOrNull(EncryptionAlgo::parse)
|
||||
@@ -87,6 +90,7 @@ class ChatMessageEncryptedFileHeaderEvent(
|
||||
size: Int? = null,
|
||||
dimension: DimensionTag? = null,
|
||||
blurhash: String? = null,
|
||||
thumbhash: String? = null,
|
||||
originalHash: String? = null,
|
||||
magnetUri: String? = null,
|
||||
torrentInfoHash: String? = null,
|
||||
@@ -108,6 +112,7 @@ class ChatMessageEncryptedFileHeaderEvent(
|
||||
mimeType?.let { mimeType(it) }
|
||||
dimension?.let { dimension(it) }
|
||||
blurhash?.let { blurhash(it) }
|
||||
thumbhash?.let { thumbhash(it) }
|
||||
originalHash?.let { originalHash(it) }
|
||||
magnetUri?.let { magnet(it) }
|
||||
torrentInfoHash?.let { torrentInfohash(it) }
|
||||
|
||||
+3
@@ -44,6 +44,7 @@ import com.vitorpamplona.quartz.nip94FileMetadata.tags.ServiceTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.SizeTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.SummaryTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.ThumbTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.ThumbhashTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.TorrentInfoHash
|
||||
|
||||
fun TagArrayBuilder<ChatMessageEncryptedFileHeaderEvent>.reply(msg: MarkedETag) = add(msg.toTagArray())
|
||||
@@ -70,6 +71,8 @@ fun TagArrayBuilder<ChatMessageEncryptedFileHeaderEvent>.dimension(dim: Dimensio
|
||||
|
||||
fun TagArrayBuilder<ChatMessageEncryptedFileHeaderEvent>.blurhash(blurhash: String) = add(BlurhashTag.assemble(blurhash))
|
||||
|
||||
fun TagArrayBuilder<ChatMessageEncryptedFileHeaderEvent>.thumbhash(thumbhash: String) = add(ThumbhashTag.assemble(thumbhash))
|
||||
|
||||
fun TagArrayBuilder<ChatMessageEncryptedFileHeaderEvent>.originalHash(hash: HexKey) = add(OriginalHashTag.assemble(hash))
|
||||
|
||||
fun TagArrayBuilder<ChatMessageEncryptedFileHeaderEvent>.torrentInfohash(hash: String) = add(TorrentInfoHash.assemble(hash))
|
||||
|
||||
+3
@@ -37,6 +37,7 @@ import com.vitorpamplona.quartz.nip94FileMetadata.tags.ServiceTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.SizeTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.SummaryTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.ThumbTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.ThumbhashTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.TorrentInfoHash
|
||||
|
||||
/**
|
||||
@@ -56,6 +57,8 @@ fun IMetaTagBuilder.dims(dims: DimensionTag) = add(DimensionTag.TAG_NAME, dims.t
|
||||
|
||||
fun IMetaTagBuilder.blurhash(blurhash: String) = add(BlurhashTag.TAG_NAME, blurhash)
|
||||
|
||||
fun IMetaTagBuilder.thumbhash(thumbhash: String) = add(ThumbhashTag.TAG_NAME, thumbhash)
|
||||
|
||||
fun IMetaTagBuilder.originalHash(originalHash: String) = add(OriginalHashTag.TAG_NAME, originalHash)
|
||||
|
||||
fun IMetaTagBuilder.torrent(uri: String) = add(TorrentInfoHash.TAG_NAME, uri)
|
||||
|
||||
@@ -36,6 +36,7 @@ import com.vitorpamplona.quartz.nip94FileMetadata.tags.ServiceTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.SizeTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.SummaryTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.ThumbTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.ThumbhashTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.TorrentInfoHash
|
||||
|
||||
/**
|
||||
@@ -55,6 +56,8 @@ fun IMetaTag.dims() = properties.get(DimensionTag.TAG_NAME)
|
||||
|
||||
fun IMetaTag.blurhash() = properties.get(BlurhashTag.TAG_NAME)
|
||||
|
||||
fun IMetaTag.thumbhash() = properties.get(ThumbhashTag.TAG_NAME)
|
||||
|
||||
fun IMetaTag.originalHash() = properties.get(OriginalHashTag.TAG_NAME)
|
||||
|
||||
fun IMetaTag.torrent() = properties.get(TorrentInfoHash.TAG_NAME)
|
||||
|
||||
@@ -36,6 +36,7 @@ data class PictureMeta(
|
||||
val service: String? = null,
|
||||
val fallback: List<String> = emptyList(),
|
||||
val annotations: List<UserAnnotationTag> = emptyList(),
|
||||
val thumbhash: String? = null,
|
||||
) {
|
||||
fun toIMetaArray(): Array<String> =
|
||||
IMetaTagBuilder(url)
|
||||
@@ -46,6 +47,7 @@ data class PictureMeta(
|
||||
size?.let { size(it) }
|
||||
dimension?.let { dims(it) }
|
||||
blurhash?.let { blurhash(it) }
|
||||
thumbhash?.let { thumbhash(it) }
|
||||
service?.let { service(it) }
|
||||
fallback.forEach { fallback(it) }
|
||||
annotations.forEach { userAnnotations(it) }
|
||||
@@ -55,16 +57,17 @@ data class PictureMeta(
|
||||
companion object {
|
||||
fun parse(iMeta: IMetaTag): PictureMeta =
|
||||
PictureMeta(
|
||||
iMeta.url,
|
||||
iMeta.mimeType()?.firstOrNull(),
|
||||
iMeta.blurhash()?.firstOrNull(),
|
||||
iMeta.dims()?.firstOrNull()?.let { DimensionTag.parse(it) },
|
||||
iMeta.alt()?.firstOrNull(),
|
||||
iMeta.hash()?.firstOrNull(),
|
||||
iMeta.size()?.firstOrNull()?.toIntOrNull(),
|
||||
iMeta.service()?.firstOrNull(),
|
||||
iMeta.fallback() ?: emptyList(),
|
||||
iMeta.userAnnotations() ?: emptyList(),
|
||||
url = iMeta.url,
|
||||
mimeType = iMeta.mimeType()?.firstOrNull(),
|
||||
blurhash = iMeta.blurhash()?.firstOrNull(),
|
||||
dimension = iMeta.dims()?.firstOrNull()?.let { DimensionTag.parse(it) },
|
||||
alt = iMeta.alt()?.firstOrNull(),
|
||||
hash = iMeta.hash()?.firstOrNull(),
|
||||
size = iMeta.size()?.firstOrNull()?.toIntOrNull(),
|
||||
service = iMeta.service()?.firstOrNull(),
|
||||
fallback = iMeta.fallback() ?: emptyList(),
|
||||
annotations = iMeta.userAnnotations() ?: emptyList(),
|
||||
thumbhash = iMeta.thumbhash()?.firstOrNull(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+2
-1
@@ -39,7 +39,8 @@ fun TagArrayBuilder<PictureEvent>.pictureIMeta(
|
||||
hash: String? = null,
|
||||
size: Int? = null,
|
||||
alt: String? = null,
|
||||
) = pictureIMeta(PictureMeta(url, mimeType, blurhash, dimension, alt, hash, size))
|
||||
thumbhash: String? = null,
|
||||
) = pictureIMeta(PictureMeta(url, mimeType, blurhash, dimension, alt, hash, size, thumbhash = thumbhash))
|
||||
|
||||
fun TagArrayBuilder<PictureEvent>.pictureIMeta(imeta: PictureMeta): TagArrayBuilder<PictureEvent> {
|
||||
add(imeta.toIMetaArray())
|
||||
|
||||
@@ -36,6 +36,7 @@ import com.vitorpamplona.quartz.nip94FileMetadata.tags.ServiceTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.SizeTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.SummaryTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.ThumbTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.ThumbhashTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.TorrentInfoHash
|
||||
|
||||
/**
|
||||
@@ -55,6 +56,8 @@ fun IMetaTagBuilder.dims(dims: DimensionTag) = add(DimensionTag.TAG_NAME, dims.t
|
||||
|
||||
fun IMetaTagBuilder.blurhash(blurhash: String) = add(BlurhashTag.TAG_NAME, blurhash)
|
||||
|
||||
fun IMetaTagBuilder.thumbhash(thumbhash: String) = add(ThumbhashTag.TAG_NAME, thumbhash)
|
||||
|
||||
fun IMetaTagBuilder.originalHash(originalHash: String) = add(OriginalHashTag.TAG_NAME, originalHash)
|
||||
|
||||
fun IMetaTagBuilder.torrent(uri: String) = add(TorrentInfoHash.TAG_NAME, uri)
|
||||
|
||||
@@ -35,6 +35,7 @@ import com.vitorpamplona.quartz.nip94FileMetadata.tags.ServiceTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.SizeTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.SummaryTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.ThumbTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.ThumbhashTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.TorrentInfoHash
|
||||
|
||||
/**
|
||||
@@ -54,6 +55,8 @@ fun IMetaTag.dims() = properties.get(DimensionTag.TAG_NAME)
|
||||
|
||||
fun IMetaTag.blurhash() = properties.get(BlurhashTag.TAG_NAME)
|
||||
|
||||
fun IMetaTag.thumbhash() = properties.get(ThumbhashTag.TAG_NAME)
|
||||
|
||||
fun IMetaTag.originalHash() = properties.get(OriginalHashTag.TAG_NAME)
|
||||
|
||||
fun IMetaTag.torrent() = properties.get(TorrentInfoHash.TAG_NAME)
|
||||
|
||||
+2
-1
@@ -43,7 +43,8 @@ fun <T : VideoEvent> TagArrayBuilder<T>.videoIMeta(
|
||||
hash: String? = null,
|
||||
size: Int? = null,
|
||||
alt: String? = null,
|
||||
) = videoIMeta(VideoMeta(url, mimeType, blurhash, dimension, alt, hash, size))
|
||||
thumbhash: String? = null,
|
||||
) = videoIMeta(VideoMeta(url, mimeType, blurhash, dimension, alt, hash, size, thumbhash = thumbhash))
|
||||
|
||||
fun <T : VideoEvent> TagArrayBuilder<T>.videoIMeta(imeta: VideoMeta) = add(imeta.toIMetaArray())
|
||||
|
||||
|
||||
@@ -35,6 +35,7 @@ data class VideoMeta(
|
||||
val service: String? = null,
|
||||
val fallback: List<String> = emptyList(),
|
||||
val image: List<String> = emptyList(),
|
||||
val thumbhash: String? = null,
|
||||
) {
|
||||
fun toIMetaArray(): Array<String> =
|
||||
IMetaTagBuilder(url)
|
||||
@@ -45,6 +46,7 @@ data class VideoMeta(
|
||||
size?.let { size(it) }
|
||||
dimension?.let { dims(it) }
|
||||
blurhash?.let { blurhash(it) }
|
||||
thumbhash?.let { thumbhash(it) }
|
||||
service?.let { service(it) }
|
||||
fallback.forEach { fallback(it) }
|
||||
image.forEach { image(it) }
|
||||
@@ -54,16 +56,17 @@ data class VideoMeta(
|
||||
companion object {
|
||||
fun parse(iMeta: IMetaTag): VideoMeta =
|
||||
VideoMeta(
|
||||
iMeta.url,
|
||||
iMeta.mimeType()?.firstOrNull(),
|
||||
iMeta.blurhash()?.firstOrNull(),
|
||||
iMeta.dims()?.firstOrNull()?.let { DimensionTag.parse(it) },
|
||||
iMeta.alt()?.firstOrNull(),
|
||||
iMeta.hash()?.firstOrNull(),
|
||||
iMeta.size()?.firstOrNull()?.toIntOrNull(),
|
||||
iMeta.service()?.firstOrNull(),
|
||||
iMeta.fallback() ?: emptyList(),
|
||||
iMeta.image() ?: emptyList(),
|
||||
url = iMeta.url,
|
||||
mimeType = iMeta.mimeType()?.firstOrNull(),
|
||||
blurhash = iMeta.blurhash()?.firstOrNull(),
|
||||
dimension = iMeta.dims()?.firstOrNull()?.let { DimensionTag.parse(it) },
|
||||
alt = iMeta.alt()?.firstOrNull(),
|
||||
hash = iMeta.hash()?.firstOrNull(),
|
||||
size = iMeta.size()?.firstOrNull()?.toIntOrNull(),
|
||||
service = iMeta.service()?.firstOrNull(),
|
||||
fallback = iMeta.fallback() ?: emptyList(),
|
||||
image = iMeta.image() ?: emptyList(),
|
||||
thumbhash = iMeta.thumbhash()?.firstOrNull(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+5
@@ -38,6 +38,7 @@ import com.vitorpamplona.quartz.nip94FileMetadata.tags.ServiceTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.SizeTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.SummaryTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.ThumbTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.ThumbhashTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.TorrentInfoHash
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.UrlTag
|
||||
import com.vitorpamplona.quartz.utils.TimeUtils
|
||||
@@ -69,6 +70,8 @@ class FileHeaderEvent(
|
||||
|
||||
fun blurhash() = tags.firstNotNullOfOrNull(BlurhashTag::parse)
|
||||
|
||||
fun thumbhash() = tags.firstNotNullOfOrNull(ThumbhashTag::parse)
|
||||
|
||||
fun image() = tags.firstNotNullOfOrNull(ImageTag::parse)
|
||||
|
||||
fun thumb() = tags.firstNotNullOfOrNull(ThumbTag::parse)
|
||||
@@ -106,6 +109,7 @@ class FileHeaderEvent(
|
||||
size: Int? = null,
|
||||
dimension: DimensionTag? = null,
|
||||
blurhash: String? = null,
|
||||
thumbhash: String? = null,
|
||||
originalHash: String? = null,
|
||||
magnetUri: String? = null,
|
||||
torrentInfoHash: String? = null,
|
||||
@@ -120,6 +124,7 @@ class FileHeaderEvent(
|
||||
mimeType?.let { mimeType(it) }
|
||||
dimension?.let { dimension(it) }
|
||||
blurhash?.let { blurhash(it) }
|
||||
thumbhash?.let { thumbhash(it) }
|
||||
originalHash?.let { originalHash(it) }
|
||||
magnetUri?.let { magnet(it) }
|
||||
torrentInfoHash?.let { torrentInfohash(it) }
|
||||
|
||||
+3
@@ -36,6 +36,7 @@ import com.vitorpamplona.quartz.nip94FileMetadata.tags.ServiceTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.SizeTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.SummaryTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.ThumbTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.ThumbhashTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.TorrentInfoHash
|
||||
|
||||
/**
|
||||
@@ -55,6 +56,8 @@ fun IMetaTagBuilder.dims(dims: DimensionTag) = add(DimensionTag.TAG_NAME, dims.t
|
||||
|
||||
fun IMetaTagBuilder.blurhash(blurhash: String) = add(BlurhashTag.TAG_NAME, blurhash)
|
||||
|
||||
fun IMetaTagBuilder.thumbhash(thumbhash: String) = add(ThumbhashTag.TAG_NAME, thumbhash)
|
||||
|
||||
fun IMetaTagBuilder.originalHash(originalHash: String) = add(OriginalHashTag.TAG_NAME, originalHash)
|
||||
|
||||
fun IMetaTagBuilder.torrent(uri: String) = add(TorrentInfoHash.TAG_NAME, uri)
|
||||
|
||||
+3
@@ -34,6 +34,7 @@ import com.vitorpamplona.quartz.nip94FileMetadata.tags.ServiceTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.SizeTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.SummaryTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.ThumbTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.ThumbhashTag
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.TorrentInfoHash
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.UrlTag
|
||||
|
||||
@@ -49,6 +50,8 @@ fun TagArrayBuilder<FileHeaderEvent>.dimension(dim: DimensionTag) = add(Dimensio
|
||||
|
||||
fun TagArrayBuilder<FileHeaderEvent>.blurhash(blurhash: String) = add(BlurhashTag.assemble(blurhash))
|
||||
|
||||
fun TagArrayBuilder<FileHeaderEvent>.thumbhash(thumbhash: String) = add(ThumbhashTag.assemble(thumbhash))
|
||||
|
||||
fun TagArrayBuilder<FileHeaderEvent>.originalHash(hash: HexKey) = add(OriginalHashTag.assemble(hash))
|
||||
|
||||
fun TagArrayBuilder<FileHeaderEvent>.torrentInfohash(hash: String) = add(TorrentInfoHash.assemble(hash))
|
||||
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
/*
|
||||
* Copyright (c) 2025 Vitor Pamplona
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package com.vitorpamplona.quartz.nip94FileMetadata.tags
|
||||
|
||||
import com.vitorpamplona.quartz.nip01Core.core.has
|
||||
import com.vitorpamplona.quartz.utils.ensure
|
||||
|
||||
class ThumbhashTag {
|
||||
companion object {
|
||||
const val TAG_NAME = "thumbhash"
|
||||
|
||||
fun parse(tag: Array<String>): String? {
|
||||
ensure(tag.has(1)) { return null }
|
||||
ensure(tag[0] == TAG_NAME) { return null }
|
||||
ensure(tag[1].isNotEmpty()) { return null }
|
||||
return tag[1]
|
||||
}
|
||||
|
||||
fun assemble(hash: String) = arrayOf(TAG_NAME, hash)
|
||||
}
|
||||
}
|
||||
+11
-7
@@ -26,6 +26,7 @@ import com.vitorpamplona.quartz.nip68Picture.dims
|
||||
import com.vitorpamplona.quartz.nip68Picture.hash
|
||||
import com.vitorpamplona.quartz.nip68Picture.mimeType
|
||||
import com.vitorpamplona.quartz.nip68Picture.size
|
||||
import com.vitorpamplona.quartz.nip68Picture.thumbhash
|
||||
import com.vitorpamplona.quartz.nip92IMeta.IMetaTag
|
||||
import com.vitorpamplona.quartz.nip92IMeta.IMetaTagBuilder
|
||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.DimensionTag
|
||||
@@ -38,6 +39,7 @@ data class ProductImageMeta(
|
||||
val alt: String? = null,
|
||||
val hash: String? = null,
|
||||
val size: Int? = null,
|
||||
val thumbhash: String? = null,
|
||||
) {
|
||||
fun toIMeta(): IMetaTag =
|
||||
IMetaTagBuilder(url)
|
||||
@@ -48,6 +50,7 @@ data class ProductImageMeta(
|
||||
size?.let { size(it) }
|
||||
dimension?.let { dims(it) }
|
||||
blurhash?.let { blurhash(it) }
|
||||
thumbhash?.let { thumbhash(it) }
|
||||
}.build()
|
||||
|
||||
fun toIMetaArray(): Array<String> = toIMeta().toTagArray()
|
||||
@@ -55,13 +58,14 @@ data class ProductImageMeta(
|
||||
companion object {
|
||||
fun parse(iMeta: IMetaTag): ProductImageMeta =
|
||||
ProductImageMeta(
|
||||
iMeta.url,
|
||||
iMeta.mimeType()?.firstOrNull(),
|
||||
iMeta.blurhash()?.firstOrNull(),
|
||||
iMeta.dims()?.firstOrNull()?.let { DimensionTag.parse(it) },
|
||||
iMeta.alt()?.firstOrNull(),
|
||||
iMeta.hash()?.firstOrNull(),
|
||||
iMeta.size()?.firstOrNull()?.toIntOrNull(),
|
||||
url = iMeta.url,
|
||||
mimeType = iMeta.mimeType()?.firstOrNull(),
|
||||
blurhash = iMeta.blurhash()?.firstOrNull(),
|
||||
dimension = iMeta.dims()?.firstOrNull()?.let { DimensionTag.parse(it) },
|
||||
alt = iMeta.alt()?.firstOrNull(),
|
||||
hash = iMeta.hash()?.firstOrNull(),
|
||||
size = iMeta.size()?.firstOrNull()?.toIntOrNull(),
|
||||
thumbhash = iMeta.thumbhash()?.firstOrNull(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user