Hide songs instead of deleting from database

This commit is contained in:
vfsfitvnm 2022-07-06 20:28:34 +02:00
parent 2e542d3c1a
commit b3104207ff
3 changed files with 15 additions and 22 deletions

View file

@ -212,9 +212,6 @@ interface Database {
@Delete @Delete
fun delete(playlist: Playlist) fun delete(playlist: Playlist)
@Delete
fun delete(song: Song)
@Delete @Delete
fun delete(songPlaylistMap: SongPlaylistMap) fun delete(songPlaylistMap: SongPlaylistMap)

View file

@ -58,22 +58,22 @@ fun InHistoryMediaItemMenu(
val menuState = LocalMenuState.current val menuState = LocalMenuState.current
val binder = LocalPlayerServiceBinder.current val binder = LocalPlayerServiceBinder.current
var isDeletingFromDatabase by remember { var isHiding by remember {
mutableStateOf(false) mutableStateOf(false)
} }
if (isDeletingFromDatabase) { if (isHiding) {
ConfirmationDialog( ConfirmationDialog(
text = "Do you really want to permanently delete this song? It will removed from any playlist as well.\nThis action is irreversible.", text = "Do you really hide this song? Its playback time and cache will be wiped.\nThis action is irreversible.",
onDismiss = { onDismiss = {
isDeletingFromDatabase = false isHiding = false
}, },
onConfirm = { onConfirm = {
(onDismiss ?: menuState::hide).invoke() (onDismiss ?: menuState::hide).invoke()
query { query {
// Not sure we can to this here // Not sure we can to this here
binder?.cache?.removeResource(song.song.id) binder?.cache?.removeResource(song.song.id)
Database.delete(song.song) Database.update(song.song.copy(totalPlayTimeMs = 0))
} }
} }
) )
@ -82,8 +82,8 @@ fun InHistoryMediaItemMenu(
NonQueuedMediaItemMenu( NonQueuedMediaItemMenu(
mediaItem = song.asMediaItem, mediaItem = song.asMediaItem,
onDismiss = onDismiss, onDismiss = onDismiss,
onDeleteFromDatabase = { onHideFromDatabase = {
isDeletingFromDatabase = true isHiding = true
}, },
modifier = modifier modifier = modifier
) )
@ -127,7 +127,7 @@ fun NonQueuedMediaItemMenu(
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
onDismiss: (() -> Unit)? = null, onDismiss: (() -> Unit)? = null,
onRemoveFromPlaylist: (() -> Unit)? = null, onRemoveFromPlaylist: (() -> Unit)? = null,
onDeleteFromDatabase: (() -> Unit)? = null, onHideFromDatabase: (() -> Unit)? = null,
onRemoveFromFavorites: (() -> Unit)? = null, onRemoveFromFavorites: (() -> Unit)? = null,
) { ) {
val menuState = LocalMenuState.current val menuState = LocalMenuState.current
@ -157,7 +157,7 @@ fun NonQueuedMediaItemMenu(
binder?.player?.enqueue(mediaItem) binder?.player?.enqueue(mediaItem)
}, },
onRemoveFromPlaylist = onRemoveFromPlaylist, onRemoveFromPlaylist = onRemoveFromPlaylist,
onDeleteFromDatabase = onDeleteFromDatabase, onHideFromDatabase = onHideFromDatabase,
onRemoveFromFavorites = onRemoveFromFavorites, onRemoveFromFavorites = onRemoveFromFavorites,
modifier = modifier modifier = modifier
) )
@ -198,7 +198,7 @@ fun BaseMediaItemMenu(
onEnqueue: (() -> Unit)? = null, onEnqueue: (() -> Unit)? = null,
onRemoveFromQueue: (() -> Unit)? = null, onRemoveFromQueue: (() -> Unit)? = null,
onRemoveFromPlaylist: (() -> Unit)? = null, onRemoveFromPlaylist: (() -> Unit)? = null,
onDeleteFromDatabase: (() -> Unit)? = null, onHideFromDatabase: (() -> Unit)? = null,
onRemoveFromFavorites: (() -> Unit)? = null, onRemoveFromFavorites: (() -> Unit)? = null,
onGlobalRouteEmitted: (() -> Unit)? = null, onGlobalRouteEmitted: (() -> Unit)? = null,
) { ) {
@ -226,7 +226,7 @@ fun BaseMediaItemMenu(
) )
} }
}, },
onDeleteFromDatabase = onDeleteFromDatabase, onHideFromDatabase = onHideFromDatabase,
onRemoveFromFavorites = onRemoveFromFavorites, onRemoveFromFavorites = onRemoveFromFavorites,
onRemoveFromPlaylist = onRemoveFromPlaylist, onRemoveFromPlaylist = onRemoveFromPlaylist,
onRemoveFromQueue = onRemoveFromQueue, onRemoveFromQueue = onRemoveFromQueue,
@ -250,7 +250,7 @@ fun MediaItemMenu(
onPlaySingle: (() -> Unit)? = null, onPlaySingle: (() -> Unit)? = null,
onPlayNext: (() -> Unit)? = null, onPlayNext: (() -> Unit)? = null,
onEnqueue: (() -> Unit)? = null, onEnqueue: (() -> Unit)? = null,
onDeleteFromDatabase: (() -> Unit)? = null, onHideFromDatabase: (() -> Unit)? = null,
onRemoveFromQueue: (() -> Unit)? = null, onRemoveFromQueue: (() -> Unit)? = null,
onRemoveFromFavorites: (() -> Unit)? = null, onRemoveFromFavorites: (() -> Unit)? = null,
onRemoveFromPlaylist: (() -> Unit)? = null, onRemoveFromPlaylist: (() -> Unit)? = null,
@ -481,10 +481,10 @@ fun MediaItemMenu(
) )
} }
onDeleteFromDatabase?.let { onDeleteFromDatabase -> onHideFromDatabase?.let { onDeleteFromDatabase ->
MenuEntry( MenuEntry(
icon = R.drawable.trash, icon = R.drawable.trash,
text = "Delete", text = "Hide",
onClick = onDeleteFromDatabase onClick = onDeleteFromDatabase
) )
} }

