/// <summary> /// Accesses the /workspaces/{id}/tasks endpoint. /// </summary> /// <returns></returns> public async Task<AsanaCollection<AsanaTask>> GetTasks(AsanaUser assignee = null, System.Nullable<System.DateTime> completedSince = null, System.Nullable<System.DateTime> modifiedSince = null, string optFields = null, bool assigneeIsMe = false, bool completedSinceIsNow = false) { var request = new RestRequest("/workspaces/{id}/tasks", Method.GET); request.AddUrlSegment("id", Id.ToString()); if (assigneeIsMe) request.AddParameter("assignee", "me"); else if (!ReferenceEquals(assignee, null)) request.AddParameter("assignee", assignee.ToString()); if (completedSinceIsNow) request.AddParameter("completed_since", "now"); else if (!ReferenceEquals(completedSince, null)) request.AddParameter("completed_since", completedSince.ToString()); if (!ReferenceEquals(modifiedSince, null)) request.AddParameter("modified_since", modifiedSince.ToString()); if (!ReferenceEquals(optFields, null)) request.AddParameter("opt_fields", optFields.ToString()); // execute the request var response = await AsanaHost.RestClient.ExecuteTaskAsync(request); using (var stringReader = new StringReader(response.Content)) // raw content as string using (var reader = new JsonTextReader(stringReader)) { var jsonData = AsanaHost.JsonDeserializer.Deserialize<AsanaArrayResponse>(reader); if (!ReferenceEquals(jsonData.Errors, null)) // || !string.IsNullOrEmpty(jsonData.Errors.Message) throw new Exception("A remote error has occured: " + jsonData.Errors.First().Message); var resultsCollection = jsonData.Data.ToObject<List<AsanaTask>>(AsanaHost.JsonDeserializer); if (ReferenceEquals(Tasks, null)) { Tasks = new AsanaCollection<AsanaTask>(resultsCollection); } else { Tasks.Import(resultsCollection); } AsanaHost.Cache.AsanaTaskCollection.Import(resultsCollection, true); return Tasks; } }
/// <summary> /// Accesses the /tasks/{id}/removeFollowers endpoint. /// </summary> /// <returns></returns> public async Task RemoveFollower(AsanaUser[] followers) { var request = new RestRequest("/tasks/{id}/removeFollowers", Method.POST); request.AddUrlSegment("id", Id.ToString()); request.AddParameter("followers", followers.ToString()); // execute the request var response = await AsanaHost.RestClient.ExecuteTaskAsync(request); using (var stringReader = new StringReader(response.Content)) // raw content as string using (var reader = new JsonTextReader(stringReader)) { var jsonData = AsanaHost.JsonDeserializer.Deserialize<AsanaResponse>(reader); if (!ReferenceEquals(jsonData.Errors, null)) // || !string.IsNullOrEmpty(jsonData.Errors.Message) throw new Exception("A remote error has occured: " + jsonData.Errors.First().Message); } }
public async Task<AsanaTask> Save() { if (HasLocalChanges) { RestRequest request; if (IsLocal && !ReferenceEquals(CreateRequest, null)) request = CreateRequest; else request = new RestRequest("/tasks/{id}", Method.PUT); // TODO: iterate UrlSegmentParam request.AddUrlSegment("id", Id.ToString()); // for each _local if (!ReferenceEquals(_localAssignee, null)) request.AddParameter("assignee", _localAssignee.ToString()); if (!ReferenceEquals(_localAssigneeStatus, null)) request.AddParameter("assignee_status", _localAssigneeStatus.ToString()); if (!ReferenceEquals(_localCompleted, null)) request.AddParameter("completed", _localCompleted.ToString()); if (!ReferenceEquals(_localDueOn, null)) request.AddParameter("due_on", _localDueOn.ToString()); if (IsLocal) { var count = 0; if (Followers.BufferCount > 0) { var FollowersBuffer = Followers.GetBufferAndPurge(); foreach (var single in FollowersBuffer.AddBuffer) { // TODO: save only if possible await single.Save(); // save if not saved yet request.AddParameter("followers" + "[" + count + "]", single.Id.ToString()); count++; } } } if (!ReferenceEquals(_localHearted, null)) request.AddParameter("hearted", _localHearted.ToString()); if (!ReferenceEquals(_localName, null)) request.AddParameter("name", _localName.ToString()); if (!ReferenceEquals(_localHtmlNotes, null)) request.AddParameter("html_notes", _localHtmlNotes.ToString()); if (IsLocal) { var count = 0; if (Projects.BufferCount > 0) { var ProjectsBuffer = Projects.GetBufferAndPurge(); foreach (var single in ProjectsBuffer.AddBuffer) { // TODO: save only if possible await single.Save(); // save if not saved yet request.AddParameter("projects" + "[" + count + "]", single.Id.ToString()); count++; } } } // execute the request var response = await AsanaHost.RestClient.ExecuteTaskAsync(request); // AsanaTask retVal; using (var stringReader = new StringReader(response.Content)) // raw content as string using (var reader = new JsonTextReader(stringReader)) { var jsonData = AsanaHost.JsonDeserializer.Deserialize<AsanaResponse>(reader); if (!ReferenceEquals(jsonData.Errors, null)) // (!string.IsNullOrEmpty(jsonData.Errors.Message)) throw new Exception("A remote error has occured: " + jsonData.Errors.First().Message); _id = (Int64) jsonData.Data.Property("id"); AsanaHost.JsonCachingContext.SetReference<AsanaTask>(Id, this); //retVal = jsonData.Data.ToObject<AsanaTask>(AsanaHost.JsonDeserializer); } } // nullify _local and update lists if (!ReferenceEquals(_localAssignee, null)) _localAssignee = null; if (!ReferenceEquals(_localAssigneeStatus, null)) _localAssigneeStatus = null; if (!ReferenceEquals(_localCompleted, null)) _localCompleted = null; if (!ReferenceEquals(_localDueOn, null)) _localDueOn = null; if (Followers.BufferCount > 0) { var FollowersBuffer = Followers.GetBufferAndPurge(); await AddFollower(FollowersBuffer.AddBuffer.ToArray()); await RemoveFollower(FollowersBuffer.RemoveBuffer.ToArray()); } if (!ReferenceEquals(_localHearted, null)) _localHearted = null; if (!ReferenceEquals(_localName, null)) _localName = null; if (!ReferenceEquals(_localHtmlNotes, null)) _localHtmlNotes = null; if (Projects.BufferCount > 0) { var ProjectsBuffer = Projects.GetBufferAndPurge(); foreach (var single in ProjectsBuffer.AddBuffer) { // TODO: save only if possible await single.Save(); await AddProject(single); } foreach (var single in ProjectsBuffer.RemoveBuffer) { await RemoveProject(single); } } if (Tags.BufferCount > 0) { var TagsBuffer = Tags.GetBufferAndPurge(); foreach (var single in TagsBuffer.AddBuffer) { // TODO: save only if possible await single.Save(); await AddTag(single); } foreach (var single in TagsBuffer.RemoveBuffer) { await RemoveTag(single); } } //return retVal; return this; }