more error handling
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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] {
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user