Пример #1
0
        public ActionResult SyndicationLists()
        {
            var lists = this.RavenSession.Query<SyndicationList>()
                .ToList();
            var opml = new Opml();
            opml.Title = "Hobi Published Syndication List";
            opml.OwnerName = "hobieu";
            opml.Outlines.AddRange(lists.Select(x =>
            {
                var outline = new Outline();
                outline.Attributes["type"] = "link";
                outline.Attributes["text"] = x.Title;
                outline.Attributes["name"] = x.Name;
                outline.Attributes["url"] = Texts.FromUriHost(Request.Url) + "/s/" + x.Name;
                return outline;
            }));

            var xml = opml.ToXML();
            this.Compress();
            return Content(xml.ToString(), "text/xml");
        }
Пример #2
0
        public ActionResult TabbedRivers()
        {
            var rivers = this.RavenSession.Query<RiverWall>()
                .Where(x => x.Status == RiverWallStatus.Published || x.Status == RiverWallStatus.Draft).ToList();
            var opml = new Opml();
            opml.Title = "Hobi Published Wall List";
            opml.OwnerName = "hobieu";
            opml.Outlines.AddRange(rivers.Select(x =>
            {
                var outline = new Outline();
                outline.Attributes["type"] = "link";
                outline.Attributes["text"] = x.Title;
                outline.Attributes["name"] = x.Name;
                outline.Attributes["url"] = Texts.FromUriHost(Request.Url) + "/r/" + x.Name;
                outline.Attributes["opmlUrl"] = Texts.FromUriHost(Request.Url) + "/r/opml/" + x.Name;
                return outline;
            }));

            var xml = opml.ToXML();
            this.Compress();
            return Content(xml.ToString(), "text/xml");
        }
Пример #3
0
        public Opml GetFeedsOpml(List<BlogFeed> feeds, HttpRequestBase request)
        {
            if (Id.IsNullOrWhiteSpace())
                throw new ApplicationException("This blog must have an id before performing GetFeedsOpml operations");

            var opml = new Opml
            {
                Title = Title,
                DateCreated = DateCreated,
            };

            foreach (var i in feeds.Select(
                x =>
                {
                    var item = new Outline();
                    item.Attributes["text"] = x.Title;
                    item.Attributes["type"] = "rss";
                    item.Attributes["name"] = Texts.ConvertTitleToName(x.Title);
                    if (!string.IsNullOrWhiteSpace(x.Description))
                        item.Attributes["description"] = x.Description;
                    item.Attributes["htmlUrl"] = x.GetHtmlLink(request);
                    item.Attributes["xmlUrl"] = x.GetRssLink(request);

                    return item;
                }))
            {
                opml.Outlines.Add(i);
            }

            return opml;
        }
Пример #4
0
        public Result<None> LoadFromXML(string xml)
        {
            try
            {
                var elements = XElement.Parse(xml);
                var heads = elements.Element("head").Descendants();

                Func<string, string> selectString = (filter) =>
                    {
                        return heads.Where(x => x.Name == filter).Select(x => x.Value).FirstOrDefault();
                    };

                Func<string, int?> selectInt = (filter) =>
                {
                    return heads.Where(x => x.Name == filter).Select(x => Convert.ToInt32(x.Value)).FirstOrDefault();
                };

                Func<string, DateTime?> selectDate = (filter) =>
                {
                    return heads.Where(x => x.Name == filter).Select(x => Convert.ToDateTime(x.Value)).FirstOrDefault();
                };

                Func<string, Uri> selectUri = (filter) =>
                {
                    return heads.Where(x => x.Name == filter).Select(x => new Uri(x.Value)).FirstOrDefault();
                };

                Title = selectString("title");
                DateCreated = selectDate("dateCreated");
                DateModified = selectDate("dateModified");
                OwnerName = selectString("ownerName");
                OwnerEmail = selectString("ownerEmail");
                OwnerId = selectUri("ownerId");
                Docs = selectUri("docs");
                ExpansionState = selectString("expansionState");
                VertScrollState = selectInt("vertScrollState");
                WindowTop = selectInt("windowTop");
                WindowLeft = selectInt("windowLeft");
                WindowBottom = selectInt("windowBottom");
                WindowRight = selectInt("windowRight");

                var bodies = elements.Element("body").Elements();
                //todo: make it recursive
                foreach (var b in bodies)
                {
                    var o = new Outline();
                    Outlines.Add(o);
                    TraverseBody(b, o);
                }

                return Nothing.True(); //operation successful
            }
            catch (Exception ex)
            {
                return Nothing.False(ex);
            }
        }
