implement atom/rss/json feeds over gopher.

TODO: write gophermap->gemtext mapper so the same gemini feed parser can
be used on both.
This commit is contained in:
nytpu
2021-03-18 15:08:24 -06:00
parent 8dfb63e640
commit ee43bf1084
+23 -2
View File
@@ -11,6 +11,7 @@ import (
"io"
"time"
"github.com/mmcdole/gofeed"
"github.com/prologic/go-gopher"
"golang.nytpu.com/comitium/core"
@@ -28,8 +29,28 @@ func fetchGopher(remote string) (*gopher.Response, error) {
// gopherFeed will fetch and insert a new core.Feed into a core.FullData given a
// gopher url (or update if it's preexisting)
func gopherFeed(data *core.FullData, remote string, title string) error {
// TODO
return fmt.Errorf("Feeds served over gopher are currently unsupported.")
resp, err := fetchGopher(remote)
if err != nil {
return err
}
defer resp.Body.Close()
if len(resp.Dir.Items) != 0 {
// TODO
return fmt.Errorf("Gemini-style feeds served over gopher are currently unsupported.")
}
reader := io.LimitReader(resp.Body, 1073741824) // 1 GiB
gofeed, err := gofeed.NewParser().Parse(reader)
if err != nil {
return err
}
feed, err := core.GofeedConvert(gofeed, title)
if err != nil {
return err
}
data.InsertFeed(feed, remote)
return nil
}
// gopherPage will fetch and insert a new core.Page into a core.FullData given a