示例#1
0
 public override void ExecuteResult(ControllerContext context)
 {
     context.HttpContext.Response.ContentType = "application/atom+xml";
     var formatter = new Atom10FeedFormatter(Feed);
     using (XmlWriter writer = XmlWriter.Create(context.HttpContext.Response.Output))
         formatter.WriteTo(writer);
 }
示例#2
0
 public void fload(string namefile)
 {
         var lines = System.IO.File.ReadAllLines(namefile);
         feed.Title = new TextSyndicationContent(lines[1]);
         feed.Copyright = new TextSyndicationContent(lines[2]);
         feed.Description = new TextSyndicationContent(lines[3]);
         feed.Generator = lines[4];
         SyndicationLink link = new SyndicationLink();
         link.Uri = new Uri(lines[5]);
         feed.Links.Add(link);
         feed.Items = txtgotolv("feedinfo.txt");
         Response.Clear();
         Response.ContentEncoding = System.Text.Encoding.UTF8;
         Response.ContentType = "text/xml";
         XmlWriter Writer = XmlWriter.Create
         (Response.Output);
         if (lines[0] == "rss")
         {
             Rss20FeedFormatter Formatter = new Rss20FeedFormatter(feed);
             Formatter.WriteTo(Writer);
         }
         else
         {
             if (lines[0] == "atom")
             {
                 Atom10FeedFormatter Formatter = new Atom10FeedFormatter(feed);
                 Formatter.WriteTo(Writer);
             }
         }
         Writer.Close();
         Response.End();
 }
        public string Build(FeedData dataFeed, Uri baseUri)
        {
            var feed = new SyndicationFeed
            {
                Id = dataFeed.Id.ToString(),
                LastUpdatedTime = dataFeed.DateCreated,
                Items = dataFeed.Messages.Select(x => new SyndicationItem
                {
                    Content = new RawSyndicationContent(x.Body),
                    Id = x.Id.ToString(),
                    LastUpdatedTime = x.CreatedAt
                })
            };

            if (!string.IsNullOrEmpty(dataFeed.NextUri))
                feed.Links.Add(new SyndicationLink(new Uri(baseUri, dataFeed.NextUri), NextInArchiveRelationshipType,
                    "Next In Archive", ContentType, 0));

            if (!string.IsNullOrEmpty(dataFeed.PreviousUri))
                feed.Links.Add(new SyndicationLink(new Uri(baseUri, dataFeed.PreviousUri), PrevInArchiveRelationshipType,
                    "Previous In Archive", ContentType, 0));

            var formatter = new Atom10FeedFormatter(feed);

            var sw = new StringWriter();
            using (var writer = XmlWriter.Create(sw))
            {
                formatter.WriteTo(writer);
            }

            return sw.ToString();
        }
        public override void ExecuteResult(ControllerContext context)
        {
            context.HttpContext.Response.ContentType = "application/atom+xml";
            //check request is for Atom or RSS
            if (context.HttpContext.Request.QueryString["type"] != null && context.HttpContext.Request.QueryString["type"].ToString().ToLower() == "atom")
            {
                //Atom Feed
                context.HttpContext.Response.ContentType = "application/atom+xml";
                var rssFormatter = new Atom10FeedFormatter(FeedData);
                using (XmlWriter writer = XmlWriter.Create(context.HttpContext.Response.Output, new XmlWriterSettings { Indent = true }))
                {
                    rssFormatter.WriteTo(writer);
                }
            }
            else
            {
                //RSS Feed
                context.HttpContext.Response.ContentType = "application/rss+xml";
                var rssFormatter = new Rss20FeedFormatter(FeedData);
                using (XmlWriter writer = XmlWriter.Create(context.HttpContext.Response.Output, new XmlWriterSettings { Indent = true }))
                {
                    rssFormatter.WriteTo(writer);
                }
            }

        }
 //var formatter = new Rss20FeedFormatter(feed);
 //    Atom10FeedFormatter formatter = new Atom10FeedFormatter(feed);
 //using (var writer = XmlWriter.Create(response.Output, new XmlWriterSettings { Indent = true }))
 //{
 //    formatter.WriteTo(writer);
 //}
 protected override void WriteFile(HttpResponseBase response)
 {
     Atom10FeedFormatter formatter = new Atom10FeedFormatter(_feed);
     using (XmlWriter writer = XmlWriter.Create(response.OutputStream, new XmlWriterSettings { Indent = true }))
     {
         formatter.WriteTo(writer);
     }
 }
示例#6
0
 private static Action<Stream> GetXmlContents(SyndicationFeed feed)
 {
     return stream =>
     {
         var writer = new XmlTextWriter(stream, Encoding.UTF8);
         var atomFormatter = new Atom10FeedFormatter(feed);
         atomFormatter.WriteTo(writer);
     };
 }
示例#7
0
 public override void OnWriteToStream(Type type, object value, Stream stream, HttpContentHeaders contentHeaders, TransportContext context)
 {
     var formatter = new Atom10FeedFormatter((SyndicationFeed) value);
     using (var xmlWriter = XmlWriter.Create(stream))
     {
         formatter.WriteTo(xmlWriter);
         xmlWriter.Close();
     }
 }
 public static StreamContent CreateContentFromAtom10SyndicationFeed(SyndicationFeed feed)
 {
     SyndicationFeedFormatter formatter = new Atom10FeedFormatter<SyndicationFeed>(feed);
     var memoryStream = new MemoryStream();
     var settings = new XmlWriterSettings { Encoding = Encoding.UTF8, ConformanceLevel = ConformanceLevel.Document, Indent = true };
     using (var xmlWriter = XmlWriter.Create(memoryStream, settings))
     {
         formatter.WriteTo(xmlWriter);
         xmlWriter.Flush();
         xmlWriter.Close();
     }
     memoryStream.Seek(0, SeekOrigin.Begin);
     return new StreamContent(memoryStream);
 }
示例#9
0
        protected override void WriteFile(HttpResponseBase response)
        {
            _isRssFeed = _feedType == FeedType.Rss;

            // Creates Xml file.
            string xmlFile = HttpContext.Current.Server.MapPath("~/feed.xml");
            using (var fileStream = new FileStream(xmlFile, FileMode.Create))
            {
                using (var streamWriter = new StreamWriter(fileStream, Encoding.UTF8))
                {
                    var xs = new XmlWriterSettings { Indent = true };
                    using (var xmlWriter = XmlWriter.Create(streamWriter, xs))
                    {
                        xmlWriter.WriteStartDocument();
                        if (_isCssStyles)
                        {
                            const string strPi = "type='text/css' href='/Contents/Styles/feedStyle.css'";
                            // Write processor information
                            xmlWriter.WriteProcessingInstruction("xml-stylesheet", strPi);
                        }
                        if (_isRssFeed)
                        {
                            // RSS 2.0
                            var rssFormatter = new Rss20FeedFormatter(_feed, true);
                            rssFormatter.WriteTo(xmlWriter);
                        }
                        else
                        {
                            // Atom 1.0
                            var atomFormatter = new Atom10FeedFormatter(_feed);
                            atomFormatter.WriteTo(xmlWriter);
                        }
                    }
                }
            }
            //Display Xml file in browser.
            response.Clear();
            response.Buffer = true;
            response.Charset = "";
            response.Cache.SetCacheability(HttpCacheability.NoCache);
            response.ContentType = "text/xml";
            response.WriteFile(HttpContext.Current.Server.MapPath("~/feed.xml"));
            response.Flush();
            response.End();
        }
示例#10
0
        /// <summary>
        /// Executes the call to the ActionResult method and returns the created feed to the output response.
        /// </summary>
        /// <param name="context">The context in which the result is executed. The context information includes the 
        /// controller, HTTP content, request context, and route data.</param>
        public override void ExecuteResult(ControllerContext context)
        {
            context.HttpContext.Response.ContentType = ContentType.Atom;
            var feedFormatter = new Atom10FeedFormatter(this._syndicationFeed);
            var xmlWriterSettings = new XmlWriterSettings {Encoding = Encoding.UTF8};

            if (HttpContext.Current.IsDebuggingEnabled)
            {
                // Indent the XML for easier viewing but only in Debug mode. In Release mode, everything is output on 
                // one line for best performance.
                xmlWriterSettings.Indent = true;
            }

            using (var xmlWriter = XmlWriter.Create(context.HttpContext.Response.Output, xmlWriterSettings))
            {
                feedFormatter.WriteTo(xmlWriter);
            }
        }
示例#11
0
        protected override void WriteFile(HttpResponseBase response)
        {
            _isRssFeed = _feedType == FeedType.Rss;

            // Creates Xml file.
            string xmlFile = HttpContext.Current.Server.MapPath("~/feed.xml");
            using (var fileStream = new FileStream(xmlFile, FileMode.Create))
            {
                using (var streamWriter = new StreamWriter(fileStream, Encoding.UTF8))
                {
                    var xs = new XmlWriterSettings { Indent = true };
                    using (var xmlWriter = XmlWriter.Create(streamWriter, xs))
                    {
                        xmlWriter.WriteStartDocument();
                        if (_isRssFeed)
                        {
                            // RSS 2.0
                            var rssFormatter = new Rss20FeedFormatter(_feed);
                            rssFormatter.WriteTo(xmlWriter);
                        }
                        else
                        {
                            // Atom 1.0
                            var atomFormatter = new Atom10FeedFormatter(_feed);
                            atomFormatter.WriteTo(xmlWriter);
                        }
                    }
                }
            }
            XslTransform myXslTransform = new XslTransform();
            myXslTransform.Load(HttpContext.Current.Server.MapPath("~/feed.xslt"));
            myXslTransform.Transform(HttpContext.Current.Server.MapPath("~/feed.xml"), HttpContext.Current.Server.MapPath("~/newFeed.xml"));

            //Display Xml file in browser.
            response.Clear();
            response.Buffer = true;
            response.Charset = "";
            response.Cache.SetCacheability(HttpCacheability.NoCache);
            response.ContentType = "application/xml";
            response.WriteFile(HttpContext.Current.Server.MapPath("~/newFeed.xml"));
            response.Flush();
            response.End();
        }
        /// <summary>
        /// Executes the call to the ActionResult method and returns the created feed to the output response.
        /// </summary>
        /// <param name="context">The context in which the result is executed. The context information includes the 
        /// controller, HTTP content, request context, and route data.</param>
        public override void ExecuteResult(ActionContext context)
        {
            context.HttpContext.Response.ContentType = ContentType.Atom;
            Atom10FeedFormatter feedFormatter = new Atom10FeedFormatter(this.syndicationFeed);
            XmlWriterSettings xmlWriterSettings = new XmlWriterSettings();
            xmlWriterSettings.Encoding = Encoding.UTF8;

            if (Context.Environment.IsDevelopment())
            {
                // Indent the XML for easier viewing but only in Debug mode. In Release mode, everything is output on 
                // one line for best performance.
                xmlWriterSettings.Indent = true;
            }

            using (XmlWriter xmlWriter = XmlWriter.Create(context.HttpContext.Response.Body, xmlWriterSettings))
            {
                feedFormatter.WriteTo(xmlWriter);
            }
        }
        public ActionResult Index()
        {
            var syndicationItems =
                this.DB.Themes.Select(ToSyndicationItem)
                .Concat(this.DB.Votes.Include("Theme").Select(ToSyndicationItem))
                .OrderByDescending(s => s.LastUpdatedTime);

            var feed = new SyndicationFeed(_Localize.SiteTitle, "", this.GetAppUrl(), syndicationItems.ToArray());
            var formatter = new Atom10FeedFormatter(feed);

            return new LamdaResult(context =>
            {
                var response = context.HttpContext.Response;
                response.ContentType = "application/xml";
                var xmlWriter = XmlWriter.Create(response.OutputStream);
                formatter.WriteTo(xmlWriter);
                xmlWriter.Flush();
            });
        }
示例#14
0
文件: play.cs 项目: mmoore99/fubumvc
        public void try_it_out()
        {
            var doc = new XmlDocument().WithRoot("root").WithAtt("a", "1");
            var feed = new SyndicationFeed("some feed", "cool feed", new Uri("http://elsewere.com"));

            var item = new SyndicationItem("the title", "some content", new Uri("http://somewhere.com"));
            item.ElementExtensions.Add(doc);

            feed.Items = new SyndicationItem[]{item};

            var builder = new StringBuilder();
            var writer = XmlWriter.Create(builder);
            var formatter = new Atom10FeedFormatter(feed);

            formatter.WriteTo(writer);
            writer.Close();

            Debug.WriteLine(builder);
        }
