public bool AddRSSInfo(RSSViewModel vm) { //pubdate format from http://www.dotnetperls.com/pubdate IFileProvider provider = _appEnvironment.ContentRootFileProvider; IDirectoryContents contents = provider.GetDirectoryContents("wwwroot\\content"); if (!contents.Any(c => c.Name == "feed.xml")) { if (!CreateXMLFile()) { return(false); } } XDocument xdoc; DateTime now = DateTime.Now; if (!XmlFilePopulated()) { xdoc = new XDocument( new XElement("rss", new XAttribute("version", "2.0"), new XElement("channel", new XElement("title", vm.Title), new XElement("description", vm.Description), new XElement("link", vm.Link), new XElement("pubDate", now.ToString("ddd',' d MMM yyyy HH':'mm':'ss") + " " + now.ToString("zzzz").Replace(":", "")), new XElement("lastBuildDate", now.ToString("ddd',' d MMM yyyy HH':'mm':'ss") + " " + now.ToString("zzzz").Replace(":", "")), new XElement("ttl", vm.TimeToLive)))); } else { xdoc = XDocument.Load(contents.Where(c => c.Name == "feed.xml").FirstOrDefault().CreateReadStream()); xdoc.Descendants("title").FirstOrDefault()?.SetValue(vm.Title); xdoc.Descendants("description").FirstOrDefault()?.SetValue(vm.Description); xdoc.Descendants("link").FirstOrDefault()?.SetValue(vm.Link); xdoc.Descendants("lastBuildDate").FirstOrDefault()?.SetValue(now.ToString("ddd',' d MMM yyyy HH':'mm':'ss") + " " + now.ToString("zzzz").Replace(":", "")); xdoc.Descendants("ttl").FirstOrDefault()?.SetValue(vm.TimeToLive); } try { using (var fileStream = new FileStream(_appEnvironment.ContentRootPath + "\\wwwroot\\content\\feed.xml", FileMode.Create)) { xdoc.Save(fileStream); } } catch (Exception e) { return(false); } return(true); }
public IActionResult Index() { var vm = new RSSViewModel(); _rssService.PopulateRSSInfoViewModel(vm); return(View(vm)); }
public IActionResult Index(RSSViewModel vm) { if (ModelState.IsValid) { if (!_rssService.AddRSSInfo(vm)) { return(View(vm)); } } return(RedirectToAction("Index", "Home")); }
public void PopulateRSSInfoViewModel(RSSViewModel vm) { IFileProvider provider = _appEnvironment.ContentRootFileProvider; IDirectoryContents contents = provider.GetDirectoryContents("wwwroot\\content"); if (!contents.Any(c => c.Name == "feed.xml")) { CreateXMLFile(); vm.RSSCreated = false; return; } if (!XmlFilePopulated()) { return; } XDocument xdoc = XDocument.Load(contents.Where(c => c.Name == "feed.xml").FirstOrDefault().CreateReadStream()); if (xdoc != null) { vm.Title = xdoc.Descendants("title").FirstOrDefault()?.Value; vm.Description = xdoc.Descendants("description").FirstOrDefault()?.Value; vm.Link = xdoc.Descendants("link").FirstOrDefault()?.Value; string pubDate = xdoc.Descendants("pubDate").FirstOrDefault()?.Value; DateTime pubDateTime; if (DateTime.TryParse(pubDate, out pubDateTime)) { vm.PublishedDate = pubDateTime; } string updateDate = xdoc.Descendants("lastBuildDate").FirstOrDefault()?.Value; DateTime updateDateTime; if (DateTime.TryParse(updateDate, out updateDateTime)) { vm.UpdatedDate = updateDateTime; } int ttl; if (int.TryParse(xdoc.Descendants("ttl").FirstOrDefault()?.Value, out ttl)) { vm.TimeToLive = ttl; } vm.RSSCreated = true; } }