Make durationText nullable
This commit is contained in:
@@ -132,6 +132,9 @@ interface Database {
|
||||
@Query("UPDATE Song SET likedAt = :likedAt WHERE id = :songId")
|
||||
fun like(songId: String, likedAt: Long?): Int
|
||||
|
||||
@Query("UPDATE Song SET durationText = :durationText WHERE id = :songId")
|
||||
fun updateDurationText(songId: String, durationText: String): Int
|
||||
|
||||
@Query("SELECT lyrics FROM Song WHERE id = :songId")
|
||||
fun lyrics(songId: String): Flow<String?>
|
||||
|
||||
@@ -341,7 +344,7 @@ interface Database {
|
||||
id = mediaItem.mediaId,
|
||||
title = mediaItem.mediaMetadata.title!!.toString(),
|
||||
artistsText = mediaItem.mediaMetadata.artist?.toString(),
|
||||
durationText = mediaItem.mediaMetadata.extras?.getString("durationText")!!,
|
||||
durationText = mediaItem.mediaMetadata.extras?.getString("durationText"),
|
||||
thumbnailUrl = mediaItem.mediaMetadata.artworkUri?.toString()
|
||||
).let(block).also { song ->
|
||||
if (insert(song) == -1L) return
|
||||
@@ -446,7 +449,7 @@ interface Database {
|
||||
views = [
|
||||
SortedSongPlaylistMap::class
|
||||
],
|
||||
version = 19,
|
||||
version = 20,
|
||||
exportSchema = true,
|
||||
autoMigrations = [
|
||||
AutoMigration(from = 1, to = 2),
|
||||
@@ -464,6 +467,7 @@ interface Database {
|
||||
AutoMigration(from = 16, to = 17),
|
||||
AutoMigration(from = 17, to = 18),
|
||||
AutoMigration(from = 18, to = 19),
|
||||
AutoMigration(from = 19, to = 20),
|
||||
],
|
||||
)
|
||||
@TypeConverters(Converters::class)
|
||||
|
||||
@@ -9,7 +9,7 @@ open class DetailedSong(
|
||||
val id: String,
|
||||
val title: String,
|
||||
val artistsText: String? = null,
|
||||
val durationText: String,
|
||||
val durationText: String?,
|
||||
val thumbnailUrl: String?,
|
||||
val totalPlayTimeMs: Long = 0,
|
||||
@Relation(
|
||||
|
||||
@@ -10,7 +10,7 @@ data class Song(
|
||||
@PrimaryKey val id: String,
|
||||
val title: String,
|
||||
val artistsText: String? = null,
|
||||
val durationText: String,
|
||||
val durationText: String?,
|
||||
val thumbnailUrl: String?,
|
||||
val lyrics: String? = null,
|
||||
val synchronizedLyrics: String? = null,
|
||||
|
||||
@@ -22,7 +22,7 @@ object DetailedSongSaver : Saver<DetailedSong, List<Any?>> {
|
||||
id = value[0] as String,
|
||||
title = value[1] as String,
|
||||
artistsText = value[2] as String?,
|
||||
durationText = value[3] as String,
|
||||
durationText = value[3] as String?,
|
||||
thumbnailUrl = value[4] as String?,
|
||||
totalPlayTimeMs = value[5] as Long,
|
||||
albumId = value[6] as String?,
|
||||
|
||||
@@ -20,6 +20,7 @@ import android.media.session.PlaybackState
|
||||
import android.net.Uri
|
||||
import android.os.Build
|
||||
import android.os.Handler
|
||||
import android.text.format.DateUtils
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.setValue
|
||||
@@ -651,6 +652,13 @@ class PlayerService : InvincibleService(), Player.Listener, PlaybackStatsListene
|
||||
player.findNextMediaItemById(videoId)
|
||||
}
|
||||
|
||||
if (mediaItem?.mediaMetadata?.extras?.getString("durationText") == null) {
|
||||
format.approxDurationMs?.div(1000)?.let(DateUtils::formatElapsedTime)?.removePrefix("0")?.let { durationText ->
|
||||
mediaItem?.mediaMetadata?.extras?.putString("durationText", durationText)
|
||||
Database.updateDurationText(videoId, durationText)
|
||||
}
|
||||
}
|
||||
|
||||
query {
|
||||
mediaItem?.let(Database::insert)
|
||||
|
||||
|
||||
@@ -49,9 +49,9 @@ fun SongItem(
|
||||
) {
|
||||
SongItem(
|
||||
thumbnailModel = mediaItem.mediaMetadata.artworkUri.thumbnail(thumbnailSizePx),
|
||||
title = mediaItem.mediaMetadata.title!!.toString(),
|
||||
title = mediaItem.mediaMetadata.title.toString(),
|
||||
authors = mediaItem.mediaMetadata.artist.toString(),
|
||||
durationText = mediaItem.mediaMetadata.extras?.getString("durationText") ?: "?",
|
||||
durationText = mediaItem.mediaMetadata.extras?.getString("durationText"),
|
||||
menuContent = menuContent,
|
||||
onClick = onClick,
|
||||
onThumbnailContent = onThumbnailContent,
|
||||
@@ -75,7 +75,7 @@ fun SongItem(
|
||||
SongItem(
|
||||
thumbnailModel = song.thumbnailUrl?.thumbnail(thumbnailSizePx),
|
||||
title = song.title,
|
||||
authors = song.artistsText ?: "",
|
||||
authors = song.artistsText,
|
||||
durationText = song.durationText,
|
||||
menuContent = menuContent,
|
||||
onClick = onClick,
|
||||
@@ -150,9 +150,7 @@ fun SongItem(
|
||||
.combinedClickable(
|
||||
indication = rememberRipple(bounded = true),
|
||||
interactionSource = remember { MutableInteractionSource() },
|
||||
onLongClick = {
|
||||
menuState.display(menuContent)
|
||||
},
|
||||
onLongClick = { menuState.display(menuContent) },
|
||||
onClick = onClick
|
||||
)
|
||||
.fillMaxWidth()
|
||||
|
||||
Reference in New Issue
Block a user