/// <summary> /// Добавляем id новости в прочитанные. /// </summary> /// <returns><c>false</c> если новость уже помечена как прочитанная, иначе <c>true</c>.</returns> /// <param name="itemid">Id новости</param> public bool AddReadItem(string itemid) { if (ReadItems.Contains(itemid)) { return(false); } ReadItems.Add(itemid); MainNewsFeed.UpdateFeedReads(this); return(true); }
private void ThreadWorks() { logger.Info("Поток: Получаем ленты новостей."); SyndicationFeed mainFeed = new SyndicationFeed(); foreach (var feed in MainNewsFeed.NewsFeeds) { if (!feed.Active) { continue; } SyndicationFeed syndicationFeed; try { using (XmlReader reader = XmlReader.Create(feed.FeedUri.AbsoluteUri)) { syndicationFeed = SyndicationFeed.Load(reader); } syndicationFeed.Id = feed.Id; syndicationFeed.Items.ToList().ForEach(i => i.SourceFeed = syndicationFeed); } catch (Exception ex) { logger.Warn(ex, "Не удалось прочитать feed"); continue; } SyndicationFeed tempFeed = new SyndicationFeed( mainFeed.Items.Union(syndicationFeed.Items).OrderByDescending(u => u.PublishDate)); mainFeed = tempFeed; } logger.Info("Создаем меню новостей.."); Application.Invoke(delegate { logger.Info("Запуск операций в основном потоке.."); UnreadNewsCount = 0; var newsMenu = new Menu(); MenuItemId <SyndicationItem> newsItem; foreach (var news in mainFeed.Items) { Label itemLabel = new Label(); if (MainNewsFeed.ItemIsRead(news)) { itemLabel.Text = news.Title.Text; } else { itemLabel.Markup = String.Format("<b>{0}</b>", news.Title.Text); UnreadNewsCount++; } newsItem = new MenuItemId <SyndicationItem> (); newsItem.Add(itemLabel); newsItem.ID = news; newsItem.TooltipMarkup = String.Format("<b>{0:D}</b> {1}", news.PublishDate, news.Summary.Text); newsItem.Activated += OnNewsActivated; newsMenu.Append(newsItem); } this.Submenu = newsMenu; UpdateIcon(); newsMenu.ShowAll(); MainNewsFeed.SaveFirstRead(); logger.Info("Ок"); }); }