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); }
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); } }
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()); }
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); }
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); } }
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); }
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; } }
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)); }