Beispiel #1
0
        /// <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);
            }
        }
Beispiel #2
0
        /// <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);
            }
        }
Beispiel #3
0
        /// <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);
            }
        }
Beispiel #4
0
        /// <summary>
        /// Finds a specific user by ID
        /// </summary>
        /// <param name="UserID">Ussername of user</param>
        public async Task <User> FindUserByID(string UserID)
        {
            using (var client = this.client) {
                var content = await client.GetStringAsync(SharpHacker.MakeUserRequest(UserID));

                User user = await SharpHacker.SetUpUser(JsonConvert.DeserializeObject <User>(content));

                return(user);
            }
        }
Beispiel #5
0
        /// <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);
            }
        }
Beispiel #6
0
        /// <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);
            }
        }
Beispiel #7
0
        /// <summary>
        /// Sets up <paramref name="user"/>:
        /// Fills in the SubmittedItems parameter
        /// </summary>
        private static async Task <User> SetUpUser(User user)
        {
            user.SubmittedItems = new List <Item>();
            SharpHacker sharp = new SharpHacker();

            foreach (int ID in user.SubmittedIDs)
            {
                user.SubmittedItems.Add(await sharp.FindItemByID(ID, new HttpClient()));
            }
            return(user);
        }
Beispiel #8
0
        /// <summary>
        /// Sets up poll:
        /// -Adds options to poll
        /// -Adds comments to Poll
        /// </summary>
        /// <returns>The new set-up poll.</returns>
        /// <param name="poll">Poll to be changed.</param>
        private static async Task <Poll> SetUpPoll(Poll poll)
        {
            Poll pollWithParts = await SharpHacker.SetParts(poll, new HttpClient());

            if (pollWithParts.ParentCommentsID == null)
            {
                pollWithParts.ParentCommentsID = new List <int>();
            }
            pollWithParts.Comments = await SharpHacker.GetComments(pollWithParts.ParentCommentsID);

            return(pollWithParts);
        }
Beispiel #9
0
        /// <summary>
        /// Sets up story:
        /// -Adds correct StoryType
        /// -Adds comments to story
        /// </summary>
        /// <returns>Newly set up story.</returns>
        /// <param name="story">Story to be changed.</param>
        private static async Task <Story> SetUpStory(Story story)
        {
            Story storyWithType = SharpHacker.SetTypeCorrectly(story);

            if (storyWithType.ParentCommentsID == null)
            {
                storyWithType.ParentCommentsID = new List <int>();
            }
            storyWithType.Comments = await SharpHacker.GetComments(storyWithType.ParentCommentsID);

            return(storyWithType);
        }
Beispiel #10
0
        /// <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);
            }
        }
Beispiel #11
0
        /// <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);
            }
        }
Beispiel #12
0
        /// <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");
                    }
                }
            }
        }