lib: refactor SwaySome::new to also have SwaySome::new_from_socket

`SwaySome::new_from_socket` takes a socket path in argument.
This allows the tests to be able to build a SwaySome instance with a
custom socket path.
This commit is contained in:
Skia 2024-11-04 17:59:48 +01:00
parent ffc73fd832
commit f7bcdf1296

View file

@ -49,17 +49,6 @@ struct Workspace {
impl SwaySome { impl SwaySome {
pub fn new() -> SwaySome { pub fn new() -> SwaySome {
let mut swaysome = SwaySome {
socket: Cell::new(Some(SwaySome::get_stream())),
outputs: vec![],
workspaces: vec![],
};
swaysome.outputs = swaysome.get_outputs();
swaysome.workspaces = swaysome.get_workspaces();
swaysome
}
fn get_stream() -> UnixStream {
for socket_var in ["SWAYSOCK", "I3SOCK"] { for socket_var in ["SWAYSOCK", "I3SOCK"] {
let socket_path = match env::var(socket_var) { let socket_path = match env::var(socket_var) {
Ok(val) => val, Ok(val) => val,
@ -70,27 +59,40 @@ impl SwaySome {
}; };
let socket = Path::new(&socket_path); let socket = Path::new(&socket_path);
if socket.is_file() {
match UnixStream::connect(&socket) { match SwaySome::new_from_socket(socket) {
Err(_) => { Ok(swaysome) => return swaysome,
eprintln!( Err(e) => eprintln!("Error with value found in ${}: {}", socket_var, e),
"counldn't connect to socket '{}' found in ${}",
socket_path, socket_var
);
continue;
}
Ok(stream) => {
eprintln!(
"successful connection to socket '{}' found in ${}",
socket_path, socket_var
);
return stream;
} }
} }
} }
panic!("couldn't find any i3/sway socket") panic!("couldn't find any i3/sway socket")
} }
pub fn new_from_socket(socket: &Path) -> Result<SwaySome, String> {
let stream = match UnixStream::connect(&socket) {
Err(_) => {
return Err(format!(
"counldn't connect to socket '{}'",
socket.display()
));
}
Ok(stream) => {
eprintln!("successful connection to socket '{}'", socket.display());
stream
}
};
let mut swaysome = SwaySome {
socket: Cell::new(Some(stream)),
outputs: vec![],
workspaces: vec![],
};
swaysome.outputs = swaysome.get_outputs();
swaysome.workspaces = swaysome.get_workspaces();
Ok(swaysome)
}
fn send_msg(&self, msg_type: u32, payload: &str) { fn send_msg(&self, msg_type: u32, payload: &str) {
let payload_length = payload.len() as u32; let payload_length = payload.len() as u32;