feat(services): add async favicon caching for all webviews
- commit
- b1848136b925e4c0c42c1b4948717dec06be8b8f
- author
- bamen · · 2025-10-06 16:28 UTC
- committer
- bamen · · 2025-10-06 17:26 UTC
- parent
- 7aeab86
- signature
- unsigned
1 file · +13 -0
M internal/services/browser.go +13 -0
| @@ -636,6 +636,11 @@ func (s *BrowserService) handleFaviconChanged(pageURL string, pngData []byte) { | |||
| 636 | 636 | } | |
| 637 | 637 | } | |
| 638 | 638 | ||
| 639 | + | // ProcessFaviconURI is a public wrapper for handling favicon URI changes from any webview | |
| 640 | + | func (s *BrowserService) ProcessFaviconURI(pageURL string, faviconURI string) { | |
| 641 | + | s.handleFaviconURIChanged(pageURL, faviconURI) | |
| 642 | + | } | |
| 643 | + | ||
| 639 | 644 | // handleFaviconURIChanged processes favicon URI changes from WebKit's native favicon database | |
| 640 | 645 | func (s *BrowserService) handleFaviconURIChanged(pageURL string, faviconURI string) { | |
| 641 | 646 | log.Printf("[favicon] Processing favicon URI for %s: %s", pageURL, faviconURI) | |
| @@ -663,4 +668,12 @@ func (s *BrowserService) handleFaviconURIChanged(pageURL string, faviconURI stri | |||
| 663 | 668 | if err := s.dbQueries.UpdateHistoryFavicon(ctx, faviconNullString, pageURL); err != nil { | |
| 664 | 669 | log.Printf("[browser] Failed to update favicon URI in database for %s: %v", pageURL, err) | |
| 665 | 670 | } | |
| 671 | + | ||
| 672 | + | // Download and cache the favicon asynchronously (same approach as dmenu) | |
| 673 | + | if faviconCache, err := cache.NewFaviconCache(); err == nil { | |
| 674 | + | faviconCache.CacheAsync(faviconURI) | |
| 675 | + | log.Printf("[favicon] Started async download of favicon from %s for page %s", faviconURI, pageURL) | |
| 676 | + | } else { | |
| 677 | + | log.Printf("[favicon] Failed to create favicon cache: %v", err) | |
| 678 | + | } | |
| 666 | 679 | } | |
| @@ -636,6 +636,11 @@ func (s *BrowserService) handleFaviconChanged(pageURL string, pngData []byte) { | |||||
| 636 | } | 636 | } | ||
| 637 | } | 637 | } | ||
| 638 | 638 | ||||
| 639 | + | // ProcessFaviconURI is a public wrapper for handling favicon URI changes from any webview | |||
| 640 | + | func (s *BrowserService) ProcessFaviconURI(pageURL string, faviconURI string) { | |||
| 641 | + | s.handleFaviconURIChanged(pageURL, faviconURI) | |||
| 642 | + | } | |||
| 643 | + | ||||
| 639 | // handleFaviconURIChanged processes favicon URI changes from WebKit's native favicon database | 644 | // handleFaviconURIChanged processes favicon URI changes from WebKit's native favicon database | ||
| 640 | func (s *BrowserService) handleFaviconURIChanged(pageURL string, faviconURI string) { | 645 | func (s *BrowserService) handleFaviconURIChanged(pageURL string, faviconURI string) { | ||
| 641 | log.Printf("[favicon] Processing favicon URI for %s: %s", pageURL, faviconURI) | 646 | log.Printf("[favicon] Processing favicon URI for %s: %s", pageURL, faviconURI) | ||
| @@ -663,4 +668,12 @@ func (s *BrowserService) handleFaviconURIChanged(pageURL string, faviconURI stri | |||||
| 663 | if err := s.dbQueries.UpdateHistoryFavicon(ctx, faviconNullString, pageURL); err != nil { | 668 | if err := s.dbQueries.UpdateHistoryFavicon(ctx, faviconNullString, pageURL); err != nil { | ||
| 664 | log.Printf("[browser] Failed to update favicon URI in database for %s: %v", pageURL, err) | 669 | log.Printf("[browser] Failed to update favicon URI in database for %s: %v", pageURL, err) | ||
| 665 | } | 670 | } | ||
| 671 | + | ||||
| 672 | + | // Download and cache the favicon asynchronously (same approach as dmenu) | |||
| 673 | + | if faviconCache, err := cache.NewFaviconCache(); err == nil { | |||
| 674 | + | faviconCache.CacheAsync(faviconURI) | |||
| 675 | + | log.Printf("[favicon] Started async download of favicon from %s for page %s", faviconURI, pageURL) | |||
| 676 | + | } else { | |||
| 677 | + | log.Printf("[favicon] Failed to create favicon cache: %v", err) | |||
| 678 | + | } | |||
| 666 | } | 679 | } | ||