mirror of
https://github.com/nkanaev/yarr.git
synced 2026-05-13 12:43:21 +00:00
refactor feed updating
This commit is contained in:
@@ -284,24 +284,27 @@ func (s *Server) handleFeed(c *router.Context) {
|
|||||||
c.Out.WriteHeader(http.StatusBadRequest)
|
c.Out.WriteHeader(http.StatusBadRequest)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
params := storage.UpdateFeedParams{}
|
||||||
if title, ok := body["title"]; ok {
|
if title, ok := body["title"]; ok {
|
||||||
if reflect.TypeOf(title).Kind() == reflect.String {
|
if reflect.TypeOf(title).Kind() == reflect.String {
|
||||||
s.db.RenameFeed(id, title.(string))
|
t := title.(string)
|
||||||
|
params.Title = &t
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if f_id, ok := body["folder_id"]; ok {
|
if f_id, ok := body["folder_id"]; ok {
|
||||||
if f_id == nil {
|
params.UpdateFolderID = true
|
||||||
s.db.UpdateFeedFolder(id, nil)
|
if reflect.TypeOf(f_id).Kind() == reflect.Float64 {
|
||||||
} else if reflect.TypeOf(f_id).Kind() == reflect.Float64 {
|
|
||||||
folderId := int64(f_id.(float64))
|
folderId := int64(f_id.(float64))
|
||||||
s.db.UpdateFeedFolder(id, &folderId)
|
params.FolderID = &folderId
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if link, ok := body["feed_link"]; ok {
|
if link, ok := body["feed_link"]; ok {
|
||||||
if reflect.TypeOf(link).Kind() == reflect.String {
|
if reflect.TypeOf(link).Kind() == reflect.String {
|
||||||
s.db.UpdateFeedLink(id, link.(string))
|
l := link.(string)
|
||||||
|
params.FeedLink = &l
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
s.db.UpdateFeed(id, params)
|
||||||
c.Out.WriteHeader(http.StatusOK)
|
c.Out.WriteHeader(http.StatusOK)
|
||||||
} else if c.Req.Method == "DELETE" {
|
} else if c.Req.Method == "DELETE" {
|
||||||
s.db.DeleteFeed(id)
|
s.db.DeleteFeed(id)
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ func TestFeedIcons(t *testing.T) {
|
|||||||
db, _ := storage.New(":memory:")
|
db, _ := storage.New(":memory:")
|
||||||
icon := []byte("test")
|
icon := []byte("test")
|
||||||
feed := db.CreateFeed("", "", "", "", nil)
|
feed := db.CreateFeed("", "", "", "", nil)
|
||||||
db.UpdateFeedIcon(feed.Id, &icon)
|
db.UpdateFeed(feed.Id, storage.UpdateFeedParams{Icon: &icon, UpdateIcon: true})
|
||||||
log.SetOutput(os.Stderr)
|
log.SetOutput(os.Stderr)
|
||||||
|
|
||||||
recorder := httptest.NewRecorder()
|
recorder := httptest.NewRecorder()
|
||||||
|
|||||||
@@ -64,36 +64,37 @@ func (s *Storage) DeleteFeed(feedId int64) bool {
|
|||||||
return nrows == 1
|
return nrows == 1
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Storage) RenameFeed(feedId int64, newTitle string) bool {
|
type UpdateFeedParams struct {
|
||||||
_, err := s.db.Exec(`update feeds set title = :title where id = :id`,
|
Title *string
|
||||||
sql.Named("title", newTitle),
|
FeedLink *string
|
||||||
sql.Named("id", feedId),
|
FolderID *int64
|
||||||
)
|
UpdateFolderID bool
|
||||||
return err == nil
|
Icon *[]byte
|
||||||
|
UpdateIcon bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Storage) UpdateFeedFolder(feedId int64, newFolderId *int64) bool {
|
func (s *Storage) UpdateFeed(feedId int64, params UpdateFeedParams) (bool, error) {
|
||||||
_, err := s.db.Exec(`update feeds set folder_id = :folder_id where id = :id`,
|
_, err := s.db.Exec(`
|
||||||
sql.Named("folder_id", newFolderId),
|
update feeds set
|
||||||
|
title = coalesce(:title, title),
|
||||||
|
feed_link = coalesce(:feed_link, feed_link),
|
||||||
|
folder_id = case when :update_folder_id then :folder_id else folder_id end,
|
||||||
|
icon = case when :update_icon then :icon else icon end
|
||||||
|
where id = :id
|
||||||
|
`,
|
||||||
sql.Named("id", feedId),
|
sql.Named("id", feedId),
|
||||||
|
sql.Named("title", params.Title),
|
||||||
|
sql.Named("feed_link", params.FeedLink),
|
||||||
|
sql.Named("update_folder_id", params.UpdateFolderID),
|
||||||
|
sql.Named("folder_id", params.FolderID),
|
||||||
|
sql.Named("update_icon", params.UpdateIcon),
|
||||||
|
sql.Named("icon", params.Icon),
|
||||||
)
|
)
|
||||||
return err == nil
|
if err != nil {
|
||||||
}
|
log.Print(err)
|
||||||
|
return false, err
|
||||||
func (s *Storage) UpdateFeedLink(feedId int64, newLink string) bool {
|
}
|
||||||
_, err := s.db.Exec(`update feeds set feed_link = :feed_link where id = :id`,
|
return true, nil
|
||||||
sql.Named("feed_link", newLink),
|
|
||||||
sql.Named("id", feedId),
|
|
||||||
)
|
|
||||||
return err == nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *Storage) UpdateFeedIcon(feedId int64, icon *[]byte) bool {
|
|
||||||
_, err := s.db.Exec(`update feeds set icon = :icon where id = :id`,
|
|
||||||
sql.Named("icon", icon),
|
|
||||||
sql.Named("id", feedId),
|
|
||||||
)
|
|
||||||
return err == nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Storage) ListFeeds() []Feed {
|
func (s *Storage) ListFeeds() []Feed {
|
||||||
|
|||||||
@@ -54,9 +54,14 @@ func TestUpdateFeed(t *testing.T) {
|
|||||||
folder := db.CreateFolder("test")
|
folder := db.CreateFolder("test")
|
||||||
icon := []byte("icon")
|
icon := []byte("icon")
|
||||||
|
|
||||||
db.RenameFeed(feed1.Id, "newtitle")
|
title := "newtitle"
|
||||||
db.UpdateFeedFolder(feed1.Id, &folder.Id)
|
db.UpdateFeed(feed1.Id, UpdateFeedParams{
|
||||||
db.UpdateFeedIcon(feed1.Id, &icon)
|
Title: &title,
|
||||||
|
FolderID: &folder.Id,
|
||||||
|
UpdateFolderID: true,
|
||||||
|
Icon: &icon,
|
||||||
|
UpdateIcon: true,
|
||||||
|
})
|
||||||
|
|
||||||
feed2 := db.GetFeed(feed1.Id)
|
feed2 := db.GetFeed(feed1.Id)
|
||||||
if feed2.Title != "newtitle" {
|
if feed2.Title != "newtitle" {
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ func (w *Worker) FindFeedFavicon(feed storage.Feed) {
|
|||||||
log.Printf("Failed to find favicon for %s (%s): %s", feed.FeedLink, feed.Link, err)
|
log.Printf("Failed to find favicon for %s (%s): %s", feed.FeedLink, feed.Link, err)
|
||||||
}
|
}
|
||||||
if icon != nil {
|
if icon != nil {
|
||||||
w.db.UpdateFeedIcon(feed.Id, icon)
|
w.db.UpdateFeed(feed.Id, storage.UpdateFeedParams{Icon: icon, UpdateIcon: true})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user