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 a8369226e..64db1ae43 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 @@ -64,4 +64,7 @@ interface PlaylistDao { @Query("SELECT * FROM SongEntity WHERE playlist_creator_id= :playlistId") fun favoritesSongs(playlistId: Long): List + + @Query("SELECT EXISTS(SELECT * FROM PlaylistEntity WHERE playlist_id = :playlistId)") + fun checkPlaylistExists(playlistId: Long): LiveData } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistDetailsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistDetailsFragment.kt index 2c9771327..f90902a04 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistDetailsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistDetailsFragment.kt @@ -9,6 +9,7 @@ import androidx.activity.addCallback import androidx.core.view.ViewCompat import androidx.core.view.doOnPreDraw import androidx.core.view.isVisible +import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView @@ -58,7 +59,6 @@ class PlaylistDetailsFragment : AbsMainActivityFragment(R.layout.fragment_playli enterTransition = MaterialSharedAxis(MaterialSharedAxis.Z, true).addTarget(view) returnTransition = MaterialSharedAxis(MaterialSharedAxis.Z, false) setHasOptionsMenu(true) - mainActivity.addMusicServiceEventListener(viewModel) mainActivity.setSupportActionBar(binding.toolbar) ViewCompat.setTransitionName(binding.container, "playlist") playlist = arguments.extraPlaylist @@ -67,6 +67,11 @@ class PlaylistDetailsFragment : AbsMainActivityFragment(R.layout.fragment_playli viewModel.getSongs().observe(viewLifecycleOwner) { songs(it.toSongs()) } + viewModel.playlistExists().observe(viewLifecycleOwner) { + if (!it) { + findNavController().navigateUp() + } + } postponeEnterTransition() requireView().doOnPreDraw { startPostponedEnterTransition() } requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner) { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistDetailsViewModel.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistDetailsViewModel.kt index 3416caa23..fad139742 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistDetailsViewModel.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistDetailsViewModel.kt @@ -22,24 +22,15 @@ import code.name.monkey.retromusic.db.SongEntity import code.name.monkey.retromusic.interfaces.IMusicServiceEventListener import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.repository.RealRepository +import code.name.monkey.retromusic.repository.RealRoomRepository class PlaylistDetailsViewModel( private val realRepository: RealRepository, private var playlist: PlaylistWithSongs -) : ViewModel(), IMusicServiceEventListener { - - private val playListSongs = MutableLiveData>() - +) : ViewModel() { fun getSongs(): LiveData> = realRepository.playlistSongs(playlist.playlistEntity.playListId) - override fun onMediaStoreChanged() {} - override fun onServiceConnected() {} - override fun onServiceDisconnected() {} - override fun onQueueChanged() {} - override fun onPlayingMetaChanged() {} - override fun onPlayStateChanged() {} - override fun onRepeatModeChanged() {} - override fun onShuffleModeChanged() {} - override fun onFavoriteStateChanged() {} + fun playlistExists(): LiveData = + realRepository.checkPlaylistExists(playlist.playlistEntity.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 9ab706a7f..c2e67e584 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 @@ -111,6 +111,7 @@ interface Repository { suspend fun searchAlbums(query: String): List suspend fun isSongFavorite(songId: Long): Boolean fun getSongByGenre(genreId: Long): Song + fun checkPlaylistExists(playListId: Long): LiveData } class RealRepository( @@ -277,6 +278,9 @@ class RealRepository( override suspend fun checkPlaylistExists(playlistName: String): List = roomRepository.checkPlaylistExists(playlistName) + override fun checkPlaylistExists(playListId: Long): LiveData = + roomRepository.checkPlaylistExists(playListId) + override suspend fun createPlaylist(playlistEntity: PlaylistEntity): Long = roomRepository.createPlaylist(playlistEntity) @@ -377,7 +381,7 @@ class RealRepository( } override suspend fun suggestions(): List { - if (!PreferenceUtil.homeSuggestions) return listOf() + if (!PreferenceUtil.homeSuggestions) return listOf() return NotPlayedPlaylist().songs().shuffled().takeIf { it.size > 9 } ?: emptyList() 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 ab1fa058b..2d6277322 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 @@ -49,6 +49,7 @@ interface RoomRepository { suspend fun blackListPaths(): List suspend fun deleteSongs(songs: List) suspend fun isSongFavorite(context: Context, songId: Long): Boolean + fun checkPlaylistExists(playListId: Long): LiveData } class RealRoomRepository( @@ -97,6 +98,9 @@ class RealRoomRepository( override fun getSongs(playListId: Long): LiveData> = playlistDao.songsFromPlaylist(playListId) + override fun checkPlaylistExists(playListId: Long): LiveData = + playlistDao.checkPlaylistExists(playListId) + override suspend fun deletePlaylistEntities(playlistEntities: List) = playlistDao.deletePlaylists(playlistEntities)