示例#15
0
 public override void ExecuteResult(ControllerContext context)
 {
     _isRssFeed = _feedType == FeedType.Rss;
     context.HttpContext.Response.ContentType = _isRssFeed
                 ? "application/rss+xml"
                 : "application/atom+xml";
     var writerSettings = new XmlWriterSettings { Indent = true };
     using (var feedWriter = XmlWriter.Create(context.HttpContext.Response.OutputStream, writerSettings))
     {
         if (_isRssFeed)
         {
             // RSS 2.0
             var rssFormatter = new Rss20FeedFormatter(_feed);
             rssFormatter.WriteTo(feedWriter);
         }
         else
         {
             var atomFormatter = new Atom10FeedFormatter(_feed);
             atomFormatter.WriteTo(feedWriter);
         }
     }
 }
示例#16
0
        public override void ExecuteResult(ControllerContext context)
        {
            SyndicationFeedFormatter formatter = null;

            switch (Type) {
                default:
                case "rss":
                    context.HttpContext.Response.ContentType = "application/rss+xml";
                    formatter = new Rss20FeedFormatter(this.Feed);

                    break;
                case "atom":
                    context.HttpContext.Response.ContentType = "application/atom+xml";
                    formatter = new Atom10FeedFormatter(this.Feed);

                    break;
            }

            using (XmlWriter writer = XmlWriter.Create(context.HttpContext.Response.Output)) {
                formatter.WriteTo(writer);
            }
        }
        private void BuildSyndicationFeed(object models, Stream stream, string contenttype)
        {
            List<SyndicationItem> items = new List<SyndicationItem>();
            var feed = new SyndicationFeed()
            {
                Title = new TextSyndicationContent("My Feed")
            };

            if (models is IEnumerable<Product>)
            {
                var enumerator = ((IEnumerable<Product>)models).GetEnumerator();
                while (enumerator.MoveNext())
                {
                    items.Add(BuildSyndicationItem(enumerator.Current));
                }
            }
            else
            {
                items.Add(BuildSyndicationItem((Product)models));
            }

            feed.Items = items;

            using (XmlWriter writer = XmlWriter.Create(stream))
            {
                if (string.Equals(contenttype, atom))
                {
                    Atom10FeedFormatter atomformatter = new Atom10FeedFormatter(feed);
                    atomformatter.WriteTo(writer);
                }
                else
                {
                    Rss20FeedFormatter rssformatter = new Rss20FeedFormatter(feed);
                    rssformatter.WriteTo(writer);
                }
            }
        }
        private void BuildSyndicationFeed(Feed model, Stream stream, string contenttype)
        {
            XmlQualifiedName n = new XmlQualifiedName("media", "http://www.w3.org/2000/xmlns/");

            List<SyndicationItem> items = new List<SyndicationItem>();
            var feed = new SyndicationFeed()
            {
                Title = new TextSyndicationContent(model.Title),
            };
            feed.Links.Add(new SyndicationLink(new Uri(model.Url)));
            feed.Authors.Add(new SyndicationPerson { Name = model.Host, Uri = String.Format("http://{0}", model.Host) });
            feed.Categories.Add(new SyndicationCategory { Name = model.Category });
            feed.AttributeExtensions.Add(n, medians);

            var enumerator = model.Items.GetEnumerator();
            while (enumerator.MoveNext())
            {
                items.Add(BuildSyndicationItem(enumerator.Current));
            }

            feed.Items = items;

            using (XmlWriter writer = XmlWriter.Create(stream))
            {
                if (string.Equals(contenttype, atom))
                {
                    Atom10FeedFormatter atomformatter = new Atom10FeedFormatter(feed);
                    atomformatter.WriteTo(writer);
                }
                else
                {
                    Rss20FeedFormatter rssformatter = new Rss20FeedFormatter(feed);
                    rssformatter.WriteTo(writer);
                }
            }
        }
示例#19
0
        public void ProcessRequest(HttpContext context)
        {
            if (!ProcessAuthorization(context))
            {
                AccessDenied(context);
                return;
            }

            var productId = ParseGuid(context.Request[ProductParam]);
            var product = WebItemManager.Instance[productId.GetValueOrDefault()];
            var products = WebItemManager.Instance.GetItemsAll<IProduct>().ToDictionary(p => p.GetSysName());
            var title = context.Request[TitleParam] ?? Resources.Resource.RecentActivity;
            var lastModified = GetLastModified(context);

            var feeds = FeedAggregateDataProvider.GetFeeds(new FeedApiFilter
            {
                Product = product != null ? product.GetSysName() : null,
                From = lastModified ?? DateTime.UtcNow.AddDays(-14),
                To = DateTime.UtcNow,
                OnlyNew = true
            })
                .OrderByDescending(f => f.CreateOn)
                .Take(100)
                .Select(f => f.ToFeedMin())
                .ToList();

            if (lastModified != null && feeds.Count == 0)
            {
                context.Response.StatusCode = (int)HttpStatusCode.NotModified;
                context.Response.StatusDescription = "Not Modified";
            }

            var feedItems = feeds.Select(f =>
            {
                var item = new SyndicationItem(
                    HttpUtility.HtmlDecode((products.ContainsKey(f.Product) ? products[f.Product].Name + ": " : string.Empty) + f.Title),
                    string.Empty,
                    new Uri(CommonLinkUtility.GetFullAbsolutePath(f.ItemUrl)),
                    f.Id,
                    new DateTimeOffset(TenantUtil.DateTimeToUtc(f.Date)))
                    {
                        PublishDate = f.Date,
                    };
                if (f.Author != null && f.Author.UserInfo != null)
                {
                    var u = f.Author.UserInfo;
                    item.Authors.Add(new SyndicationPerson(u.Email, u.DisplayUserName(false), CommonLinkUtility.GetUserProfile(u.ID)));
                }
                return item;
            });

            var lastUpdate = DateTime.UtcNow;
            if (feeds.Count > 0)
            {
                lastUpdate = feeds.Max(x => x.Date);
            }

            var feed = new SyndicationFeed(
                CoreContext.TenantManager.GetCurrentTenant().Name,
                string.Empty,
                new Uri(context.Request.GetUrlRewriter(), VirtualPathUtility.ToAbsolute("~/feed.aspx")),
                TenantProvider.CurrentTenantID.ToString(),
                new DateTimeOffset(lastUpdate),
                feedItems);

            var tenantSettings = SettingsManager.Instance.LoadSettings<TenantInfoSettings>(TenantProvider.CurrentTenantID);
            var url = tenantSettings.GetAbsoluteCompanyLogoPath();
            if (!string.IsNullOrEmpty(url))
            {
                feed.ImageUrl = new Uri(CommonLinkUtility.GetFullAbsolutePath(url));
            }


            var rssFormatter = new Atom10FeedFormatter(feed);
            var settings = new XmlWriterSettings
            {
                CheckCharacters = false,
                ConformanceLevel = ConformanceLevel.Document,
                Encoding = Encoding.UTF8,
                Indent = true,
            };
            using (var writer = XmlWriter.Create(context.Response.Output, settings))
            {
                rssFormatter.WriteTo(writer);
            }
            context.Response.Charset = Encoding.UTF8.WebName;
            context.Response.ContentType = "application/atom+xml";
            context.Response.AddHeader("ETag", DateTime.UtcNow.ToString("yyyyMMddHHmmss"));
            context.Response.AddHeader("Last-Modified", DateTime.UtcNow.ToString("R"));
        }
示例#20
0
        /// <summary>
        /// The page_ load.
        /// </summary>
        /// <param name="sender">
        /// The sender.
        /// </param>
        /// <param name="e">
        /// The e.
        /// </param>
        protected void Page_Load([NotNull] object sender, [NotNull] EventArgs e)
        {
            // Put user code to initialize the page here 
            if (!(this.Get<YafBoardSettings>().ShowRSSLink || this.Get<YafBoardSettings>().ShowAtomLink))
            {
                YafBuildLink.RedirectInfoPage(InfoMessage.AccessDenied);
            }

            // Atom feed as variable
            bool atomFeedByVar = this.Request.QueryString.GetFirstOrDefault("ft")
                                 == YafSyndicationFormats.Atom.ToInt().ToString();

            YafSyndicationFeed feed = null;

            // var syndicationItems = new List<SyndicationItem>();
            string lastPostIcon = BaseUrlBuilder.BaseUrl
                                  + this.PageContext.CurrentForumPage.GetThemeContents("ICONS", "ICON_NEWEST");
            string lastPostName = this.GetText("DEFAULT", "GO_LAST_POST");

            YafRssFeeds feedType;

            try
            {
                feedType = this.Get<HttpRequestBase>().QueryString.GetFirstOrDefault("pg").ToEnum<YafRssFeeds>(true);
            }
            catch
            {
                // default to Forum Feed.
                feedType = YafRssFeeds.Forum;
            }

            switch (feedType)
            {
                    // Latest posts feed
                case YafRssFeeds.LatestPosts:
                    if (
                        !(this.Get<YafBoardSettings>().ShowActiveDiscussions
                          && this.Get<IPermissions>().Check(this.Get<YafBoardSettings>().PostLatestFeedAccess)))
                    {
                        YafBuildLink.AccessDenied();
                    }

                    this.GetPostLatestFeed(ref feed, feedType, atomFeedByVar, lastPostIcon, lastPostName);
                    break;

                    // Latest Announcements feed
                case YafRssFeeds.LatestAnnouncements:
                    if (!this.Get<IPermissions>().Check(this.Get<YafBoardSettings>().ForumFeedAccess))
                    {
                        YafBuildLink.AccessDenied();
                    }

                    this.GetLatestAnnouncementsFeed(ref feed, feedType, atomFeedByVar);
                    break;

                    // Posts Feed
                case YafRssFeeds.Posts:
                    if (
                        !(this.PageContext.ForumReadAccess
                          && this.Get<IPermissions>().Check(this.Get<YafBoardSettings>().PostsFeedAccess)))
                    {
                        YafBuildLink.AccessDenied();
                    }

                    if (this.Get<HttpRequestBase>().QueryString.GetFirstOrDefault("t") != null)
                    {
                        int topicId;
                        if (int.TryParse(this.Get<HttpRequestBase>().QueryString.GetFirstOrDefault("t"), out topicId))
                        {
                            this.GetPostsFeed(ref feed, feedType, atomFeedByVar, topicId);
                        }
                    }

                    break;

                    // Forum Feed
                case YafRssFeeds.Forum:
                    if (!this.Get<IPermissions>().Check(this.Get<YafBoardSettings>().ForumFeedAccess))
                    {
                        YafBuildLink.AccessDenied();
                    }

                    object categoryId = null;

                    if (this.Get<HttpRequestBase>().QueryString.GetFirstOrDefault("c") != null)
                    {
                        int icategoryId;
                        if (int.TryParse(
                            this.Get<HttpRequestBase>().QueryString.GetFirstOrDefault("c"), out icategoryId))
                        {
                            categoryId = icategoryId;
                        }
                    }

                    this.GetForumFeed(ref feed, feedType, atomFeedByVar, categoryId);
                    break;

                    // Topics Feed
                case YafRssFeeds.Topics:
                    if (
                        !(this.PageContext.ForumReadAccess
                          && this.Get<IPermissions>().Check(this.Get<YafBoardSettings>().TopicsFeedAccess)))
                    {
                        YafBuildLink.AccessDenied();
                    }

                    if (this.Get<HttpRequestBase>().QueryString.GetFirstOrDefault("f") != null)
                    {
                        int forumId;
                        if (int.TryParse(this.Get<HttpRequestBase>().QueryString.GetFirstOrDefault("f"), out forumId))
                        {
                            this.GetTopicsFeed(ref feed, feedType, atomFeedByVar, lastPostIcon, lastPostName, forumId);
                        }
                    }

                    break;

                    // Active Topics
                case YafRssFeeds.Active:
                    if (!this.Get<IPermissions>().Check(this.Get<YafBoardSettings>().ActiveTopicFeedAccess))
                    {
                        YafBuildLink.AccessDenied();
                    }

                    int categoryActiveIntId;
                    object categoryActiveId = null;
                    if (this.Get<HttpRequestBase>().QueryString.GetFirstOrDefault("f") != null
                        &&
                        int.TryParse(
                            this.Get<HttpRequestBase>().QueryString.GetFirstOrDefault("f"), out categoryActiveIntId))
                    {
                        categoryActiveId = categoryActiveIntId;
                    }

                    this.GetActiveFeed(ref feed, feedType, atomFeedByVar, lastPostIcon, lastPostName, categoryActiveId);

                    break;
                case YafRssFeeds.Favorite:
                    if (!this.Get<IPermissions>().Check(this.Get<YafBoardSettings>().FavoriteTopicFeedAccess))
                    {
                        YafBuildLink.AccessDenied();
                    }

                    int categoryFavIntId;
                    object categoryFavId = null;
                    if (this.Get<HttpRequestBase>().QueryString.GetFirstOrDefault("f") != null
                        &&
                        int.TryParse(
                            this.Get<HttpRequestBase>().QueryString.GetFirstOrDefault("f"), out categoryFavIntId))
                    {
                        categoryFavId = categoryFavIntId;
                    }

                    this.GetFavoriteFeed(ref feed, feedType, atomFeedByVar, lastPostIcon, lastPostName, categoryFavId);
                    break;
                default:
                    YafBuildLink.AccessDenied();
                    break;
            }

            // update the feed with the item list... 
            // the list should be added after all other feed properties are set
            if (feed != null)
            {
                var writer = new XmlTextWriter(this.Response.OutputStream, Encoding.UTF8);
                writer.WriteStartDocument();

                // write the feed to the response writer);
                if (!atomFeedByVar)
                {
                    var rssFormatter = new Rss20FeedFormatter(feed);
                    rssFormatter.WriteTo(writer);
                    this.Response.ContentType = "application/rss+xml";
                }
                else
                {
                    var atomFormatter = new Atom10FeedFormatter(feed);
                    atomFormatter.WriteTo(writer);

                    this.Response.ContentType = "application/atom+xml";
                }

                writer.WriteEndDocument();
                writer.Close();

                this.Response.ContentEncoding = Encoding.UTF8;
                this.Response.Cache.SetCacheability(HttpCacheability.Public);

                this.Response.End();
            }
            else
            {
                YafBuildLink.RedirectInfoPage(InfoMessage.AccessDenied);
            }
        }
示例#21
0
        private Action<Stream> GetXmlContents(IEnumerable<Post> model)
        {
            var items = new List<SyndicationItem>();

            foreach (var post in model)
            {
                // Replace all relative urls with full urls.
                var newHtml = Regex.Replace(post.Content, UrlRegex, m => siteUrl.TrimEnd('/') + "/" + m.Value.TrimStart('/'));

                var item = new SyndicationItem(
                    post.Title,
                    newHtml,
                    new Uri(siteUrl + post.Url)
                    )
                {
                    Id = siteUrl + post.Url,
                    LastUpdatedTime = post.Date.ToUniversalTime(),
                    PublishDate = post.Date.ToUniversalTime(),
                    Content = new TextSyndicationContent(post.Content, TextSyndicationContentKind.Html),
                    Summary = new TextSyndicationContent(post.ContentExcerpt, TextSyndicationContentKind.Html),
                };

                items.Add(item);
            }

            var feed = new SyndicationFeed(
                AtomTitle,
                AtomTitle, /* Using Title also as Description */
                new Uri(siteUrl + "/" + feedfileName),
                items)
                {
                    Id = siteUrl + "/",
                    LastUpdatedTime = new DateTimeOffset(DateTime.Now),
                    Generator = "Sandra.Snow Atom Generator"
                };
            feed.Authors.Add(new SyndicationPerson(authorEmail, author, siteUrl));

            var link = new SyndicationLink(new Uri(siteUrl + "/" + feedfileName))
            {
                RelationshipType = "self",
                MediaType = "text/html",
                Title = AtomTitle
            };
            feed.Links.Add(link);


            var formatter = new Atom10FeedFormatter(feed);

            return stream =>
            {
                var encoding = new UTF8Encoding(false);
                var streamWrapper = new UnclosableStreamWrapper(stream);

                using (var writer = new XmlTextWriter(streamWrapper, encoding))
                {
                    formatter.WriteTo(writer);
                }
            };
        }
        private void WriteAtomFeed(IPublicationFeed feed, Stream writeStream)
        {
            var formatter = new Atom10FeedFormatter(feed.Syndicate());

            using (var writer = XmlWriter.Create(writeStream))
            {
                formatter.WriteTo(writer);
            }
        }
