diff --git a/Cargo.lock b/Cargo.lock index 81fb36f..61f786e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "aho-corasick" @@ -34,6 +34,12 @@ dependencies = [ "winapi", ] +[[package]] +name = "doctest-file" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aac81fa3e28d21450aa4d2ac065992ba96a1d7303efbce51a95f4fd175b67562" + [[package]] name = "getrandom" version = "0.2.12" @@ -51,6 +57,19 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" +[[package]] +name = "interprocess" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "894148491d817cb36b6f778017b8ac46b17408d522dd90f539d677ea938362eb" +dependencies = [ + "doctest-file", + "libc", + "recvmsg", + "widestring", + "windows-sys", +] + [[package]] name = "libc" version = "0.2.153" @@ -79,6 +98,7 @@ dependencies = [ "configparser", "dbus", "glob", + "interprocess", "rand", "untildify", ] @@ -125,6 +145,12 @@ dependencies = [ "getrandom", ] +[[package]] +name = "recvmsg" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3edd4d5d42c92f0a659926464d4cce56b562761267ecf0f469d85b7de384175" + [[package]] name = "regex" version = "1.10.3" @@ -168,6 +194,12 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "widestring" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7219d36b6eac893fa81e84ebe06485e7dcbb616177469b142df14f1f4deb1311" + [[package]] name = "winapi" version = "0.3.9" @@ -189,3 +221,76 @@ name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" diff --git a/Cargo.toml b/Cargo.toml index 0e255dd..1aee6d2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,5 +7,6 @@ edition = "2021" configparser = "3.0.4" dbus = "0.9.7" glob = "0.3.1" +interprocess = "2.2.2" rand = "0.8.5" untildify = { git = "https://git.lovelynet.net/benjamyn/untildify.git", branch = "main" } 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 new file mode 100644 index 0000000..b1c5687 --- /dev/null +++ b/src/handlers/hyprpaper.rs @@ -0,0 +1,24 @@ +use std::fmt::Write as _; +use crate::lib::ipc; +use crate::Wallpapers; + +use std::env; + +pub fn change_wallpapers(wallpapers: &Wallpapers) { + let hypr_session = env::var("HYPRLAND_INSTANCE_SIGNATURE").unwrap(); + let xdg_path = env::var("XDG_RUNTIME_DIR").unwrap(); + + let mut socket_path = String::new(); + write!(&mut socket_path, "{}/hypr/{}/.hyprpaper.sock", xdg_path, hypr_session).unwrap(); + let ipc = ipc::IPC::new(socket_path); + + for monitor in wallpapers.config.monitors.monitors.iter() { + 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); + } + + // println!("{}", ipc.write(String::from(""))) +} diff --git a/src/handlers/mod.rs b/src/handlers/mod.rs index 1593695..83cd23a 100644 --- a/src/handlers/mod.rs +++ b/src/handlers/mod.rs @@ -2,3 +2,4 @@ pub mod dbus_plasma_interface; pub mod feh; pub mod gnome; pub mod plasma; +pub mod hyprpaper; \ No newline at end of file diff --git a/src/lib/ipc.rs b/src/lib/ipc.rs new file mode 100644 index 0000000..b4fe1ac --- /dev/null +++ b/src/lib/ipc.rs @@ -0,0 +1,26 @@ +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, + } + } + + 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"); }