예제 #1
0
        public void ProcessNews(object sender, DownloadStringCompletedEventArgs e)
        {
            MemoryStream ms = null;

            if ((e == null && !_fromCache) || (e != null && (e.Error != null || e.Cancelled)))
            {
                _news = true;
                return;
            }
            if (e == null && _fromCache)
            {
                ms = new MemoryStream(Encoding.UTF8.GetBytes(LoadFromStorage("news", ".json")));
            }
            else if (e != null)
            {
                ms = new MemoryStream(Encoding.UTF8.GetBytes(SaveToStorage("news", ".json", e.Result)));
            }
            var serializer = new DataContractJsonSerializer(typeof(ObservableCollection <NewsItemViewModel>));

            if (ms != null)
            {
                var list = (ObservableCollection <NewsItemViewModel>)serializer.ReadObject(ms);
                if (list == null)
                {
                    return;
                }
                foreach (var newsItemView in list)
                {
                    NewsItems.Add(newsItemView);
                }
            }
            _news = true;
            NotifyPropertyChanged("GroupedNews");
        }
예제 #2
0
 public bool AddNewsItem(NewsItem news)
 {
     if (news != null)
     {
         if (_containerDAL.Save(news))
         {
             NewsItems.Add(news);
             return(true);
         }
     }
     return(false);
 }
예제 #3
0
        public bool AddNewsItem(NewsItem news)
        {
            if (news != null)
            {
                INewsItemDTO dTO = news;

                if (containerDAL.Save(dTO))
                {
                    NewsItems.Add(news);
                    return(true);
                }
            }
            return(false);
        }
예제 #4
0
        public void LoadData(object param = null)
        {
            // Load Trovesaurus data from API
            try
            {
                log.Info("Loading Trovesaurus news, calendar, and streams data");
                if (_StatusTimer == null)
                {
                    StartStatusTimer();
                }
                CheckStatus();

                TrovesaurusApi.RefreshNewsList();
                NewsItems.Clear();
                foreach (var item in TrovesaurusApi.NewsList)
                {
                    NewsItems.Add(item);
                }

                TrovesaurusApi.RefreshCalendarList();
                CalendarItems.Clear();
                foreach (var item in TrovesaurusApi.CalendarList)
                {
                    CalendarItems.Add(item);
                }

                TrovesaurusApi.RefreshStreamList();
                OnlineStreams.Clear();
                foreach (var item in TrovesaurusApi.StreamList)
                {
                    OnlineStreams.Add(item);
                }

                CalendarView.SortDescriptions.Clear();
                CalendarView.SortDescriptions.Add(new SortDescription("EndDateTime", ListSortDirection.Ascending));

                log.Info("Trovesaurus news, calendar, and streams data loaded successfully");
            }
            catch (Exception ex)
            {
                log.Error("Error loading Trovesaurus news, calendar or streams", ex);
            }
        }
예제 #5
0
        protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
        {
            // If _isNewPageInstance is true, the page constuctor has been called, so
            // state may need to be restored
            if (isNewPageInstance)
            {
                // Define the query to gather all of the to-do items.
                var rssItemsInDb = from RssItem todo in rssItemDb.RssItems
                                   select todo;

                // Execute the query and place the results into a collection.
                ObservableCollection <RssItem> items = new ObservableCollection <RssItem>(rssItemsInDb);
                for (int i = 0; i < items.Count; i++)
                {
                    switch (items[i].ItemType)
                    {
                    case RssItem.RssItemType.News:
                        NewsItems.Add(items[i]);
                        break;

                    case RssItem.RssItemType.Sports:
                        SportsItems.Add(items[i]);
                        break;

                    case RssItem.RssItemType.Twitter:
                        TwitterItems.Add(items[i]);
                        break;
                    }
                }
                if (State.Count > 0)
                {
                    object defaultItem = mainPanorama.Items[(int)State[panoramaIndex]];
                    mainPanorama.SetValue(Panorama.SelectedItemProperty, defaultItem);
                }
                else
                {
                    mainPanorama.DefaultItem = 0;
                }
            }
            // Call the base method.
            base.OnNavigatedTo(e);
        }
예제 #6
0
        public async Task Init()
        {
            var client = new SyndicationClient();
            var feed   = await client.RetrieveFeedAsync(
                new Uri("http://rss.cnn.com/rss/edition_technology.rss", UriKind.Absolute));

            foreach (var item in feed.Items)
            {
                var element = item.
                              ElementExtensions.FirstOrDefault(e => e.NodeName == "thumbnail");
                var attribute = element.AttributeExtensions.FirstOrDefault(ae => ae.Name == "url");
                var uri       = attribute?.Value;
                var imageUri  = uri ?? "https://pbs.twimg.com/profile_images/508960761826131968/LnvhR8ED.png";
                NewsItems.Add(new NewsItemVmi
                {
                    Title     = item.Title.Text,
                    Image     = imageUri,
                    Published = item.PublishedDate.ToString("g")
                });
            }
        }
