use std::collections::VecDeque; use log::info; use crate::youtube_dl::AudioMetadata; pub struct Playlist { data: VecDeque, } impl Playlist { pub fn new() -> Self { Self { data: VecDeque::new(), } } pub fn push(&mut self, data: AudioMetadata) { info!("Adding {:?} to playlist", &data.title); self.data.push_front(data) } pub fn pop(&mut self) -> Option { let res = self.data.pop_back(); info!("Popping {:?} from playlist", res.as_ref().map(|r| &r.title)); res } pub fn to_vec(&self) -> Vec { let (a, b) = self.data.as_slices(); let mut res = a.to_vec(); res.extend_from_slice(b); res.reverse(); res } pub fn is_empty(&self) -> bool { self.data.is_empty() } pub fn clear(&mut self) { self.data.clear(); info!("Cleared playlist") } }