aboutsummaryrefslogtreecommitdiffstats
path: root/atom/atom.go
diff options
context:
space:
mode:
authorla-ninpre <aaoth@aaoth.xyz>2025-12-10 22:48:14 +0300
committerla-ninpre <aaoth@aaoth.xyz>2025-12-10 22:48:14 +0300
commitf3fcd25e29d1a8c4d355eb650091e2920def658e (patch)
tree7f537b44a47359e5437e67251b3a5d4de1bb642c /atom/atom.go
downloadhtml-journal-f3fcd25e29d1a8c4d355eb650091e2920def658e.tar.gz
html-journal-f3fcd25e29d1a8c4d355eb650091e2920def658e.zip
init
Diffstat (limited to 'atom/atom.go')
-rw-r--r--atom/atom.go96
1 files changed, 96 insertions, 0 deletions
diff --git a/atom/atom.go b/atom/atom.go
new file mode 100644
index 0000000..f0c49e8
--- /dev/null
+++ b/atom/atom.go
@@ -0,0 +1,96 @@
+// taken from https://git.sr.ht/~m15o/html-journal
+// Copyright 2022 m15o
+// Distributed under the terms of a BSD 3-Clause license, see LICENSE file.
+
+package atom
+
+import (
+ "encoding/xml"
+ "git.sr.ht/~m15o/htmlj"
+ "time"
+)
+
+type Feed struct {
+ XMLName xml.Name `xml:"http://www.w3.org/2005/Atom feed"`
+ Title string `xml:"title"`
+ ID string `xml:"id"`
+ Link []Link `xml:"link"`
+ Updated TimeStr `xml:"updated"`
+ Author *Person `xml:"author"`
+ Icon string `xml:"icon,omitempty"`
+ Logo string `xml:"logo,omitempty"`
+ Subtitle string `xml:"subtitle,omitempty"`
+ Entry []*Entry `xml:"entry"`
+}
+
+type Entry struct {
+ Title string `xml:"title"`
+ ID string `xml:"id"`
+ Link []Link `xml:"link"`
+ Published TimeStr `xml:"published"`
+ Updated TimeStr `xml:"updated"`
+ Author *Person `xml:"author"`
+ Summary *Text `xml:"summary"`
+ Content *Text `xml:"content"`
+}
+
+type Link struct {
+ Rel string `xml:"rel,attr,omitempty"`
+ Href string `xml:"href,attr"`
+ Type string `xml:"type,attr,omitempty"`
+ HrefLang string `xml:"hreflang,attr,omitempty"`
+ Title string `xml:"title,attr,omitempty"`
+ Length uint `xml:"length,attr,omitempty"`
+}
+
+type Person struct {
+ Name string `xml:"name"`
+ URI string `xml:"uri,omitempty"`
+ Email string `xml:"email,omitempty"`
+ InnerXML string `xml:",innerxml"`
+}
+
+type Text struct {
+ Type string `xml:"type,attr"`
+ Body string `xml:",chardata"`
+}
+
+type TimeStr string
+
+func Time(t time.Time) TimeStr {
+ return TimeStr(t.Format("2006-01-02T15:04:05-07:00"))
+}
+
+func FeedFromJournal(u string, j *htmlj.Journal) *Feed {
+ f := &Feed{
+ Title: j.Title,
+ ID: u,
+ Author: &Person{
+ Name: j.Title,
+ URI: u,
+ },
+ Updated: Time(j.Updated),
+ Link: []Link{
+ {
+ Rel: "alternate",
+ Href: u,
+ },
+ },
+ }
+
+ for i := 0; i < len(j.Entries); i++ {
+ p := j.Entries[i]
+ f.Entry = append(f.Entry, &Entry{
+ Title: p.Title,
+ ID: u + "#" + p.Title,
+ Published: Time(p.Published),
+ Updated: Time(p.Published),
+ Content: &Text{
+ Type: "html",
+ Body: p.Content,
+ },
+ })
+ }
+
+ return f
+}