예제 #7
0
        public override void Process()
        {
            VkApi api = new VkApi();

            api.Authorize(new ApiAuthParams
            {
                ApplicationId = 123456,
                AccessToken   = Token,
                Settings      = Settings.All
            });
            WallGetObject wall = api.Wall.Get(new WallGetParams
            {
                Domain = Channel.Url
            });

            if (wall != null && wall.WallPosts.Count > 0)
            {
                foreach (Post post in wall.WallPosts)
                {
                    if (!Channel.LastSynchronizationDate.HasValue ||
                        (post.Date.HasValue && post.Date >= Channel.LastSynchronizationDate.Value))
                    {
                        NewsItems.Add(new NewsItemContract
                        {
                            ChannelId   = Channel.Id,
                            Date        = post.Date.Value,
                            Title       = post.Text.TruncateSpecialSymbols(),
                            Description = post.Text.TruncateSpecialSymbols(),
                            Text        = post.Text,
                            Url         = $"https://vk.com/{Channel.Url}?w=wall{post.OwnerId}_{post.Id}"
                        });
                    }
                }
            }

            FilterNewsItemsByTags();
            SaveNewsItems();
        }
예제 #8
0
        async Task ExecuteLoadItemsCommand()
        {
            IsBusy = true;

            try
            {
                NewsItems.Clear();
                var activities = await DataStore.GetItemsAsync(true);

                foreach (var activity in activities)
                {
                    NewsItems.Add(activity);
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex);
            }
            finally
            {
                IsBusy = false;
            }
        }
예제 #9
0
        private void LoadNewsFeed()
        {
            NewsProvider.GetVideos((videos, exception) =>
            {
                SmartDispatcher.BeginInvoke(() =>
                {
                    NewsItems.Clear();

                    if (videos.Count >= 2)
                    {
                        NewsItems.Add(new NewsItem()
                        {
                            Title     = Properties.Resources.WebTV_DMI,
                            WebTVItem = videos.FirstOrDefault(v => v.Category == "DMI"),
                        });

                        NewsItems.Add(new NewsItem()
                        {
                            Title     = Properties.Resources.WebTV_3D,
                            WebTVItem = videos.FirstOrDefault(v => v.Category == "3D"),
                        });
                    }

                    NewsProvider.GetNewsItems((items, e) =>
                    {
                        SmartDispatcher.BeginInvoke(() =>
                        {
                            foreach (var item in items)
                            {
                                NewsItems.Add(item);
                            }
                        });
                    });
                });
            });
        }
예제 #10
0
 public static void Add(NewsItemContract item)
 {
     NewsItems.Add(item);
 }
예제 #11
0
        private void Parse()
        {
            HtmlNode n = HtmlDocument.GetElementbyId("news-main");

            foreach (var node in n.ChildNodes)
            {
                if (node.GetType() == typeof(HtmlNode) && node.HasAttributes)
                {
                    if (node.Attributes["class"].Value == "g-section news sfe-break-bottom-16")
                    {
                        NewsFeed newsFeed = new NewsFeed();

                        foreach (var feedNode in node.ChildNodes)
                        {
                            if (feedNode.HasAttributes && feedNode.Attributes["class"].Value == "name")
                            {
                                HtmlNode nn = HtmlNode.CreateNode(feedNode.InnerHtml.Trim());
                                newsFeed.NewsLink = new Uri(nn.Attributes["href"].Value);
                                newsFeed.Title    = nn.InnerText;
                            }
                            else if (feedNode.HasAttributes && feedNode.Attributes["class"].Value == "byline")
                            {
                                HtmlNode nn = HtmlNode.CreateNode(feedNode.InnerHtml);
                                newsFeed.Source = nn.NextSibling.InnerText;
                            }
                            else if (feedNode.HasAttributes && feedNode.Attributes["class"].Value == "g-c")
                            {
                                //HtmlNode nn=null;
                                foreach (var div in feedNode.ChildNodes)
                                {
                                    if (div.Name == "div")
                                    {
                                        newsFeed.Snapshot = HtmlNode.CreateNode(div.InnerHtml.Trim()).InnerText;
                                        //nn = div;
                                        break;
                                    }
                                }

                                //HtmlNode nn = HtmlNode.CreateNode(feedNode.NextSibling.InnerHtml);
                                //newsFeed.Snapshot = nn.InnerText;

                                //if (nn != null)
                                //{
                                foreach (var nnn in feedNode.ChildNodes)
                                {
                                    //var i
                                    try
                                    {
                                        if (nnn.HasAttributes && nnn.Attributes["class"].Value == "more-rel")
                                        {
                                            newsFeed.RelatedNewsLinks.Add(new Uri(nnn.Attributes["href"].Value));
                                        }
                                    }
                                    catch (Exception ex)
                                    {
                                        // Gobble the exception up.
                                    }
                                }
                                //}
                            }
                        }

                        NewsItems.Add(newsFeed);
                    }
                }
            }
        }