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);
        }
Exemple #3
0
        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));
        }