diff --git a/app/src/main/java/code/name/monkey/retromusic/MainModule.kt b/app/src/main/java/code/name/monkey/retromusic/MainModule.kt index aae0ed48..16741bc6 100644 --- a/app/src/main/java/code/name/monkey/retromusic/MainModule.kt +++ b/app/src/main/java/code/name/monkey/retromusic/MainModule.kt @@ -55,6 +55,9 @@ private val roomModule = module { factory { get().playCountDao() } + factory { + get().historyDao() + } single { RealRoomRepository(get(), get(), get()) diff --git a/app/src/main/java/code/name/monkey/retromusic/db/HistoryDao.kt b/app/src/main/java/code/name/monkey/retromusic/db/HistoryDao.kt new file mode 100644 index 00000000..5ea731a2 --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/db/HistoryDao.kt @@ -0,0 +1,26 @@ +package code.name.monkey.retromusic.db + +import androidx.lifecycle.LiveData +import androidx.room.* + +@Dao +interface HistoryDao { + companion object { + private const val HISTORY_LIMIT = 100 + } + + @Insert(onConflict = OnConflictStrategy.REPLACE) + suspend fun insertSongInHistory(historyEntity: HistoryEntity) + + @Query("SELECT * FROM HistoryEntity WHERE id = :songId LIMIT 1") + suspend fun isSongPresentInHistory(songId: Int): HistoryEntity? + + @Update + suspend fun updateHistorySong(historyEntity: HistoryEntity) + + @Query("SELECT * FROM HistoryEntity ORDER BY time_played DESC LIMIT $HISTORY_LIMIT") + fun historySongs(): List + + @Query("SELECT * FROM HistoryEntity ORDER BY time_played DESC LIMIT $HISTORY_LIMIT") + fun observableHistorySongs(): LiveData> +} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/db/PlaylistDao.kt b/app/src/main/java/code/name/monkey/retromusic/db/PlaylistDao.kt index c3b7f801..0cfe2b8a 100644 --- a/app/src/main/java/code/name/monkey/retromusic/db/PlaylistDao.kt +++ b/app/src/main/java/code/name/monkey/retromusic/db/PlaylistDao.kt @@ -45,17 +45,6 @@ interface PlaylistDao { @Delete suspend fun deleteSongsInPlaylist(songs: List) - @Insert(onConflict = OnConflictStrategy.REPLACE) - suspend fun insertSongInHistory(historyEntity: HistoryEntity) - - @Query("SELECT * FROM HistoryEntity WHERE id = :songId LIMIT 1") - suspend fun isSongPresentInHistory(songId: Int): HistoryEntity? - - @Update - suspend fun updateHistorySong(historyEntity: HistoryEntity) - - @Query("SELECT * FROM HistoryEntity ORDER BY time_played DESC") - fun historySongs(): LiveData> @Query("SELECT * FROM SongEntity WHERE playlist_creator_id= :playlistId") fun favoritesSongsLiveData(playlistId: Int): LiveData> 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 02cb6586..e9b99cca 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 @@ -12,4 +12,5 @@ abstract class RetroDatabase : RoomDatabase() { abstract fun playlistDao(): PlaylistDao abstract fun blackListStore(): BlackListStoreDao abstract fun playCountDao(): PlayCountDao + abstract fun historyDao(): HistoryDao } \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumDetailsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumDetailsFragment.kt index 2dfc5101..05572748 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumDetailsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumDetailsFragment.kt @@ -168,9 +168,7 @@ class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_det detailsViewModel.getArtist(album.artistId).observe(viewLifecycleOwner, Observer { loadArtistImage(it) }) - /*detailsViewModel.getMoreAlbums().observe(viewLifecycleOwner, Observer { - moreAlbums(it) - })*/ + detailsViewModel.getAlbumInfo(album).observe(viewLifecycleOwner, Observer { result -> when (result) { is Result.Loading -> { @@ -224,6 +222,9 @@ class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_det } private fun loadArtistImage(artist: Artist) { + detailsViewModel.getMoreAlbums(artist).observe(viewLifecycleOwner, Observer { + moreAlbums(it) + }) ArtistGlideRequest.Builder.from(Glide.with(requireContext()), artist) .forceDownload(PreferenceUtil.isAllowedToDownloadMetadata()) .generatePalette(requireContext()) diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/artists/ArtistDetailsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/artists/ArtistDetailsFragment.kt index 91743de4..877def06 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/artists/ArtistDetailsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/artists/ArtistDetailsFragment.kt @@ -18,6 +18,7 @@ import androidx.recyclerview.widget.DefaultItemAnimator import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager import code.name.monkey.appthemehelper.ThemeStore +import code.name.monkey.retromusic.EXTRA_ALBUM_ID import code.name.monkey.retromusic.R import code.name.monkey.retromusic.adapter.album.HorizontalAlbumAdapter import code.name.monkey.retromusic.adapter.song.SimpleSongAdapter @@ -208,7 +209,7 @@ class ArtistDetailsFragment : AbsMainActivityFragment(R.layout.fragment_artist_d override fun onAlbumClick(albumId: Int, view: View) { findNavController().navigate( R.id.albumDetailsFragment, - bundleOf("extra_album_id" to albumId), + bundleOf(EXTRA_ALBUM_ID to albumId), null, FragmentNavigatorExtras( view to getString(R.string.transition_album_art) diff --git a/app/src/main/java/code/name/monkey/retromusic/repository/Repository.kt b/app/src/main/java/code/name/monkey/retromusic/repository/Repository.kt index dcd94ff5..f0af9ecc 100644 --- a/app/src/main/java/code/name/monkey/retromusic/repository/Repository.kt +++ b/app/src/main/java/code/name/monkey/retromusic/repository/Repository.kt @@ -36,11 +36,12 @@ interface Repository { fun artistsFlow(): Flow>> fun playlistsFlow(): Flow>> fun genresFlow(): Flow>> - fun historySong(): LiveData> + fun historySong(): List fun favorites(): LiveData> + fun observableHistorySongs(): LiveData> + fun albumById(albumId: Int): Album suspend fun fetchAlbums(): List suspend fun albumByIdAsync(albumId: Int): Album - fun albumById(albumId: Int): Album suspend fun allSongs(): List suspend fun fetchArtists(): List suspend fun albumArtists(): List @@ -294,7 +295,10 @@ class RealRepository( override suspend fun blackListPaths(): List = roomRepository.blackListPaths() - override fun historySong(): LiveData> = + override fun observableHistorySongs(): LiveData> = + roomRepository.observableHistorySongs() + + override fun historySong(): List = roomRepository.historySongs() override fun favorites(): LiveData> = diff --git a/app/src/main/java/code/name/monkey/retromusic/repository/RoomRepository.kt b/app/src/main/java/code/name/monkey/retromusic/repository/RoomRepository.kt index a523883d..8267b36a 100644 --- a/app/src/main/java/code/name/monkey/retromusic/repository/RoomRepository.kt +++ b/app/src/main/java/code/name/monkey/retromusic/repository/RoomRepository.kt @@ -7,9 +7,10 @@ import code.name.monkey.retromusic.model.Song interface RoomRepository { - fun historySongs(): LiveData> + fun historySongs(): List fun favoritePlaylistLiveData(favorite: String): LiveData> fun insertBlacklistPath(blackListStoreEntity: BlackListStoreEntity) + fun observableHistorySongs(): LiveData> suspend fun createPlaylist(playlistEntity: PlaylistEntity): Long suspend fun checkPlaylistExists(playlistName: String): List suspend fun playlists(): List @@ -42,7 +43,8 @@ interface RoomRepository { class RealRoomRepository( private val playlistDao: PlaylistDao, private val blackListStoreDao: BlackListStoreDao, - private val playCountDao: PlayCountDao + private val playCountDao: PlayCountDao, + private val historyDao: HistoryDao ) : RoomRepository { @WorkerThread override suspend fun createPlaylist(playlistEntity: PlaylistEntity): Long = @@ -59,12 +61,6 @@ class RealRoomRepository( override suspend fun playlistWithSongs(): List = playlistDao.playlistsWithSongs() - /* val tempList = ArrayList(songs) - val existingSongs = songs.map { - playlistDao.checkSongExistsWithPlaylistName(it.playlistCreatorName, it.songId) - }.first() - println("Existing ${existingSongs.size}") - tempList.removeAll(existingSongs)*/ @WorkerThread override suspend fun insertSongs(songs: List) = playlistDao.insertSongsToPlaylist(songs) @@ -96,7 +92,6 @@ class RealRoomRepository( } } - override suspend fun isFavoriteSong(songEntity: SongEntity): List = playlistDao.isSongExistsInPlaylist( songEntity.playlistCreatorId, @@ -107,17 +102,18 @@ class RealRoomRepository( playlistDao.removeSongFromPlaylist(songEntity.playlistCreatorId, songEntity.id) override suspend fun addSongToHistory(currentSong: Song) = - playlistDao.insertSongInHistory(currentSong.toHistoryEntity(System.currentTimeMillis())) + historyDao.insertSongInHistory(currentSong.toHistoryEntity(System.currentTimeMillis())) override suspend fun songPresentInHistory(song: Song): HistoryEntity? = - playlistDao.isSongPresentInHistory(song.id) + historyDao.isSongPresentInHistory(song.id) override suspend fun updateHistorySong(song: Song) = - playlistDao.updateHistorySong(song.toHistoryEntity(System.currentTimeMillis())) + historyDao.updateHistorySong(song.toHistoryEntity(System.currentTimeMillis())) - override fun historySongs(): LiveData> { - return playlistDao.historySongs() - } + override fun observableHistorySongs(): LiveData> = + historyDao.observableHistorySongs() + + override fun historySongs(): List = historyDao.historySongs() override fun favoritePlaylistLiveData(favorite: String): LiveData> = playlistDao.favoritesSongsLiveData(