From 56dd495f8332317f5e0dee497df02b114b9960e5 Mon Sep 17 00:00:00 2001 From: Benjamyn Love Date: Wed, 2 Jul 2025 10:54:58 +1000 Subject: [PATCH] added ipc --- src/enums.rs | 2 ++ src/handlers/hyprpaper.rs | 19 +++++++++---------- src/lib/ipc.rs | 28 ++++++++++++++++++++++++++++ src/lib/mod.rs | 1 + src/main.rs | 4 ++++ 5 files changed, 44 insertions(+), 10 deletions(-) create mode 100644 src/lib/ipc.rs create mode 100644 src/lib/mod.rs diff --git a/src/enums.rs b/src/enums.rs index 4793555..f4857b8 100644 --- a/src/enums.rs +++ b/src/enums.rs @@ -5,6 +5,7 @@ pub enum WallpaperHandler { Feh, Plasma, Gnome, + Hyprpaper, Error, } @@ -14,6 +15,7 @@ impl WallpaperHandler { "feh" => WallpaperHandler::Feh, "plasma" => WallpaperHandler::Plasma, "gnome" => WallpaperHandler::Gnome, + "hyprpaper" => WallpaperHandler::Hyprpaper, _ => WallpaperHandler::Error, } } diff --git a/src/handlers/hyprpaper.rs b/src/handlers/hyprpaper.rs index 1e84dc9..002bf76 100644 --- a/src/handlers/hyprpaper.rs +++ b/src/handlers/hyprpaper.rs @@ -1,18 +1,17 @@ +use std::fmt::Write as _; +use crate::lib::ipc; use crate::Wallpapers; -use std::process::Command; - pub fn change_wallpapers(wallpapers: &Wallpapers) { - let mut command = Command::new("/usr/bin/feh"); - command.arg("--no-fehbg").arg("--bg-fill"); + let ipc = ipc::IPC::new(String::from("/run/user/1000/hypr/9958d297641b5c84dcff93f9039d80a5ad37ab00_1751412591_2000702590/.hyprpaper.sock")); for monitor in wallpapers.config.monitors.monitors.iter() { - command.arg(wallpapers.random_selection(&monitor.ratio).to_string()); + let mut buf = String::new(); + let x = wallpapers.random_selection(&monitor.ratio).to_string(); + write!(&mut buf, "reload ,{}", x).unwrap(); + ipc.clone().write(buf); + // println!("{}", buf); } - let result = command.output(); - match result { - Ok(_) => {} - Err(e) => println!("{}", e), - } + // println!("{}", ipc.write(String::from(""))) } diff --git a/src/lib/ipc.rs b/src/lib/ipc.rs new file mode 100644 index 0000000..af0f61a --- /dev/null +++ b/src/lib/ipc.rs @@ -0,0 +1,28 @@ +use std::{io::Write, os::unix::net::UnixStream}; + +#[derive(Clone)] +pub struct IPC { + path: String +} + +impl IPC { + pub fn new(path: String) -> IPC { + IPC{ path: path} + } + + pub fn write(self, data: String) -> bool { + let mut stream = UnixStream::connect(&self.path).unwrap(); + let resp = stream.write_all(data.as_bytes()); + match resp { + Ok(_) => return true, + Err(_) => return false, + } + + true + } + + pub fn read(self) -> String { + // let mut x = String::new(); + String::from(self.path) + } +} \ No newline at end of file diff --git a/src/lib/mod.rs b/src/lib/mod.rs new file mode 100644 index 0000000..1350c45 --- /dev/null +++ b/src/lib/mod.rs @@ -0,0 +1 @@ +pub mod ipc; \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 891c566..8fe8883 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,6 +5,7 @@ mod files; use enums::WallpaperHandler; use files::*; mod handlers; +mod lib; use untildify::untildify; @@ -32,6 +33,9 @@ fn main() { WallpaperHandler::Gnome => { handlers::gnome::change_wallpapers(&wallpapers); } + WallpaperHandler::Hyprpaper => { + handlers::hyprpaper::change_wallpapers(&wallpapers); + } _ => { println!("Error: Unknown wallpaper engine"); }