diff options
| author | Adam Mathes <adam@adammathes.com> | 2026-02-14 08:58:38 -0800 |
|---|---|---|
| committer | Adam Mathes <adam@adammathes.com> | 2026-02-14 08:58:38 -0800 |
| commit | e3c379d069ffa9661561d25cdbf2f5894a2f8ee8 (patch) | |
| tree | 24d0e9f5610dd9c8f873c5b78e6bc1c88d32840a /internal/exporter/exporter.go | |
| parent | 4b06155fbde91a1bef6361ef36efb28789861928 (diff) | |
| download | neko-e3c379d069ffa9661561d25cdbf2f5894a2f8ee8.tar.gz neko-e3c379d069ffa9661561d25cdbf2f5894a2f8ee8.tar.bz2 neko-e3c379d069ffa9661561d25cdbf2f5894a2f8ee8.zip | |
Refactor: project structure, implement dependency injection, and align v2 UI with v1
Diffstat (limited to 'internal/exporter/exporter.go')
| -rw-r--r-- | internal/exporter/exporter.go | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/internal/exporter/exporter.go b/internal/exporter/exporter.go new file mode 100644 index 0000000..9172fec --- /dev/null +++ b/internal/exporter/exporter.go @@ -0,0 +1,61 @@ +package exporter + +import ( + "adammathes.com/neko/models/feed" + "bytes" + "encoding/json" + "encoding/xml" + "fmt" + "html/template" +) + +func ExportFeeds(format string) string { + feeds, err := feed.All() + if err != nil { + panic(err) + } + + s := "" + switch format { + case "text": + for _, f := range feeds { + s = s + fmt.Sprintf("%s\n", f.Url) + } + + case "opml": + s = s + fmt.Sprintf(`<opml version="2.0"><head><title>neko feeds</title></head><body>`) + s = s + fmt.Sprintf("\n") + for _, f := range feeds { + b, _ := xml.Marshal(f) + s = s + fmt.Sprintf("%s\n", string(b)) + } + s = s + fmt.Sprintf(`</body></opml>`) + + case "json": + js, _ := json.Marshal(feeds) + s = fmt.Sprintf("%s\n", js) + + case "html": + htmlTemplateString := `<html> +<head> +<title>feeds</title> +</head> +<body> +<ul> +{{ range . }} +<li><a href="{{.WebUrl}}">{{.Title}}</a> | <a href="{{.Url}}">xml</a></li> +{{ end }} +</ul> +</body> +</html>` + var bts bytes.Buffer + htmlTemplate, err := template.New("feeds").Parse(htmlTemplateString) + err = htmlTemplate.Execute(&bts, feeds) + if err != nil { + panic(err) + } + s = bts.String() + } + + return s +} |
