Example #1
0
        public static PushoverRequest CreateRequest(string message, string title, string url, string urlTitle, int?retry, int?expire, PushoverPriorityNotificationType?priority, PushoverSoundType?sound, params string[] devices)
        {
            if (string.IsNullOrEmpty(message))
            {
                throw new PushoverException("Message cannot be empty");
            }

            if (expire != null && retry == null || expire == null && retry != null)
            {
                throw new PushoverException("Expire and Retry needs to be filled every 2");
            }

            if (expire != null && retry != null && priority != PushoverPriorityNotificationType.EmergencyPriority)
            {
                throw new PushoverException("When Expire and Retry is informed then priority should be set to Emergency priority");
            }

            if ((expire == null || retry == null) && priority == PushoverPriorityNotificationType.EmergencyPriority)
            {
                throw new PushoverException("When Priority is set to Emergency Expire and Retry should be informed too");
            }

            if (retry != null && retry < 30)
            {
                throw new PushoverException("Retry must have a value of at least 30 seconds");
            }

            if (expire != null && expire > 86400)
            {
                throw new PushoverException("Expire must have a maximum value of at most 86400 seconds (24 hours)");
            }

            if (urlTitle != null && url == null)
            {
                throw new PushoverException("When UrlTitle is informed then Url should be informed too");
            }

            PushoverRequest request = new PushoverRequest()
            {
                Devices  = devices,
                Expire   = expire,
                Message  = message,
                Priority = priority,
                Retry    = retry,
                Sound    = sound,
                Title    = title,
                Url      = url,
                UrlTitle = urlTitle
            };

            return(request);
        }
Example #2
0
        public PushoverResponse SendNotification(PushoverRequest pushoverRequest)
        {
            HttpWebResponse response = null;

            try
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(string.Format(Url, "messages"));
                request.Timeout = Timeout;
                request.Proxy   = Proxy;
                request.Method  = "POST";

                string postData = "token=" + Token;
                postData += "&user="******"&message=" + WebUtility.UrlEncode(pushoverRequest.Message);

                if (!string.IsNullOrEmpty(pushoverRequest.Title))
                {
                    postData += "&title=" + WebUtility.UrlEncode(pushoverRequest.Title);
                }
                if (pushoverRequest.Priority.HasValue)
                {
                    postData += "&priority=" + (int)pushoverRequest.Priority.Value;
                }
                if (pushoverRequest.UseHtml.HasValue)
                {
                    postData += "&html=" + (pushoverRequest.UseHtml.Value ? "1" : "0");
                }
                if (pushoverRequest.Sound.HasValue)
                {
                    postData += "&sound=" + pushoverRequest.Sound.Value.ToString();
                }
                if (pushoverRequest.Devices != null)
                {
                    postData += "&device=" + WebUtility.UrlEncode(string.Join(",", pushoverRequest.Devices));
                }
                if (pushoverRequest.Url != null)
                {
                    postData += "&url=" + WebUtility.UrlEncode(pushoverRequest.Url);
                }
                if (pushoverRequest.UrlTitle != null)
                {
                    postData += "&url_title=" + WebUtility.UrlEncode(pushoverRequest.UrlTitle);
                }
                if (pushoverRequest.Expire.HasValue)
                {
                    postData += "&expire=" + pushoverRequest.Expire.Value;
                }
                if (pushoverRequest.Retry.HasValue)
                {
                    postData += "&retry=" + pushoverRequest.Retry.Value;
                }
                if (pushoverRequest.TimeStamp.HasValue)
                {
                    postData += "&timestamp=" + DateTimeHelper.DateTimeToUnixTimestamp(pushoverRequest.TimeStamp.Value);
                }
                if (pushoverRequest.CallbackUrl != null)
                {
                    postData += "&callback=" + WebUtility.UrlEncode(pushoverRequest.CallbackUrl);
                }

                byte[] data = Encoding.UTF8.GetBytes(postData);
                request.ContentLength = (long)data.Length;
                using (Stream stream = request.GetRequestStream())
                {
                    stream.Write(data, 0, data.Length);
                }

                response = (HttpWebResponse)request.GetResponse();
                string responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
                return(JsonConvert.DeserializeObject <PushoverResponse>(responseString));
            }
            catch (WebException ex)
            {
                response = (HttpWebResponse)ex.Response;
                string responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();

                _log.ErrorFormat("Error {0} ({1}) received : {2}", (int)response.StatusCode, response.StatusCode, responseString);

                return(JsonConvert.DeserializeObject <PushoverResponse>(responseString));
            }
            catch (Exception ex)
            {
                _log.Error(ex);
            }
            finally
            {
                if (response != null)
                {
                    response.Close();
                }
            }

            return(null);
        }
Example #3
0
 public PushoverResponse SendNotification(string message)
 {
     return(SendNotification(PushoverRequest.CreateRequest(message)));
 }