feat: basic music backend

This commit is contained in:
2024-11-24 00:10:56 +01:00
commit 51a57ebd40
23 changed files with 4091 additions and 0 deletions

66
src/player.rs Normal file
View File

@@ -0,0 +1,66 @@
use r2d2::Pool;
use r2d2_sqlite::SqliteConnectionManager;
use crate::{
database::tracks::get_track_full_path, proto::{player_server::Player, PlayTrackRequest, PlayTrackResponse}, state::GrooveState
};
pub struct PlayerService {
state: GrooveState,
pool: Pool<SqliteConnectionManager>,
}
impl PlayerService {
pub fn new(state: GrooveState, pool: Pool<SqliteConnectionManager>) -> Self {
Self { state, pool }
}
}
#[tonic::async_trait]
impl Player for PlayerService {
async fn play_track(
&self,
request: tonic::Request<PlayTrackRequest>,
) -> Result<tonic::Response<PlayTrackResponse>, tonic::Status> {
let Ok(db) = self.pool.get() else {
return Err(tonic::Status::internal(""));
};
let input = request.get_ref();
let Ok(track_path) = get_track_full_path(&db, input.hash.as_str()) else {
return Err(tonic::Status::not_found(""));
};
let mut state = self.state.write().await;
let _ = state.player.play_song(track_path);
let response = PlayTrackResponse {
};
Ok(tonic::Response::new(response))
}
async fn resume_track(
&self,
_request: tonic::Request<()>,
) -> Result<tonic::Response<()>, tonic::Status> {
let mut state = self.state.write().await;
state.player.resume();
Ok(tonic::Response::new(()))
}
async fn pause_track(
&self,
_request: tonic::Request<()>,
) -> Result<tonic::Response<()>, tonic::Status> {
let mut state = self.state.write().await;
state.player.pause();
Ok(tonic::Response::new(()))
}
}