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