From 2769db3f1749f3f45427a8ef58e64f4f65dfcd76 Mon Sep 17 00:00:00 2001 From: Hemanth S Date: Fri, 21 Aug 2020 20:17:25 +0530 Subject: [PATCH] =?UTF-8?q?=E2=AD=90=EF=B8=8FFavorite=20playlist=20added?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../name/monkey/retromusic/db/PlaylistDao.kt | 8 +++++- .../fragments/DetailListFragment.kt | 26 +++++++++---------- .../fragments/base/AbsPlayerFragment.kt | 3 ++- .../retromusic/repository/Repository.kt | 19 +++++++++----- .../repository/RoomPlaylistRepository.kt | 12 +++++++++ 5 files changed, 47 insertions(+), 21 deletions(-) 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 6bf2c3b6..a1ef98ad 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 @@ -12,7 +12,7 @@ interface PlaylistDao { suspend fun renamePlaylistEntity(playlistId: Int, name: String) @Query("SELECT * FROM PlaylistEntity WHERE playlist_name = :name") - suspend fun checkPlaylistExists(name: String): List + fun checkPlaylistExists(name: String): List @Query("SELECT * FROM PlaylistEntity") suspend fun playlists(): List @@ -57,4 +57,10 @@ interface PlaylistDao { @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> + + @Query("SELECT * FROM SongEntity WHERE playlist_creator_id= :playlistId") + fun favoritesSongs(playlistId: Int): List + } \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/DetailListFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/DetailListFragment.kt index 3bfa8ef6..a2b9302b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/DetailListFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/DetailListFragment.kt @@ -17,7 +17,6 @@ import code.name.monkey.retromusic.fragments.artists.ArtistClickListener import code.name.monkey.retromusic.fragments.base.AbsMainActivityFragment import code.name.monkey.retromusic.model.Album import code.name.monkey.retromusic.model.Artist -import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.repository.RealRepository import kotlinx.android.synthetic.main.fragment_playlist_detail.* import kotlinx.coroutines.Dispatchers.IO @@ -74,19 +73,20 @@ class DetailListFragment : AbsMainActivityFragment(R.layout.fragment_playlist_de private fun loadFavorite() { toolbar.setTitle(R.string.favorites) - lifecycleScope.launch(IO) { - val songs = repository.favoritePlaylistHome() - withContext(Main) { - recyclerView.apply { - adapter = SongAdapter( - requireActivity(), - songs.arrayList as MutableList, - R.layout.item_list, null - ) - layoutManager = linearLayoutManager() - } - } + val songAdapter = SongAdapter( + requireActivity(), + mutableListOf(), + R.layout.item_list, null + ) + recyclerView.apply { + adapter = songAdapter + layoutManager = linearLayoutManager() } + repository.favorites().observe(viewLifecycleOwner, Observer { + println(it.size) + val songs = it.map { songEntity -> songEntity.toSong() } + songAdapter.swapDataSet(songs) + }) } private fun loadArtists(title: Int, type: Int) { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsPlayerFragment.kt index 6cffd1f1..40277262 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsPlayerFragment.kt @@ -164,7 +164,8 @@ abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMainActivityFragme lifecycleScope.launch(IO) { val playlist: PlaylistEntity = repository.favoritePlaylist().first() val songEntity = song.toSongEntity(playlist.playListId) - if (repository.isFavoriteSong(songEntity).isNotEmpty()) { + val isFavorite = repository.isFavoriteSong(songEntity).isNotEmpty() + if (isFavorite) { repository.removeSongFromPlaylist(songEntity) } else { repository.insertSongs(listOf(song.toSongEntity(playlist.playListId))) 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 7197357d..0ac0caad 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 @@ -83,7 +83,9 @@ interface Repository { suspend fun addSongToHistory(currentSong: Song) suspend fun songPresentInHistory(currentSong: Song): HistoryEntity? suspend fun updateHistorySong(currentSong: Song) + suspend fun favoritePlaylistSongs(): List fun historySong(): LiveData> + fun favorites(): LiveData> } class RealRepository( @@ -252,9 +254,16 @@ class RealRepository( override suspend fun updateHistorySong(currentSong: Song) = roomRepository.updateHistorySong(currentSong) + + override suspend fun favoritePlaylistSongs(): List = + roomRepository.favoritePlaylistSongs(context.getString(R.string.favorites)) + override fun historySong(): LiveData> = roomRepository.historySongs() + override fun favorites(): LiveData> = + roomRepository.favoritePlaylistLiveData(context.getString(R.string.favorites)) + override suspend fun suggestionsHome(): Home { val songs = NotPlayedPlaylist().songs().shuffled().takeIf { @@ -294,12 +303,10 @@ class RealRepository( } override suspend fun favoritePlaylistHome(): Home { - val playlists = - playlistRepository.favoritePlaylist(context.getString(R.string.favorites)).take(5) - val songs = if (playlists.isNotEmpty()) - PlaylistSongsLoader.getPlaylistSongList(context, playlists[0]) - else emptyList() - + val songs = favoritePlaylistSongs().map { + it.toSong() + } + println(songs.size) return Home(songs, FAVOURITES, R.string.favorites) } diff --git a/app/src/main/java/code/name/monkey/retromusic/repository/RoomPlaylistRepository.kt b/app/src/main/java/code/name/monkey/retromusic/repository/RoomPlaylistRepository.kt index b2951e12..a4c76ba2 100644 --- a/app/src/main/java/code/name/monkey/retromusic/repository/RoomPlaylistRepository.kt +++ b/app/src/main/java/code/name/monkey/retromusic/repository/RoomPlaylistRepository.kt @@ -23,7 +23,9 @@ interface RoomPlaylistRepository { suspend fun addSongToHistory(currentSong: Song) suspend fun songPresentInHistory(song: Song): HistoryEntity? suspend fun updateHistorySong(song: Song) + suspend fun favoritePlaylistSongs(favorite: String): List fun historySongs(): LiveData> + fun favoritePlaylistLiveData(favorite: String): LiveData> } class RealRoomRepository( @@ -99,4 +101,14 @@ class RealRoomRepository( return playlistDao.historySongs() } + override fun favoritePlaylistLiveData(favorite: String): LiveData> = + playlistDao.favoritesSongsLiveData( + playlistDao.checkPlaylistExists(favorite).first().playListId + ) + + override suspend fun favoritePlaylistSongs(favorite: String): List = + playlistDao.favoritesSongs( + playlistDao.checkPlaylistExists(favorite).first().playListId + ) + } \ No newline at end of file