示例#23
0
        public static void PublishFeed()
        {
            string baseUrl = "http://dealschain.com";
            SyndicationFeed feed = new SyndicationFeed();
            feed.Id = "http://dealschain.com";

            // set some properties on the feed
            feed.Title = new TextSyndicationContent("Feed Research");
            feed.Description = new TextSyndicationContent("Example Feed");
            feed.Copyright = new TextSyndicationContent("Sted");
            feed.LastUpdatedTime = new DateTimeOffset(DateTime.Now);

            // since you are writing your own custom feed generator, you get to
            // name it!  Although this is not required.
            feed.Generator = "Deals Chain";

            // Add the URL that will link to your published feed when it's done
            SyndicationLink link = new SyndicationLink(new Uri("http://dealschain.com" + "Feeds/myfeed.xml"));
            link.RelationshipType = "self";
            link.MediaType = "text/html";
            link.Title = "Test Feed";
            feed.Links.Add(link);

            // Add your site link
            link = new SyndicationLink(new Uri(baseUrl));
            link.MediaType = "text/html";
            link.Title = "Deals Chain";
            feed.Links.Add(link);

            List<SyndicationItem> items = new List<SyndicationItem>();

            int maxItems = 3;
            for (int i = 0; i < maxItems; i++)
            {

                // create new entry for feed
                SyndicationItem item = new SyndicationItem();

                // set the entry id to the URL for the item
                string url = "http://google.com";
                item.Id = url;

                // Add the URL for the item as a link
                link = new SyndicationLink(new Uri(url));
                item.Links.Add(link);

                // Fill some properties for the item
                item.Title = new TextSyndicationContent("This is a tile");
                item.LastUpdatedTime = DateTime.Now;
                item.PublishDate = DateTime.Now;

                // Fill the item content
                string html = "<b>Hi There<b/>"; // TODO: create the GetFeedEntryHtml method
                TextSyndicationContent content
                     = new TextSyndicationContent(html, TextSyndicationContentKind.Html);
                item.Content = content;

                // Finally add this item to the item collection
                items.Add(item);

            }

            feed.Items = items;

            string mainFile = HttpContext.Current.Server.MapPath("~/Feeds/TestFeed.xml");
            using (FileStream fs = new FileStream(mainFile, FileMode.OpenOrCreate))
            {
                using (StreamWriter w = new StreamWriter(fs, Encoding.UTF8))
                {
                    XmlWriterSettings xs = new XmlWriterSettings();
                    xs.Indent = true;
                    using (XmlWriter xw = XmlWriter.Create(w, xs))
                    {
                        xw.WriteStartDocument();
                        Atom10FeedFormatter formatter = new Atom10FeedFormatter(feed);
                        //Rss20FeedFormatter formatter = new Rss20FeedFormatter(feed);
                        formatter.WriteTo(xw);
                        xw.Close();
                    }
                }
            }
        }
        /// <summary>
        /// Prints the rules to an XML file called rules.xml in the current dir. 
        /// This was a real pain to get working correctly.
        /// </summary>
        /// <param name="rules"></param>
        public static void PrintXML(List<MyRule> rules, string filename)
        {
            SyndicationFeed feed = new SyndicationFeed();
            XmlQualifiedName key = new XmlQualifiedName("apps", "http://www.w3.org/2000/xmlns/");
            String googleNs = "http://schemas.google.com/apps/2006";
            feed.AttributeExtensions.Add(key, googleNs);

            List<SyndicationItem> feedItems = new List<SyndicationItem>();

            foreach (MyRule r in rules)
            {
                SyndicationItem atom = new SyndicationItem();
                atom.Title = new TextSyndicationContent(r.FromAddress, TextSyndicationContentKind.Plaintext);
                atom.Categories.Add(new SyndicationCategory("filter"));
                atom.Content = new TextSyndicationContent(String.Empty);

                //atom.ElementExtensions.Add(new SyndicationElementExtension("property", googleNs, ""));
                XName n = XName.Get("property", googleNs);

                // conditions
                bool conditionSet = false;
                if (!String.IsNullOrEmpty(r.FromAddress))
                {
                    XElement el1a = new XElement(n);
                    XAttribute at1a = new XAttribute("name", "from");
                    el1a.Add(at1a);
                    XAttribute at1b = new XAttribute("value", r.FromAddress);
                    el1a.Add(at1b);
                    atom.ElementExtensions.Add(el1a);

                    conditionSet = true;
                }

                if (!String.IsNullOrEmpty(r.Subject))
                {
                    XElement el4a = new XElement(n);
                    XAttribute at4a = new XAttribute("name", "subject");
                    el4a.Add(at4a);
                    XAttribute at4b = new XAttribute("value", r.Subject);
                    el4a.Add(at4b);
                    atom.ElementExtensions.Add(el4a);

                    conditionSet = true;
                }

                if (!String.IsNullOrEmpty(r.HasTheWord))
                {
                    XElement el4a = new XElement(n);
                    XAttribute at4a = new XAttribute("name", "hasTheWord");
                    el4a.Add(at4a);
                    XAttribute at4b = new XAttribute("value", r.HasTheWord);
                    el4a.Add(at4b);
                    atom.ElementExtensions.Add(el4a);

                    conditionSet = true;
                }

                // actions - only apply if a condition has been set
                if (conditionSet)
                {
                    if (!String.IsNullOrEmpty(r.Label))
                    {
                        XElement el2a = new XElement(n);
                        XAttribute at2a = new XAttribute("name", "label");
                        el2a.Add(at2a);
                        XAttribute at2b = new XAttribute("value", r.Label);
                        el2a.Add(at2b);
                        atom.ElementExtensions.Add(el2a);
                    }

                    if (r.ShouldArchive)
                    {
                        XElement el3a = new XElement(n);
                        XAttribute at3a = new XAttribute("name", "shouldArchive");
                        el3a.Add(at3a);
                        XAttribute at3b = new XAttribute("value", r.ShouldArchive.ToString());
                        el3a.Add(at3b);
                        atom.ElementExtensions.Add(el3a);
                    }

                    feedItems.Add(atom);
                }
            }

            feed.Items = feedItems;

            StreamWriter sw = new StreamWriter(filename);

            XmlWriterSettings settings = new XmlWriterSettings();
            settings.Indent = true;
            settings.IndentChars = "\t";

            XmlWriter xw = XmlWriter.Create(sw, settings);

            Atom10FeedFormatter atomFormatter = new Atom10FeedFormatter(feed);
            atomFormatter.WriteTo(xw);

            xw.Flush();
            xw.Close();
        }
示例#25
0
        /// <summary>
        /// Handles the Load event of the Page control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
        protected void Page_Load(object sender, EventArgs e)
        {
            var channelId = 0;
            // Determine the maximum number of items to show in the feed

            if (Request.QueryString["pid"] != null)
                _projectId = Convert.ToInt32(Request.Params["pid"]);

            //get feed id
            if (Request.QueryString["channel"] != null)
                channelId = Convert.ToInt32(Request.Params["channel"]);

            if (!User.Identity.IsAuthenticated && _projectId == 0)
            {
                throw new HttpException(403, "Access Denied");

            }

            if (_projectId != 0)
            {
                //Security Checks
                if (!User.Identity.IsAuthenticated &&
                    ProjectManager.GetById(_projectId).AccessType == ProjectAccessType.Private)
                {
                    throw new HttpException(403, "Access Denied");
                }

                if (User.Identity.IsAuthenticated &&
                    ProjectManager.GetById(_projectId).AccessType == ProjectAccessType.Private &&
                    !ProjectManager.IsUserProjectMember(User.Identity.Name, _projectId))
                {
                    throw new HttpException(403, "Access Denied");
                }
            }


            // Determine whether we're outputting an Atom or RSS feed
            var outputRss = (Request.QueryString["Type"] == "RSS");
            var outputAtom = !outputRss;

            // Output the appropriate ContentType
            Response.ContentType = outputRss ? "application/rss+xml" : "application/atom+xml";

            // Create the feed and specify the feed's attributes
            var myFeed = new SyndicationFeed();
            myFeed.Links.Add(SyndicationLink.CreateAlternateLink(new Uri(GetFullyQualifiedUrl("~/Default.aspx"))));
            myFeed.Links.Add(SyndicationLink.CreateSelfLink(new Uri(GetFullyQualifiedUrl(Request.RawUrl))));
            myFeed.Language = "en-us";

            switch (channelId)
            {
                case 1:
                    MilestoneFeed(ref myFeed);
                    break;
                case 2:
                    CategoryFeed(ref myFeed);
                    break;
                case 3:
                    StatusFeed(ref myFeed);
                    break;
                case 4:
                    PriorityFeed(ref myFeed);
                    break;
                case 5:
                    TypeFeed(ref myFeed);
                    break;
                case 6:
                    AssigneeFeed(ref myFeed);
                    break;
                case 7:
                    FilteredIssuesFeed(ref myFeed);
                    break;
                case 8:
                    RelevantFeed(ref myFeed);
                    break;
                case 9:
                    AssignedFeed(ref myFeed);
                    break;
                case 10:
                    OwnedFeed(ref myFeed);
                    break;
                case 11:
                    CreatedFeed(ref myFeed);
                    break;
                case 12:
                    AllIssuesFeed(ref myFeed);
                    break;
                case 13:
                    QueryFeed(ref myFeed);
                    break;
                case 14: 
                    OpenIssueFeed(ref myFeed); 
                    break;
                case 15: 
                    MonitoredFeed(ref myFeed); 
                    break;
                case 16:
                    ClosedFeed(ref myFeed);
                    break;
              
         
            }

            // Return the feed's XML content as the response
            var outputSettings = new XmlWriterSettings {Indent = true};
            //(Uncomment for readability during testing)
            var feedWriter = XmlWriter.Create(Response.OutputStream, outputSettings);

            if (outputAtom)
            {
                // Use Atom 1.0        
                var atomFormatter = new Atom10FeedFormatter(myFeed);
                atomFormatter.WriteTo(feedWriter);
            }
            else
            {
                // Emit RSS 2.0
                var rssFormatter = new Rss20FeedFormatter(myFeed);
                rssFormatter.WriteTo(feedWriter);
            }

            feedWriter.Close();
        }
        private void BuildSyndicationFeed(IFeed feed, Stream stream, String contenttype)
        {
            var atomFeed = new SyndicationFeed()
            {
                Title = new TextSyndicationContent(feed.Link.Title),
                Id = feed.Link.Href,
                LastUpdatedTime = new DateTimeOffset(DateTime.UtcNow)
            };

            var feedUri = new Uri(feed.Link.Href);
            atomFeed.Links.Add(
            new SyndicationLink
            {
                Title = feed.Link.Title,
                Uri = feedUri,
                RelationshipType = feed.Link.Rel,
                MediaType = ATOM_CONTENT_TYPE
            });

            // Add parent, related, tag links to AtomFeed
            var navigationLinks = new List<LinkItem>();

           // if (feed.Parent != null) { navigationLinks.Add(feed.Parent); }
           // if (feed.Related != null) { navigationLinks.AddRange(feed.Related); }
           // if (feed.Tags != null) { navigationLinks.AddRange(feed.Tags); }
          //  if (feed.Children != null) { navigationLinks.AddRange(feed.Children); }
          //  if (feed.Static != null) { navigationLinks.AddRange(feed.Static); }
            
            // Add pagination information if exist
            if (feed is IPaginatedFeed)
            {
                var paginatedFeed = feed as IPaginatedFeed;
                if (paginatedFeed.FirstLink != null) { navigationLinks.Add(paginatedFeed.FirstLink); }
                if (paginatedFeed.LastLink != null) { navigationLinks.Add(paginatedFeed.LastLink); }
                if (paginatedFeed.NextLink != null) { navigationLinks.Add(paginatedFeed.NextLink); }
                if (paginatedFeed.PreviousLink != null) { navigationLinks.Add(paginatedFeed.PreviousLink); }
            }
            
            foreach (var link in navigationLinks)
            {
                atomFeed.Links.Add(
                new SyndicationLink
                {
                    Title = link.Title,
                    Uri = new Uri(link.Href),
                    RelationshipType = link.Rel,
                    MediaType = ATOM_CONTENT_TYPE
                });
            }
            
            var items = new List<SyndicationItem>();
            if (feed.Entries is IEnumerable)
            {
                foreach (var item in feed.Entries)
                {
                    var syndicationItem = _switchOnType[item.Content.GetType()](item.Content, item.Link, null);
                    items.Add(syndicationItem);
                }
            }
            else
            {
                var syndicationItem = _switchOnType[feed.Entries.GetType()](feed.Entries, feed.Link, null);
                items.Add(syndicationItem);
            }
            atomFeed.Items = items;

            using (var writer = XmlWriter.Create(stream))
            {
                Atom10FeedFormatter atomformatter = new Atom10FeedFormatter(atomFeed);
                atomformatter.WriteTo(writer);
            }
        }
        /// <summary>
        /// Returns and rss or atom feed 
        /// </summary>
        /// <param name="instance"></param>
        /// <returns></returns>
        protected internal ActionResult GetFeed(object instance)
        {
            try
            {
                string title = "CodePaste.NET";
                string action = RouteData.Values["listAction"] as string;
                if (string.IsNullOrEmpty(action))
                    action = RouteData.Values["Action"] as string ?? string.Empty;
                action = action.ToLower();

                if (action == "recent")
                    title = "CodePaste.NET Recent Snippets";
                else if (action == "mysnippets")
                    title = "CodePaste.NET - My Snippets";

                SyndicationFeed feed = new SyndicationFeed(title, "Paste and Link .NET Code", new Uri(Request.Url.AbsoluteUri));

                feed.BaseUri = new Uri("http://codepaste.net/recent");
                feed.LastUpdatedTime = DateTime.Now;           

                List<SyndicationItem> feedItems = new List<SyndicationItem>();
                foreach (CodeSnippetListItem item in (IEnumerable)instance)
                {

                    // remove lower ascii characters (< 32 exclude 9,10,13)
                    string code = Regex.Replace(item.Code, @"[\u0000-\u0008,\u000B,\u000C,\u000E-\u001F]", "");

                    SyndicationItem rssItem = new SyndicationItem()
                    {
                        Id = item.Id,
                        Title = SyndicationContent.CreateHtmlContent(item.Title),
                        Content = SyndicationContent.CreateHtmlContent(
                            //"<link href=\"" + WebUtils.ResolveServerUrl("~/css/csharp.css") + "\" rel=\"stylesheet\" type=\"text/css\">\r\n <style type='text/css'>.kwrd { color: blue; font-weight: bold }</style>\r\n" +            
                                    "<pre>\r\n" +
                                    HtmlUtils.HtmlEncode(code) +
                            //snippet.GetFormattedCode(item.Code, item.Language, item.ShowLineNumbers) +
                                    "</pre>"),
                        PublishDate = item.Entered,
                    };

                    if (!string.IsNullOrEmpty(item.Author))
                        rssItem.Authors.Add(new SyndicationPerson("", item.Author, null));

                    rssItem.Links.Add(new SyndicationLink(new Uri(WebUtils.GetFullApplicationPath() + "/" + item.Id),
                                                            "alternate", item.Title, "text/html", 1000));

                    feedItems.Add(rssItem);
                }

                feed.Items = feedItems;

                MemoryStream ms = new MemoryStream();
                var settings = new XmlWriterSettings()
                {
                    CheckCharacters = false                 
                };
                XmlWriter writer = XmlWriter.Create(ms,settings);
                if (Format == "rss")
                {
                    Rss20FeedFormatter rssFormatter = new Rss20FeedFormatter(feed);
                    rssFormatter.WriteTo(writer);
                }
                else
                {
                    Atom10FeedFormatter atomFormatter = new Atom10FeedFormatter(feed);
                    atomFormatter.WriteTo(writer);
                }
                writer.Flush();

                ms.Position = 0;

                return Content(Encoding.UTF8.GetString(ms.ToArray()), "application/xml");
            }
            catch (Exception ex)
            {
                Response.Write(HtmlUtils.DisplayMemo("Error: " +  ex.GetBaseException().Message + "\r\n" + ex.StackTrace));
                Response.End();
                return null;
                
            }

            return null;
        }
        /// <summary>
        /// Builds the syndication feed.
        /// </summary>
        /// <param name="models">Object or list of objects to be serialized.</param>
        /// <param name="stream">Output stream</param>
        /// <param name="contentType">Determines if the output should be formatted as Atom or RSS.</param>
        public void BuildSyndicationFeed(object models, Stream stream, string contentType)
        {
            if (null == models)
            {
                Trace.WriteLine("No Models supplied. Feed is empty.");
                return;
            }
            if (null == stream)
                throw new ArgumentNullException("stream");

            List<SyndicationItem> items = new List<SyndicationItem>();
            var feed = new SyndicationFeed
            {
                Title = new TextSyndicationContent("Reports")
            };
            if (models is IEnumerable<ISyndicationItemSerializable>)
            {
                var enumerator = ((IEnumerable<ISyndicationItemSerializable>)models).GetEnumerator();
                while (enumerator.MoveNext())
                {
                    items.Add(enumerator.Current.BuildSyndicationItem());
                }
            }
            else if (models is ISyndicationItemSerializable)
            {
                items.Add(((ISyndicationItemSerializable)models).BuildSyndicationItem());
            }
            var xModels = models as XElement;
            if (models != null)
            {
                foreach(var child in xModels.Elements() )
                {
                    var item = new SyndicationItem();
                    foreach (var node in child.Elements())
                    {
                        item.ElementExtensions.Add(node);
                    }
                    items.Add(item);
                    //items.Add(new SyndicationItem { Content = new TextSyndicationContent( child.ToString()), Title = new TextSyndicationContent( child.Elements().First().Value)});
                }
            }
            feed.Items = items;

            using (XmlWriter writer = XmlWriter.Create(stream))
            {
                if (string.Equals(contentType, atom))
                {
                    Atom10FeedFormatter atomFormatter = new Atom10FeedFormatter(feed);
                    atomFormatter.WriteTo(writer);
                }
                else
                {
                    Rss20FeedFormatter rssFormatter = new Rss20FeedFormatter(feed);
                    rssFormatter.WriteTo(writer);
                }
            }
        }
