Пример #1
0
        /// <summary>
        /// Выполняет отображение подробностей новости
        /// </summary>
        private void listItems_SelectedIndexChanged(object sender, EventArgs e)
        {
            Item item;

            if (ListURL.SelectedIndex == -1 || listItems.SelectedIndex == -1)
            {
                itemBox.Width = 0;
                link.Text     = string.Empty;
                webControl1.LoadHTML(string.Empty);
                return;
            }
            item = Controller.Channels[ListURL.SelectedIndex].GetItems()[listItems.SelectedIndex];
            var bm = RssImage.GetBitmap(item.Image);

            if (bm != null)
            {
                itemBox.BackgroundImage = bm;
                var ratio = (float)itemBox.Height / bm.Height;
                itemBox.Width = (int)(bm.Width * ratio);
            }
            else
            {
                itemBox.Width = 0;
            }

            webControl1.LoadHTML(item.Description);
            DateTime dt = DateTime.Parse(item.Date);

            dateLabel.Text = dt.ToLongTimeString() + @" " + dt.ToLongDateString();
            link.Text      = @"Перейти к источнику";
        }
Пример #2
0
        /// <summary>
        /// Выполяет загрузку канала по адрессу
        /// </summary>
        /// <param name="url">Адресс канала</param>
        /// <returns>Результат</returns>
        public static string ParseChannel(string url)
        {
            if (ContaineSamePath(url))
            {
                return("Уже есть лента с таким адрессом");
            }
            var rssDocument = new XmlDocument();

            try {
                rssDocument.Load(url);
            }
            catch {
                return("Не удалось загрузить документ.");
            }

            var node = rssDocument.SelectSingleNode("rss/channel") as XmlElement;

            if (node == null)
            {
                return("Файл имеет недопустимый формат.");
            }

            var title       = node["title"]?.InnerText;
            var link        = node["link"]?.InnerText;
            var description = node["description"]?.InnerText;

            var      imgNode = node["image"];
            RssImage image   = null;

            if (imgNode != null)
            {
                image = new RssImage(
                    imgNode["url"]?.InnerText,
                    imgNode["link"]?.InnerText,
                    imgNode["title"]?.InnerText);
            }

            var rssNodes = rssDocument.SelectNodes("rss/channel/item");

            var items = new BindingList <Item>();

            if (rssNodes != null)
            {
                foreach (XmlNode nd in rssNodes)
                {
                    var imgUrl = nd["enclosure"]?.GetAttribute("url");
                    items.Add(new Item(
                                  nd["title"]?.InnerText,
                                  nd["link"]?.InnerText,
                                  nd["description"]?.InnerText,
                                  nd["guid"]?.InnerText,
                                  nd["pubDate"]?.InnerText,
                                  imgUrl));
                }
            }

            _channels.Add(new Channel(image, link, title, description, items, url));
            return(null);
        }
Пример #3
0
 /// <summary>
 /// Создает объект канала
 /// </summary>
 /// <param name="containeImg">Изображение логотипа канала</param>
 /// <param name="link">Адресс на сайт канала</param>
 /// <param name="description">Описание</param>
 /// <param name="title">Название канала</param>
 /// <param name="items">Коллекция элементов новостей</param>
 /// <param name="path">Путь к каналу</param>
 public Channel(RssImage containeImg, string link, string title, string description, BindingList <Item> items, string path) : base(title, link, description)
 {
     ContaineImg = containeImg;
     _items      = items;
     Path        = path;
 }