void QueueNewAnnouncement(HtmlNodeCollection repoNodes) { string title = repoNodes["title"].InnerText; var separator = title.IndexOf('/'); var repoName = title.Substring(separator + 1); var author = repoNodes["author"].ChildNodes["name"].InnerText; var publishTime = repoNodes["published"].InnerText; var rawLink = repoNodes["link"].Attributes["href"].Value; var compareSeparator = rawLink.LastIndexOf('/'); var link = rawLink.Substring(0, compareSeparator + 1); var beginCommit = rawLink.Substring(compareSeparator + 1, 10); var endCommit = rawLink.Substring(compareSeparator + 1 + 10 + 3, 10); var timestamp = new DateTime ( int.Parse(publishTime.Substring(0, 4)), int.Parse(publishTime.Substring(5, 2)), int.Parse(publishTime.Substring(8, 2)), int.Parse(publishTime.Substring(11, 2)), int.Parse(publishTime.Substring(14, 2)), int.Parse(publishTime.Substring(17, 2)) ); var client = new TimedWebClient(); var commitPage = client.DownloadString(rawLink); var doc = new HtmlDocument(); doc.LoadHtml(commitPage); client.Dispose(); var entry = doc.DocumentNode.SelectNodes("//span[@class=\"num\"]"); var rawNumCommits = entry[0].InnerText; rawNumCommits = new string(rawNumCommits.Where(char.IsDigit).ToArray()); int numCommits = int.Parse(rawNumCommits); if (_subscribedProjects.Contains(repoName)) { lock (_queuedAnnouncements){ _queuedAnnouncements.Add (new QueuedAnnouncement ( author, link, repoName, timestamp, beginCommit, endCommit, numCommits ) ); } } }
void RefreshRepos() { var client = new TimedWebClient(); var rssStr = client.DownloadString(_rssUrl); client.Dispose(); var rssDocument = new HtmlDocument(); rssDocument.LoadHtml(rssStr); var entries = rssDocument.DocumentNode.SelectNodes("//entry"); foreach (var entry in entries) { var childNodes = entry.ChildNodes; if (childNodes["id"].InnerText.Contains("PushEvent")) { QueueNewAnnouncement(childNodes); } } }
void RefreshRepos() { var client = new TimedWebClient(); var rssStr = client.DownloadString(_rssUrl); client.Dispose(); var rssDocument = new HtmlDocument(); rssDocument.LoadHtml(rssStr); var entries = rssDocument.DocumentNode.SelectNodes("//entry"); foreach (var entry in entries){ var childNodes = entry.ChildNodes; if (childNodes["id"].InnerText.Contains("PushEvent")){ QueueNewAnnouncement(childNodes); } } }
void QueueNewAnnouncement(HtmlNodeCollection repoNodes) { string title = repoNodes["title"].InnerText; var separator = title.IndexOf('/'); var repoName = title.Substring(separator + 1); var author = repoNodes["author"].ChildNodes["name"].InnerText; var publishTime = repoNodes["published"].InnerText; var rawLink = repoNodes["link"].Attributes["href"].Value; var compareSeparator = rawLink.LastIndexOf('/'); var link = rawLink.Substring(0, compareSeparator + 1); var beginCommit = rawLink.Substring(compareSeparator + 1, 10); var endCommit = rawLink.Substring(compareSeparator + 1 + 10 + 3, 10); var timestamp = new DateTime ( int.Parse(publishTime.Substring(0, 4)), int.Parse(publishTime.Substring(5, 2)), int.Parse(publishTime.Substring(8, 2)), int.Parse(publishTime.Substring(11, 2)), int.Parse(publishTime.Substring(14, 2)), int.Parse(publishTime.Substring(17, 2)) ); var client = new TimedWebClient(); var commitPage = client.DownloadString(rawLink); var doc = new HtmlDocument(); doc.LoadHtml(commitPage); client.Dispose(); var entry = doc.DocumentNode.SelectNodes("//span[@class=\"num\"]"); var rawNumCommits = entry[0].InnerText; rawNumCommits = new string(rawNumCommits.Where(char.IsDigit).ToArray()); int numCommits = int.Parse(rawNumCommits); if (_subscribedProjects.Contains(repoName)){ lock (_queuedAnnouncements){ _queuedAnnouncements.Add (new QueuedAnnouncement ( author, link, repoName, timestamp, beginCommit, endCommit, numCommits ) ); } } }