Added "Clear Queue" and "Remove from Queue" buttons to QueueSong context menu

This commit is contained in:
MrDulfin 2025-06-01 22:29:24 -04:00
parent 158e80cc8d
commit 5666581c7f
4 changed files with 30 additions and 7 deletions

View file

@ -1,7 +1,7 @@
use std::path::PathBuf; use std::path::PathBuf;
use async_channel::{Receiver, Sender}; use async_channel::{Receiver, Sender};
use discord_presence::models::Command; use discord_presence::models::{Command, commands};
use uuid::Uuid; use uuid::Uuid;
use crate::music_storage::{ use crate::music_storage::{
@ -147,6 +147,15 @@ impl ControllerHandle {
Ok(()) Ok(())
} }
pub async fn queue_clear(&self) -> Result<(), QueueError> {
let (command, tx) = QueueCommandInput::command(QueueCommand::Clear);
self.queue_mail_rx.send(command).await.unwrap();
let QueueResponse::Empty(res) = tx.recv().await.unwrap() else {
unreachable!()
};
res
}
// The Player Section // The Player Section
pub async fn play_now(&self, uuid: Uuid, location: PlayerLocation) -> Result<Song, QueueError> { pub async fn play_now(&self, uuid: Uuid, location: PlayerLocation) -> Result<Song, QueueError> {
let (command, tx) = PlayerCommandInput::command(PlayerCommand::PlayNow(uuid, location)); let (command, tx) = PlayerCommandInput::command(PlayerCommand::PlayNow(uuid, location));

View file

@ -24,9 +24,9 @@ use uuid::Uuid;
use wrappers::{_Song, stop}; use wrappers::{_Song, stop};
use crate::wrappers::{ use crate::wrappers::{
add_song_to_playlist, delete_playlist, get_library, get_playlist, get_playlists, get_queue, add_song_to_playlist, clear_queue, delete_playlist, get_library, get_playlist, get_playlists,
get_song, import_playlist, next, pause, play, play_next_queue, prev, remove_from_queue, seek, get_queue, get_song, import_playlist, next, pause, play, play_next_queue, prev,
set_volume, remove_from_queue, seek, set_volume,
}; };
use commands::{add_song_to_queue, display_album_art, last_fm_init_auth, play_now}; use commands::{add_song_to_queue, display_album_art, last_fm_init_auth, play_now};
@ -73,6 +73,7 @@ pub fn run() {
add_song_to_playlist, add_song_to_playlist,
delete_playlist, delete_playlist,
play_next_queue, play_next_queue,
clear_queue,
// test_menu, // test_menu,
]) ])
.manage(tempfile::TempDir::new().unwrap()) .manage(tempfile::TempDir::new().unwrap())

View file

@ -309,3 +309,13 @@ pub async fn play_next_queue(
app.emit("queue_updated", ()).unwrap(); app.emit("queue_updated", ()).unwrap();
res res
} }
#[tauri::command]
pub async fn clear_queue(
app: AppHandle<Wry>,
ctrl_handle: State<'_, ControllerHandle>,
) -> Result<(), String> {
let res = ctrl_handle.queue_clear().await.map_err(|e| e.to_string());
app.emit("queue_updated", ());
res
}

View file

@ -472,15 +472,18 @@ function QueueSong({ song, location, index }: QueueSongProps) {
const playNow = () => { const playNow = () => {
invoke('play_now', { uuid: song.uuid, location: location }).then(() => {}) invoke('play_now', { uuid: song.uuid, location: location }).then(() => {})
} }
const play_next = () => invoke('play_next_queue', { uuid: song.uuid, location }).then(() => {}); const playNext = () => invoke('play_next_queue', { uuid: song.uuid, location }).then(() => {});
const clearQueue = () => invoke('clear_queue').then();
async function menuHandler(event: React.MouseEvent) { async function menuHandler(event: React.MouseEvent) {
event.preventDefault(); event.preventDefault();
const menu = await Menu.new({ const menu = await Menu.new({
items: [ items: [
{ id: "play_next_" + song.uuid + index, text: "Play Next in Queue", action: play_next }, { id: "play_now" + index, text: "Play Now", action: playNow },
{ id: "remove_queue" + song.uuid + index, text: "Remove from Queue", action: removeFromQueue } { id: "play_next_" + song.uuid + index, text: "Play Next in Queue", action: playNext },
{ id: "remove_queue" + song.uuid + index, text: "Remove from Queue", action: removeFromQueue },
{ id: "clear_queue", text: "Clear Queue", action: clearQueue },
] ]
}) })
menu.popup(); menu.popup();