public override View GetView(int position, View convertView, ViewGroup parent) { if (entries == null) { return(null); } Rss.RssItem entry = entries[position]; var view = (convertView ?? context.LayoutInflater.Inflate(Resource.Layout.NewsListItem, parent, false)) as LinearLayout; TextView tvName = view.FindViewById <TextView>(Resource.Id.tvName); if (!entry.IsRead) { tvName.SetTypeface(Typeface.DefaultBold, TypefaceStyle.Bold); } tvName.Text = entry.Title; TextView tvDate = view.FindViewById <TextView>(Resource.Id.tvDate); if (entry.PubDate.HasValue) { tvDate.Text = entry.PubDate.ToString(); } else { tvDate.Visibility = ViewStates.Gone; } return(view); }
public override Rss.RssItem[] GetRssFeedItems(CmsPage page, CmsPlaceholderDefinition placeholderDefinition, CmsLanguage langToRenderFor) { List <Rss.RssItem> ret = new List <Rss.RssItem>(); UserImageGalleryDb db = (new UserImageGalleryDb()); UserImageGalleryPlaceholderData placeholderData = db.getUserImageGalleryPlaceholderData(page, placeholderDefinition.Identifier, langToRenderFor, true); string imageStorageDir = placeholderData.getImageStorageDirectory(page); CmsLocalImageOnDisk[] allResources = CmsLocalImageOnDisk.FetchAllImagesInDirectory(imageStorageDir, UserImageGalleryPlaceholderData.ImageExtensionsToDisplay); foreach (CmsLocalImageOnDisk image in allResources) { Rss.RssItem item = new Rss.RssItem(); string title = image.getImageCaption(); if (title == "") { title = image.FileName; } item.Title = title; Dictionary <string, string> pageParams = new Dictionary <string, string>(); pageParams.Add(UrlParamName, image.ResourceId.ToString()); item.Link = new Uri(page.getUrl(pageParams)); item.Description = renderFullSize(placeholderData, image, page, langToRenderFor); ret.Add(item); } // foreach return(ret.ToArray()); }
//(t => t.RelationshipType == "enclosure"); //(t => t.RelationshipType == "alternate"); public static RssTorrent ToTorrent(this Rss.RssItem item) { RssTorrent rt = new RssTorrent(item.Guid.Name) { Name = item.Title, Summary = item.Description, TimePublished = item.PubDate, }; if (item.Enclosure != null) { if (item.Enclosure.Type == "application/x-bittorrent") { rt.TorrentFileUrl = item.Enclosure.Url.ToString(); } } else { string url = item.Link.ToString(); if (Utility.IsMagnetLink(url)) { rt.TorrentMagnetUrl = url; } else { // Warning: This URL might not be the .torrent file. (In case of https://animetosho.org) rt.TorrentFileUrl = url; } } return(rt); }
} // RenderView public override Rss.RssItem[] GetRssFeedItems(CmsPage page, CmsPlaceholderDefinition placeholderDefinition, CmsLanguage langToRenderFor) { Rss.RssItem rssItem = CreateAndInitRssItem(page, langToRenderFor); rssItem.Description = page.renderPlaceholderToString(placeholderDefinition, langToRenderFor, CmsPage.RenderPlaceholderFilterAction.RunAllPageAndPlaceholderFilters); return(new Rss.RssItem[] { rssItem }); }
public RSSEvents(string channelDescription, string channelTittle, string webmaster) { rss = new Rss.RssFeed(); if (rss.Channels.Count == 0) { Rss.RssFeed rs = new Rss.RssFeed(); Rss.RssChannel ch = new Rss.RssChannel(); string cat = ""; //if (rssfile.Contains(@"\Components\")) { cat = "Componente forte"; } //if (rssfile.Contains(@"\Environments\")) { cat = "Entorno forte"; } ch.Description = channelDescription; ch.Title = channelTittle; ch.WebMaster = webmaster; Rss.RssItem rt = new Rss.RssItem(); rt.Author = webmaster; rt.Description = channelDescription; rt.PubDate = DateTime.Now; rt.Title = channelTittle; ch.Items.Add(rt); ch.LastBuildDate = DateTime.Now; ch.PubDate = DateTime.Now; //ch.Link = new Uri(httplink); rss.Channels.Add(ch); } }
public override Rss.RssItem[] GetRssFeedItems(CmsPage page, CmsPlaceholderDefinition placeholderDefinition, CmsLanguage langToRenderFor) { base.categoryList = db.fetchCategoryList(langToRenderFor); RenderParameters renderParams = RenderParameters.FromPlaceholderParamList(placeholderDefinition.ParamList); CmsUrlFormat pageLinkFormat = CmsUrlFormat.FullIncludingProtocolAndDomainName; CmsUrlFormat fileLinkFormat = CmsUrlFormat.FullIncludingProtocolAndDomainName; FileAggItem[] filesToShow = FetchAllFilesToShow(page, placeholderDefinition.Identifier, langToRenderFor, renderParams, pageLinkFormat, fileLinkFormat); List <Rss.RssItem> ret = new List <Rss.RssItem>(); foreach (FileAggItem file in filesToShow) { Rss.RssItem rssItem = CreateAndInitRssItem(page, langToRenderFor); // -- link directly to the file url rssItem.Link = new Uri(file.FileDownloadURL, UriKind.RelativeOrAbsolute); rssItem.Guid = new Rss.RssGuid(rssItem.Link); rssItem.Title = file.Title; rssItem.Description = file.Description; rssItem.PubDate_GMT = file.LastModified.ToUniversalTime(); ret.Add(rssItem); } // foreach file return(ret.ToArray()); } // GetRssFeedItems
} // RenderEdit public override Rss.RssItem[] GetRssFeedItems(CmsPage page, CmsPlaceholderDefinition placeholderDefinition, CmsLanguage langToRenderFor) { List <Rss.RssItem> ret = new List <Rss.RssItem>(); Dictionary <CmsPage, CmsPlaceholderDefinition[]> childJobPages = CmsContext.getAllPlaceholderDefinitions("JobPostingDetails", page, CmsContext.PageGatheringMode.ChildPagesOnly); if (childJobPages.Count > 0) { JobPostingLocation[] allLocations = JobPostingLocation.FetchAll(); JobPostingLocation theAllLocationsLocation = JobPostingLocation.getAllLocations(allLocations); JobPostingDb db = new JobPostingDb(); JobPostingAggregatorData aggregatorData = db.getJobPostingAggregatorData(page, placeholderDefinition.Identifier, langToRenderFor, true); // -- grab all the details for all child job pages. foreach (CmsPage childPage in childJobPages.Keys) { foreach (CmsPlaceholderDefinition phDef in childJobPages[childPage]) { JobPostingDetailsData dataObj = db.getJobPostingDetailsData(childPage, phDef.Identifier, langToRenderFor, true); if (!dataObj.IsExpired && (aggregatorData.LocationId < 0 || aggregatorData.LocationId == theAllLocationsLocation.JobLocationId || dataObj.LocationId == aggregatorData.LocationId)) { Rss.RssItem rssItem = CreateAndInitRssItem(childPage, langToRenderFor); rssItem.Description = childPage.renderAllPlaceholdersToString(langToRenderFor, CmsPage.RenderPlaceholderFilterAction.RunAllPageAndPlaceholderFilters); ret.Add(rssItem); } } } // foreach child page } return(ret.ToArray()); }
protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); Logging.Log(this, Logging.LoggingTypeDebug, "OnCreate"); SetContentView(Resource.Layout.News); if (Intent.GetBooleanExtra("RELOADFEEDS", false)) { new FeedHelper().UpdateBGFeeds(this); } ListView lvNews = FindViewById <ListView>(Resource.Id.lvNews); lvNews.ItemClick += delegate(object sender, AdapterView.ItemClickEventArgs e) { if (adapter == null || adapter.GetEntries == null) { return; } Rss.RssItem entry = adapter.GetEntries[e.Position]; Intent intent = new Intent(this, typeof(NewsDetails)); intent.PutExtra("FeedID", entry.FeedID); intent.PutExtra("FeedItemID", entry.ItemID); StartActivity(intent); }; }
public override Rss.RssItem[] GetRssFeedItems(CmsPage page, CmsPlaceholderDefinition placeholderDefinition, CmsLanguage langToRenderFor) { List <Rss.RssItem> ret = new List <Rss.RssItem>(); // -- get the news NewsArticleDb.NewsArticleAggregatorData aggData = (new NewsArticleDb()).fetchNewsAggregator(page, placeholderDefinition.Identifier, langToRenderFor, true); RenderParameters renderParams = RenderParameters.fromParamList(placeholderDefinition.ParamList, aggData); NewsAggItem[] newsItems = FetchAllNewsAggItems(page, placeholderDefinition.Identifier, langToRenderFor, renderParams, CmsUrlFormat.FullIncludingProtocolAndDomainName); int currYear = renderParams.AggregatorData.YearToDisplay; foreach (NewsAggItem newsItem in newsItems) { if (currYear < 0 || newsItem.NewsDate.Year == currYear) { Rss.RssItem rssItem = new Rss.RssItem(); rssItem = InitRssItem(rssItem, page, langToRenderFor); rssItem.Title = newsItem.Title; rssItem.Link = new Uri(newsItem.PageDisplayURL, UriKind.RelativeOrAbsolute); rssItem.Guid = new Rss.RssGuid(rssItem.Link); rssItem.PubDate_GMT = newsItem.NewsDate.ToUniversalTime(); rssItem.Description = newsItem.NewsArticleHtml; ret.Add(rssItem); } } return(ret.ToArray()); } // GetRssFeedItems
internal string getHTMLOutput() { string html = ""; Stack <Rss.RssItem> st = new Stack <Rss.RssItem>(); foreach (Rss.RssItem rit in rss.Channels[0].Items) { st.Push(rit); } int posts = 7; while (st.Count > 0 && posts > 0) { Rss.RssItem rit = st.Pop(); string rpost = ""; rpost = post.Replace("%titulo%", rit.Title); rpost = rpost.Replace("%usuario%", rit.Author); rpost = rpost.Replace("%fecha%", rit.PubDate.AddHours(-2).ToString("dddd, dd/MM/yyyy HH:mm")); rpost = rpost.Replace("%entry%", rit.Description); html += rpost + "\r\n"; --posts; } return(html); }
public void addNewPostNoSaveFile(string title, string usuario, string entry) { Rss.RssItem it = new Rss.RssItem(); it.Title = title; it.Author = usuario; it.Description = entry; it.PubDate = DateTime.Now; rss.Channels[0].Items.Add(it); //rss.Write(this.rssfile); }
public override Rss.RssItem[] GetRssFeedItems(CmsPage page, CmsPlaceholderDefinition placeholderDefinition, CmsLanguage langToRenderFor) { Rss.RssItem rssItem = base.CreateAndInitRssItem(page, langToRenderFor); PlainTextContentDb db = new PlainTextContentDb(); string html = db.getPlainTextContent(page, placeholderDefinition.Identifier, langToRenderFor, true); rssItem.Description = html; return(new Rss.RssItem[] { rssItem }); }
private bool FillPosts(FeedItem feedItem) { Rss.RssChannel rssChannel = Utils.GetFeed(feedItem).Channels[0]; bool boolRead = false; PostsListView.Items.Clear(); PostsListView.BeginUpdate(); rssChannel.Items.Sort(); for (int q = 0; q < rssChannel.Items.Count; q++) { if (feedItem.ReadPosts != null) { foreach (string hashRead in feedItem.ReadPosts) { boolRead = false; string strHash = rssChannel.Items[q].GetHashCode().ToString(); if (hashRead == strHash) { boolRead = true; break; } } } else { boolRead = false; } Rss.RssItem rssItem = rssChannel.Items[q]; if (rssItem.Enclosure != null) { // RssItem rssItem = rssFeed.Items[q]; rssItem.Read = boolRead; if (Settings.Default.History[rssItem.GetHashCode().ToString()] == null) { rssItem.EnclosureDownloaded = false; ListViewItem lvi = new ListViewItem(); lvi.SubItems.Add(rssItem.Title); lvi.SubItems.Add(rssItem.PubDate.ToString("yyyy-MM-dd")); lvi.Tag = rssItem; PostsListView.Items.Add(lvi); } } } foreach (ColumnHeader c in PostsListView.Columns) { c.Width = -2; } PostsListView.EndUpdate(); return(boolRead); }
public override Rss.RssItem[] GetRssFeedItems(CmsPage page, CmsPlaceholderDefinition placeholderDefinition, CmsLanguage langToRenderFor) { Rss.RssItem rssItem = CreateAndInitRssItem(page, langToRenderFor); FileLibraryDetailsData fileData = db.fetchDetailsData(page, placeholderDefinition.Identifier, langToRenderFor, true); rssItem.Description = fileData.Description; rssItem.Author = fileData.Author; string controlId = "fileLibrary_" + page.Id.ToString() + "_" + placeholderDefinition.Identifier.ToString() + "_" + langToRenderFor.shortCode + "_"; rssItem.Guid = new Rss.RssGuid(controlId); return new Rss.RssItem[] { rssItem }; }
} // RenderView public override Rss.RssItem[] GetRssFeedItems(CmsPage page, CmsPlaceholderDefinition placeholderDefinition, CmsLanguage langToRenderFor) { Rss.RssItem rssItem = base.CreateAndInitRssItem(page, langToRenderFor); string content = page.renderPlaceholderToString(placeholderDefinition, langToRenderFor, CmsPage.RenderPlaceholderFilterAction.RunAllPageAndPlaceholderFilters); if (content.Trim() != "") { rssItem.Description = content; return(new Rss.RssItem[] { rssItem }); } return(new Rss.RssItem[0]); }
public override Rss.RssItem[] GetRssFeedItems(CmsPage page, CmsPlaceholderDefinition placeholderDefinition, CmsLanguage langToRenderFor) { EventCalendarDb db = new EventCalendarDb(); EventCalendarDb.EventCalendarAggregatorData entity = db.fetchAggregatorData(page, placeholderDefinition.Identifier, langToRenderFor, true); DateTime start = DateTime.MinValue; DateTime end = DateTime.MinValue; switch (entity.ViewMode) { case CalendarViewMode.Agenda_Day: start = DateTime.Now.Date; end = DateTime.Now.AddDays(1); break; case CalendarViewMode.Agenda_Week: DayOfWeek firstDay = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek; start = DateTime.Now.Date; while (start.DayOfWeek != firstDay) { start = start.AddDays(-1); } end = DateTime.Now.AddDays(7); break; case CalendarViewMode.Month: start = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1); end = start.AddMonths(1); break; default: throw new ArgumentException("Error: invalid CalendarView mode"); break; } List <Rss.RssItem> ret = new List <Rss.RssItem>(); List <EventCalendarDb.EventCalendarDetailsData> list = new EventCalendarDb().fetchDetailsDataByRange(start, end, langToRenderFor); foreach (EventCalendarDb.EventCalendarDetailsData e in list) { CmsPage detailPage = CmsContext.getPageById(e.PageId); Rss.RssItem rssItem = CreateAndInitRssItem(detailPage, langToRenderFor); rssItem.PubDate_GMT = e.StartDateTime; rssItem.Author = e.CreatedBy; rssItem.Description = detailPage.renderPlaceholdersToString("EventCalendarDetails", langToRenderFor, CmsPage.RenderPlaceholderFilterAction.RunAllPageAndPlaceholderFilters); ret.Add(rssItem); } return(ret.ToArray()); }
public Rss.RssItem InitRssItem(Rss.RssItem newRssItem, CmsPage page, CmsLanguage langToRenderFor) { string titlePrefix = CmsConfig.getConfigValue("pageTitlePrefix", ""); string titlePostfix = CmsConfig.getConfigValue("pageTitlePostfix", ""); newRssItem.Title = titlePrefix + page.getTitle(langToRenderFor) + titlePostfix; newRssItem.Link = new Uri(page.getUrl(CmsUrlFormat.FullIncludingProtocolAndDomainName, langToRenderFor)); newRssItem.Guid = new Rss.RssGuid(newRssItem.Link); newRssItem.Author = page.LastModifiedBy; newRssItem.PubDate_GMT = page.LastUpdatedDateTime.ToUniversalTime(); return(newRssItem); }
private void QueueButton_Click(object sender, EventArgs e) { Rss.RssChannel channel = new Rss.RssChannel(); channel.Description = languages.FormStrings.TemporaryDownloadChannel; feed.Channels.Add(channel); foreach (ListViewItem lvi in PostsListView.Items) { if (lvi.Checked == true) { Rss.RssItem item = (Rss.RssItem)lvi.Tag; channel.Items.Add(item); } } }
private void CatchUpAll() { Cursor.Current = Cursors.WaitCursor; try { progressBar1.Maximum = Settings.Default.Feeds.Count; progressBar1.Minimum = 0; for (int y = 0; y < Settings.Default.Feeds.Count; y++) { FeedItem feedItem = Settings.Default.Feeds[y]; if (feedItem.IsChecked) { progressBar1.Value = y; Rss.RssFeed rssFeed = Utils.GetFeed(Settings.Default.Feeds[y]); if (rssFeed != null) { int Start = Convert.ToInt32(numericValue.Value); for (int q = Start; q < rssFeed.Channels[0].Items.Count; q++) { Rss.RssItem rssItem = rssFeed.Channels[0].Items[q]; if (Settings.Default.History[rssItem.GetHashCode().ToString()] == null) { HistoryItem historyItem = new HistoryItem(); historyItem.FeedGUID = feedItem.GUID; historyItem.Hashcode = rssItem.GetHashCode(); historyItem.Title = rssItem.Title; historyItem.ItemDate = rssItem.PubDate.ToString(); historyItem.FeedUrl = feedItem.Url; Settings.Default.History.Add(historyItem); } } } } } Cursor.Current = Cursors.Default; } catch (Exception ex) { log.Error("Error during catch-up", ex); Cursor.Current = Cursors.Default; MessageBox.Show(ex.Message, languages.FormStrings.ErrorDuringCatchUp, MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1); } }
public RSSPost[] getPosts() { Stack <Rss.RssItem> st = new Stack <Rss.RssItem>(); List <RSSPost> list = new List <RSSPost>(); foreach (Rss.RssItem rit in rss.Channels[0].Items) { st.Push(rit); } //int posts = 7; while (st.Count > 0) { Rss.RssItem rit = st.Pop(); list.Add(new RSSPost(rit)); } return(list.ToArray()); }
} // RenderView public override Rss.RssItem[] GetRssFeedItems(CmsPage page, CmsPlaceholderDefinition placeholderDefinition, CmsLanguage langToRenderFor) { GlossaryDb db = new GlossaryDb(); GlossaryPlaceholderData placeholderData = db.getGlossary(page, placeholderDefinition.Identifier, langToRenderFor, true); GlossaryPlaceholderData.GlossaryViewMode origViewMode = placeholderData.ViewMode; // -- gets all glossary items (regardless of the ViewMode) GlossaryData[] items = db.getGlossaryData(placeholderData.GlossaryId); // -- each glossary item gets its own rssItem List <Rss.RssItem> ret = new List <Rss.RssItem>(); foreach (GlossaryData glData in items) { Rss.RssItem rssItem = new Rss.RssItem(); rssItem = base.InitRssItem(rssItem, page, langToRenderFor); rssItem.Description = glData.description; // -- setup the proper link switch (placeholderData.ViewMode) { case GlossaryPlaceholderData.GlossaryViewMode.PagePerLetter: Dictionary <string, string> urlParams = new Dictionary <string, string>(); urlParams.Add("l", glData.word.ToUpper()[0].ToString()); rssItem.Link = new Uri(page.getUrl(urlParams, langToRenderFor)); break; case GlossaryPlaceholderData.GlossaryViewMode.SinglePageWithJumpList: // nothing to do break; default: throw new Exception("Error: invalid GlossaryViewMode"); } // switch } return(ret.ToArray()); }
public RSSPost(Rss.RssItem rssitem) { if (rssitem.Enclosure != null) { MediaItemUrl = rssitem.Enclosure.Url.ToString(); MediaType = rssitem.Enclosure.Type; MediaLenght = rssitem.Enclosure.Length; } Title = rssitem.Title; Content = rssitem.Description; User = rssitem.Author; Date = rssitem.PubDate; if (rssitem.Comments != null & rssitem.Comments.Length > 0) { Comments = new List <string>(rssitem.Comments.Split(new string[] { "#" }, StringSplitOptions.RemoveEmptyEntries)); } else { Comments = new List <string>(); } }
public RSSEvents(string filepath, string channeldescription, string webmaster, string channeltitle, string httplink) { //rssfile = filerelpath; string tmprssfile = rssfile; rssfile = filepath; rss = new Rss.RssFeed(); if (!System.IO.File.Exists(rssfile)) { //System.IO.StreamWriter str = new System.IO.StreamWriter(rssfile, false); //str.Close(); if (rss.Channels.Count == 0) { Rss.RssFeed rs = new Rss.RssFeed(); Rss.RssChannel ch = new Rss.RssChannel(); string cat = ""; //if (rssfile.Contains(@"\Components\")) { cat = "Componente forte"; } //if (rssfile.Contains(@"\Environments\")) { cat = "Entorno forte"; } ch.Description = channeldescription; ch.Title = channeltitle; ch.WebMaster = webmaster; Rss.RssItem rt = new Rss.RssItem(); rt.Author = webmaster; rt.Description = "Seccion de eventos, canal " + channeltitle + "." + cat; rt.PubDate = DateTime.Now; rt.Title = "Eventos para el canal " + channeltitle; ch.Items.Add(rt); ch.LastBuildDate = DateTime.Now; ch.PubDate = DateTime.Now; ch.Link = new Uri(httplink); rss.Channels.Add(ch); rss.Write(rssfile); } } rss = Rss.RssFeed.Read(rssfile); }
private void RenderRss(RssGroup rssGroup) { Response.ContentType = "application/xml"; Response.ContentEncoding = System.Text.Encoding.UTF8; Hashtable moduleSettings = ModuleSettings.GetModuleSettings(rssGroup.ModuleId); rssGroup.MaximumDays = WebUtils.ParseInt32FromHashtable( moduleSettings, "RSSFeedMaxDaysOldSetting", 90); int entriesLimit = WebUtils.ParseInt32FromHashtable( moduleSettings, "RSSFeedMaxPostsSetting", 90); int entryCount = 0; Rss.RssChannel channel = new Rss.RssChannel(); string baseUrl = Request.Url.ToString().Replace("RSS.aspx", "Topic.aspx"); using (IDataReader posts = rssGroup.GetPostsForRss()) { while ((posts.Read()) && (entryCount <= entriesLimit)) { Rss.RssItem item = new Rss.RssItem(); item.Title = posts["Subject"].ToString(); item.Description = SiteUtils.ChangeRelativeUrlsToFullyQuailifiedUrls(navigationSiteRoot, imageSiteRoot, posts["Post"].ToString()); item.PubDate = Convert.ToDateTime(posts["PostDate"]); string target = baseUrl; if (target.IndexOf("&topic=") < 0 && target.IndexOf("?topic=") < 0) { if (target.IndexOf("?") < 0) { target += "?topic=" + posts["TopicID"].ToString() + "#post" + posts["PostID"].ToString(); } else { target += "&topic=" + posts["TopicID"].ToString() + "#post" + posts["PostID"].ToString(); } } item.Link = new System.Uri(target); item.Author = posts["StartedBy"].ToString(); channel.Items.Add(item); entryCount += 1; } } object value = GetModule(); Module m; channel.LastBuildDate = channel.Items.LatestPubDate(); channel.Link = new System.Uri(groupUrl); if (value != null) { m = (Module)value; channel.Title = m.ModuleTitle; channel.Description = m.ModuleTitle; } else { channel.Title = siteSettings.SiteName; channel.Description = siteSettings.SiteName; } if (channel.Items.Count == 0) { Rss.RssItem item = new Rss.RssItem(); item.Title = "No Items Found"; item.Description = "No items found"; item.PubDate = DateTime.UtcNow; item.Link = new System.Uri(navigationSiteRoot); item.Author = "system"; channel.Items.Add(item); } Rss.RssFeed rss = new Rss.RssFeed(); rss.BaseUrl = cssBaseUrl; rss.Encoding = System.Text.Encoding.UTF8; rss.Channels.Add(channel); rss.Write(Response.OutputStream); //Response.End(); }
public static FileAggItem FromRSSItems(Rss.RssItem sourceDetails) { string PageDisplayURL = sourceDetails.Link.ToString(); string Title = sourceDetails.Title; string FileDownloadURL = PageDisplayURL; // parse it out string Description = sourceDetails.Description; // parse it out string CategoryName = ""; // parse it out if (sourceDetails.Categories.Count > 0) { CategoryName = sourceDetails.Categories[(sourceDetails.Categories.Count - 1)].Name; // use the last category } DateTime lastModified = sourceDetails.PubDate_GMT; // parse it out bool isSWISHFeed = false; int entryStartIndex = Description.IndexOf("<entry>"); int entryEndIndex = Description.LastIndexOf("</entry>"); if (entryStartIndex >= 0 && entryEndIndex > entryStartIndex) { isSWISHFeed = true; } if (isSWISHFeed) { try { // parse the FileDownloadURL, Description, CategoryName and lastModified from the description int parseLength = (entryEndIndex + "</entry>".Length) - entryStartIndex; string encodedXml = Description.Substring(entryStartIndex, parseLength).Trim(); string decodedXml = HttpUtility.HtmlDecode(encodedXml); System.IO.StringReader xmlStream = new System.IO.StringReader(decodedXml); /* * XmlReaderSettings settings = new XmlReaderSettings(); * settings.ConformanceLevel = ConformanceLevel.Auto; * settings.IgnoreComments = true; * settings.IgnoreProcessingInstructions = true; */ XmlTextReader xmlReader = new XmlTextReader(xmlStream); xmlReader.Namespaces = false; // critical: ignore namespaces. Otherwise parts of the document will not be parsed. xmlReader.WhitespaceHandling = WhitespaceHandling.None; while (xmlReader.Read()) { if (xmlReader.NodeType == XmlNodeType.Element || xmlReader.NodeType == XmlNodeType.EndElement) { if (xmlReader.Name == "summary") { Description = xmlReader.ReadElementContentAsString(); } else if (xmlReader.Name == "dc:subject") { CategoryName = xmlReader.ReadElementContentAsString(); } else if (xmlReader.Name == "updated") { try { lastModified = xmlReader.ReadElementContentAsDateTime(); } catch (FormatException fe) { } } } // -- for some reason the link tag is parsed right-after the summary tag if (xmlReader.Name == "link") { xmlReader.MoveToAttribute("href"); if (xmlReader.Value != "") { FileDownloadURL = xmlReader.Value; } } } // while } catch (Exception ex) { } } return(new FileAggItem(PageDisplayURL, FileDownloadURL, Title, Description, CategoryName, lastModified)); }