public bool ProcessResponse <T>(AsanaResponse <T> response, bool onlySuccess = false, Func <AsanaResponse <T>, Task <bool> > processError = null) where T : class
        {
            var success = (response.StatusCode == HttpStatusCode.OK ||
                           response.StatusCode == HttpStatusCode.Created) && response.Data != null;


            if (!success && !onlySuccess)
            {
                StateService.DependencyResolverContainer.Resolve <IDispatcher>().RunAsync(async() =>
                {
                    if (processError != null)
                    {
                        var r = await processError(response);
                        if (r)
                        {
                            return;
                        }
                    }

                    var dialog = new MessageDialog(GetErrorMessage(response), "Error");
                    await dialog.ShowAsync();
                });
            }

            return(success);
        }
예제 #2
0
        public async Task <AsanaResponse <BaseEntity> > ChangeTaskProject(long taskId, long oldProjectId, long newProjectId)
        {
            AsanaResponse <BaseEntity> result = null;

            if (oldProjectId > 0)
            {
                result = await UseRequest <BaseEntity>(string.Format("tasks/{0}/removeProject", taskId), request =>
                {
                    request.Method = Method.POST;
                    request.AddParameter(
                        "project", oldProjectId);
                });
            }


            if (newProjectId > 0 && (result == null || result.Errors == null))
            {
                return(await UseRequest <BaseEntity>(string.Format("tasks/{0}/addProject", taskId), request =>
                {
                    request.Method = Method.POST;
                    request.AddParameter(
                        "project", newProjectId);
                }));
            }
            else
            {
                return(result);
            }
        }
예제 #3
0
        public bool ProcessResponse <T>(AsanaResponse <T> response, bool onlySuccess = false, Func <AsanaResponse <T>, Task <bool> > processError = null) where T : class
        {
            var success = (response.StatusCode == HttpStatusCode.OK ||
                           response.StatusCode == HttpStatusCode.Created) && response.Data != null;


            if (!success && !onlySuccess)
            {
                DispatcherHelper.OnUi(async() =>
                {
                    if (processError != null)
                    {
                        var r = await processError(response);
                        if (r)
                        {
                            return;
                        }
                    }


                    MessageBox.Show(GetErrorMessage(response), "Error", MessageBoxButton.OK);
                });
            }

            return(success);
        }
        public bool ProcessResponse <T>(AsanaResponse <T> response, bool onlySuccess = false, Func <AsanaResponse <T>, Task <bool> > processError = null) where T : class
        {
            var success = (response.StatusCode == HttpStatusCode.OK ||
                           response.StatusCode == HttpStatusCode.Created) && response.Data != null;


            return(success);
        }
        public string GetErrorMessage <T>(AsanaResponse <T> response) where T : class
        {
            if (response.Errors != null && response.Errors.IsUnknownObject)
            {
                return("Object is not found - seems like it was deleted in Asana service. Sync please");
            }

            return(response.StatusDescription != null ? response.StatusDescription : response.StatusCode.ToString());
        }
예제 #6
0
        private static async Task <AsanaResponse <T> > GetResponse <T>(string resource, Action <RestRequest> action) where T : class, new()
        {
            var client = new RestClient(_asanaBaseUrl);

            client.Timeout   = 19000;
            client.UserAgent = string.Format("Mozilla/5.0 (WindowsPhone {0}; {1}) Gecko/20100101", Environment.OSVersion.Version, GetDeviceModel());
            var request = new RestRequest(resource);

            if (AsanaStateService.IsSetApiKey)
            {
                client.Authenticator = new HttpBasicAuthenticator(AsanaStateService.ApiKey, string.Empty);
            }
            else if (AsanaStateService.IsSetAuthToken)
            {
                request.AddHeader(System.Net.HttpRequestHeader.Authorization.ToString(),
                                  string.Format("Bearer {0}", AsanaStateService.AuthToken));
            }

            request.AddHeader("Accept-Encoding", "gzip");
            action(request);

            AsanaResponse <T> response = null;

            try
            {
                response = await client.MyExecuteAsync(request, (content) =>
                {
                    return(new AsanaResponse <T>
                    {
                        Content = content.Content,
                        ContentEncoding = content.ContentEncoding,
                        ContentLength = content.ContentLength,
                        ContentType = content.ContentType,
                        ErrorException = content.ErrorException,
                        ErrorMessage = content.ErrorMessage,
                        RawBytes = content.RawBytes,
                        Request = content.Request,
                        ResponseStatus = content.ResponseStatus,
                        ResponseUri = content.ResponseUri,
                        Server = content.Server,
                        StatusCode = content.StatusCode,
                        StatusDescription = content.StatusDescription
                    });
                });
            }
            catch (Exception e)
            {
                response = new AsanaResponse <T>()
                {
                    ErrorException = e, ErrorMessage = e.Message, StatusCode = HttpStatusCode.NotFound
                };
            }


            return(response);
        }
