| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- // SPDX-FileCopyrightText: Copyright The Miniflux Authors. All rights reserved.
- // SPDX-License-Identifier: Apache-2.0
- package icon // import "miniflux.app/v2/internal/reader/icon"
- import (
- "log/slog"
- "miniflux.app/v2/internal/config"
- "miniflux.app/v2/internal/model"
- "miniflux.app/v2/internal/proxyrotator"
- "miniflux.app/v2/internal/reader/fetcher"
- "miniflux.app/v2/internal/storage"
- )
- type iconChecker struct {
- store *storage.Storage
- feed *model.Feed
- }
- func NewIconChecker(store *storage.Storage, feed *model.Feed) *iconChecker {
- return &iconChecker{
- store: store,
- feed: feed,
- }
- }
- func (c *iconChecker) UpdateOrCreateFeedIcon() {
- requestBuilder := fetcher.NewRequestBuilder().
- WithUserAgent(c.feed.UserAgent, config.Opts.HTTPClientUserAgent()).
- WithCookie(c.feed.Cookie).
- WithTimeout(config.Opts.HTTPClientTimeout()).
- WithProxyRotator(proxyrotator.ProxyRotatorInstance).
- WithCustomFeedProxyURL(c.feed.ProxyURL).
- WithCustomApplicationProxyURL(config.Opts.HTTPClientProxyURL()).
- UseCustomApplicationProxyURL(c.feed.FetchViaProxy).
- IgnoreTLSErrors(c.feed.AllowSelfSignedCertificates).
- DisableHTTP2(c.feed.DisableHTTP2)
- iconFinder := newIconFinder(requestBuilder, c.feed.SiteURL, c.feed.IconURL)
- if icon, err := iconFinder.findIcon(); err != nil {
- slog.Debug("Unable to find feed icon",
- slog.Int64("feed_id", c.feed.ID),
- slog.String("website_url", c.feed.SiteURL),
- slog.String("feed_icon_url", c.feed.IconURL),
- slog.Any("error", err),
- )
- } else if icon == nil {
- slog.Debug("No icon found",
- slog.Int64("feed_id", c.feed.ID),
- slog.String("website_url", c.feed.SiteURL),
- slog.String("feed_icon_url", c.feed.IconURL),
- )
- } else {
- if err := c.store.StoreFeedIcon(c.feed.ID, icon); err != nil {
- slog.Error("Unable to store feed icon",
- slog.Int64("feed_id", c.feed.ID),
- slog.String("website_url", c.feed.SiteURL),
- slog.String("feed_icon_url", c.feed.IconURL),
- slog.Any("error", err),
- )
- } else {
- slog.Debug("Feed icon stored",
- slog.Int64("feed_id", c.feed.ID),
- slog.String("website_url", c.feed.SiteURL),
- slog.String("feed_icon_url", c.feed.IconURL),
- slog.Int64("icon_id", icon.ID),
- slog.String("icon_hash", icon.Hash),
- )
- }
- }
- }
- func (c *iconChecker) CreateFeedIconIfMissing() {
- if c.store.HasFeedIcon(c.feed.ID) {
- slog.Debug("Feed icon already exists",
- slog.Int64("feed_id", c.feed.ID),
- )
- return
- }
- c.UpdateOrCreateFeedIcon()
- }
|