mirror of
https://github.com/nkanaev/yarr.git
synced 2026-06-09 18:03:19 +00:00
use CreateFeedParams for CreateFeed
This commit is contained in:
@@ -242,13 +242,12 @@ func (s *Server) handleFeedList(c *router.Context) {
|
||||
map[string]any{"status": "multiple", "choice": result.Sources},
|
||||
)
|
||||
case result.Feed != nil:
|
||||
feed := s.db.CreateFeed(
|
||||
result.Feed.Title,
|
||||
"",
|
||||
result.Feed.SiteURL,
|
||||
result.FeedLink,
|
||||
form.FolderID,
|
||||
)
|
||||
feed := s.db.CreateFeed(storage.CreateFeedParams{
|
||||
Title: result.Feed.Title,
|
||||
Link: result.Feed.SiteURL,
|
||||
FeedLink: result.FeedLink,
|
||||
FolderID: form.FolderID,
|
||||
})
|
||||
items := worker.ConvertItems(result.Feed.Items, *feed)
|
||||
if len(items) > 0 {
|
||||
s.db.CreateItems(items)
|
||||
@@ -448,12 +447,21 @@ func (s *Server) handleOPMLImport(c *router.Context) {
|
||||
return
|
||||
}
|
||||
for _, f := range doc.Feeds {
|
||||
s.db.CreateFeed(f.Title, "", f.SiteUrl, f.FeedUrl, nil)
|
||||
s.db.CreateFeed(storage.CreateFeedParams{
|
||||
Title: f.Title,
|
||||
Link: f.SiteUrl,
|
||||
FeedLink: f.FeedUrl,
|
||||
})
|
||||
}
|
||||
for _, f := range doc.Folders {
|
||||
folder := s.db.CreateFolder(f.Title)
|
||||
for _, ff := range f.AllFeeds() {
|
||||
s.db.CreateFeed(ff.Title, "", ff.SiteUrl, ff.FeedUrl, &folder.Id)
|
||||
s.db.CreateFeed(storage.CreateFeedParams{
|
||||
Title: ff.Title,
|
||||
Link: ff.SiteUrl,
|
||||
FeedLink: ff.FeedUrl,
|
||||
FolderID: &folder.Id,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -79,7 +79,7 @@ func TestFeedIcons(t *testing.T) {
|
||||
log.SetOutput(io.Discard)
|
||||
db, _ := storage.New(":memory:")
|
||||
icon := []byte("test")
|
||||
feed := db.CreateFeed("", "", "", "", nil)
|
||||
feed := db.CreateFeed(storage.CreateFeedParams{})
|
||||
db.UpdateFeed(feed.Id, storage.UpdateFeedParams{Icon: storage.SetNullable(&icon)})
|
||||
log.SetOutput(os.Stderr)
|
||||
|
||||
|
||||
@@ -16,9 +16,18 @@ type Feed struct {
|
||||
HasIcon bool `json:"has_icon"`
|
||||
}
|
||||
|
||||
func (s *Storage) CreateFeed(title, description, link, feedLink string, folderId *int64) *Feed {
|
||||
type CreateFeedParams struct {
|
||||
Title string
|
||||
Description string
|
||||
Link string
|
||||
FeedLink string
|
||||
FolderID *int64
|
||||
}
|
||||
|
||||
func (s *Storage) CreateFeed(params CreateFeedParams) *Feed {
|
||||
title := params.Title
|
||||
if title == "" {
|
||||
title = feedLink
|
||||
title = params.FeedLink
|
||||
}
|
||||
row := s.db.QueryRow(`
|
||||
insert into feeds (title, description, link, feed_link, folder_id)
|
||||
@@ -26,10 +35,10 @@ func (s *Storage) CreateFeed(title, description, link, feedLink string, folderId
|
||||
on conflict (feed_link) do update set folder_id = :folder_id
|
||||
returning id`,
|
||||
sql.Named("title", title),
|
||||
sql.Named("description", description),
|
||||
sql.Named("link", link),
|
||||
sql.Named("feed_link", feedLink),
|
||||
sql.Named("folder_id", folderId),
|
||||
sql.Named("description", params.Description),
|
||||
sql.Named("link", params.Link),
|
||||
sql.Named("feed_link", params.FeedLink),
|
||||
sql.Named("folder_id", params.FolderID),
|
||||
)
|
||||
|
||||
var id int64
|
||||
@@ -41,10 +50,10 @@ func (s *Storage) CreateFeed(title, description, link, feedLink string, folderId
|
||||
return &Feed{
|
||||
Id: id,
|
||||
Title: title,
|
||||
Description: description,
|
||||
Link: link,
|
||||
FeedLink: feedLink,
|
||||
FolderId: folderId,
|
||||
Description: params.Description,
|
||||
Link: params.Link,
|
||||
FeedLink: params.FeedLink,
|
||||
FolderId: params.FolderID,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ import (
|
||||
|
||||
func TestCreateFeed(t *testing.T) {
|
||||
db := testDB()
|
||||
feed1 := db.CreateFeed("title", "", "http://example.com", "http://example.com/feed.xml", nil)
|
||||
feed1 := db.CreateFeed(CreateFeedParams{Title: "title", Link: "http://example.com", FeedLink: "http://example.com/feed.xml"})
|
||||
if feed1 == nil || feed1.Id == 0 {
|
||||
t.Fatal("expected feed")
|
||||
}
|
||||
@@ -19,16 +19,16 @@ func TestCreateFeed(t *testing.T) {
|
||||
|
||||
func TestCreateFeedSameLink(t *testing.T) {
|
||||
db := testDB()
|
||||
feed1 := db.CreateFeed("title", "", "", "http://example1.com/feed.xml", nil)
|
||||
feed1 := db.CreateFeed(CreateFeedParams{Title: "title", FeedLink: "http://example1.com/feed.xml"})
|
||||
if feed1 == nil || feed1.Id == 0 {
|
||||
t.Fatal("expected feed")
|
||||
}
|
||||
|
||||
for range 10 {
|
||||
db.CreateFeed("title", "", "", "http://example2.com/feed.xml", nil)
|
||||
db.CreateFeed(CreateFeedParams{Title: "title", FeedLink: "http://example2.com/feed.xml"})
|
||||
}
|
||||
|
||||
feed2 := db.CreateFeed("title", "", "http://example.com", "http://example1.com/feed.xml", nil)
|
||||
feed2 := db.CreateFeed(CreateFeedParams{Title: "title", Link: "http://example.com", FeedLink: "http://example1.com/feed.xml"})
|
||||
if feed1.Id != feed2.Id {
|
||||
t.Fatalf("expected the same feed.\nwant: %#v\nhave: %#v", feed1, feed2)
|
||||
}
|
||||
@@ -40,8 +40,8 @@ func TestReadFeed(t *testing.T) {
|
||||
t.Fatal("cannot get nonexistent feed")
|
||||
}
|
||||
|
||||
feed1 := db.CreateFeed("feed 1", "", "http://example1.com", "http://example1.com/feed.xml", nil)
|
||||
feed2 := db.CreateFeed("feed 2", "", "http://example2.com", "http://example2.com/feed.xml", nil)
|
||||
feed1 := db.CreateFeed(CreateFeedParams{Title: "feed 1", Link: "http://example1.com", FeedLink: "http://example1.com/feed.xml"})
|
||||
feed2 := db.CreateFeed(CreateFeedParams{Title: "feed 2", Link: "http://example2.com", FeedLink: "http://example2.com/feed.xml"})
|
||||
feeds := db.ListFeeds()
|
||||
if !reflect.DeepEqual(feeds, []Feed{*feed1, *feed2}) {
|
||||
t.Fatalf("invalid feed list: %#v", feeds)
|
||||
@@ -50,7 +50,7 @@ func TestReadFeed(t *testing.T) {
|
||||
|
||||
func TestUpdateFeed(t *testing.T) {
|
||||
db := testDB()
|
||||
feed1 := db.CreateFeed("feed 1", "", "http://example1.com", "http://example1.com/feed.xml", nil)
|
||||
feed1 := db.CreateFeed(CreateFeedParams{Title: "feed 1", Link: "http://example1.com", FeedLink: "http://example1.com/feed.xml"})
|
||||
folder := db.CreateFolder("test")
|
||||
icon := []byte("icon")
|
||||
|
||||
@@ -75,7 +75,7 @@ func TestUpdateFeed(t *testing.T) {
|
||||
|
||||
func TestDeleteFeed(t *testing.T) {
|
||||
db := testDB()
|
||||
feed1 := db.CreateFeed("title", "", "http://example.com", "http://example.com/feed.xml", nil)
|
||||
feed1 := db.CreateFeed(CreateFeedParams{Title: "title", Link: "http://example.com", FeedLink: "http://example.com/feed.xml"})
|
||||
|
||||
if db.DeleteFeed(100500) {
|
||||
t.Error("cannot delete what does not exist")
|
||||
|
||||
@@ -39,10 +39,10 @@ func testItemsSetup(db *Storage) testItemScope {
|
||||
folder1 := db.CreateFolder("folder1")
|
||||
folder2 := db.CreateFolder("folder2")
|
||||
|
||||
feed11 := db.CreateFeed("feed11", "", "", "http://test.com/feed11.xml", &folder1.Id)
|
||||
feed12 := db.CreateFeed("feed12", "", "", "http://test.com/feed12.xml", &folder1.Id)
|
||||
feed21 := db.CreateFeed("feed21", "", "", "http://test.com/feed21.xml", &folder2.Id)
|
||||
feed01 := db.CreateFeed("feed01", "", "", "http://test.com/feed01.xml", nil)
|
||||
feed11 := db.CreateFeed(CreateFeedParams{Title: "feed11", FeedLink: "http://test.com/feed11.xml", FolderID: &folder1.Id})
|
||||
feed12 := db.CreateFeed(CreateFeedParams{Title: "feed12", FeedLink: "http://test.com/feed12.xml", FolderID: &folder1.Id})
|
||||
feed21 := db.CreateFeed(CreateFeedParams{Title: "feed21", FeedLink: "http://test.com/feed21.xml", FolderID: &folder2.Id})
|
||||
feed01 := db.CreateFeed(CreateFeedParams{Title: "feed01", FeedLink: "http://test.com/feed01.xml"})
|
||||
|
||||
now := time.Now()
|
||||
db.CreateItems([]Item{
|
||||
@@ -326,7 +326,7 @@ func TestDeleteOldItems(t *testing.T) {
|
||||
|
||||
t.Run("keeps at least 50 items", func(t *testing.T) {
|
||||
db := testDB()
|
||||
feed := db.CreateFeed("f", "", "", "http://f.xml", nil)
|
||||
feed := db.CreateFeed(CreateFeedParams{Title: "f", FeedLink: "http://f.xml"})
|
||||
items := make([]Item, 100)
|
||||
for i := range 100 {
|
||||
items[i] = Item{GUID: strconv.Itoa(i), FeedId: feed.Id, Date: now.Add(time.Duration(i) * time.Hour * 24)}
|
||||
@@ -347,7 +347,7 @@ func TestDeleteOldItems(t *testing.T) {
|
||||
|
||||
t.Run("keeps all less than 90 days old", func(t *testing.T) {
|
||||
db := testDB()
|
||||
feed := db.CreateFeed("f", "", "", "http://f.xml", nil)
|
||||
feed := db.CreateFeed(CreateFeedParams{Title: "f", FeedLink: "http://f.xml"})
|
||||
items := make([]Item, 100)
|
||||
for i := 0; i < 100; i++ {
|
||||
items[i] = Item{GUID: strconv.Itoa(i), FeedId: feed.Id, Date: now.Add(time.Duration(i) * time.Second)}
|
||||
@@ -369,7 +369,7 @@ func TestDeleteOldItems(t *testing.T) {
|
||||
|
||||
t.Run("keeps starred", func(t *testing.T) {
|
||||
db := testDB()
|
||||
feed := db.CreateFeed("f", "", "", "http://f.xml", nil)
|
||||
feed := db.CreateFeed(CreateFeedParams{Title: "f", FeedLink: "http://f.xml"})
|
||||
items := make([]Item, 100)
|
||||
for i := 0; i < 100; i++ {
|
||||
items[i] = Item{GUID: strconv.Itoa(i), FeedId: feed.Id, Date: now.Add(time.Duration(i) * time.Second)}
|
||||
@@ -398,7 +398,7 @@ func TestCreateItemsLastArrived(t *testing.T) {
|
||||
synctest.Test(t, func(t *testing.T) {
|
||||
db := testDB()
|
||||
defer db.db.Close()
|
||||
feed := db.CreateFeed("test feed", "", "", "http://example.com/feed", nil)
|
||||
feed := db.CreateFeed(CreateFeedParams{Title: "test feed", FeedLink: "http://example.com/feed"})
|
||||
|
||||
item := Item{
|
||||
GUID: "item1",
|
||||
|
||||
Reference in New Issue
Block a user