using ElectronNET.API.Entities; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Newtonsoft.Json.Serialization; using System.Runtime.Versioning; using System.Threading.Tasks; namespace ElectronNET.API { /// /// Perform copy and paste operations on the system clipboard. /// public sealed class Clipboard { private static Clipboard _clipboard; private static readonly object _syncRoot = new(); internal Clipboard() { } internal static Clipboard Instance { get { if (_clipboard == null) { lock (_syncRoot) { if (_clipboard == null) { _clipboard = new Clipboard(); } } } return _clipboard; } } /// /// Read the content in the clipboard as plain text. /// /// /// The content in the clipboard as plain text. public Task ReadTextAsync(string type = "") => BridgeConnector.OnResult("clipboard-readText", "clipboard-readText-Completed", type); /// /// Writes the text into the clipboard as plain text. /// /// /// public void WriteText(string text, string type = "") { BridgeConnector.Emit("clipboard-writeText", text, type); } /// /// The content in the clipboard as markup. /// /// /// public Task ReadHTMLAsync(string type = "") => BridgeConnector.OnResult("clipboard-readHTML", "clipboard-readHTML-Completed", type); /// /// Writes markup to the clipboard. /// /// /// public void WriteHTML(string markup, string type = "") { BridgeConnector.Emit("clipboard-writeHTML", markup, type); } /// /// The content in the clipboard as RTF. /// /// /// public Task ReadRTFAsync(string type = "") => BridgeConnector.OnResult("clipboard-readRTF", "clipboard-readRTF-Completed", type); /// /// Writes the text into the clipboard in RTF. /// /// /// public void WriteRTF(string text, string type = "") { BridgeConnector.Emit("clipboard-writeHTML", text, type); } /// /// Returns an Object containing title and url keys representing /// the bookmark in the clipboard. The title and url values will /// be empty strings when the bookmark is unavailable. /// /// [SupportedOSPlatform("windows")] [SupportedOSPlatform("macos")] public Task ReadBookmarkAsync() => BridgeConnector.OnResult("clipboard-readBookmark", "clipboard-readBookmark-Completed"); /// /// Writes the title and url into the clipboard as a bookmark. /// /// Note: Most apps on Windows don’t support pasting bookmarks /// into them so you can use clipboard.write to write both a /// bookmark and fallback text to the clipboard. /// /// /// /// [SupportedOSPlatform("windows")] [SupportedOSPlatform("macos")] public void WriteBookmark(string title, string url, string type = "") { BridgeConnector.Emit("clipboard-writeBookmark", title, url, type); } /// /// macOS: The text on the find pasteboard. This method uses synchronous IPC /// when called from the renderer process. The cached value is reread from the /// find pasteboard whenever the application is activated. /// /// [SupportedOSPlatform("macos")] public Task ReadFindTextAsync() => BridgeConnector.OnResult("clipboard-readFindText", "clipboard-readFindText-Completed"); /// /// macOS: Writes the text into the find pasteboard as plain text. This method uses /// synchronous IPC when called from the renderer process. /// /// [SupportedOSPlatform("macos")] public void WriteFindText(string text) { BridgeConnector.Emit("clipboard-writeFindText", text); } /// /// Clears the clipboard content. /// /// public void Clear(string type = "") { BridgeConnector.Emit("clipboard-clear", type); } /// /// An array of supported formats for the clipboard type. /// /// /// public Task AvailableFormatsAsync(string type = "") => BridgeConnector.OnResult("clipboard-availableFormats", "clipboard-availableFormats-Completed", type); /// /// Writes data to the clipboard. /// /// /// public void Write(Data data, string type = "") { BridgeConnector.Emit("clipboard-write", JObject.FromObject(data, _jsonSerializer), type); } /// /// Reads an image from the clipboard. /// /// /// public Task ReadImageAsync(string type = "") => BridgeConnector.OnResult("clipboard-readImage", "clipboard-readImage-Completed", type); /// /// Writes an image to the clipboard. /// /// /// public void WriteImage(NativeImage image, string type = "") { BridgeConnector.Emit("clipboard-writeImage", JsonConvert.SerializeObject(image), type); } private static readonly JsonSerializer _jsonSerializer = new() { ContractResolver = new CamelCasePropertyNamesContractResolver(), NullValueHandling = NullValueHandling.Ignore, DefaultValueHandling = DefaultValueHandling.Ignore }; } }