/// <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 = @"Перейти к источнику"; }
/// <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); }
/// <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; }