Make durationText nullable

This commit is contained in:
vfsfitvnm
2022-09-29 19:36:29 +02:00
parent 88e71949ed
commit b4fb9cf6d9
8 changed files with 691 additions and 24 deletions

View File

@@ -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)

View File

@@ -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(

View File

@@ -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,

View File

@@ -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?,

View File

@@ -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)

View File

@@ -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()