more error handling

This commit is contained in:
galister
2024-02-19 01:05:50 +01:00
parent 63b43c0e59
commit 1d9fa95ea0
10 changed files with 125 additions and 116 deletions

View File

@@ -52,11 +52,11 @@ where
data,
);
canvas.bg_color = color_parse("#101010").unwrap();
canvas.bg_color = color_parse("#101010").unwrap(); //safe
canvas.panel(0., 0., size.x, size.y);
canvas.font_size = 18;
canvas.bg_color = color_parse("#202020").unwrap();
canvas.bg_color = color_parse("#202020").unwrap(); //safe
let unit_size = size.x / LAYOUT.row_size;
let h = unit_size - 2. * BUTTON_PADDING;

View File

@@ -128,30 +128,32 @@ struct ScreenPipeline {
}
impl ScreenPipeline {
fn new(extent: &[u32; 3], app: &mut AppState) -> ScreenPipeline {
fn new(extent: &[u32; 3], app: &mut AppState) -> anyhow::Result<ScreenPipeline> {
let texture = app
.graphics
.render_texture(extent[0], extent[1], app.graphics.native_format);
let view = ImageView::new_default(texture).unwrap();
let view = ImageView::new_default(texture)?;
let shaders = app.graphics.shared_shaders.read().unwrap();
let Ok(shaders) = app.graphics.shared_shaders.read() else {
return Err(anyhow::anyhow!("Could not lock shared shaders for reading"));
};
let pipeline = app.graphics.create_pipeline(
view.clone(),
shaders.get("vert_common").unwrap().clone(),
shaders.get("frag_sprite").unwrap().clone(),
shaders.get("vert_common").unwrap().clone(), // want panic
shaders.get("frag_sprite").unwrap().clone(), // want panic
app.graphics.native_format,
);
let extentf = [extent[0] as f32, extent[1] as f32];
ScreenPipeline {
Ok(ScreenPipeline {
view,
mouse: None,
pipeline,
extentf,
}
})
}
fn ensure_mouse_initialized(&mut self, uploads: &mut WlxCommandBuffer) {
@@ -272,17 +274,17 @@ impl ScreenRenderer {
}
#[cfg(feature = "x11")]
pub fn new_xshm(screen: Arc<XshmScreen>) -> Option<ScreenRenderer> {
pub fn new_xshm(screen: Arc<XshmScreen>) -> ScreenRenderer {
let capture = XshmCapture::new(screen.clone());
Some(ScreenRenderer {
ScreenRenderer {
name: screen.name.clone(),
capture: Box::new(capture),
pipeline: None,
receiver: None,
last_view: None,
extent: extent_from_res((screen.monitor.width(), screen.monitor.height())),
})
}
}
}
@@ -406,7 +408,7 @@ impl OverlayRenderer for ScreenRenderer {
let mut pipeline = None;
if mouse.is_some() {
let new_pipeline = self.pipeline.get_or_insert_with(|| {
let mut pipeline = ScreenPipeline::new(&self.extent, app);
let mut pipeline = ScreenPipeline::new(&self.extent, app).unwrap();
self.last_view = Some(pipeline.view.clone());
pipeline.ensure_mouse_initialized(&mut upload);
pipeline
@@ -622,12 +624,12 @@ where
}
#[cfg(feature = "wayland")]
pub fn get_screens_wayland<O>(session: &AppSession) -> (Vec<OverlayData<O>>, Vec2)
pub fn get_screens_wayland<O>(session: &AppSession) -> anyhow::Result<(Vec<OverlayData<O>>, Vec2)>
where
O: Default,
{
let mut overlays = vec![];
let wl = WlxClient::new().unwrap();
let wl = WlxClient::new().ok_or_else(|| anyhow::anyhow!("Failed to connect to Wayland"))?;
// Load existing Pipewire tokens from file
let mut pw_tokens: HashMap<String, String> = if let Ok(conf) = load_pw_token_config() {
@@ -652,7 +654,7 @@ where
}
let extent = wl.get_desktop_extent();
(overlays, Vec2::new(extent.0 as f32, extent.1 as f32))
Ok((overlays, Vec2::new(extent.0 as f32, extent.1 as f32)))
}
#[cfg(not(feature = "x11"))]
@@ -664,13 +666,22 @@ where
}
#[cfg(feature = "x11")]
pub fn get_screens_x11<O>(session: &AppSession) -> (Vec<OverlayData<O>>, Vec2)
pub fn get_screens_x11<O>(session: &AppSession) -> anyhow::Result<(Vec<OverlayData<O>>, Vec2)>
where
O: Default,
{
use anyhow::bail;
let mut extent = vec2(0., 0.);
let overlays = XshmCapture::get_monitors()
let monitors = match XshmCapture::get_monitors() {
Ok(m) => m,
Err(e) => {
bail!(e.to_string());
}
};
let overlays = monitors
.into_iter()
.map(|s| {
log::info!(
@@ -682,7 +693,7 @@ where
s.monitor.y()
);
let size = (s.monitor.width(), s.monitor.height());
let capture: ScreenRenderer = ScreenRenderer::new_xshm(s.clone()).unwrap();
let capture: ScreenRenderer = ScreenRenderer::new_xshm(s.clone());
let backend = Box::new(SplitOverlayBackend {
renderer: Box::new(capture),
@@ -725,7 +736,7 @@ where
})
.collect();
(overlays, extent)
Ok((overlays, extent))
}
fn extent_from_res(res: (i32, i32)) -> [u32; 3] {

View File

@@ -338,6 +338,7 @@ fn btn_func_dn(
func_right,
func_middle,
} = control.state.as_ref().unwrap()
// want to panic if state not found
else {
log::error!("FuncButton state not found");
return;
@@ -399,6 +400,7 @@ fn battery_update(control: &mut Control<(), ElemState>, _: &mut (), app: &mut Ap
fg_color_low,
fg_color_charging,
} = control.state.as_ref().unwrap()
// want to panic if state not found
else {
return;
};
@@ -444,6 +446,7 @@ fn exec_button(
ref mut child,
..
} = control.state.as_mut().unwrap()
// want to panic if state not found
else {
log::error!("ExecButton state not found");
return;
@@ -484,6 +487,7 @@ fn exec_label_update(control: &mut Control<(), ElemState>, _: &mut (), _: &mut A
exec,
ref mut child,
} = control.state.as_mut().unwrap()
// want to panic if state not found
else {
log::error!("AutoExec state not found");
return;
@@ -504,10 +508,9 @@ fn exec_label_update(control: &mut Control<(), ElemState>, _: &mut (), _: &mut A
return;
}
return;
} else {
log::error!("No stdout for child process");
return;
}
log::error!("No stdout for child process");
return;
}
}
Ok(None) => {
@@ -547,6 +550,7 @@ fn exec_label_update(control: &mut Control<(), ElemState>, _: &mut (), _: &mut A
}
fn clock_update(control: &mut Control<(), ElemState>, _: &mut (), _: &mut AppState) {
// want to panic if state not found
let ElemState::Clock { timezone, format } = control.state.as_ref().unwrap() else {
log::error!("Clock state not found");
return;
@@ -567,6 +571,7 @@ fn overlay_button_scroll(
app: &mut AppState,
delta: f32,
) {
// want to panic if state not found
let ElemState::OverlayButton { overlay, .. } = control.state.as_mut().unwrap() else {
log::error!("OverlayButton state not found");
return;
@@ -604,6 +609,7 @@ fn overlay_button_dn(
ref mut mode,
..
} = control.state.as_mut().unwrap()
// want to panic if state not found
else {
log::error!("OverlayButton state not found");
return;
@@ -618,6 +624,7 @@ fn overlay_button_up(control: &mut Control<(), ElemState>, _: &mut (), app: &mut
mode,
overlay,
} = control.state.as_ref().unwrap()
// want to panic if state not found
else {
log::error!("OverlayButton state not found");
return;