Better name for the Blurhash class to avoid mistakes with its field.
This commit is contained in:
@@ -31,18 +31,16 @@ import coil3.key.Keyer
|
|||||||
import coil3.request.Options
|
import coil3.request.Options
|
||||||
import com.vitorpamplona.amethyst.commons.blurhash.BlurHashDecoder
|
import com.vitorpamplona.amethyst.commons.blurhash.BlurHashDecoder
|
||||||
|
|
||||||
class Blurhash(
|
data class BlurhashWrapper(
|
||||||
val blurhash: String,
|
val blurhash: String,
|
||||||
)
|
)
|
||||||
|
|
||||||
@Stable
|
@Stable
|
||||||
class BlurHashFetcher(
|
class BlurHashFetcher(
|
||||||
private val options: Options,
|
private val options: Options,
|
||||||
private val data: Blurhash,
|
private val data: BlurhashWrapper,
|
||||||
) : Fetcher {
|
) : Fetcher {
|
||||||
override suspend fun fetch(): FetchResult {
|
override suspend fun fetch(): FetchResult {
|
||||||
checkNotInMainThread()
|
|
||||||
|
|
||||||
val hash = data.blurhash
|
val hash = data.blurhash
|
||||||
|
|
||||||
val bitmap = BlurHashDecoder.decodeKeepAspectRatio(hash, 25) ?: throw Exception("Unable to convert Blurhash $data")
|
val bitmap = BlurHashDecoder.decodeKeepAspectRatio(hash, 25) ?: throw Exception("Unable to convert Blurhash $data")
|
||||||
@@ -54,17 +52,17 @@ class BlurHashFetcher(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
object Factory : Fetcher.Factory<Blurhash> {
|
object Factory : Fetcher.Factory<BlurhashWrapper> {
|
||||||
override fun create(
|
override fun create(
|
||||||
data: Blurhash,
|
data: BlurhashWrapper,
|
||||||
options: Options,
|
options: Options,
|
||||||
imageLoader: ImageLoader,
|
imageLoader: ImageLoader,
|
||||||
): Fetcher = BlurHashFetcher(options, data)
|
): Fetcher = BlurHashFetcher(options, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
object BKeyer : Keyer<Blurhash> {
|
object BKeyer : Keyer<BlurhashWrapper> {
|
||||||
override fun key(
|
override fun key(
|
||||||
data: Blurhash,
|
data: BlurhashWrapper,
|
||||||
options: Options,
|
options: Options,
|
||||||
): String = data.blurhash
|
): String = data.blurhash
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ import android.media.MediaDataSource
|
|||||||
import android.media.MediaMetadataRetriever
|
import android.media.MediaMetadataRetriever
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import com.vitorpamplona.amethyst.commons.blurhash.toBlurhash
|
import com.vitorpamplona.amethyst.commons.blurhash.toBlurhash
|
||||||
import com.vitorpamplona.amethyst.service.Blurhash
|
import com.vitorpamplona.amethyst.service.BlurhashWrapper
|
||||||
import com.vitorpamplona.quartz.nip01Core.core.toHexKey
|
import com.vitorpamplona.quartz.nip01Core.core.toHexKey
|
||||||
import com.vitorpamplona.quartz.nip94FileMetadata.tags.DimensionTag
|
import com.vitorpamplona.quartz.nip94FileMetadata.tags.DimensionTag
|
||||||
import com.vitorpamplona.quartz.utils.sha256.sha256
|
import com.vitorpamplona.quartz.utils.sha256.sha256
|
||||||
@@ -38,7 +38,7 @@ class FileHeader(
|
|||||||
val hash: String,
|
val hash: String,
|
||||||
val size: Int,
|
val size: Int,
|
||||||
val dim: DimensionTag?,
|
val dim: DimensionTag?,
|
||||||
val blurHash: Blurhash?,
|
val blurHash: BlurhashWrapper?,
|
||||||
) {
|
) {
|
||||||
class UnableToDownload(
|
class UnableToDownload(
|
||||||
val fileUrl: String,
|
val fileUrl: String,
|
||||||
@@ -79,13 +79,13 @@ class FileHeader(
|
|||||||
val opt = BitmapFactory.Options()
|
val opt = BitmapFactory.Options()
|
||||||
opt.inPreferredConfig = Bitmap.Config.ARGB_8888
|
opt.inPreferredConfig = Bitmap.Config.ARGB_8888
|
||||||
val mBitmap = BitmapFactory.decodeByteArray(data, 0, data.size, opt)
|
val mBitmap = BitmapFactory.decodeByteArray(data, 0, data.size, opt)
|
||||||
Pair(Blurhash(mBitmap.toBlurhash()), DimensionTag(mBitmap.width, mBitmap.height))
|
Pair(BlurhashWrapper(mBitmap.toBlurhash()), DimensionTag(mBitmap.width, mBitmap.height))
|
||||||
} else if (mimeType?.startsWith("video/") == true) {
|
} else if (mimeType?.startsWith("video/") == true) {
|
||||||
val mediaMetadataRetriever = MediaMetadataRetriever()
|
val mediaMetadataRetriever = MediaMetadataRetriever()
|
||||||
mediaMetadataRetriever.setDataSource(ByteArrayMediaDataSource(data))
|
mediaMetadataRetriever.setDataSource(ByteArrayMediaDataSource(data))
|
||||||
|
|
||||||
val newDim = mediaMetadataRetriever.prepareDimFromVideo() ?: dimPrecomputed
|
val newDim = mediaMetadataRetriever.prepareDimFromVideo() ?: dimPrecomputed
|
||||||
val blurhash = mediaMetadataRetriever.getThumbnail()?.toBlurhash()?.let { Blurhash(it) }
|
val blurhash = mediaMetadataRetriever.getThumbnail()?.toBlurhash()?.let { BlurhashWrapper(it) }
|
||||||
|
|
||||||
if (newDim?.hasSize() == true) {
|
if (newDim?.hasSize() == true) {
|
||||||
Pair(blurhash, newDim)
|
Pair(blurhash, newDim)
|
||||||
|
|||||||
+2
-2
@@ -79,7 +79,7 @@ import com.vitorpamplona.amethyst.commons.richtext.MediaUrlContent
|
|||||||
import com.vitorpamplona.amethyst.commons.richtext.MediaUrlImage
|
import com.vitorpamplona.amethyst.commons.richtext.MediaUrlImage
|
||||||
import com.vitorpamplona.amethyst.commons.richtext.MediaUrlVideo
|
import com.vitorpamplona.amethyst.commons.richtext.MediaUrlVideo
|
||||||
import com.vitorpamplona.amethyst.model.MediaAspectRatioCache
|
import com.vitorpamplona.amethyst.model.MediaAspectRatioCache
|
||||||
import com.vitorpamplona.amethyst.service.Blurhash
|
import com.vitorpamplona.amethyst.service.BlurhashWrapper
|
||||||
import com.vitorpamplona.amethyst.service.playback.composable.VideoView
|
import com.vitorpamplona.amethyst.service.playback.composable.VideoView
|
||||||
import com.vitorpamplona.amethyst.ui.actions.CrossfadeIfEnabled
|
import com.vitorpamplona.amethyst.ui.actions.CrossfadeIfEnabled
|
||||||
import com.vitorpamplona.amethyst.ui.actions.InformationDialog
|
import com.vitorpamplona.amethyst.ui.actions.InformationDialog
|
||||||
@@ -637,7 +637,7 @@ fun DisplayBlurHash(
|
|||||||
if (blurhash == null) return
|
if (blurhash == null) return
|
||||||
|
|
||||||
AsyncImage(
|
AsyncImage(
|
||||||
model = Blurhash(blurhash),
|
model = BlurhashWrapper(blurhash),
|
||||||
contentDescription = description,
|
contentDescription = description,
|
||||||
contentScale = contentScale,
|
contentScale = contentScale,
|
||||||
modifier = modifier,
|
modifier = modifier,
|
||||||
|
|||||||
Reference in New Issue
Block a user