public (bool broadcastStatus, PushResponse response) BroadcastMessage(PushRequestContent broadcastValue) { if (!Core.IsNetworkAvailable) { Logger.Log("No internet connection available. cannot connect to PushBullet API.", LogLevels.Error); return(false, null); } if (!IsBroadcastServiceOnline) { return(false, null); } if (PreviousBroadcastMessage.Equals(broadcastValue)) { return(false, null); } if (broadcastValue == null) { Logger.Log("Cannot broadcast as the required values are empty.", LogLevels.Warn); return(false, null); } PreviousBroadcastMessage = broadcastValue; PushResponse pushResponse; try { pushResponse = BulletClient.SendPush(broadcastValue); } catch (ParameterValueIsNullException) { Logger.Log("Parameter value is null.", LogLevels.Warn); return(false, null); } catch (ResponseIsNullException) { Logger.Log("The api response is null", LogLevels.Warn); return(false, null); } catch (RequestFailedException) { Logger.Log("Request to the api failed", LogLevels.Warn); return(false, null); } catch (NullReferenceException) { return(false, null); } return(true, pushResponse); }
public async Task <PushesBase[]?> Push(PushRequestContent pushRequestContent) { if (pushRequestContent == null) { throw new ParameterValueIsNullException("pushMessageValues value is null."); } if (ClientAccessToken == null || string.IsNullOrEmpty(ClientAccessToken)) { throw new IncorrectAccessTokenException(); } string requestUrl = API_BASE_URL + GetRoute(EPUSH_ROUTES.PUSH); List <(string headerName, string headerValue)> headers = new List <(string headerName, string headerValue)> { ("Content-Type", "application/json") }; List <(string paramName, object paramValue, ParameterType paramType)>?parameters = new List <(string paramName, object paramValue, ParameterType paramType)>(); switch (pushRequestContent.PushTarget) { case PushTarget.Device: if (!string.IsNullOrEmpty(pushRequestContent.PushTargetValue)) { parameters.Add(("device_iden", pushRequestContent.PushTargetValue, ParameterType.QueryString)); } break; case PushTarget.Client: if (!string.IsNullOrEmpty(pushRequestContent.PushTargetValue)) { parameters.Add(("client_iden", pushRequestContent.PushTargetValue, ParameterType.QueryString)); } break; case PushTarget.Email: if (!string.IsNullOrEmpty(pushRequestContent.PushTargetValue)) { parameters.Add(("email", pushRequestContent.PushTargetValue, ParameterType.QueryString)); } break; case PushTarget.Channel: if (!string.IsNullOrEmpty(pushRequestContent.PushTargetValue)) { parameters.Add(("channel_tag", pushRequestContent.PushTargetValue, ParameterType.QueryString)); } break; case PushTarget.All: parameters = null; break; } switch (pushRequestContent.PushType) { case PushType.Note: parameters?.Add(("type", "note", ParameterType.RequestBody)); if (!string.IsNullOrEmpty(pushRequestContent.PushTitle)) { parameters?.Add(("title", pushRequestContent.PushTitle, ParameterType.RequestBody)); } if (!string.IsNullOrEmpty(pushRequestContent.PushBody)) { parameters?.Add(("body", pushRequestContent.PushBody, ParameterType.RequestBody)); } break; case PushType.Link: parameters?.Add(("type", "link", ParameterType.RequestBody)); if (!string.IsNullOrEmpty(pushRequestContent.PushTitle)) { parameters?.Add(("title", pushRequestContent.PushTitle, ParameterType.RequestBody)); } if (!string.IsNullOrEmpty(pushRequestContent.PushBody)) { parameters?.Add(("body", pushRequestContent.PushBody, ParameterType.RequestBody)); } if (!string.IsNullOrEmpty(pushRequestContent.LinkUrl)) { parameters?.Add(("url", pushRequestContent.LinkUrl, ParameterType.RequestBody)); } break; //TODO: File support //case PushEnums.PushType.File: // bodyParams.Add("type", "file"); // if (!string.IsNullOrEmpty(pushRequestContent.FileName)) { // bodyParams.Add("file_name", pushRequestContent.FileName); // } // if (!string.IsNullOrEmpty(pushRequestContent.FileType)) { // bodyParams.Add("file_type", pushRequestContent.FileType); // } // if (!string.IsNullOrEmpty(pushRequestContent.FileUrl)) { // bodyParams.Add("file_url", pushRequestContent.FileUrl); // } // if (!string.IsNullOrEmpty(pushRequestContent.PushBody)) { // bodyParams.Add("body", pushRequestContent.PushBody); // } // break; default: throw new InvalidRequestException(); } ResponseBase?response = await GetResponseAsync(requestUrl, Method.POST, headers, parameters); if (response == null) { throw new RequestFailedException(); } Logger.Log(nameof(Push) + " successful.", LogLevels.Trace); return(response.Pushes); }
public PushResponse SendPush(PushRequestContent pushRequestContent) { if (pushRequestContent == null) { throw new ParameterValueIsNullException("pushMessageValues value is null."); } if (Helpers.IsNullOrEmpty(ClientAccessToken)) { throw new IncorrectAccessTokenException(ClientAccessToken); } string requestUrl = "https://api.pushbullet.com/v2/pushes"; Dictionary <string, string> queryString = new Dictionary <string, string>(); Dictionary <string, string> bodyParams = new Dictionary <string, string>(); switch (pushRequestContent.PushTarget) { case PushEnums.PushTarget.Device: if (!Helpers.IsNullOrEmpty(pushRequestContent.PushTargetValue)) { queryString.Add("device_iden", pushRequestContent.PushTargetValue); } break; case PushEnums.PushTarget.Client: if (!Helpers.IsNullOrEmpty(pushRequestContent.PushTargetValue)) { queryString.Add("client_iden", pushRequestContent.PushTargetValue); } break; case PushEnums.PushTarget.Email: if (!Helpers.IsNullOrEmpty(pushRequestContent.PushTargetValue)) { queryString.Add("email", pushRequestContent.PushTargetValue); } break; case PushEnums.PushTarget.Channel: if (!Helpers.IsNullOrEmpty(pushRequestContent.PushTargetValue)) { queryString.Add("channel_tag", pushRequestContent.PushTargetValue); } break; case PushEnums.PushTarget.All: queryString = null; break; } switch (pushRequestContent.PushType) { case PushEnums.PushType.Note: bodyParams.Add("type", "note"); if (!Helpers.IsNullOrEmpty(pushRequestContent.PushTitle)) { bodyParams.Add("title", pushRequestContent.PushTitle); } if (!Helpers.IsNullOrEmpty(pushRequestContent.PushBody)) { bodyParams.Add("body", pushRequestContent.PushBody); } break; case PushEnums.PushType.Link: bodyParams.Add("type", "link"); if (!Helpers.IsNullOrEmpty(pushRequestContent.PushTitle)) { bodyParams.Add("title", pushRequestContent.PushTitle); } if (!Helpers.IsNullOrEmpty(pushRequestContent.PushBody)) { bodyParams.Add("body", pushRequestContent.PushBody); } if (!Helpers.IsNullOrEmpty(pushRequestContent.LinkUrl)) { bodyParams.Add("url", pushRequestContent.LinkUrl); } break; case PushEnums.PushType.File: bodyParams.Add("type", "file"); if (!Helpers.IsNullOrEmpty(pushRequestContent.FileName)) { bodyParams.Add("file_name", pushRequestContent.FileName); } if (!Helpers.IsNullOrEmpty(pushRequestContent.FileType)) { bodyParams.Add("file_type", pushRequestContent.FileType); } if (!Helpers.IsNullOrEmpty(pushRequestContent.FileUrl)) { bodyParams.Add("file_url", pushRequestContent.FileUrl); } if (!Helpers.IsNullOrEmpty(pushRequestContent.PushBody)) { bodyParams.Add("body", pushRequestContent.PushBody); } break; default: throw new InvalidRequestException(); } (bool requestStatus, string response) = FetchApiResponse(requestUrl, Method.POST, true, queryString, bodyParams); if (!requestStatus && Helpers.IsNullOrEmpty(response)) { return(null); } if (!requestStatus) { throw new RequestFailedException(); } if (Helpers.IsNullOrEmpty(response)) { throw new ResponseIsNullException(); } Logger.Log("Push notification send!", LogLevels.Trace); return(DeserializeJsonObject <PushResponse>(response)); }