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 7f6a64e6..d8c6578d 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 @@ -26,6 +26,8 @@ interface HistoryDao { @Insert(onConflict = OnConflictStrategy.REPLACE) suspend fun insertSongInHistory(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? 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 d5787a4c..dcf116c2 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 @@ -29,6 +29,7 @@ import code.name.monkey.retromusic.util.DensityUtil import code.name.monkey.retromusic.util.PreferenceUtil import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.launch +import java.io.File class LibraryViewModel( private val repository: RealRepository @@ -272,6 +273,16 @@ class LibraryViewModel( } fun playCountSongs(): LiveData> = liveData { + val songs = repository.playCountSongs().map { + it.toSong() + } + emit(songs) + // Cleaning up deleted or moved songs + songs.forEach { song -> + if (!File(song.data).exists() || song.id == -1L) { + repository.deleteSongInPlayCount(song.toPlayCount()) + } + } emit(repository.playCountSongs().map { it.toSong() }) @@ -303,7 +314,21 @@ class LibraryViewModel( emit(repository.contributor()) } - fun observableHistorySongs() = repository.observableHistorySongs() + fun observableHistorySongs(): LiveData> = liveData { + val songs = repository.historySong().map { + it.toSong() + } + emit(songs) + // Cleaning up deleted or moved songs + songs.forEach { song -> + if (!File(song.data).exists() || song.id == -1L) { + repository.deleteSongInHistory(song.id) + } + } + emit(repository.historySong().map { + it.toSong() + }) + } fun favorites() = repository.favorites() 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 8c1454b6..8fc822f2 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 @@ -97,6 +97,7 @@ interface Repository { suspend fun insertSongInPlayCount(playCountEntity: PlayCountEntity) suspend fun updateSongInPlayCount(playCountEntity: PlayCountEntity) suspend fun deleteSongInPlayCount(playCountEntity: PlayCountEntity) + suspend fun deleteSongInHistory(songId: Long) suspend fun checkSongExistInPlayCount(songId: Long): List suspend fun playCountSongs(): List suspend fun blackListPaths(): List @@ -323,6 +324,9 @@ class RealRepository( override suspend fun deleteSongInPlayCount(playCountEntity: PlayCountEntity) = roomRepository.deleteSongInPlayCount(playCountEntity) + override suspend fun deleteSongInHistory(songId: Long) = + roomRepository.deleteSongInHistory(songId) + override suspend fun checkSongExistInPlayCount(songId: Long): List = roomRepository.checkSongExistInPlayCount(songId) 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 608a45fd..346dfa21 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 @@ -36,6 +36,7 @@ interface RoomRepository { suspend fun insertSongInPlayCount(playCountEntity: PlayCountEntity) suspend fun updateSongInPlayCount(playCountEntity: PlayCountEntity) suspend fun deleteSongInPlayCount(playCountEntity: PlayCountEntity) + suspend fun deleteSongInHistory(songId: Long) suspend fun checkSongExistInPlayCount(songId: Long): List suspend fun playCountSongs(): List suspend fun insertBlacklistPath(blackListStoreEntities: List) @@ -161,6 +162,10 @@ class RealRoomRepository( override suspend fun deleteSongInPlayCount(playCountEntity: PlayCountEntity) = playCountDao.deleteSongInPlayCount(playCountEntity) + override suspend fun deleteSongInHistory(songId: Long) { + historyDao.deleteSongInHistory(songId) + } + override suspend fun checkSongExistInPlayCount(songId: Long): List = playCountDao.checkSongExistInPlayCount(songId)