/// <summary> /// Gets the children comments of a thread. /// </summary> /// <returns>Children comments of a thread.</returns> /// <param name="ChildIDs">ID's of original children.</param> private static async Task <List <Comment> > GetChildrenCommentsAsync(List <int> ChildIDs) { using (var client = new HttpClient()) { List <Comment> comments = new List <Comment>(); foreach (int ID in ChildIDs) { var content = await client.GetStringAsync(SharpHacker.MakeItemRequest(ID)); Comment comment = JsonConvert.DeserializeObject <Comment>(content); if (comment.CommentChildrenID == null) { comment.CommentChildrenID = new List <int>(); } if (!comment.Dead && !comment.Deleted) { comments.Add(comment); } List <Comment> childComments = await GetChildrenCommentsAsync(comment.CommentChildrenID); comments.AddRange(childComments); } return(comments); } }
/// <summary> /// Finds a poll option by idenitifer /// </summary> /// <returns>The specific poll options.</returns> /// <param name="ItemID">Unique item identifier.</param> public async Task <PollPart> FindPollOptionByID(int ItemID) { using (var client = this.client) { var content = await client.GetStringAsync(SharpHacker.MakeItemRequest(ItemID)); PollPart option = JsonConvert.DeserializeObject <PollPart>(content); return(option); } }
/// <summary> /// Find a specifc comment by ID /// </summary> /// <returns>Specifc comment by ID</returns> /// <param name="ItemID">Unique comment identifer.</param> public async Task <Comment> FindCommentByID(int ItemID) { using (var client = this.client) { var content = await client.GetStringAsync(SharpHacker.MakeItemRequest(ItemID)); Comment comment = JsonConvert.DeserializeObject <Comment>(content); return(comment); } }
/// <summary> /// Finds specific poll by ID /// </summary> /// <returns>The poll with unique identifier.</returns> /// <param name="ItemID">Unique poll identifier.</param> public async Task <Poll> FindPollByID(int ItemID) { using (var client = this.client) { var content = await client.GetStringAsync(SharpHacker.MakeItemRequest(ItemID)); Poll poll = await SharpHacker.SetUpPoll(JsonConvert.DeserializeObject <Poll>(content)); return(poll); } }
/// <summary> /// Returns the story with the unique ID /// </summary> /// <returns>Story with unique ID.</returns> /// <param name="ItemID">Unique ID for story.</param> public async Task <Story> FindStoryByID(int ItemID) { using (var client = this.client) { var content = await client.GetStringAsync(SharpHacker.MakeItemRequest(ItemID)); Story story = await SharpHacker.SetUpStory(JsonConvert.DeserializeObject <Story>(content)); return(story); } }
/// <summary> /// Finds recent stories categorizd by a certain type /// </summary> /// <returns>Stories categorized by a certain type.</returns> /// <param name="storyType">Type of story (ask, show, job).</param> /// <param name="amount">Amount of stories, follows same as last method.</param> public async Task <List <Story> > FindTypeStories(StoryType storyType, int amount) { string storyBase = ""; switch (storyType) { case StoryType.Ask: storyBase = AskStories; break; case StoryType.Show: storyBase = ShowStories; break; case StoryType.Job: storyBase = JobStories; break; case StoryType.Default: storyBase = NewStories; break; default: break; } List <Story> retStories = new List <Story>(); using (var client = this.client) { var content = await client.GetStringAsync(storyBase); int[] stories = JsonConvert.DeserializeObject <int[]>(content); if (amount > stories.Length) { amount = stories.Length; } for (int i = 0; i < amount; i++) { var storyJSON = await client.GetStringAsync(SharpHacker.MakeItemRequest(stories[i])); retStories.Add(await SharpHacker.SetUpStory(JsonConvert.DeserializeObject <Story>(content))); } return(retStories); } }
/// <summary> /// Gets the poll and sets the options object /// </summary> /// <returns>The poll with parts changed.</returns> /// <param name="poll">Poll to be changed.</param> /// <param name="oldClient">Old client to reuse.</param> private static async Task <Poll> SetParts(Poll poll, HttpClient oldClient) { using (var client = oldClient) { poll.Parts = new List <PollPart>(); if (poll.PartsID == null) { poll.PartsID = new List <int>(); } foreach (int ID in poll.PartsID) { var content = await client.GetStringAsync(SharpHacker.MakeItemRequest(ID)); PollPart pollPart = JsonConvert.DeserializeObject <PollPart>(content); poll.Parts.Add(pollPart); } return(poll); } }
/// <summary> /// Private helper doing same as above but when HttpClient needs to be reused /// </summary> private async Task <Item> FindItemByID(int ItemID, HttpClient clientOld) { using (var client = clientOld) { var content = await client.GetStringAsync(SharpHacker.MakeItemRequest(ItemID)); Item item = JsonConvert.DeserializeObject <Item>(content); if (item.Dead || item.Deleted) { return(item); } else { switch (item.TypeItem) { case ItemType.Story: Story story = await SharpHacker.SetUpStory(JsonConvert.DeserializeObject <Story>(content)); return(story); case ItemType.Comment: Comment comment = JsonConvert.DeserializeObject <Comment>(content); return(comment); case ItemType.Poll: Poll poll = await SharpHacker.SetUpPoll(JsonConvert.DeserializeObject <Poll>(content)); return(poll); case ItemType.PollPart: PollPart pollPart = JsonConvert.DeserializeObject <PollPart>(content); return(pollPart); default: throw new ArgumentException("Item is deleted or nonexistent"); } } } }