A social RSS reader built on the AT Protocol. glean.at
glean atproto atmosphere rss feed social app
14
fork

Configure Feed

Select the types of activity you want to include in your feed.

Extract favicon resolution logic into helper function

+27 -25
+15
internal/feed/discover.go
··· 45 45 }, 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 63 func findFeedURLs(base *url.URL, links []string) []string { 49 64 var feeds []string 50 65 for _, link := range links {
+2 -7
internal/feed/fetcher.go
··· 185 185 if result != nil && result.Feed.FaviconURL != "" { 186 186 _ = s.store.UpdateFeedFavicon(ctx, feed.URL, result.Feed.FaviconURL) 187 187 } else if feed.FaviconURL == "" { 188 - siteURL := feed.SiteURL 189 - if siteURL == "" { 190 - siteURL = feed.URL 191 - } 192 188 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) 196 191 } 197 192 }() 198 193 }
+10 -18
internal/server/feeds_handler.go
··· 87 87 return 88 88 } 89 89 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 + }() 100 95 } 101 96 102 97 var feedTitle string ··· 240 235 continue 241 236 } 242 237 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) 251 243 252 244 var subURI, subCID string 253 245 if client != nil {