Пример #5
0
 private void TraverseBody(XElement outline, Outline ot)
 {
     if (outline != null)
     {
         foreach (var att in outline.Attributes())
         {
             ot.Attributes[att.Name.ToString()] = att.Value;
         }
         foreach (var x in outline.Elements())
         {
             var o = new Outline();
             ot.Outlines.Add(o);
             TraverseBody(x, o);
         }
     }
 }
Пример #6
0
        private void AddRecursiveChild(XElement element, Outline o)
        {
            element.Add(from y in o.Attributes
                        select new XAttribute(y.Key, y.Value));

            foreach(var oo in o.Outlines)
            {
                XElement newOutline = new XElement("outline");

                element.Add(newOutline);
                AddRecursiveChild(newOutline, oo);
            }
        }
Пример #7
0
        public Opml ToOpml()
        {
            var opml = new Opml
            {
                Title = Title,
                OwnerName = OwnerName,
                OwnerEmail = OwnerEmail,
                DateCreated = DateCreated,
                DateModified = DateModified
            };

            foreach (var i in Items.Select(
                x =>
                {
                    var item = new Outline();
                    item.Attributes["text"] = x.Text;
                    item.Attributes["type"] = "rss";
                    if (!string.IsNullOrWhiteSpace(x.Name))
                        item.Attributes["name"] = x.Name;
                    if (!string.IsNullOrWhiteSpace(x.Description))
                        item.Attributes["description"] = x.Description;
                    if (x.HtmlUri != null)
                        item.Attributes["htmlUrl"] = x.HtmlUri.ToString();
                    if (x.XmlUri != null)
                        item.Attributes["xmlUrl"] = x.XmlUri.ToString();

                    return item;
                }))
            {
                opml.Outlines.Add(i);
            }

            return opml;
        }
Пример #8
0
        public Opml RenderToOpml()
        {
            var opml = new Opml();
            opml.DateCreated = DateTime.UtcNow;
            opml.DateModified = DateTime.UtcNow;
            opml.Title = "OPML Document with Id " + Id;
            opml.OwnerName = "temporary";
            opml.OwnerName = "*****@*****.**";

            foreach (var x in Body)
            {
                var o = new Outline();
                opml.Outlines.Add(o);

                TraverseOpml(x, o);
            }

            return opml;
        }
Пример #9
0
        void TraverseOpml(EditorOutline outline, Outline ot)
        {
            if (outline != null)
            {
                ot.Attributes.Add("text", outline.Data);
                foreach (var a in outline.Attr)
                {
                    ot.Attributes.Add(a.Key, a.Value);
                }

                foreach (var x in outline.Children)
                {
                    var o = new Outline();
                    ot.Outlines.Add(o);

                    TraverseOpml(x, o);
                }
            }
        }
Пример #10
0
        private void TraverseEditor(Outline outline, EditorOutline editorOutline)
        {
            if (outline != null)
            {
                foreach (var a in outline.Attributes)
                {
                    if (a.Key == "text")
                        editorOutline.Data = a.Value;
                    else
                        editorOutline.Attr.Add(a.Key, a.Value);

                    foreach (var x in outline.Outlines)
                    {
                        var o = new EditorOutline();
                        editorOutline.Children.Add(o);
                        TraverseEditor(x, o);
                    }
                }
            }
        }