/// <summary> /// Open the given external protocol URL in the desktop’s default manner. /// (For example, mailto: URLs in the user’s default mail agent). /// </summary> /// <param name="url"></param> /// <param name="options">macOS only</param> /// <param name="action">macOS only</param> /// <returns>Whether an application was available to open the URL. /// If callback is specified, always returns true.</returns> public Task <bool> OpenExternalAsync(string url, OpenExternalOptions options, Action <Error> action) { var taskCompletionSource = new TaskCompletionSource <bool>(); BridgeConnector.Socket.On("shell-openExternalCompleted", (success) => { BridgeConnector.Socket.Off("shell-openExternalCompleted"); taskCompletionSource.SetResult((bool)success); }); BridgeConnector.Socket.Off("shell-openExternalCallback"); BridgeConnector.Socket.On("shell-openExternalCallback", (args) => { var urlKey = ((JArray)args).First.ToString(); var error = ((JArray)args).Last.ToObject <Error>(); if (_openExternalCallbacks.ContainsKey(urlKey)) { _openExternalCallbacks[urlKey](error); } }); _openExternalCallbacks.Add(url, action); BridgeConnector.Socket.Emit("shell-openExternal", url, JObject.FromObject(options, _jsonSerializer), true); return(taskCompletionSource.Task); }
/// <summary> /// Open the given external protocol URL in the desktop’s default manner. /// (For example, mailto: URLs in the user’s default mail agent). /// </summary> /// <param name="url"></param> /// <param name="options">macOS only</param> /// <returns>Whether an application was available to open the URL. /// If callback is specified, always returns true.</returns> public Task <bool> OpenExternalAsync(string url, OpenExternalOptions options) { var taskCompletionSource = new TaskCompletionSource <bool>(); BridgeConnector.Socket.On("shell-openExternalCompleted", (success) => { BridgeConnector.Socket.Off("shell-openExternalCompleted"); taskCompletionSource.SetResult((bool)success); }); BridgeConnector.Socket.Emit("shell-openExternal", url, JObject.FromObject(options, _jsonSerializer)); return(taskCompletionSource.Task); }
/// <summary> /// Open the given external protocol URL in the desktop’s default manner. /// (For example, mailto: URLs in the user’s default mail agent). /// </summary> /// <param name="url">Max 2081 characters on windows.</param> /// <param name="options">Controls the behavior of OpenExternal.</param> /// <returns>The error message corresponding to the failure if a failure occurred, otherwise <see cref="string.Empty"/>.</returns> public Task<string> OpenExternalAsync(string url, OpenExternalOptions options) { var taskCompletionSource = new TaskCompletionSource<string>(); BridgeConnector.Socket.On("shell-openExternalCompleted", (error) => { BridgeConnector.Socket.Off("shell-openExternalCompleted"); taskCompletionSource.SetResult((string) error); }); if (options == null) { BridgeConnector.Socket.Emit("shell-openExternal", url); } else { BridgeConnector.Socket.Emit("shell-openExternal", url, JObject.FromObject(options, _jsonSerializer)); } return taskCompletionSource.Task; }
/// <summary> /// Open the given external protocol URL in the desktop’s default manner. /// (For example, mailto: URLs in the user’s default mail agent). /// </summary> /// <param name="url">Max 2081 characters on windows.</param> /// <param name="options">Controls the behavior of OpenExternal.</param> /// <returns>The error message corresponding to the failure if a failure occurred, otherwise <see cref="string.Empty"/>.</returns> public Task <string> OpenExternalAsync(string url, OpenExternalOptions options) { var taskCompletionSource = new TaskCompletionSource <string>(TaskCreationOptions.RunContinuationsAsynchronously); BridgeConnector.On <string>("shell-openExternalCompleted", (error) => { BridgeConnector.Off("shell-openExternalCompleted"); taskCompletionSource.SetResult(error); }); if (options == null) { BridgeConnector.Emit("shell-openExternal", url); } else { BridgeConnector.Emit("shell-openExternal", url, options); } return(taskCompletionSource.Task); }