detached b184813

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) {
636636 }
637637 }
638638
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+
639644 // handleFaviconURIChanged processes favicon URI changes from WebKit's native favicon database
640645 func (s *BrowserService) handleFaviconURIChanged(pageURL string, faviconURI string) {
641646 log.Printf("[favicon] Processing favicon URI for %s: %s", pageURL, faviconURI)
@@ -663,4 +668,12 @@ func (s *BrowserService) handleFaviconURIChanged(pageURL string, faviconURI stri
663668 if err := s.dbQueries.UpdateHistoryFavicon(ctx, faviconNullString, pageURL); err != nil {
664669 log.Printf("[browser] Failed to update favicon URI in database for %s: %v", pageURL, err)
665670 }
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+ }
666679 }
@@ -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 database644 // 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 }

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 8

Tags 42

↑↓ moveenter openesc close