Example #1
0
        /// <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);
        }
Example #2
0
 /// <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));
 }
Example #3
0
        /// <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));
        }
Example #4
0
 /// <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));
 }