/// <summary> /// Sends, asynchronously, the specified <see cref="Message"/> using Pushover to the specified device(s) of the /// specified user or group. /// </summary> /// <param name="message">The <see cref="Message"/> to send.</param> /// <param name="userOrGroup">The user or group id to send the message to.</param> /// <param name="deviceNames">The devicenames to send the message to.</param> /// <returns>Returns the <see cref="PushoverUserResponse"/> returned by the server.</returns> /// <seealso href="https://pushover.net/api#messages">Pushover API documentation</seealso> /// <exception cref="ArgumentNullException">Thrown when message or user/group arguments are null.</exception> /// <exception cref="InvalidKeyException">Thrown when an invalid user/group is specified.</exception> public async Task <PushoverUserResponse> SendPushoverMessageAsync(Message message, string userOrGroup, string[] deviceNames, ClsImageQueueItem CurImg) { using var Trace = new Trace(); //This c# 8.0 using feature will auto dispose when the function is done. PushoverUserResponse ret = new PushoverUserResponse(); try { (this.MessageValidator ?? new DefaultMessageValidator()).Validate("message", message); (this.UserOrGroupKeyValidator ?? new UserOrGroupKeyValidator()).Validate("userOrGroup", userOrGroup); if (deviceNames != null && deviceNames.Length > 0) { foreach (var device in deviceNames) { if (!string.IsNullOrWhiteSpace(device)) { (this.DeviceNameValidator ?? new DeviceNameValidator()).Validate("device", device); } } } MultipartFormDataContent parameters = new MultipartFormDataContent(); parameters.AddConditional("token", this.ApplicationKey); parameters.AddConditional("user", userOrGroup); parameters.AddConditional("message", message.Body); parameters.Add("priority", (int)message.Priority); parameters.AddConditional("device", deviceNames); parameters.AddConditional("title", message.Title); parameters.AddConditional("sound", message.Sound); parameters.AddConditional("html", message.IsHtmlBody); if (message.SupplementaryUrl != null) { parameters.Add("url", message.SupplementaryUrl.Uri); parameters.AddConditional("url_title", message.SupplementaryUrl.Title); } if (message.Priority == Priority.Emergency) { parameters.Add("retry", message.RetryOptions.RetryEvery); parameters.Add("expire", message.RetryOptions.RetryPeriod); parameters.Add("callback", message.RetryOptions.CallBackUrl); } if (message.Timestamp != null) { parameters.Add("timestamp", (int)(TimeZoneInfo.ConvertTimeToUtc(message.Timestamp.Value).Subtract(EPOCH).TotalSeconds)); } if (CurImg != null && CurImg.IsValid()) { StreamContent imageParameter = new StreamContent(CurImg.ToStream()); imageParameter.Headers.ContentType = MediaTypeHeaderValue.Parse("image/jpeg"); parameters.Add(imageParameter, "attachment", Path.GetFileName(CurImg.image_path)); } ret = await this.PushoverPost(GetV1APIUriFromBase("messages.json"), parameters); } catch (Exception ex) { AITOOL.Log($"Error: {ex.Msg()}"); ret.Errors = new string[] { ex.Msg() }; } return(ret); }
/// <summary> /// Sends, asynchronously, the specified <see cref="Message"/> using Pushover to the specified user or group. /// </summary> /// <param name="message">The <see cref="Message"/> to send.</param> /// <param name="userOrGroup">The user or group id to send the message to.</param> /// <returns>Returns the <see cref="PushoverUserResponse"/> returned by the server.</returns> /// <seealso href="https://pushover.net/api#messages">Pushover API documentation</seealso> /// <exception cref="ArgumentNullException">Thrown when message or user/group arguments are null.</exception> /// <exception cref="InvalidKeyException">Thrown when an invalid user/group is specified.</exception> public async Task <PushoverUserResponse> SendPushoverMessageAsync(Message message, string userOrGroup, ClsImageQueueItem CurImg) { return(await this.SendPushoverMessageAsync(message, userOrGroup, (string[])null, CurImg).ConfigureAwait(false)); }
/// <summary> /// Sends, asynchronously, the specified <see cref="Message"/> using Pushover to the specified device of the /// specified user or group. /// </summary> /// <param name="message">The <see cref="Message"/> to send.</param> /// <param name="userOrGroup">The user or group id to send the message to.</param> /// <param name="deviceName">The devicename to send the message to.</param> /// <returns>Returns the <see cref="PushoverUserResponse"/> returned by the server.</returns> /// <seealso href="https://pushover.net/api#messages">Pushover API documentation</seealso> /// <exception cref="ArgumentNullException">Thrown when message or user/group arguments are null.</exception> /// <exception cref="InvalidKeyException">Thrown when an invalid user/group is specified.</exception> public async Task <PushoverUserResponse> SendPushoverMessageAsync(Message message, string userOrGroup, string deviceName, ClsImageQueueItem CurImg) { List <string> devices = Global.Split(deviceName, ";"); return(await this.SendPushoverMessageAsync(message, userOrGroup, devices.ToArray(), CurImg).ConfigureAwait(false)); }
/// <summary> /// Sends, asynchronously, the specified <see cref="Message"/> using Pushover to the specified device of the /// specified user or group. /// </summary> /// <param name="message">The <see cref="Message"/> to send.</param> /// <param name="userOrGroup">The user or group id to send the message to.</param> /// <param name="deviceName">The devicename to send the message to.</param> /// <returns>Returns the <see cref="PushoverUserResponse"/> returned by the server.</returns> /// <seealso href="https://pushover.net/api#messages">Pushover API documentation</seealso> /// <exception cref="ArgumentNullException">Thrown when message or user/group arguments are null.</exception> /// <exception cref="InvalidKeyException">Thrown when an invalid user/group is specified.</exception> public async Task <PushoverUserResponse> SendPushoverMessageAsync(Message message, string userOrGroup, string deviceName, ClsImageQueueItem CurImg) { return(await this.SendPushoverMessageAsync(message, userOrGroup, new[] { deviceName }, CurImg).ConfigureAwait(false)); }