Changed url.URL to string so the json is less bloated
This commit is contained in:
+2
-3
@@ -16,7 +16,6 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"net/url"
|
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"sync"
|
"sync"
|
||||||
@@ -55,10 +54,10 @@ func Init(dataPath string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if Data.Feeds == nil {
|
if Data.Feeds == nil {
|
||||||
Data.Feeds = make(map[url.URL]*Feed)
|
Data.Feeds = make(map[string]*Feed)
|
||||||
}
|
}
|
||||||
if Data.Pages == nil {
|
if Data.Pages == nil {
|
||||||
Data.Pages = make(map[url.URL]*Page)
|
Data.Pages = make(map[string]*Page)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
+14
-11
@@ -22,8 +22,8 @@ import (
|
|||||||
// FullData is used for both reading from json and for storing the global feeds
|
// FullData is used for both reading from json and for storing the global feeds
|
||||||
// map. contains read mutexes so concurrency can be used.
|
// map. contains read mutexes so concurrency can be used.
|
||||||
type FullData struct {
|
type FullData struct {
|
||||||
Feeds map[url.URL]*Feed `json:"feeds,omitempty"`
|
Feeds map[string]*Feed `json:"feeds,omitempty"`
|
||||||
Pages map[url.URL]*Page `json:"pages,omitempty"`
|
Pages map[string]*Page `json:"pages,omitempty"`
|
||||||
|
|
||||||
FeedsMu *sync.RWMutex
|
FeedsMu *sync.RWMutex
|
||||||
PagesMu *sync.RWMutex
|
PagesMu *sync.RWMutex
|
||||||
@@ -32,8 +32,8 @@ type FullData struct {
|
|||||||
// Feed holds all the necessary fields when storing a feed
|
// Feed holds all the necessary fields when storing a feed
|
||||||
type Feed struct {
|
type Feed struct {
|
||||||
Title string `json:"title,omitempty"`
|
Title string `json:"title,omitempty"`
|
||||||
Link *url.URL `json:"link,omitempty"` // link to the human-readable page for the feed. same as FeedLink for gemini feeds.
|
Link string `json:"link,omitempty"` // link to the human-readable page for the feed. same as FeedLink for gemini feeds.
|
||||||
FeedLink *url.URL `json:"feedlink,omitempty"` // link to the feed itself.
|
FeedLink string `json:"feedlink,omitempty"` // link to the feed itself.
|
||||||
Updated time.Time `json:"updated,omitempty"`
|
Updated time.Time `json:"updated,omitempty"`
|
||||||
Items []*Item `json:"items,omitempty"`
|
Items []*Item `json:"items,omitempty"`
|
||||||
}
|
}
|
||||||
@@ -42,7 +42,7 @@ type Feed struct {
|
|||||||
type Item struct {
|
type Item struct {
|
||||||
Title string `json:"title,omitempty"` // if empty, use Link as title
|
Title string `json:"title,omitempty"` // if empty, use Link as title
|
||||||
Content string `json:"content,omitempty"`
|
Content string `json:"content,omitempty"`
|
||||||
Link *url.URL `json:"link,omitempty"`
|
Link string `json:"link,omitempty"`
|
||||||
Published time.Time `json:"updated,omitempty"`
|
Published time.Time `json:"updated,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -50,7 +50,7 @@ type Item struct {
|
|||||||
// changes.
|
// changes.
|
||||||
type Page struct {
|
type Page struct {
|
||||||
Title string `json:"title,omitempty"`
|
Title string `json:"title,omitempty"`
|
||||||
Link *url.URL `json:"link,omitempty"`
|
Link string `json:"link,omitempty"`
|
||||||
Updated time.Time `json:"updated,omitempty"`
|
Updated time.Time `json:"updated,omitempty"`
|
||||||
Hash string `json:"hash,omitempty"`
|
Hash string `json:"hash,omitempty"`
|
||||||
}
|
}
|
||||||
@@ -74,6 +74,8 @@ func GofeedConvert(f *gofeed.Feed, title string) (*Feed, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
new.Link = f.Link
|
||||||
|
new.FeedLink = f.FeedLink
|
||||||
|
|
||||||
for _, v := range f.Items {
|
for _, v := range f.Items {
|
||||||
item := &Item{}
|
item := &Item{}
|
||||||
@@ -84,6 +86,7 @@ func GofeedConvert(f *gofeed.Feed, title string) (*Feed, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
item.Link = f.FeedLink
|
||||||
|
|
||||||
new.Items = append(new.Items, item)
|
new.Items = append(new.Items, item)
|
||||||
}
|
}
|
||||||
@@ -94,10 +97,10 @@ func GofeedConvert(f *gofeed.Feed, title string) (*Feed, error) {
|
|||||||
// InsertFeed will insert or update a core.Feed in a core.FullData
|
// InsertFeed will insert or update a core.Feed in a core.FullData
|
||||||
func (d *FullData) InsertFeed(new *Feed, remote *url.URL) {
|
func (d *FullData) InsertFeed(new *Feed, remote *url.URL) {
|
||||||
d.FeedsMu.Lock()
|
d.FeedsMu.Lock()
|
||||||
oldFeed, ok := d.Feeds[*remote]
|
oldFeed, ok := d.Feeds[remote.String()]
|
||||||
if !ok || !reflect.DeepEqual(new, oldFeed) {
|
if !ok || !reflect.DeepEqual(new, oldFeed) {
|
||||||
// Feeds are different, or there was never an old one
|
// Feeds are different, or there was never an old one
|
||||||
d.Feeds[*remote] = new
|
d.Feeds[remote.String()] = new
|
||||||
d.FeedsMu.Unlock()
|
d.FeedsMu.Unlock()
|
||||||
} else {
|
} else {
|
||||||
d.FeedsMu.Unlock()
|
d.FeedsMu.Unlock()
|
||||||
@@ -107,10 +110,10 @@ func (d *FullData) InsertFeed(new *Feed, remote *url.URL) {
|
|||||||
// InsertPage will insert or update a core.Page in a core.FullData
|
// InsertPage will insert or update a core.Page in a core.FullData
|
||||||
func (d *FullData) InsertPage(new *Page, remote *url.URL) {
|
func (d *FullData) InsertPage(new *Page, remote *url.URL) {
|
||||||
d.PagesMu.Lock()
|
d.PagesMu.Lock()
|
||||||
_, ok := d.Pages[*remote]
|
_, ok := d.Pages[remote.String()]
|
||||||
if !ok || d.Pages[*remote].Hash != new.Hash {
|
if !ok || d.Pages[remote.String()].Hash != new.Hash {
|
||||||
// pages are different, or there was never an old one
|
// pages are different, or there was never an old one
|
||||||
d.Pages[*remote] = new
|
d.Pages[remote.String()] = new
|
||||||
d.PagesMu.Unlock()
|
d.PagesMu.Unlock()
|
||||||
} else {
|
} else {
|
||||||
d.PagesMu.Unlock()
|
d.PagesMu.Unlock()
|
||||||
|
|||||||
+5
-4
@@ -60,8 +60,9 @@ func geminiFeed(data *core.FullData, remote *url.URL, title string) error {
|
|||||||
case "text/gemini":
|
case "text/gemini":
|
||||||
var feed core.Feed
|
var feed core.Feed
|
||||||
feed.Title = title // will be set later if given title is ""
|
feed.Title = title // will be set later if given title is ""
|
||||||
feed.Link = remote
|
feed.Link = remote.String()
|
||||||
feed.FeedLink = remote
|
feed.FeedLink = remote.String()
|
||||||
|
feed.Updated = time.Now()
|
||||||
|
|
||||||
text, err := gemini.ParseText(resp.Body)
|
text, err := gemini.ParseText(resp.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -90,7 +91,7 @@ func geminiFeed(data *core.FullData, remote *url.URL, title string) error {
|
|||||||
item := &core.Item{}
|
item := &core.Item{}
|
||||||
item.Title = strings.TrimLeft(line.Name[10:], ": ")
|
item.Title = strings.TrimLeft(line.Name[10:], ": ")
|
||||||
item.Published = date
|
item.Published = date
|
||||||
item.Link = link
|
item.Link = link.String()
|
||||||
feed.Items = append(feed.Items, item)
|
feed.Items = append(feed.Items, item)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -129,7 +130,7 @@ func geminiPage(data *core.FullData, remote *url.URL, title string) error {
|
|||||||
|
|
||||||
var page core.Page
|
var page core.Page
|
||||||
page.Title = title
|
page.Title = title
|
||||||
page.Link = remote
|
page.Link = remote.String()
|
||||||
h := sha256.New()
|
h := sha256.New()
|
||||||
if _, err := io.Copy(h, reader); err != nil {
|
if _, err := io.Copy(h, reader); err != nil {
|
||||||
return err
|
return err
|
||||||
|
|||||||
+1
-1
@@ -55,7 +55,7 @@ func gopherPage(data *core.FullData, remote *url.URL, title string) error {
|
|||||||
|
|
||||||
var page core.Page
|
var page core.Page
|
||||||
page.Title = title
|
page.Title = title
|
||||||
page.Link = remote
|
page.Link = remote.String()
|
||||||
h := sha256.New()
|
h := sha256.New()
|
||||||
if _, err := io.Copy(h, reader); err != nil {
|
if _, err := io.Copy(h, reader); err != nil {
|
||||||
return err
|
return err
|
||||||
|
|||||||
+1
-1
@@ -89,7 +89,7 @@ func httpPage(data *core.FullData, remote *url.URL, title string) error {
|
|||||||
|
|
||||||
var page core.Page
|
var page core.Page
|
||||||
page.Title = title
|
page.Title = title
|
||||||
page.Link = remote
|
page.Link = remote.String()
|
||||||
h := sha256.New()
|
h := sha256.New()
|
||||||
if _, err := io.Copy(h, reader); err != nil {
|
if _, err := io.Copy(h, reader); err != nil {
|
||||||
return err
|
return err
|
||||||
|
|||||||
Reference in New Issue
Block a user