Skip to content

Commit

Permalink
wip: revert any changes in main
Browse files Browse the repository at this point in the history
  • Loading branch information
maximbaz committed Aug 7, 2023
1 parent 7256c18 commit dedfbef
Showing 1 changed file with 89 additions and 98 deletions.
187 changes: 89 additions & 98 deletions src/main.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
use config::Output;
use itertools::Itertools;
use std::error::Error;
use std::sync::mpsc;

mod als;
Expand Down Expand Up @@ -33,110 +31,103 @@ fn main() {
.output
.iter()
.filter_map(|output| {
init_output(output)
.map_err(|err| {
let (als_tx, als_rx) = mpsc::channel();
let (user_tx, user_rx) = mpsc::channel();
let (prediction_tx, prediction_rx) = mpsc::channel();

let brightness = match output {
config::Output::Backlight(cfg) => {
brightness::Backlight::new(&cfg.path, cfg.min_brightness)
.map(|b| Box::new(b) as Box<dyn brightness::Brightness + Send>)
}
config::Output::DdcUtil(cfg) => {
brightness::DdcUtil::new(&cfg.name, cfg.min_brightness)
.map(|b| Box::new(b) as Box<dyn brightness::Brightness + Send>)
}
};

match brightness {
Ok(b) => {
let thread_name = format!("backlight-{}", output.name());
std::thread::Builder::new()
.name(thread_name.clone())
.spawn(move || {
brightness::Controller::new(b, user_tx, prediction_rx).run();
})
.unwrap_or_else(|_| panic!("Unable to start thread: {}", thread_name));

let output = output.clone();
let thread_name = format!("predictor-{}", output.name());
std::thread::Builder::new()
.name(thread_name.clone())
.spawn(move || {
let controller = predictor::Controller::new(
prediction_tx,
user_rx,
als_rx,
true,
output.name(),
);

let mut frame_capturer: Box<dyn frame::capturer::Capturer> =
match output.capturer() {
config::Capturer::Wlroots => Box::new(
frame::capturer::wlroots::Capturer::new(
output.name(),
controller,
)
.unwrap(),
),
config::Capturer::None => Box::new(
frame::capturer::none::Capturer::new(controller).unwrap(),
),
};

frame_capturer.run()
})
.unwrap_or_else(|_| panic!("Unable to start thread: {}", thread_name));

Some(als_tx)
}
Err(err) => {
log::warn!(
"Skipping '{}' as it might be disconnected: {}",
output.name(),
err
)
})
.ok()
);

None
}
}
})
.collect_vec();

spawn("als".to_string(), move || {
let als: Box<dyn als::Als> = match config.als {
config::Als::Iio { path, thresholds } => Box::new(
als::iio::Als::new(&path, thresholds).expect("Unable to initialize ALS IIO sensor"),
),
config::Als::Time { thresholds } => Box::new(als::time::Als::new(thresholds)),
config::Als::Webcam { video, thresholds } => Box::new({
let (webcam_tx, webcam_rx) = mpsc::channel();
std::thread::Builder::new()
.name("als-webcam".to_string())
.spawn(move || {
als::webcam::Webcam::new(webcam_tx, video).run();
})
.expect("Unable to start thread: als-webcam");
als::webcam::Als::new(webcam_rx, thresholds)
}),
config::Als::None => Box::<als::none::Als>::default(),
};

als::controller::Controller::new(als, als_txs).run();
});
std::thread::Builder::new()
.name("als".to_string())
.spawn(move || {
let als: Box<dyn als::Als> = match config.als {
config::Als::Iio { path, thresholds } => Box::new(
als::iio::Als::new(&path, thresholds)
.expect("Unable to initialize ALS IIO sensor"),
),
config::Als::Time { thresholds } => Box::new(als::time::Als::new(thresholds)),
config::Als::Webcam { video, thresholds } => Box::new({
let (webcam_tx, webcam_rx) = mpsc::channel();
std::thread::Builder::new()
.name("als-webcam".to_string())
.spawn(move || {
als::webcam::Webcam::new(webcam_tx, video).run();
})
.expect("Unable to start thread: als-webcam");
als::webcam::Als::new(webcam_rx, thresholds)
}),
config::Als::None => Box::<als::none::Als>::default(),
};

als::controller::Controller::new(als, als_txs).run();
})
.expect("Unable to start thread: als");

log::info!("Continue adjusting brightness and wluma will learn your preference over time.");
std::thread::park();
}

fn spawn<F, T>(thread_name: String, handler: F)
where
F: FnOnce() -> T,
F: Send + 'static,
T: Send + 'static,
{
std::thread::Builder::new()
.name(thread_name.clone())
.spawn(handler)
.unwrap_or_else(|_| panic!("Unable to start thread: {}", thread_name));
}

fn init_output(output: &Output) -> Result<mpsc::Sender<std::string::String>, Box<dyn Error>> {
let (als_tx, als_rx) = mpsc::channel();
let (user_tx, user_rx) = mpsc::channel();
let (prediction_tx, prediction_rx) = mpsc::channel();

let brightness = match &output {
config::Output::Backlight(cfg) => {
brightness::Backlight::new(&cfg.path, cfg.min_brightness).map(|b| Box::new(b) as Box<_>)
}
config::Output::DdcUtil(cfg) => {
brightness::DdcUtil::new(&cfg.name, cfg.min_brightness).map(|b| Box::new(b) as Box<_>)
}
};

match brightness {
Ok(brightness) => {
spawn(format!("backlight-{}", output.name()), move || {
brightness::Controller::new(brightness, user_tx, prediction_rx).run()
});

let output = output.clone();
spawn(format!("predictor-{}", output.name()), move || {
let predictor_controller =
predictor::Controller::new(prediction_tx, user_rx, als_rx, true, output.name());

let frame_capturer: Result<Box<dyn frame::capturer::Capturer>, _> = match output
.capturer()
{
config::Capturer::Wlroots => {
frame::capturer::wlroots::Capturer::new(output.name(), predictor_controller)
.map(|b| Box::new(b) as Box<_>)
}
config::Capturer::None => {
frame::capturer::none::Capturer::new(predictor_controller)
.map(|b| Box::new(b) as Box<_>)
}
};

match frame_capturer {
Ok(mut frame_capturer) => frame_capturer.run(),
Err(err) => log::warn!(
"Skipping '{}' as unable to initialize frame capturer, it might be disconnected: {}",
output.name(),
err
),
}
});
}
Err(err) => log::warn!(
"Skipping '{}' as unable to initialize brightness controller, it might be disconnected: {}",
output.name(),
err
),
};

Ok(als_tx)
}

0 comments on commit dedfbef

Please sign in to comment.