mirror of
https://github.com/Dangoware/dango-music-player.git
synced 2025-06-22 22:52:59 -05:00
Merge branch 'queue-fix'
This commit is contained in:
commit
1b26558812
7 changed files with 38 additions and 40 deletions
|
@ -144,6 +144,7 @@ pub enum QueueCommand {
|
|||
Clear,
|
||||
Remove(usize),
|
||||
PlayNext(QueueItem<QueueSong, QueueAlbum>, bool),
|
||||
MoveTo(usize),
|
||||
}
|
||||
|
||||
#[derive(Debug, PartialEq, Clone)]
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
use std::path::PathBuf;
|
||||
|
||||
use async_channel::{Receiver, Sender};
|
||||
use discord_presence::models::{Command, commands};
|
||||
use rcue::cue::Command;
|
||||
use uuid::Uuid;
|
||||
|
||||
use crate::music_storage::{
|
||||
|
@ -173,6 +173,15 @@ impl ControllerHandle {
|
|||
res
|
||||
}
|
||||
|
||||
pub async fn queue_move_to(&self, index: usize) -> Result<(), QueueError> {
|
||||
let (command, tx) = QueueCommandInput::command(QueueCommand::MoveTo(index));
|
||||
self.queue_mail_rx.send(command).await.unwrap();
|
||||
let QueueResponse::Empty(res) = tx.recv().await.unwrap() else {
|
||||
unreachable!()
|
||||
};
|
||||
res
|
||||
}
|
||||
|
||||
// The Player Section
|
||||
pub async fn play_now(&self, uuid: Uuid, location: PlayerLocation) -> Result<Song, QueueError> {
|
||||
let (command, tx) = PlayerCommandInput::command(PlayerCommand::PlayNow(uuid, location));
|
||||
|
|
|
@ -83,6 +83,12 @@ impl Controller {
|
|||
};
|
||||
res_rx.send(QueueResponse::Empty(Ok(()))).await.unwrap();
|
||||
}
|
||||
QueueCommand::MoveTo(index) => {
|
||||
res_rx
|
||||
.send(QueueResponse::Empty(queue.move_to(index)))
|
||||
.await
|
||||
.unwrap();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -323,43 +323,13 @@ impl<T: Debug + Clone + PartialEq, U: Debug + PartialEq + Clone + IntoIterator>
|
|||
}
|
||||
|
||||
pub fn move_to(&mut self, index: usize) -> Result<(), QueueError> {
|
||||
use QueueState::*;
|
||||
|
||||
let empty = self.items.is_empty();
|
||||
let index = if !empty {
|
||||
index
|
||||
} else {
|
||||
return Err(QueueError::EmptyQueue);
|
||||
};
|
||||
|
||||
if !empty && dbg!(index < self.items.len()) {
|
||||
let to_item = self.items[index].clone();
|
||||
|
||||
if let QueueItemType::Multi(_) = to_item.item {
|
||||
unimplemented!(); //TODO: Add logic for multi items
|
||||
}
|
||||
|
||||
loop {
|
||||
let empty = self.items.is_empty();
|
||||
let item = self.items[0].item.to_owned();
|
||||
|
||||
if item != to_item.item && !empty {
|
||||
if self.items[0].state == AddHere && self.items.get(1).is_some() {
|
||||
self.items[1].state = AddHere;
|
||||
}
|
||||
let item = self.items.remove(0);
|
||||
self.played.push(item);
|
||||
|
||||
// dbg!(&to_item.item, &self.items[ind].item);
|
||||
} else if empty {
|
||||
return Err(QueueError::EmptyQueue);
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if self.items.is_empty() {
|
||||
return Err(QueueError::EmptyQueue);
|
||||
}
|
||||
for _ in 0..index {
|
||||
self.next()?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
|
|
@ -26,7 +26,7 @@ use wrappers::{_Song, stop};
|
|||
use crate::wrappers::{
|
||||
add_song_to_playlist, clear_queue, delete_playlist, get_library, get_playlist, get_playlists,
|
||||
get_queue, get_song, import_playlist, next, pause, play, play_next_queue, prev,
|
||||
remove_from_queue, seek, set_volume,
|
||||
remove_from_queue, seek, set_volume, queue_move_to
|
||||
};
|
||||
use commands::{
|
||||
add_song_to_queue, display_album_art, last_fm_init_auth, play_now, remove_from_lib_playlist,
|
||||
|
@ -77,6 +77,7 @@ pub fn run() {
|
|||
play_next_queue,
|
||||
clear_queue,
|
||||
remove_from_lib_playlist,
|
||||
queue_move_to,
|
||||
// test_menu,
|
||||
])
|
||||
.manage(tempfile::TempDir::new().unwrap())
|
||||
|
|
|
@ -319,3 +319,14 @@ pub async fn clear_queue(
|
|||
_ = app.emit("queue_updated", ());
|
||||
res
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn queue_move_to(
|
||||
ctrl_handle: State<'_, ControllerHandle>,
|
||||
index: usize,
|
||||
) -> Result<(), String> {
|
||||
ctrl_handle
|
||||
.queue_move_to(index)
|
||||
.await
|
||||
.map_err(|e| e.to_string())
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue