mirror of
https://github.com/nkanaev/yarr.git
synced 2025-05-24 00:33:14 +00:00
remove feed hacks from storage
This commit is contained in:
parent
9919d72be0
commit
144fc1606a
@ -81,10 +81,11 @@ func ParseAtom(r io.Reader) (*Feed, error) {
|
|||||||
SiteURL: firstNonEmpty(srcfeed.Links.First("alternate"), srcfeed.Links.First("")),
|
SiteURL: firstNonEmpty(srcfeed.Links.First("alternate"), srcfeed.Links.First("")),
|
||||||
}
|
}
|
||||||
for _, srcitem := range srcfeed.Entries {
|
for _, srcitem := range srcfeed.Entries {
|
||||||
|
link := firstNonEmpty(srcitem.OrigLink, srcitem.Links.First("alternate"), srcitem.Links.First(""))
|
||||||
dstfeed.Items = append(dstfeed.Items, Item{
|
dstfeed.Items = append(dstfeed.Items, Item{
|
||||||
GUID: firstNonEmpty(srcitem.ID),
|
GUID: firstNonEmpty(srcitem.ID, link),
|
||||||
Date: dateParse(firstNonEmpty(srcitem.Published, srcitem.Updated)),
|
Date: dateParse(firstNonEmpty(srcitem.Published, srcitem.Updated)),
|
||||||
URL: firstNonEmpty(srcitem.OrigLink, srcitem.Links.First("alternate"), srcitem.Links.First("")),
|
URL: link,
|
||||||
Title: srcitem.Title.Text(),
|
Title: srcitem.Title.Text(),
|
||||||
Content: firstNonEmpty(srcitem.Content.String(), srcitem.Summary.String(), srcitem.firstMediaDescription()),
|
Content: firstNonEmpty(srcitem.Content.String(), srcitem.Summary.String(), srcitem.firstMediaDescription()),
|
||||||
ImageURL: srcitem.firstMediaThumbnail(),
|
ImageURL: srcitem.firstMediaThumbnail(),
|
||||||
|
@ -70,6 +70,7 @@ func Parse(r io.Reader) (*Feed, error) {
|
|||||||
func (feed *Feed) cleanup() {
|
func (feed *Feed) cleanup() {
|
||||||
feed.Title = strings.TrimSpace(feed.Title)
|
feed.Title = strings.TrimSpace(feed.Title)
|
||||||
feed.SiteURL = strings.TrimSpace(feed.SiteURL)
|
feed.SiteURL = strings.TrimSpace(feed.SiteURL)
|
||||||
|
|
||||||
for i, item := range feed.Items {
|
for i, item := range feed.Items {
|
||||||
feed.Items[i].GUID = strings.TrimSpace(item.GUID)
|
feed.Items[i].GUID = strings.TrimSpace(item.GUID)
|
||||||
feed.Items[i].URL = strings.TrimSpace(item.URL)
|
feed.Items[i].URL = strings.TrimSpace(item.URL)
|
||||||
|
@ -46,7 +46,7 @@ func ParseJSON(data io.Reader) (*Feed, error) {
|
|||||||
}
|
}
|
||||||
for _, srcitem := range srcfeed.Items {
|
for _, srcitem := range srcfeed.Items {
|
||||||
dstfeed.Items = append(dstfeed.Items, Item{
|
dstfeed.Items = append(dstfeed.Items, Item{
|
||||||
GUID: srcitem.ID,
|
GUID: firstNonEmpty(srcitem.ID, srcitem.URL),
|
||||||
Date: dateParse(firstNonEmpty(srcitem.DatePublished, srcitem.DateModified)),
|
Date: dateParse(firstNonEmpty(srcitem.DatePublished, srcitem.DateModified)),
|
||||||
URL: srcitem.URL,
|
URL: srcitem.URL,
|
||||||
Title: srcitem.Title,
|
Title: srcitem.Title,
|
||||||
|
@ -2,9 +2,7 @@ package storage
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"database/sql"
|
"database/sql"
|
||||||
"html"
|
|
||||||
"log"
|
"log"
|
||||||
"net/url"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type Feed struct {
|
type Feed struct {
|
||||||
@ -19,22 +17,9 @@ type Feed struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *Storage) CreateFeed(title, description, link, feedLink string, folderId *int64) *Feed {
|
func (s *Storage) CreateFeed(title, description, link, feedLink string, folderId *int64) *Feed {
|
||||||
title = html.UnescapeString(title)
|
|
||||||
// WILD: fallback to `feed.link` -> `feed.feed_link` -> "<???>" if title is missing
|
|
||||||
if title == "" {
|
|
||||||
title = link
|
|
||||||
// use domain if possible
|
|
||||||
linkUrl, err := url.Parse(link)
|
|
||||||
if err == nil && linkUrl.Host != "" && len(linkUrl.Path) <= 1 {
|
|
||||||
title = linkUrl.Host
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if title == "" {
|
if title == "" {
|
||||||
title = feedLink
|
title = feedLink
|
||||||
}
|
}
|
||||||
if title == "" {
|
|
||||||
title = "<???>"
|
|
||||||
}
|
|
||||||
result, err := s.db.Exec(`
|
result, err := s.db.Exec(`
|
||||||
insert into feeds (title, description, link, feed_link, folder_id)
|
insert into feeds (title, description, link, feed_link, folder_id)
|
||||||
values (?, ?, ?, ?, ?)
|
values (?, ?, ?, ?, ?)
|
||||||
|
@ -3,7 +3,6 @@ package storage
|
|||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"html"
|
|
||||||
"log"
|
"log"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
@ -81,14 +80,6 @@ func (s *Storage) CreateItems(items []Item) bool {
|
|||||||
now := time.Now()
|
now := time.Now()
|
||||||
|
|
||||||
for _, item := range items {
|
for _, item := range items {
|
||||||
// WILD: some feeds provide only `item.date_updated` (without `item.date_created`)
|
|
||||||
if item.Date == nil {
|
|
||||||
item.Date = item.DateUpdated
|
|
||||||
}
|
|
||||||
// WILD: `item.guid` is not always present
|
|
||||||
if item.GUID == "" {
|
|
||||||
item.GUID = item.Link
|
|
||||||
}
|
|
||||||
_, err = tx.Exec(`
|
_, err = tx.Exec(`
|
||||||
insert into items (
|
insert into items (
|
||||||
guid, feed_id, title, link, description,
|
guid, feed_id, title, link, description,
|
||||||
@ -99,7 +90,7 @@ func (s *Storage) CreateItems(items []Item) bool {
|
|||||||
values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
||||||
on conflict (feed_id, guid) do update set
|
on conflict (feed_id, guid) do update set
|
||||||
date_updated = ?, date_arrived = ?`,
|
date_updated = ?, date_arrived = ?`,
|
||||||
item.GUID, item.FeedId, html.UnescapeString(item.Title), item.Link, item.Description,
|
item.GUID, item.FeedId, item.Title, item.Link, item.Description,
|
||||||
item.Content, item.Author,
|
item.Content, item.Author,
|
||||||
item.Date, item.DateUpdated, now,
|
item.Date, item.DateUpdated, now,
|
||||||
UNREAD, item.Image, item.PodcastURL,
|
UNREAD, item.Image, item.PodcastURL,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user