summaryrefslogtreecommitdiff
path: root/fetch/gemini.go
diff options
context:
space:
mode:
authornytpu <alex@nytpu.com>2021-03-17 08:43:19 -0600
committernytpu <alex@nytpu.com>2021-03-17 09:02:02 -0600
commitf9428c3e0eee710f9471044bb1068b3e4341f4f8 (patch)
tree77fcb310feb9119b15a5f38e525850e1eb6b5117 /fetch/gemini.go
parent09c1c4caabe206fb825575b04f9de932da2aa785 (diff)
add updateGeminiPage and refactor newGeminiPage to use updateGeminiPage.
Diffstat (limited to 'fetch/gemini.go')
-rw-r--r--fetch/gemini.go32
1 files changed, 22 insertions, 10 deletions
diff --git a/fetch/gemini.go b/fetch/gemini.go
index d32d093..eb06780 100644
--- a/fetch/gemini.go
+++ b/fetch/gemini.go
@@ -60,6 +60,7 @@ func newGeminiFeed(remoteURL *url.URL, title string) (*core.Feed, error) {
var feed core.Feed
feed.Title = title // will be set later if given title is ""
feed.Link = remoteURL
+ feed.FeedLink = remoteURL
text, err := gemini.ParseText(resp.Body)
if err != nil {
return nil, err
@@ -110,24 +111,35 @@ func newGeminiFeed(remoteURL *url.URL, title string) (*core.Feed, error) {
// newGeminiPage will create a new core.Page given a gemini url
func newGeminiPage(remoteURL *url.URL, title string) (*core.Page, error) {
- resp, err := fetchGemini(remoteURL)
+ var page core.Page
+ page.Title = title
+ page.Link = remoteURL
+
+ err := updateGeminiPage(&page)
if err != nil {
return nil, err
}
+ return &page, nil
+}
+
+// updateGeminiPage will check an existing core.Page for changes
+func updateGeminiPage(p *core.Page) error {
+ resp, err := fetchGemini(p.Link)
+ if err != nil {
+ return err
+ }
defer resp.Body.Close()
reader := io.LimitReader(resp.Body, 1073741824) // 1 GiB
- var page core.Page
- page.Title = title
- page.Link = remoteURL
- page.Updated = time.Now()
-
h := sha256.New()
if _, err := io.Copy(h, reader); err != nil {
- return nil, err
+ return err
}
- page.Hash = fmt.Sprintf("%x", h.Sum(nil))
-
- return &page, nil
+ newHash := fmt.Sprintf("%x", h.Sum(nil))
+ if newHash != p.Hash {
+ p.Hash = newHash
+ p.Updated = time.Now()
+ }
+ return nil
}