/// <summary> /// Asynchronously edits an existing post. /// </summary> /// <remarks> /// See: http://www.tumblr.com/docs/en/api/v2#editing /// </remarks> /// <param name="blogName"> /// The name of the blog where the post to edit is (must be one of the current user's blogs). /// </param> /// <param name="postId"> /// The identifier of the post to edit. /// </param> /// <param name="postData"> /// The data that represents the updated information for the post. See <see cref="PostData"/> for how /// to create various post types. /// </param> /// <param name="cancellationToken"> /// A <see cref="CancellationToken"/> that can be used to cancel the operation. /// </param> /// <returns> /// A <see cref="Task{T}"/> that can be used to track the operation. If the task succeeds, the <see cref="Task{T}.Result"/> will /// carry a <see cref="PostCreationInfo"/> instance. Otherwise <see cref="Task.Exception"/> will carry a <see cref="TumblrException"/> /// representing the error occurred during the call. /// </returns> /// <exception cref="ObjectDisposedException"> /// The object has been disposed. /// </exception> /// <exception cref="ArgumentNullException"> /// <list type="bullet"> /// <item> /// <description> /// <paramref name="blogName"/> is <b>null</b>. /// </description> /// </item> /// <item> /// <description> /// <paramref name="postData"/> is <b>null</b>. /// </description> /// </item> /// </list> /// </exception> /// <exception cref="ArgumentException"> /// <list type="bullet"> /// <item> /// <description> /// <paramref name="blogName"/> is empty. /// </description> /// </item> /// <item> /// <description> /// <paramref name="postId"/> is less than 0. /// </description> /// </item> /// </list> /// </exception> /// <exception cref="InvalidOperationException"> /// This <see cref="TumblrClient"/> instance does not have an OAuth token specified. /// </exception> public Task<PostCreationInfo> EditPostAsync(string blogName, long postId, PostData postData, CancellationToken cancellationToken) { if (disposed) throw new ObjectDisposedException("TumblrClient"); if (blogName == null) throw new ArgumentNullException("blogName"); if (blogName.Length == 0) throw new ArgumentException("Blog name cannot be empty.", "blogName"); if (postId < 0) throw new ArgumentOutOfRangeException("postId", "Post ID must be greater or equal to zero."); if (postData == null) throw new ArgumentNullException("postData"); if (OAuthToken == null) throw new InvalidOperationException("EditPostAsync method requires an OAuth token to be specified."); var parameters = postData.ToMethodParameterSet(); parameters.Add("id", postId); return CallApiMethodAsync<PostCreationInfo>( new BlogMethod(blogName, "post/edit", OAuthToken, HttpMethod.Post, parameters), CancellationToken.None); }
/// <summary> /// Asynchronously creates a new post. /// </summary> /// <remarks> /// See: http://www.tumblr.com/docs/en/api/v2#posting /// </remarks> /// <param name="blogName"> /// The name of the blog where to post to (must be one of the current user's blogs). /// </param> /// <param name="postData"> /// The data that represents the type of post to create. See <see cref="PostData"/> for how /// to create various post types. /// </param> /// <param name="cancellationToken"> /// A <see cref="CancellationToken"/> that can be used to cancel the operation. /// </param> /// <returns> /// A <see cref="Task{T}"/> that can be used to track the operation. If the task succeeds, the <see cref="Task{T}.Result"/> will /// carry a <see cref="PostCreationInfo"/> instance. Otherwise <see cref="Task.Exception"/> will carry a <see cref="TumblrException"/> /// representing the error occurred during the call. /// </returns> /// <exception cref="ObjectDisposedException"> /// The object has been disposed. /// </exception> /// <exception cref="ArgumentNullException"> /// <list type="bullet"> /// <item> /// <description> /// <paramref name="blogName"/> is <b>null</b>. /// </description> /// </item> /// <item> /// <description> /// <paramref name="postData"/> is <b>null</b>. /// </description> /// </item> /// </list> /// </exception> /// <exception cref="ArgumentException"> /// <paramref name="blogName"/> is empty. /// </exception> /// <exception cref="InvalidOperationException"> /// This <see cref="TumblrClient"/> instance does not have an OAuth token specified. /// </exception> public Task<PostCreationInfo> CreatePostAsync(string blogName, PostData postData, CancellationToken cancellationToken) { if (disposed) throw new ObjectDisposedException("TumblrClient"); if (blogName == null) throw new ArgumentNullException("blogName"); if (blogName.Length == 0) throw new ArgumentException("Blog name cannot be empty.", "blogName"); if (postData == null) throw new ArgumentNullException("postData"); if (OAuthToken == null) throw new InvalidOperationException("CreatePostAsync method requires an OAuth token to be specified."); return CallApiMethodAsync<PostCreationInfo>( new BlogMethod(blogName, "post", OAuthToken, HttpMethod.Post, postData.ToMethodParameterSet()), cancellationToken); }