diff --git a/internal/api/v1/favicon.go b/internal/api/v1/favicon.go index 325274cc..131525eb 100644 --- a/internal/api/v1/favicon.go +++ b/internal/api/v1/favicon.go @@ -47,7 +47,11 @@ func FavIcon(c *gin.Context) { c.JSON(http.StatusBadRequest, apitypes.Error("invalid url", err)) return } - fetchResult, err := homepage.FetchFavIconFromURL(c.Request.Context(), &iconURL) + icon := &iconURL + if request.Variant != homepage.IconVariantNone { + icon = icon.WithVariant(request.Variant) + } + fetchResult, err := homepage.FetchFavIconFromURL(c.Request.Context(), icon) if err != nil { homepage.GinFetchError(c, fetchResult.StatusCode, err) return @@ -80,7 +84,7 @@ func GetFavIconFromAlias(ctx context.Context, alias string, variant homepage.Ico hp := r.HomepageItem() if hp.Icon != nil { if hp.Icon.IconSource == homepage.IconSourceRelative { - result, err = homepage.FindIcon(ctx, r, *hp.Icon.FullURL) + result, err = homepage.FindIcon(ctx, r, *hp.Icon.FullURL, variant) } else if variant != homepage.IconVariantNone { result, err = homepage.FetchFavIconFromURL(ctx, hp.Icon.WithVariant(variant)) if err != nil { @@ -92,7 +96,7 @@ func GetFavIconFromAlias(ctx context.Context, alias string, variant homepage.Ico } } else { // try extract from "link[rel=icon]" - result, err = homepage.FindIcon(ctx, r, "/") + result, err = homepage.FindIcon(ctx, r, "/", variant) } if result.StatusCode == 0 { result.StatusCode = http.StatusOK diff --git a/internal/homepage/favicon.go b/internal/homepage/favicon.go index 236bffd1..0960dcc1 100644 --- a/internal/homepage/favicon.go +++ b/internal/homepage/favicon.go @@ -150,9 +150,13 @@ type contextValue struct { uri string } -func FindIcon(ctx context.Context, r route, uri string) (FetchResult, error) { +func FindIcon(ctx context.Context, r route, uri string, variant IconVariant) (FetchResult, error) { for _, ref := range r.References() { - result, err := fetchIcon(ctx, sanitizeName(ref)) + ref = sanitizeName(ref) + if variant != IconVariantNone { + ref += "-" + string(variant) + } + result, err := fetchIcon(ctx, ref) if err == nil { return result, err } diff --git a/internal/idlewatcher/handle_http.go b/internal/idlewatcher/handle_http.go index 84f4ba55..dd7763f0 100644 --- a/internal/idlewatcher/handle_http.go +++ b/internal/idlewatcher/handle_http.go @@ -104,13 +104,13 @@ func (w *Watcher) getFavIcon(ctx context.Context) (result homepage.FetchResult, hp := r.HomepageItem() if hp.Icon != nil { if hp.Icon.IconSource == homepage.IconSourceRelative { - result, err = homepage.FindIcon(ctx, r, *hp.Icon.FullURL) + result, err = homepage.FindIcon(ctx, r, *hp.Icon.FullURL, homepage.IconVariantNone) } else { result, err = homepage.FetchFavIconFromURL(ctx, hp.Icon) } } else { // try extract from "link[rel=icon]" - result, err = homepage.FindIcon(ctx, r, "/") + result, err = homepage.FindIcon(ctx, r, "/", homepage.IconVariantNone) } if result.StatusCode == 0 { result.StatusCode = http.StatusOK