public async Task <Model.Feed> RetrieveSportsFeed() { var stopwatch = new System.Diagnostics.Stopwatch(); stopwatch.Start(); if (!_config.HasProperty(feedClientConfigKey)) { throw new Failure("[feedClientUrl] config is null."); } string url = _config.ReadProperty(feedClientConfigKey); Model.Feed result = new Model.Feed(); using (var httpClient = new HttpClient()) { var request = new HttpRequestMessage(HttpMethod.Get, url); var response = await httpClient.SendAsync(request); using (var content = await response.Content.ReadAsStreamAsync()) { result.Sports = _feedSerializer.SerializeFeed(content); } } stopwatch.Stop(); return(result); }
public Task <IList <Model.FeedItem> > DownloadRssFeedAsync(Model.Feed feed) { return(Task.Run(async() => { IList <Model.FeedItem> feedItems = new List <Model.FeedItem>(); var rssFeed = await FeedReader.ReadAsync(feed.Url); // TO ACCESS CUSTOM FEED METADATA BY RSS FEED VERSION // NOT USED AT THE MOMENT if (rssFeed.Type == FeedType.Rss_2_0) { var rss20feed = (CodeHollow.FeedReader.Feeds.Rss20Feed)rssFeed.SpecificFeed; } Console.WriteLine($"FeedDownloader.DownloadRssFeedAsync(): loading RSS feed from {feed.Url}"); foreach (var item in rssFeed.Items) { var newItem = MapSyndicationFeedItemToFeedItem(item, rssFeed.Type); if (newItem != null) { newItem.FeedId = feed.Id; feedItems.Add(newItem); } } Console.WriteLine($"FeedDownloader.DownloadRssFeedAsync(): retrieved {feedItems.Count} feed items"); return feedItems; })); }
private void MarkFeedRead(RoutedEventArgs e) { if (_selectedNode == null) { return; } SimpleTreeNodeViewModel tvm = (SimpleTreeNodeViewModel)_selectedNode; if (tvm.Node is Model.Feed) { Model.Feed selectedFeed = (Model.Feed)tvm.Node; Data.Feed df = new Data.Feed(selectedFeed); df.MarkAllRead(); } else if (tvm.Node is Model.Host) { Model.Host selectedHost = (Model.Host)tvm.Node; Data.Host dh = new Data.Host(selectedHost); dh.MarkAllRead(); } else { return; } foreach (Article a in Articles) { a.Unread = false; } }
/// <summary> /// Formats a description based on feed and latest message /// </summary> /// <param name="feed">feed object</param> /// <param name="latestMessage">latest message</param> /// <returns>markdown-formatted description of feed and latest message</returns> private static string FormatDescription(Model.Feed feed, Model.Message latestMessage) { return($"FindMeSpot feed for {feed.Name}\n" + $"Current coordinates: Latitude: {latestMessage.Latitude}\n" + $"Longitude: {latestMessage.Longitude}\n" + $"Altitude: {latestMessage.Altitude}\n" + $"Date/time: {latestMessage.DateTime}\n"); }
private void SeedFeeds(dbContext db) { if (!db.Feeds.Any()) { var feed = new Model.Feed() { RssUrl = "http://feeds.arstechnica.com/arstechnica/index", Title = "ARS Technica", CreatedOn = DateTime.Now, LastRetrievedOn = DateTime.Now }; db.Feeds.Add(feed); db.SaveChanges(); } }
private async void DeleteFeed(RoutedEventArgs e) { if (_selectedNode == null) { return; } SimpleTreeNodeViewModel tvm = (SimpleTreeNodeViewModel)_selectedNode; Model.Feed selectedFeed = null; if (tvm.Node is Model.Feed) { selectedFeed = (Model.Feed)tvm.Node; } else { return; } // Hides browser otherwise dialog gets behind it IsBrowserVisible = false; RaisePropertyChanged("IsBrowserVisible"); MessageDialogResult result = await _dialogCoordinator.ShowMessageAsync(this, "Delete Feed", "This action also deletes all downloaded articles and cannot be undone. Are you sure?", MessageDialogStyle.AffirmativeAndNegative); if (result == MessageDialogResult.Affirmative) { string errMsg = null; try { Data.Feed feed = new Data.Feed(selectedFeed); feed.Delete(); } catch (Exception ex) { errMsg = ex.Message; } if (errMsg != null) { await _dialogCoordinator.ShowMessageAsync(this, "Edit Feed", "Unable to edit feed with the supplied URL: " + errMsg); } } IsBrowserVisible = true; RaisePropertyChanged("IsBrowserVisible"); InitializeData(true); }
public Model.OperationStatus UpdateFeed(Model.Feed feed) { var opStatus = new OperationStatus() { Status = true }; using (var context = DataContext) { var item = context.Feeds.FirstOrDefault(m => m.Id == feed.Id); item.CreatedOn = feed.CreatedOn; item.LastRetrievedOn = feed.LastRetrievedOn; item.RssUrl = feed.RssUrl; opStatus.RecordsAffected = context.SaveChanges(); } return(opStatus); }
public Model.OperationStatus InsertFeed(Model.Feed feed) { var opStatus = new OperationStatus() { Status = true }; using (var context = DataContext) { var item = new Feed(); item.CreatedOn = feed.CreatedOn; item.LastRetrievedOn = feed.LastRetrievedOn; item.RssUrl = feed.RssUrl; context.Feeds.Add(item); opStatus.RecordsAffected = context.SaveChanges(); RetrieveItems(item.Id); } return(opStatus); }
public Feed(Model.Feed f) : base(f) { }
private void InitializeData(Boolean refreshTreeView) { SetStatusMessage("Loading"); // // Read from Database // _allData = Data.Host.LoadAll(); SetStatusMessage("Loaded"); // // Update the treeview // if (refreshTreeView) { //Set selected item TreeModel.Items[0].IsSelected = true; RaisePropertyChanged("TreeModel"); SelectedItemChanged(new RoutedPropertyChangedEventArgs <object>(null, TreeModel.Items[0])); } // // Update articles // if (_selectedNode != null) { SimpleTreeNodeViewModel tvm = (SimpleTreeNodeViewModel)_selectedNode; if (tvm.Node is Model.Feed) { SetStatusMessage("Updating Articles (feed)... "); Model.Feed selectedFeed = (Model.Feed)tvm.Node; // Find the feed and add the Articles foreach (Host h in _allData) { Feed f = h.Feeds.FirstOrDefault(el => el.Location.Equals(selectedFeed.Location)); if (f != null) { Articles.AddMissing(f.Articles, new ArticleEqualityComparer(), _uiContext); } } } else if (tvm.Node is Model.Host) { SetStatusMessage("Updating Articles (host)... "); Model.Host selectedHost = (Model.Host)tvm.Node; // Find the host and add the Articels Model.Host h = _allData.FirstOrDefault(el => el.Location.Equals(selectedHost.Location)); foreach (Model.Feed feed in h.Feeds) { Articles.AddMissing(feed.Articles, new ArticleEqualityComparer(), _uiContext); } } else { SetStatusMessage("Updating Articles (article)... "); foreach (Model.Host h in _allData) { foreach (Model.Feed feed in h.Feeds) { Articles.AddMissing(feed.Articles, new ArticleEqualityComparer(), _uiContext); } } } } if (refreshTreeView) { SetStatusMessage("Refreshing Article list"); SetSortOrder(); } SetStatusMessage("Ready"); }
private async void EditFeed(RoutedEventArgs e) { if (_selectedNode == null) { return; } SimpleTreeNodeViewModel tvm = (SimpleTreeNodeViewModel)_selectedNode; Model.Feed selectedFeed = null; if (tvm.Node is Model.Feed) { selectedFeed = (Model.Feed)tvm.Node; } else { if (tvm.Node is Model.Host) { try { Model.Host selectedHost = (Model.Host)tvm.Node; IsBrowserVisible = false; RaisePropertyChanged("IsBrowserVisible"); MetroDialogSettings diagSettings = new MetroDialogSettings(); diagSettings.DefaultText = selectedHost.Zoom.ToString(); var ZoomLevel = await _dialogCoordinator.ShowInputAsync(this, "Set Zoom Level", "Enter the desired zoom level for this host: ", diagSettings); int prevZoom = selectedHost.Zoom; selectedHost.Zoom = Int32.Parse(ZoomLevel.ToString()); Data.Host dh = new Data.Host(selectedHost); dh.Save(); if (prevZoom != selectedHost.Zoom) { var msg = new SendSetZoomMessage(selectedHost.Zoom); msg.SetImmediately = true; Messenger.Default.Send <SendSetZoomMessage>(msg); } } catch (Exception ex) { await _dialogCoordinator.ShowMessageAsync(this, "Set Zoom Level", "Unable to set zoom: " + ex.Message); } finally { IsBrowserVisible = true; RaisePropertyChanged("IsBrowserVisible"); } } return; } // Hides browser otherwise dialog gets behind it IsBrowserVisible = false; RaisePropertyChanged("IsBrowserVisible"); MetroDialogSettings dialogSettings = new MetroDialogSettings(); dialogSettings.DefaultText = selectedFeed.Location.ToString(); var FeedText = await _dialogCoordinator.ShowInputAsync(this, "Edit feed", "Enter the URL of the feed:", dialogSettings); if (FeedText != null) { string errMsg = null; try { Uri feedUri = new Uri(FeedText); Data.Feed f = new Data.Feed(selectedFeed); f.Location = feedUri; f.UpdateFromUri(true, RetentionDays); f.Save(true); InitializeData(true); } catch (Exception ex) { errMsg = ex.Message; } if (errMsg != null) { await _dialogCoordinator.ShowMessageAsync(this, "Edit Feed", "Unable to edit feed with the supplied URL: " + errMsg); } } IsBrowserVisible = true; RaisePropertyChanged("IsBrowserVisible"); }