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 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 = "") => 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 JsonSerializer _jsonSerializer = new JsonSerializer()
{
ContractResolver = new CamelCasePropertyNamesContractResolver(),
NullValueHandling = NullValueHandling.Ignore,
DefaultValueHandling = DefaultValueHandling.Ignore
};
}
}