Refactor fetch functions to use new FullData.Insert{Feed,Page} funcs
This commit is contained in:
@@ -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
@@ -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
@@ -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
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user