aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Perry <avaglir@gmail.com>2019-03-03 22:40:43 -0500
committerNathan Perry <avaglir@gmail.com>2019-03-03 22:40:43 -0500
commit553e5b976ceef5430599ab9511f7fb48516375dd (patch)
treeb2d96bdfa32be508f3e5b4cbafa82b0319f68f4c
parent5af74af0ca2b5a395a83a32b88c07f7af86b3f65 (diff)
separate meme and general queues
-rw-r--r--src/audio/play_queue.rs15
-rw-r--r--src/commands/meme.rs2
-rw-r--r--src/commands/playback.rs22
3 files changed, 24 insertions, 15 deletions
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<PlayArgs>,
+ pub general_queue: VecDeque<PlayArgs>,
+ pub meme_queue: VecDeque<PlayArgs>,
pub playing: Option<CurrentItem>,
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::<PlayQueue>().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::<PlayQueue>().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),