nandi/gleanpublic⑂ Fork 0
⑂ 11b97b9
Commits
⬇ Clone ▾
git clone https://git.rickub.com/nandi/glean.git
git clone ssh://git@rickub.com/nandi/glean.git

Host key fingerprint (ed25519): SHA256:iycHnxEyq0Q7uyVpB7JlznP0G7JrTPXLYRcAU5CSLhc — verify it before your first connect.

Extract favicon resolution logic into helper functionUnverified

Julien Robert committed 2026-04-22T12:41:11+02:00 Browse files
11b97b9 parent: 5c037cb
modified internal/feed/discover.go +15 -0
@@ -45,6 +45,21 @@ func Discover(ctx context.Context, siteURL string) (*DiscoveryResult, error) {
4545 }, nil
4646 }
4747
48+func ResolveFavicon(ctx context.Context, feedURL, siteURL, parsedFavicon string) string {
49+ if parsedFavicon != "" {
50+ return parsedFavicon
51+ }
52+ target := siteURL
53+ if target == "" {
54+ target = feedURL
55+ }
56+ result, err := Discover(ctx, target)
57+ if err != nil {
58+ return ""
59+ }
60+ return result.Favicon
61+}
62+
4863 func findFeedURLs(base *url.URL, links []string) []string {
4964 var feeds []string
5065 for _, link := range links {
@@ -45,6 +45,21 @@ func Discover(ctx context.Context, siteURL string) (*DiscoveryResult, error) {
45 }, nil45 }, nil
46 }46 }
47 47
48+func ResolveFavicon(ctx context.Context, feedURL, siteURL, parsedFavicon string) string {
49+ if parsedFavicon != "" {
50+ return parsedFavicon
51+ }
52+ target := siteURL
53+ if target == "" {
54+ target = feedURL
55+ }
56+ result, err := Discover(ctx, target)
57+ if err != nil {
58+ return ""
59+ }
60+ return result.Favicon
61+}
62+
48 func findFeedURLs(base *url.URL, links []string) []string {63 func findFeedURLs(base *url.URL, links []string) []string {
49 var feeds []string64 var feeds []string
50 for _, link := range links {65 for _, link := range links {
modified internal/feed/fetcher.go +2 -7
@@ -185,14 +185,9 @@ func (s *Scheduler) FetchFeed(ctx context.Context, feed *Feed) {
185185 if result != nil && result.Feed.FaviconURL != "" {
186186 _ = s.store.UpdateFeedFavicon(ctx, feed.URL, result.Feed.FaviconURL)
187187 } else if feed.FaviconURL == "" {
188- siteURL := feed.SiteURL
189- if siteURL == "" {
190- siteURL = feed.URL
191- }
192188 go func() {
193- discResult, err := Discover(context.Background(), siteURL)
194- if err == nil && discResult.Favicon != "" {
195- _ = s.store.UpdateFeedFavicon(context.Background(), feed.URL, discResult.Favicon)
189+ if f := ResolveFavicon(context.Background(), feed.URL, feed.SiteURL, ""); f != "" {
190+ _ = s.store.UpdateFeedFavicon(context.Background(), feed.URL, f)
196191 }
197192 }()
198193 }
@@ -185,14 +185,9 @@ func (s *Scheduler) FetchFeed(ctx context.Context, feed *Feed) {
185 if result != nil && result.Feed.FaviconURL != "" {185 if result != nil && result.Feed.FaviconURL != "" {
186 _ = s.store.UpdateFeedFavicon(ctx, feed.URL, result.Feed.FaviconURL)186 _ = s.store.UpdateFeedFavicon(ctx, feed.URL, result.Feed.FaviconURL)
187 } else if feed.FaviconURL == "" {187 } else if feed.FaviconURL == "" {
188- siteURL := feed.SiteURL
189- if siteURL == "" {
190- siteURL = feed.URL
191- }
192 go func() {188 go func() {
193- discResult, err := Discover(context.Background(), siteURL)189+ if f := ResolveFavicon(context.Background(), feed.URL, feed.SiteURL, ""); f != "" {
194- if err == nil && discResult.Favicon != "" {190+ _ = s.store.UpdateFeedFavicon(context.Background(), feed.URL, f)
195- _ = s.store.UpdateFeedFavicon(context.Background(), feed.URL, discResult.Favicon)
196 }191 }
197 }()192 }()
198 }193 }
modified internal/server/feeds_handler.go +10 -18
@@ -87,16 +87,11 @@ func (s *Server) handleAddFeed(w http.ResponseWriter, r *http.Request) {
8787 return
8888 }
8989
90- if result.Feed.FaviconURL != "" {
91- _ = s.db.UpdateFeedFavicon(r.Context(), feedURL, result.Feed.FaviconURL)
92- } else if result.Feed.SiteURL != "" {
93- go func() {
94- discResult, err := feed.Discover(context.Background(), result.Feed.SiteURL)
95- if err == nil && discResult.Favicon != "" {
96- _ = s.db.UpdateFeedFavicon(context.Background(), feedURL, discResult.Favicon)
97- }
98- }()
99- }
90+ go func() {
91+ if f := feed.ResolveFavicon(context.Background(), feedURL, result.Feed.SiteURL, result.Feed.FaviconURL); f != "" {
92+ _ = s.db.UpdateFeedFavicon(context.Background(), feedURL, f)
93+ }
94+ }()
10095 }
10196
10297 var feedTitle string
@@ -240,14 +235,11 @@ func (s *Server) handleOPMLUpload(w http.ResponseWriter, r *http.Request) {
240235 continue
241236 }
242237
243- if fu.SiteURL != "" {
244- go func(feedURL, siteURL string) {
245- discResult, err := feed.Discover(context.Background(), siteURL)
246- if err == nil && discResult.Favicon != "" {
247- _ = s.db.UpdateFeedFavicon(context.Background(), feedURL, discResult.Favicon)
248- }
249- }(fu.URL, fu.SiteURL)
250- }
238+ go func(feedURL, siteURL string) {
239+ if f := feed.ResolveFavicon(context.Background(), feedURL, siteURL, ""); f != "" {
240+ _ = s.db.UpdateFeedFavicon(context.Background(), feedURL, f)
241+ }
242+ }(fu.URL, fu.SiteURL)
251243
252244 var subURI, subCID string
253245 if client != nil {
@@ -87,16 +87,11 @@ func (s *Server) handleAddFeed(w http.ResponseWriter, r *http.Request) {
87 return87 return
88 }88 }
89 89
90- if result.Feed.FaviconURL != "" {90+ go func() {
91- _ = s.db.UpdateFeedFavicon(r.Context(), feedURL, result.Feed.FaviconURL)91+ if f := feed.ResolveFavicon(context.Background(), feedURL, result.Feed.SiteURL, result.Feed.FaviconURL); f != "" {
92- } else if result.Feed.SiteURL != "" {92+ _ = s.db.UpdateFeedFavicon(context.Background(), feedURL, f)
93- go func() {93+ }
94- discResult, err := feed.Discover(context.Background(), result.Feed.SiteURL)94+ }()
95- if err == nil && discResult.Favicon != "" {
96- _ = s.db.UpdateFeedFavicon(context.Background(), feedURL, discResult.Favicon)
97- }
98- }()
99- }
100 }95 }
101 96
102 var feedTitle string97 var feedTitle string
@@ -240,14 +235,11 @@ func (s *Server) handleOPMLUpload(w http.ResponseWriter, r *http.Request) {
240 continue235 continue
241 }236 }
242 237
243- if fu.SiteURL != "" {238+ go func(feedURL, siteURL string) {
244- go func(feedURL, siteURL string) {239+ if f := feed.ResolveFavicon(context.Background(), feedURL, siteURL, ""); f != "" {
245- discResult, err := feed.Discover(context.Background(), siteURL)240+ _ = s.db.UpdateFeedFavicon(context.Background(), feedURL, f)
246- if err == nil && discResult.Favicon != "" {241+ }
247- _ = s.db.UpdateFeedFavicon(context.Background(), feedURL, discResult.Favicon)242+ }(fu.URL, fu.SiteURL)
248- }
249- }(fu.URL, fu.SiteURL)
250- }
251 243
252 var subURI, subCID string244 var subURI, subCID string
253 if client != nil {245 if client != nil {