예제 #7
0
 void OnError(AsanaResponse <List <AsanaWorkspace> > response)
 {
     if (response.StatusCode == HttpStatusCode.Unauthorized)
     {
         MessageBox.Show("Wrong API key", "Authorization failed", MessageBoxButton.OK);
     }
     else
     {
         MessageBox.Show(new AsanaResponseProcessor().GetErrorMessage(response), "Error", MessageBoxButton.OK);
     }
 }
예제 #8
0
        async Task <bool> ProcessNotFoundTask(AsanaResponse <AsanaTask> r)
        {
            var errors = r.Errors;

            if (errors == null || !errors.IsUnknownObject)
            {
                return(false);
            }

            var res = MessageBox.Show("Task was not found - seems like it was deleted in Asana service. Delete it?", "Warning", MessageBoxButton.OKCancel);

            if (res == MessageBoxResult.OK)
            {
                var task = await  GetStorageService().Find <AsanaTask>(Id);

                await new LoadDataService().DeleteTask(task);
                NavigationManager.GoBack();
            }

            return(true);
        }
예제 #9
0
        private static async Task <AsanaResponse <T> > UseRequest <T>(string resource, Action <RestRequest> action) where T : class, new()
        {
            AsanaResponse <T> response = null;

            try
            {
                response = await GetResponse <T>(resource, action);

                switch (response.StatusCode)
                {
                case HttpStatusCode.ServiceUnavailable:
                    response.StatusDescription = "Asana service is not available. Try later please";
                    break;

                case HttpStatusCode.BadGateway:
                    response.StatusDescription = "Asana service is not available. Try later please";
                    break;

                case HttpStatusCode.BadRequest:
                    response.Errors = JsonConvert.DeserializeObject <AsanaErrors>(response.Content);
                    break;

                case HttpStatusCode.OK:
                case HttpStatusCode.Created:
                    response.Data = JsonConvert.DeserializeObject <DataClass <T> >(response.Content).data;
                    break;

                case HttpStatusCode.Unauthorized:
                    break;

                case HttpStatusCode.Forbidden:
                    response.StatusDescription = "Forbidden request to Asana service";
                    break;

                case (HttpStatusCode)429:
                    response.StatusDescription = "Asana service is not available. Try later please";
                    break;

                case 0:
                case HttpStatusCode.NotFound:
                    response.StatusDescription = "Asana service is not available. Try later please";

                    if (!string.IsNullOrEmpty(response.Content))
                    {
                        ActionHelper.SafeExecute(() =>
                        {
                            response.Errors =
                                JsonConvert.DeserializeObject <AsanaErrors>(
                                    response.Content);
                        });
                    }

                    break;

                default:
                    throw new Exception(string.Format("Unhandled status code {0}", response.StatusCode));
                }


                return(response);
            }
            catch (Exception e)
            {
                throw;
            }
        }
예제 #10
0
 public static bool ProcessResponse <T>(AsanaResponse <T> response, bool onlySuccess        = false,
                                        Func <AsanaResponse <T>, Task <bool> > processError = null) where T : class
 {
     return(StateService.DependencyResolverContainer.Resolve <IAsanaResponseProcessor>()
            .ProcessResponse(response, onlySuccess, processError));
 }