fix(playlists): re-adding a song to a playlist crashed with SQLiteConstraintException
(playlistId, songId) is the playlist_songs PK, so a second @Insert of the same pair threw UNIQUE constraint failed and killed the app (reproduced twice in the crash buffer on 10-03). Switch to OnConflictStrategy.IGNORE: duplicate add is now a silent no-op. Verified on-device on 0.1.5 (7): re-adding 'The Humbling River' to FAVORITES keeps the song list intact, 0 FATALs, no new crash-buffer entries.
This commit is contained in:
parent
d0c5ce86fd
commit
bf9222ab0d
2 changed files with 6 additions and 3 deletions
|
|
@ -15,8 +15,8 @@ android {
|
||||||
applicationId = "com.rada"
|
applicationId = "com.rada"
|
||||||
minSdk = 26
|
minSdk = 26
|
||||||
targetSdk = 35
|
targetSdk = 35
|
||||||
versionCode = 6
|
versionCode = 7
|
||||||
versionName = "0.1.4"
|
versionName = "0.1.5"
|
||||||
|
|
||||||
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ package com.rada.data.local.dao
|
||||||
import androidx.room.Dao
|
import androidx.room.Dao
|
||||||
import androidx.room.Delete
|
import androidx.room.Delete
|
||||||
import androidx.room.Insert
|
import androidx.room.Insert
|
||||||
|
import androidx.room.OnConflictStrategy
|
||||||
import androidx.room.Query
|
import androidx.room.Query
|
||||||
import com.rada.data.local.entity.PlaylistEntity
|
import com.rada.data.local.entity.PlaylistEntity
|
||||||
import com.rada.data.local.entity.PlaylistSongEntity
|
import com.rada.data.local.entity.PlaylistSongEntity
|
||||||
|
|
@ -30,7 +31,9 @@ interface PlaylistDao {
|
||||||
@Query("DELETE FROM playlists WHERE id = :playlistId")
|
@Query("DELETE FROM playlists WHERE id = :playlistId")
|
||||||
suspend fun deletePlaylistById(playlistId: Long)
|
suspend fun deletePlaylistById(playlistId: Long)
|
||||||
|
|
||||||
@Insert
|
// IGNORE: (playlistId, songId) is the PK — re-adding a song that is
|
||||||
|
// already in the playlist must be a no-op, not a crash.
|
||||||
|
@Insert(onConflict = OnConflictStrategy.IGNORE)
|
||||||
suspend fun addSongToPlaylist(playlistSong: PlaylistSongEntity)
|
suspend fun addSongToPlaylist(playlistSong: PlaylistSongEntity)
|
||||||
|
|
||||||
@Query("DELETE FROM playlist_songs WHERE playlistId = :playlistId AND songId = :songId")
|
@Query("DELETE FROM playlist_songs WHERE playlistId = :playlistId AND songId = :songId")
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue