diff --git a/app/src/main/java/code/name/monkey/retromusic/db/HistoryEntity.kt b/app/src/main/java/code/name/monkey/retromusic/db/HistoryEntity.kt index 535a3796..9fa6ce6b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/db/HistoryEntity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/db/HistoryEntity.kt @@ -39,6 +39,9 @@ class HistoryEntity( @ColumnInfo(name = "artist_name") val artistName: String, val composer: String?, + @ColumnInfo(name = "cover_art") + val coverArt: String?, + val genres: String?, @ColumnInfo(name = "album_artist") val albumArtist: String?, @ColumnInfo(name = "time_played") diff --git a/app/src/main/java/code/name/monkey/retromusic/db/PlayCountEntity.kt b/app/src/main/java/code/name/monkey/retromusic/db/PlayCountEntity.kt index 2fa41b22..c1b9d665 100644 --- a/app/src/main/java/code/name/monkey/retromusic/db/PlayCountEntity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/db/PlayCountEntity.kt @@ -41,6 +41,9 @@ class PlayCountEntity( val composer: String?, @ColumnInfo(name = "album_artist") val albumArtist: String?, + @ColumnInfo(name = "cover_art") + val coverArt: String?, + val genres: String?, @ColumnInfo(name = "time_played") val timePlayed: Long, @ColumnInfo(name = "play_count") diff --git a/app/src/main/java/code/name/monkey/retromusic/db/RetroDatabase.kt b/app/src/main/java/code/name/monkey/retromusic/db/RetroDatabase.kt index 80434212..f3733aea 100644 --- a/app/src/main/java/code/name/monkey/retromusic/db/RetroDatabase.kt +++ b/app/src/main/java/code/name/monkey/retromusic/db/RetroDatabase.kt @@ -19,7 +19,7 @@ import androidx.room.RoomDatabase @Database( entities = [PlaylistEntity::class, SongEntity::class, HistoryEntity::class, PlayCountEntity::class, BlackListStoreEntity::class, LyricsEntity::class], - version = 23, + version = 24, exportSchema = false ) abstract class RetroDatabase : RoomDatabase() { diff --git a/app/src/main/java/code/name/monkey/retromusic/db/SongEntity.kt b/app/src/main/java/code/name/monkey/retromusic/db/SongEntity.kt index 206c91e2..65c49c93 100644 --- a/app/src/main/java/code/name/monkey/retromusic/db/SongEntity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/db/SongEntity.kt @@ -48,5 +48,8 @@ class SongEntity( val artistName: String, val composer: String?, @ColumnInfo(name = "album_artist") - val albumArtist: String? + val albumArtist: String?, + @ColumnInfo(name = "cover_art") + val coverArt: String?, + val genres: String? ) : Parcelable diff --git a/app/src/main/java/code/name/monkey/retromusic/db/SongExtension.kt b/app/src/main/java/code/name/monkey/retromusic/db/SongExtension.kt index 4a3705de..af99d2f8 100644 --- a/app/src/main/java/code/name/monkey/retromusic/db/SongExtension.kt +++ b/app/src/main/java/code/name/monkey/retromusic/db/SongExtension.kt @@ -43,7 +43,9 @@ fun Song.toHistoryEntity(timePlayed: Long): HistoryEntity { artistName = artistName, composer = composer, albumArtist = albumArtist, - timePlayed = timePlayed + timePlayed = timePlayed, + coverArt = coverArt, + genres = genres?.joinToString(";") ) } @@ -62,7 +64,9 @@ fun Song.toSongEntity(playListId: Long): SongEntity { artistId = artistId, artistName = artistName, composer = composer, - albumArtist = albumArtist + albumArtist = albumArtist, + coverArt = coverArt, + genres = genres?.joinToString(";") ) } @@ -80,7 +84,9 @@ fun SongEntity.toSong(): Song { artistId = artistId, artistName = artistName, composer = composer, - albumArtist = albumArtist + albumArtist = albumArtist, + coverArt = coverArt, + genres = genres?.split(';')?.toTypedArray() ) } @@ -98,7 +104,9 @@ fun PlayCountEntity.toSong(): Song { artistId = artistId, artistName = artistName, composer = composer, - albumArtist = albumArtist + albumArtist = albumArtist, + coverArt = coverArt, + genres = genres?.split(';')?.toTypedArray() ) } @@ -116,7 +124,9 @@ fun HistoryEntity.toSong(): Song { artistId = artistId, artistName = artistName, composer = composer, - albumArtist = albumArtist + albumArtist = albumArtist, + coverArt = coverArt, + genres = genres?.split(';')?.toTypedArray() ) } @@ -136,7 +146,9 @@ fun Song.toPlayCount(): PlayCountEntity { composer = composer, albumArtist = albumArtist, timePlayed = System.currentTimeMillis(), - playCount = 1 + playCount = 1, + coverArt = coverArt, + genres = genres?.joinToString(";") ) } diff --git a/app/src/main/java/code/name/monkey/retromusic/glide/RetroGlideExtension.kt b/app/src/main/java/code/name/monkey/retromusic/glide/RetroGlideExtension.kt index 9db98366..125858dd 100644 --- a/app/src/main/java/code/name/monkey/retromusic/glide/RetroGlideExtension.kt +++ b/app/src/main/java/code/name/monkey/retromusic/glide/RetroGlideExtension.kt @@ -15,7 +15,6 @@ import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.util.ArtistSignatureUtil import code.name.monkey.retromusic.util.CustomArtistImageUtil.Companion.getFile import code.name.monkey.retromusic.util.CustomArtistImageUtil.Companion.getInstance -import code.name.monkey.retromusic.util.MusicUtil.getMediaStoreAlbumCoverUri import code.name.monkey.retromusic.util.PreferenceUtil import com.bumptech.glide.GenericTransitionOptions import com.bumptech.glide.Priority @@ -51,10 +50,11 @@ object RetroGlideExtension { } private fun getSongModel(song: Song, ignoreMediaStore: Boolean): Any { - return if (ignoreMediaStore) { - AudioFileCover(song.data) + return if (!song.coverArt.isNullOrEmpty()) { + song.coverArtUri!! } else { - getMediaStoreAlbumCoverUri(song.albumId) + // this won't work but is a fallback for now i guess lol + AudioFileCover(song.data) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/model/PlaylistSong.kt b/app/src/main/java/code/name/monkey/retromusic/model/PlaylistSong.kt index ccbb31c2..a0af059b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/model/PlaylistSong.kt +++ b/app/src/main/java/code/name/monkey/retromusic/model/PlaylistSong.kt @@ -34,7 +34,9 @@ class PlaylistSong( val playlistId: Long, val idInPlayList: Long, override val composer: String?, - override val albumArtist: String? + override val albumArtist: String?, + override val coverArt: String?, + override val genres: Array? ) : Song( id = id, title = title, @@ -48,7 +50,9 @@ class PlaylistSong( artistId = artistId, artistName = artistName, composer = composer, - albumArtist = albumArtist + albumArtist = albumArtist, + coverArt = coverArt, + genres = genres ) { override fun equals(other: Any?): Boolean { @@ -73,6 +77,8 @@ class PlaylistSong( if (idInPlayList != other.idInPlayList) return false if (composer != other.composer) return false if (albumArtist != other.albumArtist) return false + if (coverArt != other.coverArt) return false + if (!genres.contentEquals(other.genres)) return false return true } @@ -93,7 +99,9 @@ class PlaylistSong( result = 31 * result + playlistId.hashCode() result = 31 * result + idInPlayList.hashCode() result = 31 * result + composer.hashCode() - result = 31 * result + (albumArtist?.hashCode() ?: 0) + result = 31 * result + albumArtist.hashCode() + result = 31 * result + coverArt.hashCode() + result = 31 * result + genres.contentHashCode() return result } } \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/model/Song.kt b/app/src/main/java/code/name/monkey/retromusic/model/Song.kt index cfd61a93..8f6af39c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/model/Song.kt +++ b/app/src/main/java/code/name/monkey/retromusic/model/Song.kt @@ -13,6 +13,7 @@ */ package code.name.monkey.retromusic.model +import android.net.Uri import android.os.Parcelable import kotlinx.parcelize.Parcelize @@ -24,6 +25,7 @@ open class Song( open val trackNumber: Int, open val year: Int, open val duration: Long, + // stream path open val data: String, open val dateModified: Long, open val albumId: Long, @@ -31,9 +33,14 @@ open class Song( open val artistId: Long, open val artistName: String, open val composer: String?, - open val albumArtist: String? + open val albumArtist: String?, + open val coverArt: String?, + // TODO: store genres in a smarter way + open val genres: Array? ) : Parcelable { + val coverArtUri: Uri? + get() = Uri.parse(coverArt) // need to override manually because is open and cannot be a data class override fun equals(other: Any?): Boolean { @@ -55,6 +62,8 @@ open class Song( if (artistName != other.artistName) return false if (composer != other.composer) return false if (albumArtist != other.albumArtist) return false + if (coverArt != other.coverArt) return false + if (!genres.contentEquals(other.genres)) return false return true } @@ -73,6 +82,8 @@ open class Song( result = 31 * result + artistName.hashCode() result = 31 * result + (composer?.hashCode() ?: 0) result = 31 * result + (albumArtist?.hashCode() ?: 0) + result = 31 * result + (coverArt?.hashCode() ?: 0) + result = 31 * result + (genres?.contentHashCode() ?: 0) return result } @@ -93,7 +104,9 @@ open class Song( artistId = -1, artistName = "", composer = "", - albumArtist = "" + albumArtist = "", + coverArt = "", + genres = emptyArray() ) } } \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/repository/PlaylistRepository.kt b/app/src/main/java/code/name/monkey/retromusic/repository/PlaylistRepository.kt index 5f215670..69706250 100644 --- a/app/src/main/java/code/name/monkey/retromusic/repository/PlaylistRepository.kt +++ b/app/src/main/java/code/name/monkey/retromusic/repository/PlaylistRepository.kt @@ -53,6 +53,7 @@ interface PlaylistRepository { fun playlistSongs(playlistId: Long): List } +// TODO: uncursorify this class RealPlaylistRepository( private val contentResolver: ContentResolver ) : PlaylistRepository { @@ -168,7 +169,9 @@ class RealPlaylistRepository( playlistId, idInPlaylist, composer ?: "", - albumArtist + albumArtist, + null, + emptyArray() ) } diff --git a/app/src/main/java/code/name/monkey/retromusic/repository/PlaylistSongsLoader.kt b/app/src/main/java/code/name/monkey/retromusic/repository/PlaylistSongsLoader.kt index 80f0829a..d3c8faaa 100644 --- a/app/src/main/java/code/name/monkey/retromusic/repository/PlaylistSongsLoader.kt +++ b/app/src/main/java/code/name/monkey/retromusic/repository/PlaylistSongsLoader.kt @@ -32,6 +32,7 @@ import code.name.monkey.retromusic.model.Song * Created by hemanths on 16/08/17. */ +// TODO: uncursorify this object PlaylistSongsLoader { fun getPlaylistSongList( @@ -99,7 +100,9 @@ object PlaylistSongsLoader { playlistId, idInPlaylist, composer, - albumArtist + albumArtist, + null, + emptyArray() ) } diff --git a/app/src/main/java/code/name/monkey/retromusic/repository/SongRepository.kt b/app/src/main/java/code/name/monkey/retromusic/repository/SongRepository.kt index d2a66c1d..0818d5f0 100644 --- a/app/src/main/java/code/name/monkey/retromusic/repository/SongRepository.kt +++ b/app/src/main/java/code/name/monkey/retromusic/repository/SongRepository.kt @@ -85,7 +85,7 @@ class RealSongRepository(private val context: Context) : SongRepository { "river-lake convergence", 1, 2021, - 23723478, + 237234, "https://versary.town/river-lake-convergence.mp3", 1639589623, 1, @@ -93,7 +93,26 @@ class RealSongRepository(private val context: Context) : SongRepository { 1, "annieversary", null, - "annieversary" + "annieversary", + "https://i1.sndcdn.com/artworks-T3nLbND6w681B2ey-YDI6ew-t500x500.jpg", + genres = arrayOf("Lakecore") + ), + Song( + 2, + "river-lake convergence 2", + 1, + 2021, + 237234, + "https://versary.town/river-lake-convergence.mp3", + 1639589623, + 2, + "river-lake convergence 2", + 1, + "annieversary", + null, + "annieversary", + "https://i1.sndcdn.com/artworks-T3nLbND6w681B2ey-YDI6ew-t500x500.jpg", + genres = arrayOf("Lakecore") ) ) } diff --git a/app/src/main/java/code/name/monkey/retromusic/service/MusicService.java b/app/src/main/java/code/name/monkey/retromusic/service/MusicService.java index 52054e57..cbb8c00f 100644 --- a/app/src/main/java/code/name/monkey/retromusic/service/MusicService.java +++ b/app/src/main/java/code/name/monkey/retromusic/service/MusicService.java @@ -854,7 +854,7 @@ public class MusicService extends MediaBrowserServiceCompat .setMediaId(String.valueOf(song.getId())) .setTitle(song.getTitle()) .setSubtitle(song.getArtistName()) - .setIconUri(MusicUtil.getMediaStoreAlbumCoverUri(song.getAlbumId())) + .setIconUri(song.getCoverArtUri()) .build(), FLAG_PLAYABLE ); result.sendResult(Collections.singletonList(mediaItem));