From 025e908c22615ea591b1039cc509a6751b2c96e6 Mon Sep 17 00:00:00 2001 From: Andrei M Date: Sat, 1 Apr 2023 23:18:15 +0300 Subject: [PATCH 1/2] Add Upsert to PlayCountDao --- .../activities/base/AbsMusicServiceActivity.kt | 13 +++++-------- .../name/monkey/retromusic/db/PlayCountDao.kt | 13 ++++--------- .../monkey/retromusic/repository/Repository.kt | 16 ++++++---------- .../retromusic/repository/RoomRepository.kt | 16 ++++++---------- 4 files changed, 21 insertions(+), 37 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsMusicServiceActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsMusicServiceActivity.kt index 86bf86461..1d9489bb8 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsMusicServiceActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsMusicServiceActivity.kt @@ -131,14 +131,11 @@ abstract class AbsMusicServiceActivity : AbsBaseActivity(), IMusicServiceEventLi repository.addSongToHistory(MusicPlayerRemote.currentSong) } } - val songs = repository.checkSongExistInPlayCount(MusicPlayerRemote.currentSong.id) - if (songs.isNotEmpty()) { - repository.updateSongInPlayCount(songs.first().apply { - playCount += 1 - }) - } else { - repository.insertSongInPlayCount(MusicPlayerRemote.currentSong.toPlayCount()) - } + val song = repository.findSongExistInPlayCount(MusicPlayerRemote.currentSong.id) + ?.apply { playCount += 1 } + ?: MusicPlayerRemote.currentSong.toPlayCount() + + repository.upsertSongInPlayCount(song) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/db/PlayCountDao.kt b/app/src/main/java/code/name/monkey/retromusic/db/PlayCountDao.kt index 420b2d434..087ae4faf 100644 --- a/app/src/main/java/code/name/monkey/retromusic/db/PlayCountDao.kt +++ b/app/src/main/java/code/name/monkey/retromusic/db/PlayCountDao.kt @@ -18,24 +18,19 @@ import androidx.room.* @Dao interface PlayCountDao { - @Insert(onConflict = OnConflictStrategy.REPLACE) - fun insertSongInPlayCount(playCountEntity: PlayCountEntity) - @Update - fun updateSongInPlayCount(playCountEntity: PlayCountEntity) + @Upsert + fun upsertSongInPlayCount(playCountEntity: PlayCountEntity) @Delete fun deleteSongInPlayCount(playCountEntity: PlayCountEntity) - @Query("SELECT * FROM PlayCountEntity WHERE id =:songId") - fun checkSongExistInPlayCount(songId: Long): List + @Query("SELECT * FROM PlayCountEntity WHERE id =:songId LIMIT 1") + fun findSongExistInPlayCount(songId: Long): PlayCountEntity? @Query("SELECT * FROM PlayCountEntity ORDER BY play_count DESC") fun playCountSongs(): List @Query("DELETE FROM SongEntity WHERE id =:songId") fun deleteSong(songId: Long) - - @Query("UPDATE PlayCountEntity SET play_count = play_count + 1 WHERE id = :id") - fun updateQuantity(id: Long) } 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 76f1fa53c..d02b900b4 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 @@ -84,12 +84,11 @@ interface Repository { suspend fun favoritePlaylistSongs(): List suspend fun recentSongs(): List suspend fun topPlayedSongs(): List - suspend fun insertSongInPlayCount(playCountEntity: PlayCountEntity) - suspend fun updateSongInPlayCount(playCountEntity: PlayCountEntity) + suspend fun upsertSongInPlayCount(playCountEntity: PlayCountEntity) suspend fun deleteSongInPlayCount(playCountEntity: PlayCountEntity) suspend fun deleteSongInHistory(songId: Long) suspend fun clearSongHistory() - suspend fun checkSongExistInPlayCount(songId: Long): List + suspend fun findSongExistInPlayCount(songId: Long): PlayCountEntity? suspend fun playCountSongs(): List suspend fun deleteSongs(songs: List) suspend fun contributor(): List @@ -285,11 +284,8 @@ class RealRepository( override suspend fun topPlayedSongs(): List = topPlayedRepository.topTracks() - override suspend fun insertSongInPlayCount(playCountEntity: PlayCountEntity) = - roomRepository.insertSongInPlayCount(playCountEntity) - - override suspend fun updateSongInPlayCount(playCountEntity: PlayCountEntity) = - roomRepository.updateSongInPlayCount(playCountEntity) + override suspend fun upsertSongInPlayCount(playCountEntity: PlayCountEntity) = + roomRepository.upsertSongInPlayCount(playCountEntity) override suspend fun deleteSongInPlayCount(playCountEntity: PlayCountEntity) = roomRepository.deleteSongInPlayCount(playCountEntity) @@ -301,8 +297,8 @@ class RealRepository( roomRepository.clearSongHistory() } - override suspend fun checkSongExistInPlayCount(songId: Long): List = - roomRepository.checkSongExistInPlayCount(songId) + override suspend fun findSongExistInPlayCount(songId: Long): PlayCountEntity? = + roomRepository.findSongExistInPlayCount(songId) override suspend fun playCountSongs(): List = roomRepository.playCountSongs() 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 a5231ccae..04d1da4ba 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 @@ -34,12 +34,11 @@ interface RoomRepository { suspend fun songPresentInHistory(song: Song): HistoryEntity? suspend fun updateHistorySong(song: Song) suspend fun favoritePlaylistSongs(favorite: String): List - suspend fun insertSongInPlayCount(playCountEntity: PlayCountEntity) - suspend fun updateSongInPlayCount(playCountEntity: PlayCountEntity) + suspend fun upsertSongInPlayCount(playCountEntity: PlayCountEntity) suspend fun deleteSongInPlayCount(playCountEntity: PlayCountEntity) suspend fun deleteSongInHistory(songId: Long) suspend fun clearSongHistory() - suspend fun checkSongExistInPlayCount(songId: Long): List + suspend fun findSongExistInPlayCount(songId: Long): PlayCountEntity? suspend fun playCountSongs(): List suspend fun deleteSongs(songs: List) suspend fun isSongFavorite(context: Context, songId: Long): Boolean @@ -155,11 +154,8 @@ class RealRoomRepository( playlistDao.playlist(favorite).first().playListId ) else emptyList() - override suspend fun insertSongInPlayCount(playCountEntity: PlayCountEntity) = - playCountDao.insertSongInPlayCount(playCountEntity) - - override suspend fun updateSongInPlayCount(playCountEntity: PlayCountEntity) = - playCountDao.updateSongInPlayCount(playCountEntity) + override suspend fun upsertSongInPlayCount(playCountEntity: PlayCountEntity) = + playCountDao.upsertSongInPlayCount(playCountEntity) override suspend fun deleteSongInPlayCount(playCountEntity: PlayCountEntity) = playCountDao.deleteSongInPlayCount(playCountEntity) @@ -172,8 +168,8 @@ class RealRoomRepository( historyDao.clearHistory() } - override suspend fun checkSongExistInPlayCount(songId: Long): List = - playCountDao.checkSongExistInPlayCount(songId) + override suspend fun findSongExistInPlayCount(songId: Long): PlayCountEntity? = + playCountDao.findSongExistInPlayCount(songId) override suspend fun playCountSongs(): List = playCountDao.playCountSongs() From e27b7b07fef6b882765eabb86ca32cd79e1db247 Mon Sep 17 00:00:00 2001 From: Andrei M Date: Sat, 1 Apr 2023 23:35:45 +0300 Subject: [PATCH 2/2] Add Upsert to HistoryDao --- .../activities/base/AbsMusicServiceActivity.kt | 10 ++-------- .../code/name/monkey/retromusic/db/HistoryDao.kt | 9 ++------- .../retromusic/fragments/LibraryViewModel.kt | 2 +- .../monkey/retromusic/repository/Repository.kt | 14 +++----------- .../monkey/retromusic/repository/RoomRepository.kt | 14 +++----------- 5 files changed, 11 insertions(+), 38 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsMusicServiceActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsMusicServiceActivity.kt index 1d9489bb8..f9f05c919 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsMusicServiceActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsMusicServiceActivity.kt @@ -122,14 +122,8 @@ abstract class AbsMusicServiceActivity : AbsBaseActivity(), IMusicServiceEventLi listener.onPlayingMetaChanged() } lifecycleScope.launch(Dispatchers.IO) { - val entity = repository.songPresentInHistory(MusicPlayerRemote.currentSong) - if (entity != null) { - repository.updateHistorySong(MusicPlayerRemote.currentSong) - } else { - // Check whether pause history option is ON or OFF - if (!PreferenceUtil.pauseHistory) { - repository.addSongToHistory(MusicPlayerRemote.currentSong) - } + if (!PreferenceUtil.pauseHistory) { + repository.upsertSongInHistory(MusicPlayerRemote.currentSong) } val song = repository.findSongExistInPlayCount(MusicPlayerRemote.currentSong.id) ?.apply { playCount += 1 } 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 index c8b2e3165..2ceb309db 100644 --- a/app/src/main/java/code/name/monkey/retromusic/db/HistoryDao.kt +++ b/app/src/main/java/code/name/monkey/retromusic/db/HistoryDao.kt @@ -23,16 +23,11 @@ interface HistoryDao { private const val HISTORY_LIMIT = 100 } - @Insert(onConflict = OnConflictStrategy.REPLACE) - suspend fun insertSongInHistory(historyEntity: HistoryEntity) + @Upsert + suspend fun upsertSongInHistory(historyEntity: HistoryEntity) @Query("DELETE FROM HistoryEntity WHERE id= :songId") fun deleteSongInHistory(songId: Long) - @Query("SELECT * FROM HistoryEntity WHERE id = :songId LIMIT 1") - suspend fun isSongPresentInHistory(songId: Long): HistoryEntity? - - @Update - suspend fun updateHistorySong(historyEntity: HistoryEntity) @Query("SELECT * FROM HistoryEntity ORDER BY time_played DESC LIMIT $HISTORY_LIMIT") fun historySongs(): List diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/LibraryViewModel.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/LibraryViewModel.kt index ec7ab57b1..696efcabe 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/LibraryViewModel.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/LibraryViewModel.kt @@ -311,7 +311,7 @@ class LibraryViewModel( if (previousSongHistory.isNotEmpty()) { val history = ArrayList() for (song in previousSongHistory) { - repository.addSongToHistory(song.toSong()) + repository.upsertSongInHistory(song.toSong()) history.add(song.toSong()) } songHistory.postValue(history) 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 d02b900b4..11857bcc8 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 @@ -78,9 +78,7 @@ interface Repository { suspend fun deletePlaylistSongs(playlists: List) suspend fun favoritePlaylist(): PlaylistEntity suspend fun isFavoriteSong(songEntity: SongEntity): List - suspend fun addSongToHistory(currentSong: Song) - suspend fun songPresentInHistory(currentSong: Song): HistoryEntity? - suspend fun updateHistorySong(currentSong: Song) + suspend fun upsertSongInHistory(currentSong: Song) suspend fun favoritePlaylistSongs(): List suspend fun recentSongs(): List suspend fun topPlayedSongs(): List @@ -268,14 +266,8 @@ class RealRepository( override suspend fun isFavoriteSong(songEntity: SongEntity): List = roomRepository.isFavoriteSong(songEntity) - override suspend fun addSongToHistory(currentSong: Song) = - roomRepository.addSongToHistory(currentSong) - - override suspend fun songPresentInHistory(currentSong: Song): HistoryEntity? = - roomRepository.songPresentInHistory(currentSong) - - override suspend fun updateHistorySong(currentSong: Song) = - roomRepository.updateHistorySong(currentSong) + override suspend fun upsertSongInHistory(currentSong: Song) = + roomRepository.upsertSongInHistory(currentSong) override suspend fun favoritePlaylistSongs(): List = roomRepository.favoritePlaylistSongs(context.getString(R.string.favorites)) 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 04d1da4ba..38edf8386 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 @@ -30,9 +30,7 @@ interface RoomRepository { suspend fun favoritePlaylist(favorite: String): PlaylistEntity suspend fun isFavoriteSong(songEntity: SongEntity): List suspend fun removeSongFromPlaylist(songEntity: SongEntity) - suspend fun addSongToHistory(currentSong: Song) - suspend fun songPresentInHistory(song: Song): HistoryEntity? - suspend fun updateHistorySong(song: Song) + suspend fun upsertSongInHistory(currentSong: Song) suspend fun favoritePlaylistSongs(favorite: String): List suspend fun upsertSongInPlayCount(playCountEntity: PlayCountEntity) suspend fun deleteSongInPlayCount(playCountEntity: PlayCountEntity) @@ -132,14 +130,8 @@ class RealRoomRepository( override suspend fun removeSongFromPlaylist(songEntity: SongEntity) = playlistDao.deleteSongFromPlaylist(songEntity.playlistCreatorId, songEntity.id) - override suspend fun addSongToHistory(currentSong: Song) = - historyDao.insertSongInHistory(currentSong.toHistoryEntity(System.currentTimeMillis())) - - override suspend fun songPresentInHistory(song: Song): HistoryEntity? = - historyDao.isSongPresentInHistory(song.id) - - override suspend fun updateHistorySong(song: Song) = - historyDao.updateHistorySong(song.toHistoryEntity(System.currentTimeMillis())) + override suspend fun upsertSongInHistory(currentSong: Song) = + historyDao.upsertSongInHistory(currentSong.toHistoryEntity(System.currentTimeMillis())) override fun observableHistorySongs(): LiveData> = historyDao.observableHistorySongs()