/// <summary>
        /// Helper. node.ChildNodes[0].InnerText + ">>" + node.Attributes["href"].Value + "; " + Environment.NewLine;
        /// </summary>
        /// <param name="node"></param>
        /// <param name="fetchDate"></param>
        /// <returns></returns>
        RssNewsEvent CreateNewsItem(HtmlNode node, bool fetchDateAndDetails)
        {
            RssNewsEvent item = new RssNewsEvent();

            item.Author   = "Bloomberg";
            item.Comments = string.Empty;

            if (node.ParentNode.Name == "p" && node.ParentNode.ChildNodes[2].Name == "#text")
            {// Description available in parent.
                item.Description = GeneralHelper.RepairHTMLString(node.ParentNode.ChildNodes[2].InnerText);
                item.Description = item.Description.Replace("\n", " ");
            }
            else
            {
                item.Description = "";
            }

            item.Link  = new Uri(BaseAddress + node.Attributes["href"].Value).ToString();
            item.Title = node.ChildNodes[0].InnerText.Trim();

            if (fetchDateAndDetails)
            {
                HtmlDocument document = GenerateDocument(item.LinkUri.AbsoluteUri);
                if (document == null)
                {
                    return(null);
                }

                HtmlNodeCollection nodes = document.DocumentNode.SelectNodes("//i");

                foreach (HtmlNode iNode in nodes)
                {
                    string   dateTimeInfo = iNode.ChildNodes[0].InnerText;
                    DateTime time         = GeneralHelper.ParseDateTimeWithZone(dateTimeInfo.Replace("Last Updated:", ""));
                    item.DateTime = time;
                }
            }

            return(item);
        }
        /// <summary>
        /// Result is new items found on page.
        /// Page corresponds to a channel.
        /// </summary>
        /// <param name="uri"></param>
        List <EventBase> ProcessPage(EventSourceChannel channel)
        {
            List <EventBase> result = new List <EventBase>();

            HtmlDocument document = GenerateDocument(channel.Address);

            if (document == null)
            {
                return(result);
            }

            foreach (HtmlNode node in document.DocumentNode.SelectNodes("//a[@class]"))
            {
                if (node.ParentNode.Name == "p" &&
                    node.ParentNode.Attributes["class"] != null &&
                    node.ParentNode.Attributes["class"].Value == "summ")
                {
                    string itemTitle = node.ChildNodes[0].InnerText;

                    lock (this)
                    {
                        if (_latestNewsItemsTitles.ContainsKey(itemTitle))
                        {// News already listed.
                            continue;
                        }

                        RssNewsEvent item = CreateNewsItem(node, true);
                        if (item != null)
                        {
                            _latestNewsItemsTitles.Add(itemTitle, item);
                            item.Initialize(channel);
                            result.Add(item);
                        }
                    }
                }
            }

            return(result);
        }