From 553e5b976ceef5430599ab9511f7fb48516375dd Mon Sep 17 00:00:00 2001 From: Nathan Perry Date: Sun, 3 Mar 2019 22:40:43 -0500 Subject: separate meme and general queues --- src/audio/play_queue.rs | 15 +++++++++++---- src/commands/meme.rs | 2 +- src/commands/playback.rs | 22 ++++++++++++---------- 3 files changed, 24 insertions(+), 15 deletions(-) (limited to 'src') diff --git a/src/audio/play_queue.rs b/src/audio/play_queue.rs index 77cb252..2543c61 100644 --- a/src/audio/play_queue.rs +++ b/src/audio/play_queue.rs @@ -40,7 +40,8 @@ const POST_SILENCE_BYTES: usize = (SECONDS_TRAIL_TIME * (SAMPLE_RATE * CHANNELS #[derive(Clone)] pub struct PlayQueue { - pub queue: VecDeque, + pub general_queue: VecDeque, + pub meme_queue: VecDeque, pub playing: Option, pub volume: f32, } @@ -52,7 +53,8 @@ impl Key for PlayQueue { impl PlayQueue { pub fn new() -> Self { PlayQueue { - queue: VecDeque::new(), + general_queue: VecDeque::new(), + meme_queue: VecDeque::new(), playing: None, volume: DEFAULT_VOLUME, } @@ -87,7 +89,7 @@ impl PlayQueue { return Ok(()); } - (queue.queue.is_empty(), queue.playing.is_some()) + (queue.general_queue.is_empty() && queue.meme_queue.is_empty(), queue.playing.is_some()) }; if queue_is_empty { @@ -111,7 +113,12 @@ impl PlayQueue { } let mut queue = queue_lck.write().unwrap(); - let mut item = queue.queue.pop_front().unwrap(); + + let mut item = if !queue.meme_queue.is_empty() { + queue.meme_queue.pop_front().unwrap() + } else { + queue.general_queue.pop_front().unwrap() + }; let src = match &mut item.data { Left(ref url) => { diff --git a/src/commands/meme.rs b/src/commands/meme.rs index 8cdb062..9b77bd2 100644 --- a/src/commands/meme.rs +++ b/src/commands/meme.rs @@ -405,7 +405,7 @@ fn send_meme(ctx: &Context, t: &Meme, conn: &PgConnection, msg: &Message) -> Res let queue_lock = ctx.data.lock().get::().cloned().unwrap(); let mut play_queue = queue_lock.write().unwrap(); - play_queue.queue.push_front(PlayArgs{ + play_queue.meme_queue.push_back(PlayArgs{ initiator: msg.author.name.clone(), data: ::either::Right(audio.data.clone()), sender_channel: msg.channel_id, diff --git a/src/commands/playback.rs b/src/commands/playback.rs index bc57a4f..dd1ffbd 100644 --- a/src/commands/playback.rs +++ b/src/commands/playback.rs @@ -1,20 +1,20 @@ +use either::{Left, Right}; use serenity::{ - prelude::*, - model::channel::Message, framework::standard::Args, + model::channel::Message, + prelude::*, }; -use either::{Left, Right}; use crate::{ - TARGET_GUILD_ID, - Result, - commands::send, audio::{ parse_times, - PlayQueue, PlayArgs, + PlayQueue, VoiceManager, }, + commands::send, + Result, + TARGET_GUILD_ID, }; pub fn _play(ctx: &Context, msg: &Message, url: &str) -> Result<()> { @@ -54,7 +54,7 @@ pub fn _play(ctx: &Context, msg: &Message, url: &str) -> Result<()> { let queue_lock = ctx.data.lock().get::().cloned().unwrap(); let mut play_queue = queue_lock.write().unwrap(); - play_queue.queue.push_back(PlayArgs{ + play_queue.general_queue.push_back(PlayArgs{ initiator: msg.author.name.clone(), data: Left(url.into_string()), sender_channel: msg.channel_id, @@ -175,7 +175,8 @@ pub fn die(ctx: &mut Context, msg: &Message, _: Args) -> Result<()> { let mut play_queue = queue_lock.write().unwrap(); play_queue.playing = None; - play_queue.queue.clear(); + play_queue.general_queue.clear(); + play_queue.meme_queue.clear(); } if let Some(handler) = manager.get_mut(*TARGET_GUILD_ID) { @@ -215,7 +216,8 @@ pub fn list(ctx: &mut Context, msg: &Message, _: Args) -> Result<()> { }, } - play_queue.queue.iter() + play_queue.meme_queue.iter() + .chain(play_queue.general_queue.iter()) .for_each(|info| { let playing_info = match info.data { Left(ref url) => format!("`{}`", url), -- cgit v1.3.1