diff --git a/composeApp/src/commonMain/kotlin/com/maxrave/simpmusic/ui/component/ModalBottomSheet.kt b/composeApp/src/commonMain/kotlin/com/maxrave/simpmusic/ui/component/ModalBottomSheet.kt index d351d2a33..fa36ee7b6 100644 --- a/composeApp/src/commonMain/kotlin/com/maxrave/simpmusic/ui/component/ModalBottomSheet.kt +++ b/composeApp/src/commonMain/kotlin/com/maxrave/simpmusic/ui/component/ModalBottomSheet.kt @@ -191,6 +191,7 @@ import org.koin.compose.viewmodel.koinViewModel import simpmusic.composeapp.generated.resources.Res import simpmusic.composeapp.generated.resources.add_to_a_playlist import simpmusic.composeapp.generated.resources.add_to_queue +import simpmusic.composeapp.generated.resources.added_to_queue import simpmusic.composeapp.generated.resources.album import simpmusic.composeapp.generated.resources.artists import simpmusic.composeapp.generated.resources.baseline_downloaded @@ -1212,6 +1213,8 @@ fun QueueBottomSheet( private enum class QueueItemAction { UP, DOWN, + PLAYNEXT, + ADDTOQUEUE, DELETE, } @@ -1221,6 +1224,7 @@ fun QueueItemBottomSheet( onDismiss: () -> Unit, index: Int, musicServiceHandler: MediaPlayerHandler = koinInject(), + sharedViewModel: SharedViewModel = koinInject(), ) { val coroutineScope = rememberCoroutineScope() val modelBottomSheetState = @@ -1238,6 +1242,8 @@ fun QueueItemBottomSheet( listOf( QueueItemAction.UP, QueueItemAction.DOWN, + QueueItemAction.PLAYNEXT, + QueueItemAction.ADDTOQUEUE, QueueItemAction.DELETE, ) ModalBottomSheet( @@ -1295,6 +1301,8 @@ fun QueueItemBottomSheet( when (action) { QueueItemAction.UP -> !canMoveUp QueueItemAction.DOWN -> !canMoveDown + QueueItemAction.PLAYNEXT->false + QueueItemAction.ADDTOQUEUE->false QueueItemAction.DELETE -> false } if (disable) return@items @@ -1320,6 +1328,37 @@ fun QueueItemBottomSheet( QueueItemAction.DELETE -> { musicServiceHandler.removeMediaItem(index) } + + QueueItemAction.PLAYNEXT -> { + val track = + musicServiceHandler.queueData.value + ?.data + ?.listTracks + ?.getOrNull(index) + if (track != null) { + coroutineScope.launch { + musicServiceHandler.playNext(track) + sharedViewModel.makeToast(getString(Res.string.play_next)) + } + } + } + + QueueItemAction.ADDTOQUEUE -> { + val track = + musicServiceHandler.queueData.value + ?.data + ?.listTracks + ?.getOrNull(index) + if (track != null) { + coroutineScope.launch { + musicServiceHandler.loadMoreCatalog( + arrayListOf(track), + isAddToQueue = true, + ) + sharedViewModel.makeToast(getString(Res.string.added_to_queue)) + } + } + } } }, ) { @@ -1345,6 +1384,20 @@ fun QueueItemBottomSheet( ) } + QueueItemAction.PLAYNEXT -> { + Image( + imageVector = SimpIcons.PlayCircle, + contentDescription = "Play Next" + ) + } + + QueueItemAction.ADDTOQUEUE -> { + Image( + imageVector = SimpIcons.QueueMusic, + contentDescription = "Add to Queue" + ) + } + QueueItemAction.DELETE -> { Image( imageVector = SimpIcons.Delete, @@ -1359,6 +1412,8 @@ fun QueueItemBottomSheet( when (action) { QueueItemAction.UP -> Res.string.move_up QueueItemAction.DOWN -> Res.string.move_down + QueueItemAction.PLAYNEXT -> Res.string.play_next + QueueItemAction.ADDTOQUEUE -> Res.string.add_to_queue QueueItemAction.DELETE -> Res.string.delete }, ),