From 3405b97815100248400df158dcede0ee21f20250 Mon Sep 17 00:00:00 2001 From: DemonKingSwarn Date: Tue, 28 Jan 2025 17:36:48 +0530 Subject: chore: working on hyprland ipc communication --- src/GetWindowsv2.cs | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 src/GetWindowsv2.cs (limited to 'src') diff --git a/src/GetWindowsv2.cs b/src/GetWindowsv2.cs new file mode 100644 index 0000000..7185776 --- /dev/null +++ b/src/GetWindowsv2.cs @@ -0,0 +1,62 @@ +namespace hyprwatch.Window +{ + using System; + using System.Net.Sockets; + using System.Text; + using System.IO; + using System.Text.RegularExpressions; + + public partial class GetWindowsv2 + { + public static string ActiveWindow() + { + string xdgRuntimeDir = Environment.GetEnvironmentVariable("XDG_RUNTIME_DIR"); + string hyprlandInstanceSig = Environment.GetEnvironmentVariable("HYPRLAND_INSTANCE_SIGNATURE"); + + string socketPath = Path.Combine(xdgRuntimeDir, "hypr", hyprlandInstanceSig, ".socket2.sock"); + + string activeWindow = "Home-Screen"; + + var socket = new Socket(AddressFamily.Unix, SocketType.Stream, ProtocolType.IP); + + try + { + socket.Connect(new UnixDomainSocketEndPoint(socketPath)); + + using (var stream = new NetworkStream(socket)) + using (var reader = new StreamReader(stream)) + { + while (true) + { + string line = reader.ReadLine(); + + if (line == null) + { + break; + } + + var classMatch = ClassRegex().Match(line); + if(classMatch.Success) + { + activeWindow = classMatch.Groups[1].Value.Trim(); + break; + } + } + } + } + catch (Exception ex) + { + Console.WriteLine(ex.Message); + } + finally + { + socket.Close(); + } + + return activeWindow; + } + + [GeneratedRegex(@"activewindow>>([^,]+)")] + public static partial Regex ClassRegex(); + } +} -- cgit v1.1