using System.Diagnostics; using Toak.Core.Interfaces; namespace Toak.IO; public class ClipboardManager(INotifications notifications) : IClipboardManager { private readonly INotifications _notifications = notifications; public void Copy(string text) { if (string.IsNullOrWhiteSpace(text)) return; try { var sessionType = Environment.GetEnvironmentVariable("XDG_SESSION_TYPE")?.ToLowerInvariant() ?? ""; ProcessStartInfo pInfo; if (sessionType == "wayland") { pInfo = new ProcessStartInfo { FileName = Core.Constants.Commands.ClipboardWayland, UseShellExecute = false, CreateNoWindow = true, RedirectStandardInput = true }; } else { pInfo = new ProcessStartInfo { FileName = Core.Constants.Commands.ClipboardX11, Arguments = "-selection clipboard", UseShellExecute = false, CreateNoWindow = true, RedirectStandardInput = true }; } var process = Process.Start(pInfo); if (process == null) return; using (var sw = process.StandardInput) { sw.Write(text); } process.WaitForExit(); } catch (Exception ex) { Console.WriteLine($"[ClipboardManager] Error copying text: {ex.Message}"); _notifications.Notify("Clipboard Error", "Could not copy text to clipboard."); } } }