2025-07-04 03:41:39 -05:00
|
|
|
// ─── server/src/handshake.rs ───────────────────────────────────────────────
|
|
|
|
|
use tonic::{Request, Response, Status};
|
|
|
|
|
|
|
|
|
|
use lesavka_common::lesavka::{
|
|
|
|
|
Empty, HandshakeSet,
|
|
|
|
|
handshake_server::{Handshake, HandshakeServer},
|
|
|
|
|
};
|
2026-01-28 17:52:00 -03:00
|
|
|
use crate::camera;
|
2025-07-04 03:41:39 -05:00
|
|
|
|
2026-01-28 17:52:00 -03:00
|
|
|
pub struct HandshakeSvc;
|
2025-07-04 03:41:39 -05:00
|
|
|
|
|
|
|
|
#[tonic::async_trait]
|
|
|
|
|
impl Handshake for HandshakeSvc {
|
|
|
|
|
async fn get_capabilities(
|
|
|
|
|
&self,
|
|
|
|
|
_req: Request<Empty>,
|
|
|
|
|
) -> Result<Response<HandshakeSet>, Status> {
|
2026-01-28 17:52:00 -03:00
|
|
|
let cfg = camera::update_camera_config();
|
|
|
|
|
let camera_enabled = match cfg.output {
|
|
|
|
|
camera::CameraOutput::Uvc => std::env::var("LESAVKA_DISABLE_UVC").is_err(),
|
|
|
|
|
camera::CameraOutput::Hdmi => true,
|
|
|
|
|
};
|
|
|
|
|
let microphone = std::env::var("LESAVKA_DISABLE_UAC").is_err();
|
2025-07-04 03:41:39 -05:00
|
|
|
Ok(Response::new(HandshakeSet {
|
2026-01-28 17:52:00 -03:00
|
|
|
camera: camera_enabled,
|
|
|
|
|
microphone,
|
|
|
|
|
camera_output: cfg.output.as_str().to_string(),
|
|
|
|
|
camera_codec: cfg.codec.as_str().to_string(),
|
|
|
|
|
camera_width: cfg.width,
|
|
|
|
|
camera_height: cfg.height,
|
|
|
|
|
camera_fps: cfg.fps,
|
2025-07-04 03:41:39 -05:00
|
|
|
}))
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
impl HandshakeSvc {
|
|
|
|
|
pub fn server() -> HandshakeServer<Self> {
|
2026-01-28 17:52:00 -03:00
|
|
|
HandshakeServer::new(Self)
|
2025-07-04 03:41:39 -05:00
|
|
|
}
|
|
|
|
|
}
|