Refactor fetch functions to use new FullData.Insert{Feed,Page} funcs

This commit is contained in:
nytpu
2021-03-18 10:33:58 -06:00
parent 0441fc9349
commit a3a427b9ee
4 changed files with 10 additions and 39 deletions
-27
View File
@@ -9,7 +9,6 @@ package fetch
import ( import (
"fmt" "fmt"
"net/url" "net/url"
"reflect"
"golang.nytpu.com/comitium/core" "golang.nytpu.com/comitium/core"
) )
@@ -43,29 +42,3 @@ func Page(data *core.FullData, remote *url.URL, title string) error {
return fmt.Errorf("Unsupported protocol '%s'", remote.Scheme) return fmt.Errorf("Unsupported protocol '%s'", remote.Scheme)
} }
} }
// InsertFeed will insert or update a core.Feed in a core.FullData
func InsertFeed(data *core.FullData, new *core.Feed, remote *url.URL) {
data.FeedsMu.Lock()
oldFeed, ok := data.Feeds[*remote]
if !ok || !reflect.DeepEqual(new, oldFeed) {
// Feeds are different, or there was never an old one
data.Feeds[*remote] = new
data.FeedsMu.Unlock()
} else {
data.FeedsMu.Unlock()
}
}
// InsertFeed will insert or update a core.Page in a core.FullData
func InsertPage(data *core.FullData, new *core.Page, remote *url.URL) {
data.PagesMu.Lock()
_, ok := data.Pages[*remote]
if !ok || data.Pages[*remote].Hash != new.Hash {
// pages are different, or there was never an old one
data.Pages[*remote] = new
data.PagesMu.Unlock()
} else {
data.PagesMu.Unlock()
}
}
+7 -9
View File
@@ -29,7 +29,7 @@ import (
// fetchGemini will make a request for a gemini resource // fetchGemini will make a request for a gemini resource
func fetchGemini(remote *url.URL) (*gemini.Response, error) { func fetchGemini(remote *url.URL) (*gemini.Response, error) {
client := &gemini.Client{} client := &gemini.Client{}
resp, err := client.Get(context.Background(), remoteURL.String()) resp, err := client.Get(context.Background(), remote.String())
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -94,7 +94,7 @@ func geminiFeed(data *core.FullData, remote *url.URL, title string) error {
feed.Items = append(feed.Items, item) feed.Items = append(feed.Items, item)
} }
} }
InsertFeed(data, &feed, remote) data.InsertFeed(&feed, remote)
return nil return nil
case "text/xml", case "text/xml",
"application/rss+xml", "application/rss+xml",
@@ -109,7 +109,7 @@ func geminiFeed(data *core.FullData, remote *url.URL, title string) error {
if err != nil { if err != nil {
return err return err
} }
InsertFeed(data, feed, remote) data.InsertFeed(feed, remote)
return nil return nil
default: default:
return fmt.Errorf("Cannot interpret %s as a feed", resp.Meta) return fmt.Errorf("Cannot interpret %s as a feed", resp.Meta)
@@ -119,7 +119,7 @@ func geminiFeed(data *core.FullData, remote *url.URL, title string) error {
// geminiPage will fetch and insert a new core.Page into a core.FullData given // geminiPage will fetch and insert a new core.Page into a core.FullData given
// a gemini url (or update if it's preexisting) // a gemini url (or update if it's preexisting)
func geminiPage(data *core.FullData, remote *url.URL, title string) error { func geminiPage(data *core.FullData, remote *url.URL, title string) error {
resp, err := fetchGemini(p.Link) resp, err := fetchGemini(remote)
if err != nil { if err != nil {
return err return err
} }
@@ -135,11 +135,9 @@ func geminiPage(data *core.FullData, remote *url.URL, title string) error {
return err return err
} }
newHash := fmt.Sprintf("%x", h.Sum(nil)) newHash := fmt.Sprintf("%x", h.Sum(nil))
if newHash != p.Hash { page.Hash = newHash
page.Hash = newHash page.Updated = time.Now()
page.Updated = time.Now()
}
InsertPage(data, &page, remote) data.InsertPage(&page, remote)
return nil return nil
} }
+1 -1
View File
@@ -64,6 +64,6 @@ func gopherPage(data *core.FullData, remote *url.URL, title string) error {
page.Hash = newHash page.Hash = newHash
page.Updated = time.Now() page.Updated = time.Now()
InsertPage(data, &page, remote) data.InsertPage(&page, remote)
return nil return nil
} }
+2 -2
View File
@@ -72,7 +72,7 @@ func httpFeed(data *core.FullData, remote *url.URL, title string) error {
return err return err
} }
InsertFeed(data, feed, remote) data.InsertFeed(feed, remote)
return nil return nil
} }
@@ -98,6 +98,6 @@ func httpPage(data *core.FullData, remote *url.URL, title string) error {
page.Hash = newHash page.Hash = newHash
page.Updated = time.Now() page.Updated = time.Now()
InsertPage(data, &page, remote) data.InsertPage(&page, remote)
return nil return nil
} }