This commit is contained in:
parent
53bda4eb06
commit
c25a8d633e
10
src/main.rs
10
src/main.rs
@ -118,14 +118,10 @@ fn ligth_controll(
|
||||
if let Ok(action) = action {
|
||||
match action {
|
||||
Action::Reload => {
|
||||
let new_render = render::Render::new(pool.clone());
|
||||
|
||||
if new_render.is_err() || new_render.as_ref().ok().is_none() {
|
||||
println!("something every wrong {:?}", new_render.err());
|
||||
continue;
|
||||
let result = render.reload_config();
|
||||
if result.is_err() || result.as_ref().ok().is_none() {
|
||||
println!("Ehh failed to load config i guess: {:?}", result.err());
|
||||
}
|
||||
|
||||
render = new_render.unwrap();
|
||||
}
|
||||
Action::Clear => {
|
||||
render.blank();
|
||||
|
@ -180,6 +180,84 @@ impl Render {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn reload_config(&mut self) -> Result<(), Box<dyn Error>> {
|
||||
println!("Reload config");
|
||||
|
||||
let conn = self.conn.get()?;
|
||||
|
||||
let stmt = conn.prepare("SELECT ledcount, tags from configuration;");
|
||||
|
||||
if stmt.is_err() || stmt.as_ref().ok().is_none() {
|
||||
Err(format!(
|
||||
"Something went wrong while reading the database {:?}",
|
||||
stmt.as_ref().err()
|
||||
))?;
|
||||
}
|
||||
|
||||
let mut stmt = stmt?;
|
||||
|
||||
struct Data {
|
||||
ledcount: u32,
|
||||
tag: String,
|
||||
}
|
||||
|
||||
let version_iter = stmt.query_map([], |row| {
|
||||
Ok(Data {
|
||||
ledcount: row.get(0)?,
|
||||
tag: row.get(1)?,
|
||||
})
|
||||
});
|
||||
|
||||
if version_iter.is_err() || version_iter.as_ref().ok().is_none() {
|
||||
Err(format!(
|
||||
"Something went wrong while reading the database {:?}",
|
||||
version_iter.as_ref().err()
|
||||
))?;
|
||||
}
|
||||
|
||||
let version_iter = version_iter.ok().unwrap();
|
||||
|
||||
let mut current_pos = 0;
|
||||
|
||||
let mut local_led_config = Vec::new();
|
||||
|
||||
for data in version_iter {
|
||||
let data = data?;
|
||||
|
||||
let tag = if data.tag.is_empty() {
|
||||
None
|
||||
} else {
|
||||
Some(data.tag)
|
||||
};
|
||||
|
||||
let start = current_pos;
|
||||
let end = current_pos + data.ledcount;
|
||||
current_pos = end;
|
||||
|
||||
let start: Result<usize, _> = start.try_into();
|
||||
let end: Result<usize, _> = end.try_into();
|
||||
|
||||
if start.is_err() || start.ok().is_none() || end.is_err() || end.ok().is_none() {
|
||||
println!("Skiping loading configuration");
|
||||
continue;
|
||||
}
|
||||
|
||||
let start = start.ok().unwrap();
|
||||
let end = end.ok().unwrap();
|
||||
|
||||
local_led_config.push(LocalLedConfiguration { tag, start, end });
|
||||
}
|
||||
|
||||
self.num_leds = current_pos;
|
||||
println!(
|
||||
"Loaded: {} leds, with config: {:?}",
|
||||
self.num_leds, local_led_config
|
||||
);
|
||||
self.local_led_config = local_led_config;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn add_animation(&mut self, animation: Animation) {
|
||||
println!("Added animation");
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user