View file

@ -47,7 +47,6 @@ import it.vfsfitvnm.vimusic.query
import it.vfsfitvnm.vimusic.ui.components.TopAppBar import it.vfsfitvnm.vimusic.ui.components.TopAppBar
import it.vfsfitvnm.vimusic.ui.components.themed.DropdownMenu import it.vfsfitvnm.vimusic.ui.components.themed.DropdownMenu
import it.vfsfitvnm.vimusic.ui.components.themed.InHistoryMediaItemMenu import it.vfsfitvnm.vimusic.ui.components.themed.InHistoryMediaItemMenu
import it.vfsfitvnm.vimusic.ui.components.themed.NonQueuedMediaItemMenu
import it.vfsfitvnm.vimusic.ui.components.themed.TextFieldDialog import it.vfsfitvnm.vimusic.ui.components.themed.TextFieldDialog
import it.vfsfitvnm.vimusic.ui.styling.LocalColorPalette import it.vfsfitvnm.vimusic.ui.styling.LocalColorPalette
import it.vfsfitvnm.vimusic.ui.styling.LocalTypography import it.vfsfitvnm.vimusic.ui.styling.LocalTypography
@ -540,10 +539,7 @@ fun HomeScreen() {
) )
}, },
menuContent = { menuContent = {
when (preferences.songSortBy) { InHistoryMediaItemMenu(song = song)
SongSortBy.PlayTime -> NonQueuedMediaItemMenu(mediaItem = song.asMediaItem)
SongSortBy.DateAdded -> InHistoryMediaItemMenu(song = song)
}
}, },
onThumbnailContent = { onThumbnailContent = {
AnimatedVisibility( AnimatedVisibility(