feat!: queue system
This commit is contained in:
26
src/main.rs
26
src/main.rs
@@ -8,6 +8,7 @@ use proto::player::player_server::PlayerServer;
|
||||
use proto::settings::settings_server::SettingsServer;
|
||||
use rodio::{OutputStream, Sink};
|
||||
use state::{GrooveState, GrooveStateData};
|
||||
use std::sync::Arc;
|
||||
use tokio::sync::Mutex;
|
||||
use tonic::transport::Server;
|
||||
|
||||
@@ -48,9 +49,28 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
OutputStream::try_default().expect("Error getting audio output stream");
|
||||
let sink = Sink::try_new(&stream_handle).expect("Error getting audio sink");
|
||||
|
||||
let player = AudioPlayer::new(sink);
|
||||
let player = Arc::new(Mutex::new(AudioPlayer::new(sink)));
|
||||
let c_player = player.clone();
|
||||
|
||||
let state = GrooveState::new(Mutex::new(GrooveStateData::new(player)));
|
||||
let (watch_handle, mut rx) = player.lock().await.start_watching();
|
||||
|
||||
let player_rx_handle = tokio::spawn(async move {
|
||||
while let Some(next) = rx.recv().await {
|
||||
let mut player = player.lock().await;
|
||||
match next {
|
||||
Some(queued_track) => {
|
||||
let _ = player
|
||||
.play_track(queued_track.track, queued_track.path, false)
|
||||
.await;
|
||||
}
|
||||
None => {
|
||||
player.clear().await;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
let state = GrooveState::new(Mutex::new(GrooveStateData::new(c_player)));
|
||||
|
||||
let settings = SettingsService::new(state.clone(), pool.clone());
|
||||
let library = LibraryService::new(state.clone(), pool.clone());
|
||||
@@ -72,6 +92,8 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
.await?;
|
||||
|
||||
let _ = cover_server_handle.await;
|
||||
let _ = watch_handle.await;
|
||||
let _ = player_rx_handle.await;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user