Beispiel #1
0
        public IHttpActionResult PutTopStory(int id, TopStory topStory)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (id != topStory.ID)
            {
                return(BadRequest());
            }

            db.Entry(topStory).State = EntityState.Modified;

            try
            {
                db.SaveChanges();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!TopStoryExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(StatusCode(HttpStatusCode.NoContent));
        }
        public void ComputeTopCommentsPerStoryBlock()
        {
            ConcurrentDictionary <string, int> comments = new ConcurrentDictionary <string, int>();

            comments.TryAdd("a", 1);
            comments.TryAdd("b", 2);
            comments.TryAdd("c", 3);
            comments.TryAdd("d", 4);
            comments.TryAdd("e", 5);
            comments.TryAdd("f", 6);
            comments.TryAdd("g", 7);
            comments.TryAdd("h", 8);
            comments.TryAdd("i", 9);
            comments.TryAdd("j", 10);
            comments.TryAdd("k", 11);
            comments.TryAdd("l", 12);

            TopStory topStory = new TopStory("US takes 'richest nation on earth' crown from Switzerland", comments);
            ComputeTopCommentsPerStoryBlock traverseTopStoriesComments = new ComputeTopCommentsPerStoryBlock();

            traverseTopStoriesComments.block.Post(topStory);

            var topStoryWithTopComments = traverseTopStoriesComments.bufferBlock.ReceiveAsync().Result;

            Assert.IsNotNull(topStoryWithTopComments.TopComments);
            Assert.AreEqual(topStoryWithTopComments.TopComments.Count, Constants.NBOFCOMMENTERS);
        }
Beispiel #3
0
 protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
 {
     if (e.CommandName == "TopStory")
     {
         try
         {
             using (RockyingDataClassesDataContext dc = new RockyingDataClassesDataContext(Utility.ConnectionString))
             {
                 TopStory ts = new TopStory();
                 ts.CreatedBy   = CurrentUser.ID;
                 ts.DateCreated = DateTime.UtcNow;
                 ts.PostId      = long.Parse(e.CommandArgument.ToString());
                 dc.TopStories.InsertOnSubmit(ts);
                 dc.SubmitChanges();
                 Response.Redirect("topstory.aspx");
             }
         }
         catch (Exception ex)
         {
             message1.Text     = string.Format("Unable to set top story. Error - {0}", ex.Message);
             message1.Visible  = true;
             message1.Indicate = AlertType.Error;
             Trace.Write("Unable to set top story.");
             Trace.Write(ex.Message);
             Trace.Write(ex.StackTrace);
         }
     }
     else if (e.CommandName == "DeleteCommand")
     {
     }
 }
Beispiel #4
0
        private async Task Run(Item item)
        {
            var storyComment = (item.Kids != null) ? await traverseCommentTree(item.Kids) : new ConcurrentDictionary <string, int>();

            var topStory = new TopStory(item.Title, storyComment);

            this.bufferBlock.Post(topStory);
        }
        private void Run(TopStory topStory)
        {
            var topComments = (topStory.Comments.Count >= Constants.NBOFCOMMENTERS) ? getTopCommentators(topStory.Comments) : new List <KeyValuePair <string, int> >(topStory.Comments.ToArray());

            topStory.TopComments = topComments;
            System.Console.WriteLine("Finished processing story : '{0}'", topStory.Title);
            this.bufferBlock.Post(topStory);
        }
        private async Task <IList <TopStory> > FetchStoriesAsync(string url)
        {
            var html = await FetchHtml(new Uri(url)).ConfigureAwait(false);

            var outer = html.DocumentNode.Descendants("table").First();
            var inner = outer.Descendants("table").Second();
            var rows  = inner.Descendants("tr").ToList();

            var stories = new List <TopStory>(30); // usually will have 30 stories on the front page, minus job postings.

            const int rowsPerStory = 3;

            for (var i = 0; i < rows.Count - rowsPerStory; i += rowsPerStory)
            {
                var storyPieces = rows[i].Descendants("td").ToList();
                var metaPieces  = rows[i + 1].Descendants("td").ToList();

                if (metaPieces[1].ChildNodes.Count == 1)
                {
                    // We're in a job posting, bail
                    continue;
                }

                var href  = storyPieces[2].Descendants("a").First().Attributes["href"].Value;
                var link  = new Uri(href.StartsWith("http") ? href : "http://news.ycombinator.com/" + href, UriKind.Absolute); // Ask HN posts have relative URIs, all others are absolute.
                var title = storyPieces[2].Descendants("a").First().InnerText;

                var scoreline = metaPieces[1].Descendants("span").First().InnerText.Trim();

                var anchors     = metaPieces[1].Descendants("a").ToList();
                var byline      = anchors[0].Attributes["href"].Value;
                var commentHref = anchors[1].Attributes["href"].Value;
                var commentLine = anchors[1].InnerText;

                var id          = long.Parse(commentHref.Substring(commentHref.LastIndexOf('=') + 1));
                var author      = byline.Substring(byline.LastIndexOf('=') + 1);
                var score       = int.Parse(scoreline.Split(' ')[0]);
                var timeline    = ((HtmlTextNode)metaPieces[1].ChildNodes[3]).Text;
                var numComments = commentLine == "discuss" ? 0 : int.Parse(commentLine.Split(' ')[0]);

                var story = new TopStory
                {
                    By           = author,
                    CommentCount = numComments,
                    Id           = id,
                    RawType      = "story",
                    Score        = score,
                    Text         = null,
                    Time         = InferTimeFromDisplayText(timeline),
                    Title        = title,
                    Uri          = link
                };

                stories.Add(story);
            }

            return(stories);
        }
Beispiel #7
0
        public IHttpActionResult GetTopStory(int id)
        {
            TopStory topStory = db.TopStories.Find(id);

            if (topStory == null)
            {
                return(NotFound());
            }

            return(Ok(topStory));
        }
Beispiel #8
0
        public IHttpActionResult PostTopStory(TopStory topStory)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            db.TopStories.Add(topStory);
            db.SaveChanges();

            return(CreatedAtRoute("DefaultApi", new { id = topStory.ID }, topStory));
        }
Beispiel #9
0
        public IHttpActionResult DeleteTopStory(int id)
        {
            TopStory topStory = db.TopStories.Find(id);

            if (topStory == null)
            {
                return(NotFound());
            }

            db.TopStories.Remove(topStory);
            db.SaveChanges();

            return(Ok(topStory));
        }
Beispiel #10
0
 public TopStoryViewModel(TopStory story, INavigationService navigationService)
 {
     this.story             = story;
     this.navigationService = navigationService;
 }