Esempio n. 1
0
        public void RssXmlHelperDeserializeFromXmlUsingStringReaderTest()
        {
            RssDocument rss = RssXmlHelper.DeserializeFromXmlUsingStringReader <RssDocument>(rssXml);

            Assert.IsTrue(rss.Channel.Items.Count == 1, "RssToolkit.RssRssXmlHelper.DeserializeFromXmlUsingStringReader did not return the expected value.");
            Assert.IsTrue(rss.Channel.Title == "Yahoo! News: Top Stories", "RssToolkit.Rss.RssXmlHelper.DeserializeFromXmlUsingStringReader did not return the expected value.");
        }
Esempio n. 2
0
        /// <summary>
        /// Generates the channel items.
        /// </summary>
        /// <param name="rssChannel">The RSS channel.</param>
        /// <returns></returns>
        private string GenerateChannelItems(RssChannel rssChannel)
        {
            if (this.Parameters.ClassName.StartsWith("List_"))
            {
                return(GenerateListChannelItems(rssChannel));
            }

            return(RssXmlHelper.ToRfc822(DateTime.Now));
        }
Esempio n. 3
0
        public void RssXmlHelperConvertToRssTest()
        {
            RssDocument rss = RssDocument.Load(RssXmlHelper.ConvertToRssXml(RssUtility.AtomXml));

            Assert.IsTrue(rss.Channel.Items.Count > 0);

            rss = RssDocument.Load(RssXmlHelper.ConvertToRssXml(RssUtility.RdfXml));
            Assert.IsTrue(rss.Channel.Items.Count > 0);
        }
Esempio n. 4
0
        public void RssXmlHelperToRssXmlTest()
        {
            string      rssUrl = "http://rss.msnbc.msn.com/id/3032091/device/rss/rss.xml";
            RssDocument rss    = RssDocument.Load(new System.Uri(rssUrl));
            string      xml    = RssXmlHelper.ToRssXml <RssDocument>(rss);

            Assert.IsFalse(string.IsNullOrEmpty(xml), "RssToolkit.Rss.RssXmlHelper.ToRssXml did not return the expected value.");
            System.Xml.XmlDocument xmlDocument = new System.Xml.XmlDocument();
            xmlDocument.LoadXml(xml);
            Assert.IsTrue(xmlDocument.DocumentElement.LocalName.Equals("rss", StringComparison.OrdinalIgnoreCase), "RssToolkit.Rss.RssXmlHelper.ToRssXml did not return the expected value.");
            Assert.IsTrue(xmlDocument.SelectNodes("/rss/channel/item").Count > 0, "RssToolkit.Rss.RssXmlHelper.ToRssXml did not return the expected value.");
        }
