chore: use VecDeque
for music queue
This commit is contained in:
parent
05fae26549
commit
f3fec5292a
1 changed files with 12 additions and 22 deletions
|
@ -2,11 +2,19 @@ use serenity::all::GuildId;
|
||||||
use songbird::input::YoutubeDl;
|
use songbird::input::YoutubeDl;
|
||||||
use tokio::sync::Mutex;
|
use tokio::sync::Mutex;
|
||||||
|
|
||||||
use std::collections::HashMap;
|
use std::collections::{HashMap, VecDeque};
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
type MusicQueueItem = Arc<Mutex<MusicQueue>>;
|
type MusicQueueItem = Arc<Mutex<MusicQueue>>;
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct MusicQueue {
|
||||||
|
// God this sucks. This needs to be reprogrammed properly.
|
||||||
|
pub guild_id: GuildId,
|
||||||
|
pub queue: VecDeque<YoutubeDl>,
|
||||||
|
pub now_playing: Option<YoutubeDl>,
|
||||||
|
}
|
||||||
|
|
||||||
lazy_static! {
|
lazy_static! {
|
||||||
static ref HASHMAP: Mutex<HashMap<GuildId, MusicQueueItem>> = Mutex::new(HashMap::new());
|
static ref HASHMAP: Mutex<HashMap<GuildId, MusicQueueItem>> = Mutex::new(HashMap::new());
|
||||||
}
|
}
|
||||||
|
@ -18,7 +26,7 @@ async fn get_music_queue(guild_id: &GuildId) -> MusicQueueItem {
|
||||||
.entry(*guild_id)
|
.entry(*guild_id)
|
||||||
.or_insert(Arc::new(Mutex::new(MusicQueue {
|
.or_insert(Arc::new(Mutex::new(MusicQueue {
|
||||||
guild_id: *guild_id,
|
guild_id: *guild_id,
|
||||||
queue: Vec::new(),
|
queue: VecDeque::new(),
|
||||||
now_playing: None,
|
now_playing: None,
|
||||||
})))
|
})))
|
||||||
.clone()
|
.clone()
|
||||||
|
@ -35,14 +43,6 @@ where
|
||||||
f(&mut queue)
|
f(&mut queue)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
|
||||||
pub struct MusicQueue {
|
|
||||||
// God this sucks. This needs to be reprogrammed properly.
|
|
||||||
pub guild_id: GuildId,
|
|
||||||
pub queue: Vec<YoutubeDl>,
|
|
||||||
pub now_playing: Option<YoutubeDl>,
|
|
||||||
}
|
|
||||||
|
|
||||||
pub async fn delete_queue(guild_id: &GuildId) {
|
pub async fn delete_queue(guild_id: &GuildId) {
|
||||||
with_music_queue(guild_id, |queue| {
|
with_music_queue(guild_id, |queue| {
|
||||||
queue.now_playing = None;
|
queue.now_playing = None;
|
||||||
|
@ -52,21 +52,11 @@ pub async fn delete_queue(guild_id: &GuildId) {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn add_to_queue(guild_id: &GuildId, input: YoutubeDl) {
|
pub async fn add_to_queue(guild_id: &GuildId, input: YoutubeDl) {
|
||||||
with_music_queue(guild_id, |queue| {
|
with_music_queue(guild_id, |queue| queue.queue.push_back(input)).await;
|
||||||
queue.queue.push(input);
|
|
||||||
})
|
|
||||||
.await;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get_head(guild_id: &GuildId) -> Option<YoutubeDl> {
|
pub async fn get_head(guild_id: &GuildId) -> Option<YoutubeDl> {
|
||||||
with_music_queue(guild_id, |queue| {
|
with_music_queue(guild_id, |queue| queue.queue.pop_front()).await
|
||||||
if queue.queue.is_empty() {
|
|
||||||
None
|
|
||||||
} else {
|
|
||||||
Some(queue.queue.remove(0))
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.await
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn set_now_playing(guild_id: &GuildId, now_playing: Option<YoutubeDl>) {
|
pub async fn set_now_playing(guild_id: &GuildId, now_playing: Option<YoutubeDl>) {
|
||||||
|
|
Loading…
Reference in a new issue