chore: changes from formatting on save

This commit is contained in:
Hamir Mahal 2024-06-30 00:43:47 -07:00
parent bc5f0ba614
commit 37bf4aeb40
No known key found for this signature in database

View File

@ -5,7 +5,7 @@ use zbus::{
dbus_proxy, dbus_proxy,
export::futures_util::TryStreamExt, export::futures_util::TryStreamExt,
zvariant::{ObjectPath, OwnedObjectPath, Structure, Value}, zvariant::{ObjectPath, OwnedObjectPath, Structure, Value},
Connection, MessageStream, MessageType, Result Connection, MessageStream, MessageType, Result,
}; };
#[derive(Clone, Copy)] #[derive(Clone, Copy)]
@ -20,7 +20,7 @@ pub enum RecordTypes {
pub enum CursorModeTypes { pub enum CursorModeTypes {
Default, Default,
Hidden, Hidden,
Show Show,
} }
#[dbus_proxy( #[dbus_proxy(
@ -54,8 +54,12 @@ pub struct WaylandRecorder {
impl WaylandRecorder { impl WaylandRecorder {
pub async fn new() -> Self { pub async fn new() -> Self {
let connection = Connection::session().await.expect("failed to connect to session bus"); let connection = Connection::session()
let screen_cast_proxy = ScreenCastProxy::new(&connection).await.expect("failed to create dbus proxy for screen-cast"); .await
.expect("failed to connect to session bus");
let screen_cast_proxy = ScreenCastProxy::new(&connection)
.await
.expect("failed to create dbus proxy for screen-cast");
gst::init().expect("failed to initialize gstreamer"); gst::init().expect("failed to initialize gstreamer");
WaylandRecorder { WaylandRecorder {
@ -67,24 +71,37 @@ impl WaylandRecorder {
} }
} }
pub async fn start(&mut self, filename: String, record_type: RecordTypes, cursor_mode_type: CursorModeTypes) -> bool { pub async fn start(
self.screen_cast_proxy.create_session(HashMap::from([ &mut self,
("handle_token", Value::from("blue_recorder_1")), filename: String,
("session_handle_token", Value::from("blue_recorder_1")), record_type: RecordTypes,
])) cursor_mode_type: CursorModeTypes,
.await.expect("failed to create session"); ) -> bool {
self.screen_cast_proxy
.create_session(HashMap::from([
("handle_token", Value::from("blue_recorder_1")),
("session_handle_token", Value::from("blue_recorder_1")),
]))
.await
.expect("failed to create session");
let mut message_stream = MessageStream::from(self.connection.clone()); let mut message_stream = MessageStream::from(self.connection.clone());
self.filename = filename.clone(); self.filename = filename.clone();
while let Some(msg) = message_stream.try_next().await.expect("failed to get message") { while let Some(msg) = message_stream
.try_next()
.await
.expect("failed to get message")
{
match msg.message_type() { match msg.message_type() {
MessageType::Signal => { MessageType::Signal => {
let (response_num, response) = msg.body::<(u32, HashMap<&str, Value>)>().expect("failed to get body"); let (response_num, response) = msg
.body::<(u32, HashMap<&str, Value>)>()
.expect("failed to get body");
if response_num > 0 { if response_num > 0 {
return false; return false;
} }
if response.len() == 0 { if response.len() == 0 {
@ -96,14 +113,17 @@ impl WaylandRecorder {
self.screen_cast_proxy.clone(), self.screen_cast_proxy.clone(),
response.clone(), response.clone(),
record_type, record_type,
cursor_mode_type cursor_mode_type,
) )
.await.expect("failed to handle session"); .await
.expect("failed to handle session");
continue; continue;
} }
if response.contains_key("streams") { if response.contains_key("streams") {
self.record_screen_cast(response.clone()).await.expect("failed to record screen cast"); self.record_screen_cast(response.clone())
.await
.expect("failed to record screen cast");
break; break;
} }
} }
@ -124,8 +144,21 @@ impl WaylandRecorder {
} }
if self.session_path.len() > 0 { if self.session_path.len() > 0 {
println!("Closing session...: {:?}", self.session_path.replace("request", "session")); println!(
self.connection.clone().call_method(Some("org.freedesktop.portal.Desktop"), self.session_path.clone().replace("request", "session"), Some("org.freedesktop.portal.Session"), "Close", &()).await.expect("failed to close session"); "Closing session...: {:?}",
self.session_path.replace("request", "session")
);
self.connection
.clone()
.call_method(
Some("org.freedesktop.portal.Desktop"),
self.session_path.clone().replace("request", "session"),
Some("org.freedesktop.portal.Session"),
"Close",
&(),
)
.await
.expect("failed to close session");
self.session_path = String::new(); self.session_path = String::new();
} }
} }
@ -135,7 +168,7 @@ impl WaylandRecorder {
screen_cast_proxy: ScreenCastProxy<'_>, screen_cast_proxy: ScreenCastProxy<'_>,
response: HashMap<&str, Value<'_>>, response: HashMap<&str, Value<'_>>,
record_type: RecordTypes, record_type: RecordTypes,
cursor_mode_type: CursorModeTypes cursor_mode_type: CursorModeTypes,
) -> Result<()> { ) -> Result<()> {
let response_session_handle = response let response_session_handle = response
.get("session_handle") .get("session_handle")