search for icons only during startup and after adding feeds

This commit is contained in:
Nazar Kanaev 2021-04-02 21:10:17 +01:00
parent c8d6363677
commit fa92ea16b0
4 changed files with 25 additions and 19 deletions

View File

@ -186,14 +186,8 @@ func (s *Server) handleFeedList(c *router.Context) {
form.FolderID,
)
s.db.CreateItems(worker.ConvertItems(result.Feed.Items, *feed))
s.worker.FindFeedFavicon(*feed)
icon, err := worker.FindFavicon(feed.Link, feed.FeedLink)
if icon != nil {
s.db.UpdateFeedIcon(feed.Id, icon)
}
if err != nil {
log.Printf("Failed to find favicon for %s (%d): %s", feed.FeedLink, feed.Id, err)
}
c.JSON(http.StatusOK, map[string]string{"status": "success"})
default:
c.JSON(http.StatusOK, map[string]string{"status": "notfound"})
@ -364,7 +358,9 @@ func (s *Server) handleOPMLImport(c *router.Context) {
}
}
s.worker.FindFavicons()
s.worker.RefreshFeeds()
c.Out.WriteHeader(http.StatusOK)
} else {
c.Out.WriteHeader(http.StatusMethodNotAllowed)

View File

@ -41,6 +41,7 @@ func (h *Server) GetAddr() string {
func (s *Server) Start() {
refreshRate := s.db.GetSettingsValueInt64("refresh_rate")
s.worker.FindFavicons()
s.worker.StartFeedCleaner()
s.worker.SetRefreshRate(refreshRate)
if refreshRate > 0 {

View File

@ -74,7 +74,7 @@ func DiscoverFeed(candidateUrl string) (*DiscoverResult, error) {
return result, nil
}
func FindFavicon(websiteUrl, feedUrl string) (*[]byte, error) {
func findFavicon(websiteUrl, feedUrl string) (*[]byte, error) {
candidateUrls := make([]string, 0)
favicon := func(link string) string {

View File

@ -37,6 +37,26 @@ func (w *Worker) StartFeedCleaner() {
}()
}
func (w *Worker) FindFavicons() {
go func() {
for _, feed := range w.db.ListFeeds() {
if !feed.HasIcon {
w.FindFeedFavicon(feed)
}
}
}()
}
func (w *Worker) FindFeedFavicon(feed storage.Feed) {
icon, err := findFavicon(feed.Link, feed.FeedLink)
if err != nil {
log.Printf("Failed to find favicon for %s (%s): %s", feed.FeedLink, feed.Link, err)
}
if icon != nil {
w.db.UpdateFeedIcon(feed.Id, icon)
}
}
func (w *Worker) SetRefreshRate(minute int64) {
if w.stopper != nil {
w.refresh.Stop()
@ -116,16 +136,5 @@ func (w *Worker) worker(srcqueue <-chan storage.Feed, dstqueue chan<- []storage.
w.db.SetFeedError(feed.Id, err)
}
dstqueue <- items
// TODO: move somewhere else
if !feed.HasIcon {
icon, err := FindFavicon(feed.Link, feed.FeedLink)
if icon != nil {
w.db.UpdateFeedIcon(feed.Id, icon)
}
if err != nil {
log.Printf("Failed to find favicon for %s (%s): %s", feed.FeedLink, feed.Link, err)
}
}
}
}