#![warn(missing_docs)]
pub mod error;
pub mod logger;
pub mod embed;
pub mod app;
pub mod config;
pub mod audio;
use app::App;
use config::{SoundPreset, SoundVariation};
use error::Result;
use rdev::listen;
use std::thread;
pub async fn run(
sound_presets: Vec<SoundPreset>,
variation: Option<SoundVariation>,
device: Option<String>,
) -> Result<()> {
let (sender, mut receiver) = tokio::sync::mpsc::unbounded_channel();
thread::spawn(move || {
listen(move |event| {
sender
.send(event)
.unwrap_or_else(|e| tracing::error!("could not send event {:?}", e));
})
.expect("could not listen events");
});
tracing::debug!("{:#?}", sound_presets);
let mut apps = sound_presets
.into_iter()
.map(|sound_preset| App::init(sound_preset, variation.clone(), device.clone()))
.collect::<Result<Vec<_>>>()?;
loop {
if let Some(event) = receiver.recv().await {
for app in apps.iter_mut() {
app.handle_key_event(event.clone()).unwrap();
}
}
}
}