diff --git a/src/music_controller/controller.rs b/src/music_controller/controller.rs index e3f1e68..5664121 100644 --- a/src/music_controller/controller.rs +++ b/src/music_controller/controller.rs @@ -6,6 +6,7 @@ use crossbeam_channel; use crossbeam_channel::{Receiver, Sender}; use std::path::PathBuf; use std::sync::{Arc, RwLock}; +use std::thread::spawn; use thiserror::Error; use crossbeam_channel::unbounded; @@ -13,18 +14,18 @@ use std::error::Error; use uuid::Uuid; use crate::config::config::ConfigError; -use crate::music_player::player::{Player, PlayerError}; +use crate::music_player::player::{Player, PlayerCommand, PlayerError}; use crate::{ config::config::Config, music_controller::queue::Queue, music_storage::library::MusicLibrary, }; use super::queue::QueueError; -pub struct Controller { +pub struct Controller { pub queue: Queue, pub config: Arc>, pub library: MusicLibrary, - pub player: Box

, + pub player: Arc>>, } #[derive(Error, Debug)] @@ -69,7 +70,7 @@ impl MailMan { } #[allow(unused_variables)] -impl Controller

{ +impl Controller

{ pub fn start(config_path: T) -> Result> where std::path::PathBuf: std::convert::From, @@ -83,12 +84,28 @@ impl Controller

{ let config_ = Arc::new(RwLock::from(config)); let library = MusicLibrary::init(config_.clone(), uuid)?; - Ok(Controller { + let controller = Controller { queue: Queue::default(), config: config_.clone(), library, - player: Box::new(P::new()?), - }) + player: Arc::new(RwLock::new(Box::new(P::new()?))), + }; + + + let player = controller.player.clone(); + let controler_thread = spawn(move || { + match player.read().unwrap().message_channel().recv().unwrap() { + PlayerCommand::AboutToFinish => {}, + PlayerCommand::EndOfStream => { + + player.write().unwrap().enqueue_next(todo!()); + }, + _ => {} + } + }); + + + Ok(controller) } pub fn q_add(&mut self, item: &Uuid, source: super::queue::PlayerLocation, by_human: bool) { diff --git a/src/music_controller/queue.rs b/src/music_controller/queue.rs index c26ae05..519f8c6 100644 --- a/src/music_controller/queue.rs +++ b/src/music_controller/queue.rs @@ -59,7 +59,7 @@ pub struct Queue { pub items: Vec, pub played: Vec, pub loop_: bool, - pub shuffle: bool, + pub shuffle: Option>, } // TODO: HAndle the First QueueState[looping] and shuffle diff --git a/src/music_storage/db_reader/itunes/reader.rs b/src/music_storage/db_reader/itunes/reader.rs index f6032db..a900fa8 100644 --- a/src/music_storage/db_reader/itunes/reader.rs +++ b/src/music_storage/db_reader/itunes/reader.rs @@ -353,6 +353,6 @@ mod tests { songs.iter().for_each(|song| library.add_song(song.to_owned()).unwrap()); config.write_file().unwrap(); - library.save(config).unwrap(); + library.save(Arc::new(RwLock::from(config))).unwrap(); } }