using ElectronNET.API.Entities; using ElectronNET.API.Serialization; using System.Runtime.Versioning; using System.Text.Json; using System.Threading.Tasks; // ReSharper disable InconsistentNaming namespace ElectronNET.API { /// /// Perform copy and paste operations on the system clipboard. /// public sealed class Clipboard : ApiBase { protected override SocketTaskEventNameTypes SocketTaskEventNameType => SocketTaskEventNameTypes.DashesLowerFirst; protected override SocketTaskMessageNameTypes SocketTaskMessageNameType => SocketTaskMessageNameTypes.DashesLowerFirst; private static Clipboard _clipboard; private static object _syncRoot = new object(); 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 = "") => this.InvokeAsync(type); /// /// Writes the text into the clipboard as plain text. /// /// /// public void WriteText(string text, string type = "") { BridgeConnector.Socket.Emit("clipboard-writeText", text, type); } /// /// The content in the clipboard as markup. /// /// /// public Task ReadHTMLAsync(string type = "") => this.InvokeAsync(type); /// /// Writes markup to the clipboard. /// /// /// public void WriteHTML(string markup, string type = "") { BridgeConnector.Socket.Emit("clipboard-writeHTML", markup, type); } /// /// The content in the clipboard as RTF. /// /// /// public Task ReadRTFAsync(string type = "") => this.InvokeAsync(type); /// /// Writes the text into the clipboard in RTF. /// /// /// public void WriteRTF(string text, string type = "") { BridgeConnector.Socket.Emit("clipboard-writeRTF", 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("macOS")] [SupportedOSPlatform("Windows")] public Task ReadBookmarkAsync() => this.InvokeAsync(); /// /// 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("macOS")] [SupportedOSPlatform("Windows")] public void WriteBookmark(string title, string url, string type = "") { BridgeConnector.Socket.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() => this.InvokeAsync(); /// /// 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.Socket.Emit("clipboard-writeFindText", text); } /// /// Clears the clipboard content. /// /// public void Clear(string type = "") { BridgeConnector.Socket.Emit("clipboard-clear", type); } /// /// An array of supported formats for the clipboard type. /// /// /// public Task AvailableFormatsAsync(string type = "") => this.InvokeAsync(type); /// /// Writes data to the clipboard. /// /// /// public void Write(Data data, string type = "") { BridgeConnector.Socket.Emit("clipboard-write", data, type); } /// /// Reads an image from the clipboard. /// /// /// public Task ReadImageAsync(string type = "") => this.InvokeAsync(type); /// /// Writes an image to the clipboard. /// /// /// public void WriteImage(NativeImage image, string type = "") { BridgeConnector.Socket.Emit("clipboard-writeImage", JsonSerializer.Serialize(image, ElectronJson.Options), type); } } }