Esempio n. 5
0
        /// <summary>
        /// Generates the list channel items.
        /// </summary>
        /// <param name="rssChannel">The RSS channel.</param>
        /// <returns></returns>
        private string GenerateListChannelItems(RssChannel rssChannel)
        {
            DateTime lastBuildDate = DateTime.MinValue;

            MetaClass listMetaClass = DataContext.Current.GetMetaClass(this.Parameters.ClassName);

            foreach (EntityObject item in BusinessManager.List(this.Parameters.ClassName,
                                                               this.CurrentProfile.Filters.ToArray(),
                                                               this.CurrentProfile.Sorting.ToArray()))
            {
                RssItem rssItem = new RssItem();
                rssItem.Guid = new RssGuid();

                rssItem.Title = string.IsNullOrEmpty(listMetaClass.TitleFieldName) ?
                                ("#" + item.PrimaryKeyId.Value.ToString()) :
                                (string)item[listMetaClass.TitleFieldName];

                rssItem.Link             = MakeFullLink(this.Page.ResolveUrl(string.Format(CultureInfo.CurrentUICulture, "~/Apps/MetaUIEntity/Pages/EntityList.aspx?ClassName={0}", listMetaClass.Name)));
                rssItem.Guid.IsPermaLink = "false";
                rssItem.Guid.Text        = item.PrimaryKeyId.Value.ToString();

                rssItem.Description = RenderListEntityObjectDescription(listMetaClass, item);

                DateTime modified = (DateTime)item["Modified"];

                if (modified > lastBuildDate)
                {
                    lastBuildDate = modified;
                }

                rssItem.PubDate = RssXmlHelper.ToRfc822(modified);
                UserLight author = UserLight.Load((int)item["ModifierId"]);
                if (author != null)
                {
                    rssItem.Author = string.Format("{0} <{1}>", author.DisplayName, author.Email);
                }

                rssChannel.Items.Add(rssItem);
            }

            if (lastBuildDate == DateTime.MinValue)
            {
                lastBuildDate = DateTime.Now;
            }

            return(RssXmlHelper.ToRfc822(lastBuildDate));
        }
        public override void GenerateCode(AssemblyBuilder assemblyBuilder)
        {
            if (assemblyBuilder == null)
            {
                throw new ArgumentNullException("assemblyBuilder");
            }

            // load as XML
            XmlDocument doc = new XmlDocument();

            using (Stream s = OpenStream(VirtualPath))
            {
                doc.Load(s);
            }

            // validate root rssdl node
            XmlNode root = doc.DocumentElement;

            if (root.Name != "rssdl")
            {
                throw new InvalidDataException(string.Format(CultureInfo.InvariantCulture, "Unexpected root node '{0}' -- expected root 'rssdl' node", root.Name));
            }

            // iterate through rss nodes
            for (XmlNode n = root.FirstChild; n != null; n = n.NextSibling)
            {
                if (n.NodeType != XmlNodeType.Element)
                {
                    continue;
                }

                if (n.Name != "rss")
                {
                    throw new InvalidDataException(
                              string.Format(
                                  CultureInfo.InvariantCulture,
                                  "Unexpected node '{0}' -- expected root 'rss' node",
                                  root.Name));
                }

                string file            = string.Empty;
                string url             = string.Empty;
                string classNamePrefix = string.Empty;
                string namespaceName   = string.Empty;

                foreach (XmlAttribute attr in n.Attributes)
                {
                    switch (attr.Name)
                    {
                    case "name":
                        classNamePrefix = attr.Value;
                        break;

                    case "url":
                        url = attr.Value;
                        break;

                    case "file":
                        file = VirtualPathUtility.Combine(VirtualPathUtility.GetDirectory(VirtualPath), attr.Value);
                        break;

                    case "namespace":
                        namespaceName = attr.Value;
                        break;

                    default:
                        throw new InvalidDataException(
                                  string.Format(CultureInfo.InvariantCulture, "Unexpected attribute '{0}'", attr.Name));
                    }
                }

                if (string.IsNullOrEmpty(classNamePrefix))
                {
                    throw new InvalidDataException("Missing 'name' attribute");
                }

                if (string.IsNullOrEmpty(url) && string.IsNullOrEmpty(file))
                {
                    throw new InvalidDataException("Missing 'url' or 'file' attribute - one must be specified");
                }

                if (!string.IsNullOrEmpty(url) && !string.IsNullOrEmpty(file))
                {
                    throw new InvalidDataException("Only one of 'file' and 'url' can be specified");
                }

                // compile channel
                CodeCompileUnit ccu = new CodeCompileUnit();

                if (!string.IsNullOrEmpty(url))
                {
                    // load RssDocument
                    using (Stream feedStream = DownloadManager.GetFeed(url))
                    {
                        using (XmlTextReader reader = new XmlTextReader(feedStream))
                        {
                            string codeString = RssXmlHelper.ConvertToRssXml(reader);
                            RssCodeGenerator.GenerateCodeDomTree(codeString, url, namespaceName, classNamePrefix, ccu, true);
                        }
                    }
                }
                else
                {
                    using (XmlTextReader reader = new XmlTextReader(file))
                    {
                        string codeString = RssXmlHelper.ConvertToRssXml(reader);
                        RssCodeGenerator.GenerateCodeDomTree(codeString, url, namespaceName, classNamePrefix, ccu, true);
                    }
                }

                assemblyBuilder.AddCodeCompileUnit(this, ccu);
            }
        }
        protected override void PopulateRss(string channelName, string userName)
        {
            // Get the data
            string qModuleId = HttpContext.Current.Request["moduleId"];
            int    moduleId;

            if (!int.TryParse(qModuleId, out moduleId) || moduleId <= 0)
            {
                throw new ArgumentException("Invalid or missing module id: " + moduleId);
            }

            WebModuleInfo MasterDetailListModule = WebModule.GetModule(moduleId);

            if (MasterDetailListModule.WebModuleType != MasterDetailList.ModuleType)
            {
                throw new ArgumentException(string.Format("Invalid module type '{0}'. Module type must be '{1}'", MasterDetailListModule.ModuleTypeName, MasterDetailList.ModuleType.Name));
            }
            WebpageInfo MasterDetailListPage = MasterDetailListModule.Webpage;

            if (null == MasterDetailListModule)
            {
                throw new ArgumentException("Invalid module id: " + moduleId);
            }
            List <WebModuleInfo> MasterDetailItemModules = MasterDetailList.GetMasterDetailChildren(moduleId, true, true);


            // Build the feed
            Rss.Channel             = new MasterDetailChannel();
            Rss.Version             = "2.0";
            Rss.Channel.Title       = MasterDetailListPage.Title;
            Rss.Channel.Description = MasterDetailListPage.MetaDescription;
            Rss.Channel.Link        = MasterDetailListPage.Path;

            Rss.Channel.Items = new List <MasterDetailRssItem>();
            if (!string.IsNullOrEmpty(channelName))
            {
                Rss.Channel.Title += " '" + channelName + "'";
            }

            if (!string.IsNullOrEmpty(userName))
            {
                Rss.Channel.Title += " (generated for " + userName + ")";
            }

            int maxItemsPerPage = 25;
            int i = 0;

            foreach (WebModuleInfo m in MasterDetailItemModules)
            {
                WebpageInfo      p       = m.Webpage;
                MasterDetailItem itemRes = MasterDetailItem.GetSafeResource(m.Id);
                //string postDateString = "";
                //if (p.PostDate.HasValue)
                //{
                //this is a hack
                //	postDateString = p.PostDate.Value.GetDateTimeFormats(
                //		System.Globalization.CultureInfo.GetCultureInfo("en-US"))[103];
                //}

                MasterDetailRssItem item = new MasterDetailRssItem();
                item.Title       = p.Title;
                item.Description = itemRes.GetSummary(p);
                if (p.PostDate.HasValue)
                {
                    item.PubDate = RssXmlHelper.ToRfc822(p.PostDate.Value);
                }
                item.Link = VirtualPathUtility.ToAbsolute(p.Path);

                Rss.Channel.Items.Add(item);

                i++;
                if (i == maxItemsPerPage)
                {
                    break;
                }
            }
        }