Exemplo n.º 1
0
		/// <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;
			}
		}
Exemplo n.º 2
0
		/// <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);
				
			}
		}
Exemplo n.º 3
0
		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;
		}