示例#29
0
        /// <summary>
        /// Builds the syndication feed from the specified <paramref name="album" /> and write it to the <paramref name="stream" />.
        /// </summary>
        /// <param name="album">The album from which to build the syndication feed.</param>
        /// <param name="stream">The <see cref="T:System.IO.Stream" /> to which to write.</param>
        /// <param name="contentType">Type of the requested content. Examples: "application/atom+xml", "application/rss+xml"</param>
        /// <param name="moBuilderOptions">The options that direct the creation of HTML and URLs for a media object.</param>
        private static void BuildSyndicationFeed(IAlbum album, Stream stream, string contentType, MediaObjectHtmlBuilderOptions moBuilderOptions)
        {
            var fb = new AlbumSyndicationFeedBuilder(album, moBuilderOptions);

            var feed = fb.Generate();

            using (var writer = XmlWriter.Create(stream))
            {
                if (String.Equals(contentType, AtomMediaType, StringComparison.InvariantCultureIgnoreCase))
                {
                    var atomFormatter = new Atom10FeedFormatter(feed);
                    atomFormatter.WriteTo(writer);
                }
                else
                {
                    var rssFormatter = new Rss20FeedFormatter(feed);
                    rssFormatter.WriteTo(writer);
                }
            }
        }
示例#30
0
 private static void WriteToAtomFormatter(ControllerContext context, SyndicationFeed feed)
 {
     var atomFormatter = new Atom10FeedFormatter(feed);
     using (var writer = XmlWriter.Create(context.HttpContext.Response.Output))
     {
         atomFormatter.WriteTo(writer);
     }
 }