Add Bundle extensions

This commit is contained in:
vfsfitvnm
2022-06-29 22:38:00 +02:00
parent e4209d18ad
commit 58f821534e
4 changed files with 30 additions and 7 deletions

View File

@@ -262,7 +262,7 @@ class PlayerService : Service(), Player.Listener, PlaybackStatsListener.Callback
if (preferences.volumeNormalization) { if (preferences.volumeNormalization) {
player.volume = player.currentMediaItem?.let { mediaItem -> player.volume = player.currentMediaItem?.let { mediaItem ->
songPendingLoudnessDb.getOrElse(mediaItem.mediaId) { songPendingLoudnessDb.getOrElse(mediaItem.mediaId) {
mediaItem.mediaMetadata.extras?.getFloat("loudnessDb") mediaItem.mediaMetadata.extras?.getFloatOrNull("loudnessDb")
}?.takeIf { it > 0 }?.let { loudnessDb -> }?.takeIf { it > 0 }?.let { loudnessDb ->
(1f - (0.01f + loudnessDb / 14)).coerceIn(0.1f, 1f) (1f - (0.01f + loudnessDb / 14)).coerceIn(0.1f, 1f)
} }

View File

@@ -283,6 +283,18 @@ fun PlayerView(
mutableStateOf(binder?.cache?.getCachedBytes(song?.id ?: "", 0, -1) ?: 0L) mutableStateOf(binder?.cache?.getCachedBytes(song?.id ?: "", 0, -1) ?: 0L)
} }
val loudnessDb by remember {
derivedStateOf {
song?.loudnessDb ?: playerState.mediaMetadata.extras?.getFloatOrNull("loudnessDb")
}
}
val contentLength by remember {
derivedStateOf {
song?.contentLength ?: playerState.mediaMetadata.extras?.getLongOrNull("contentLength")
}
}
DisposableEffect(song?.id) { DisposableEffect(song?.id) {
val listener = object : Cache.Listener { val listener = object : Cache.Listener {
override fun onSpanAdded(cache: Cache, span: CacheSpan) { override fun onSpanAdded(cache: Cache, span: CacheSpan) {
@@ -363,13 +375,13 @@ fun PlayerView(
style = typography.xs.semiBold.color(BlackColorPalette.text) style = typography.xs.semiBold.color(BlackColorPalette.text)
) )
BasicText( BasicText(
text = song?.loudnessDb?.let { loudnessDb -> text = loudnessDb?.let { loudnessDb ->
"%.2f dB".format(loudnessDb) "%.2f dB".format(loudnessDb)
} ?: "Unknown", } ?: "Unknown",
style = typography.xs.semiBold.color(BlackColorPalette.text) style = typography.xs.semiBold.color(BlackColorPalette.text)
) )
BasicText( BasicText(
text = song?.contentLength?.let { contentLength -> text = contentLength?.let { contentLength ->
Formatter.formatShortFileSize( Formatter.formatShortFileSize(
context, context,
contentLength contentLength
@@ -381,7 +393,7 @@ fun PlayerView(
text = buildString { text = buildString {
append(Formatter.formatShortFileSize(context, cachedBytes)) append(Formatter.formatShortFileSize(context, cachedBytes))
song?.contentLength?.let { contentLength -> contentLength?.let { contentLength ->
append(" (${(cachedBytes.toFloat() / contentLength * 100).roundToInt()}%)") append(" (${(cachedBytes.toFloat() / contentLength * 100).roundToInt()}%)")
} }
}, },
@@ -390,7 +402,7 @@ fun PlayerView(
} }
} }
if (song != null && (song?.contentLength == null || song?.loudnessDb == null)) { if (song != null && (contentLength == null || loudnessDb == null)) {
BasicText( BasicText(
text = "FILL MISSING DATA", text = "FILL MISSING DATA",
style = typography.xxs.semiBold.color(BlackColorPalette.text), style = typography.xxs.semiBold.color(BlackColorPalette.text),

View File

@@ -0,0 +1,11 @@
package it.vfsfitvnm.vimusic.utils
import android.os.Bundle
fun Bundle.getFloatOrNull(key: String): Float? =
if (containsKey(key)) getFloat(key) else null
fun Bundle.getLongOrNull(key: String): Long? =
if (containsKey(key)) getLong(key) else null

View File

@@ -45,8 +45,8 @@ fun Database.insert(mediaItem: MediaItem): Song {
albumId = album?.id, albumId = album?.id,
durationText = mediaItem.mediaMetadata.extras?.getString("durationText")!!, durationText = mediaItem.mediaMetadata.extras?.getString("durationText")!!,
thumbnailUrl = mediaItem.mediaMetadata.artworkUri!!.toString(), thumbnailUrl = mediaItem.mediaMetadata.artworkUri!!.toString(),
loudnessDb = mediaItem.mediaMetadata.extras?.getFloat("loudnessDb"), loudnessDb = mediaItem.mediaMetadata.extras?.getFloatOrNull("loudnessDb"),
contentLength = mediaItem.mediaMetadata.extras?.getLong("contentLength"), contentLength = mediaItem.mediaMetadata.extras?.getLongOrNull("contentLength"),
).also(::insert) ).also(::insert)
mediaItem.mediaMetadata.extras?.getStringArrayList("artistNames")?.let { artistNames -> mediaItem.mediaMetadata.extras?.getStringArrayList("artistNames")?.let { artistNames ->