1
0
Fork 0
forked from wry/wry

portal: make pipewire optional

This commit is contained in:
Julian Orth 2024-07-24 12:56:00 +02:00
parent 21916017c1
commit b359b2648d
2 changed files with 22 additions and 10 deletions

View file

@ -14,7 +14,7 @@ use {
forker::ForkerError,
io_uring::IoUring,
logger::Logger,
pipewire::pw_con::{PwCon, PwConHolder, PwConOwner},
pipewire::pw_con::{PwConHolder, PwConOwner},
portal::{
ptl_display::{watch_displays, PortalDisplay, PortalDisplayId},
ptl_render_ctx::PortalRenderCtx,
@ -181,9 +181,10 @@ async fn run_async(
}
};
let pw_con = match PwConHolder::new(&eng, &ring).await {
Ok(p) => p,
Ok(p) => Some(p),
Err(e) => {
fatal!("Could not connect to pipewire: {}", ErrorFmt(e));
log::error!("Could not connect to pipewire: {}", ErrorFmt(e));
None
}
};
let state = Rc::new(PortalState {
@ -191,7 +192,6 @@ async fn run_async(
ring,
eng,
wheel,
pw_con: pw_con.con.clone(),
displays: Default::default(),
dbus,
screencasts: Default::default(),
@ -199,15 +199,19 @@ async fn run_async(
render_ctxs: Default::default(),
dma_buf_ids: Default::default(),
});
if let Some(pw_con) = &pw_con {
pw_con.con.owner.set(Some(state.clone()));
}
let _root = {
let obj = state
.dbus
.add_object("/org/freedesktop/portal/desktop")
.unwrap();
add_screencast_dbus_members(&state, &obj);
if let Some(pw_con) = &pw_con {
add_screencast_dbus_members(&state, &pw_con.con, &obj);
}
obj
};
state.pw_con.owner.set(Some(state.clone()));
watch_displays(state.clone()).await;
}
@ -281,7 +285,6 @@ struct PortalState {
ring: Rc<IoUring>,
eng: Rc<AsyncEngine>,
wheel: Rc<Wheel>,
pw_con: Rc<PwCon>,
displays: CopyHashMap<PortalDisplayId, Rc<PortalDisplay>>,
dbus: Rc<DbusSocket>,
screencasts: CopyHashMap<String, Rc<ScreencastSession>>,