opml tweaks & fixes
This commit is contained in:
parent
62e2ca4c16
commit
391ce61362
5 changed files with 42 additions and 50 deletions
|
|
@ -8,8 +8,8 @@ import (
|
|||
|
||||
type Folder struct {
|
||||
Title string
|
||||
Folders []*Folder
|
||||
Feeds []*Feed
|
||||
Folders []Folder
|
||||
Feeds []Feed
|
||||
}
|
||||
|
||||
type Feed struct {
|
||||
|
|
@ -18,16 +18,8 @@ type Feed struct {
|
|||
SiteUrl string
|
||||
}
|
||||
|
||||
func NewFolder(title string) *Folder {
|
||||
return &Folder{
|
||||
Title: title,
|
||||
Folders: make([]*Folder, 0),
|
||||
Feeds: make([]*Feed, 0),
|
||||
}
|
||||
}
|
||||
|
||||
func (f *Folder) AllFeeds() []*Feed {
|
||||
feeds := make([]*Feed, 0)
|
||||
func (f Folder) AllFeeds() []Feed {
|
||||
feeds := make([]Feed, 0)
|
||||
feeds = append(feeds, f.Feeds...)
|
||||
for _, subfolder := range f.Folders {
|
||||
feeds = append(feeds, subfolder.AllFeeds()...)
|
||||
|
|
@ -39,7 +31,7 @@ var e = html.EscapeString
|
|||
var indent = " "
|
||||
var nl = "\n"
|
||||
|
||||
func (f *Folder) outline(level int) string {
|
||||
func (f Folder) outline(level int) string {
|
||||
builder := strings.Builder{}
|
||||
prefix := strings.Repeat(indent, level)
|
||||
|
||||
|
|
@ -58,14 +50,14 @@ func (f *Folder) outline(level int) string {
|
|||
return builder.String()
|
||||
}
|
||||
|
||||
func (f *Feed) outline(level int) string {
|
||||
func (f Feed) outline(level int) string {
|
||||
return strings.Repeat(indent, level) + fmt.Sprintf(
|
||||
`<outline type="rss" text="%s" xmlUrl="%s" htmlUrl="%s"/>` + nl,
|
||||
e(f.Title), e(f.FeedUrl), e(f.SiteUrl),
|
||||
)
|
||||
}
|
||||
|
||||
func (f *Folder) OPML() string {
|
||||
func (f Folder) OPML() string {
|
||||
builder := strings.Builder{}
|
||||
builder.WriteString(`<?xml version="1.0" encoding="UTF-8"?>` + nl)
|
||||
builder.WriteString(`<opml version="1.1">` + nl)
|
||||
|
|
|
|||
|
|
@ -7,31 +7,31 @@ import (
|
|||
|
||||
|
||||
func TestOPML(t *testing.T) {
|
||||
have := (&Folder{
|
||||
have := (Folder{
|
||||
Title: "",
|
||||
Feeds: []*Feed{
|
||||
&Feed{
|
||||
Feeds: []Feed{
|
||||
Feed{
|
||||
Title: "title1",
|
||||
FeedUrl: "https://baz.com/feed.xml",
|
||||
SiteUrl: "https://baz.com/",
|
||||
},
|
||||
},
|
||||
Folders: []*Folder{
|
||||
&Folder{
|
||||
Folders: []Folder{
|
||||
Folder{
|
||||
Title: "sub",
|
||||
Feeds: []*Feed{
|
||||
&Feed{
|
||||
Feeds: []Feed{
|
||||
Feed{
|
||||
Title: "subtitle1",
|
||||
FeedUrl: "https://foo.com/feed.xml",
|
||||
SiteUrl: "https://foo.com/",
|
||||
},
|
||||
&Feed{
|
||||
Feed{
|
||||
Title: "&>",
|
||||
FeedUrl: "https://bar.com/feed.xml",
|
||||
SiteUrl: "https://bar.com/",
|
||||
},
|
||||
},
|
||||
Folders: []*Folder{},
|
||||
Folders: []Folder{},
|
||||
},
|
||||
},
|
||||
}).OPML()
|
||||
|
|
|
|||
|
|
@ -18,11 +18,11 @@ type outline struct {
|
|||
Outlines []outline `xml:"outline,omitempty"`
|
||||
}
|
||||
|
||||
func buildFolder(title string, outlines []outline) *Folder {
|
||||
folder := NewFolder(title)
|
||||
func buildFolder(title string, outlines []outline) Folder {
|
||||
folder := Folder{Title: title}
|
||||
for _, outline := range outlines {
|
||||
if outline.Type == "rss" {
|
||||
folder.Feeds = append(folder.Feeds, &Feed{
|
||||
folder.Feeds = append(folder.Feeds, Feed{
|
||||
Title: outline.Title,
|
||||
FeedUrl: outline.FeedUrl,
|
||||
SiteUrl: outline.SiteUrl,
|
||||
|
|
@ -35,7 +35,7 @@ func buildFolder(title string, outlines []outline) *Folder {
|
|||
return folder
|
||||
}
|
||||
|
||||
func Parse(r io.Reader) (*Folder, error) {
|
||||
func Parse(r io.Reader) (Folder, error) {
|
||||
val := new(opml)
|
||||
decoder := xml.NewDecoder(r)
|
||||
decoder.Entity = xml.HTMLEntity
|
||||
|
|
@ -43,7 +43,7 @@ func Parse(r io.Reader) (*Folder, error) {
|
|||
|
||||
err := decoder.Decode(&val)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return Folder{}, err
|
||||
}
|
||||
return buildFolder("", val.Outlines), nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,31 +24,30 @@ func TestParse(t *testing.T) {
|
|||
</body>
|
||||
</opml>
|
||||
`))
|
||||
want := &Folder{
|
||||
want := Folder{
|
||||
Title: "",
|
||||
Feeds: []*Feed{
|
||||
&Feed{
|
||||
Feeds: []Feed{
|
||||
Feed{
|
||||
Title: "title1",
|
||||
FeedUrl: "https://baz.com/feed.xml",
|
||||
SiteUrl: "https://baz.com/",
|
||||
},
|
||||
},
|
||||
Folders: []*Folder{
|
||||
&Folder{
|
||||
Folders: []Folder{
|
||||
Folder{
|
||||
Title: "sub",
|
||||
Feeds: []*Feed{
|
||||
&Feed{
|
||||
Feeds: []Feed{
|
||||
Feed{
|
||||
Title: "subtitle1",
|
||||
FeedUrl: "https://foo.com/feed.xml",
|
||||
SiteUrl: "https://foo.com/",
|
||||
},
|
||||
&Feed{
|
||||
Feed{
|
||||
Title: "&>",
|
||||
FeedUrl: "https://bar.com/feed.xml",
|
||||
SiteUrl: "https://bar.com/",
|
||||
},
|
||||
},
|
||||
Folders: []*Folder{},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue