1
0
Files
Toak/IO/ClipboardManager.cs

55 lines
1.7 KiB
C#

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.");
}
}
}