iproved favicon caching / ID system

This commit is contained in:
partisan 2025-05-07 12:54:51 +02:00
parent 4a0738745a
commit 255acb360f
2 changed files with 20 additions and 23 deletions

View file

@ -40,6 +40,7 @@ type SearchEngine struct {
type LinkParts struct { type LinkParts struct {
Domain template.HTML Domain template.HTML
Path template.HTML Path template.HTML
RootURL string // used by getFaviconProxyURL()
} }
// Helper function to render templates without elapsed time measurement // Helper function to render templates without elapsed time measurement
@ -131,11 +132,10 @@ func FormatElapsedTime(elapsed time.Duration) string {
} }
return fmt.Sprintf("%.2f %s", elapsed.Seconds(), Translate("seconds")) return fmt.Sprintf("%.2f %s", elapsed.Seconds(), Translate("seconds"))
} }
func FormatURLParts(rawURL string) (domain, path, rootURL string) {
func FormatURLParts(rawURL string) (domain, path string) {
parsed, err := url.Parse(rawURL) parsed, err := url.Parse(rawURL)
if err != nil { if err != nil || parsed.Host == "" {
return rawURL, "" return "", "", ""
} }
domain = parsed.Host domain = parsed.Host
@ -143,36 +143,33 @@ func FormatURLParts(rawURL string) (domain, path string) {
domain = domain[4:] domain = domain[4:]
} }
// Clean up the path - remove empty segments and trailing slashes rootURL = parsed.Scheme + "://" + parsed.Host
path = strings.Trim(parsed.Path, "/") path = strings.Trim(parsed.Path, "/")
pathSegments := strings.Split(path, "/") pathSegments := strings.Split(path, "/")
// Filter out empty segments
var cleanSegments []string var cleanSegments []string
for _, seg := range pathSegments { for _, seg := range pathSegments {
if seg != "" { if seg != "" {
cleanSegments = append(cleanSegments, seg) cleanSegments = append(cleanSegments, seg)
} }
} }
path = strings.Join(cleanSegments, "/") path = strings.Join(cleanSegments, "/")
return domain, path return domain, path, rootURL
} }
func FormatLinkHTML(rawURL string) LinkParts { func FormatLinkHTML(rawURL string) LinkParts {
domain, path := FormatURLParts(rawURL) domain, path, root := FormatURLParts(rawURL)
if path == "" { lp := LinkParts{
return LinkParts{ RootURL: root,
Domain: template.HTML(fmt.Sprintf(`<span class="result-domain">%s</span>`, template.HTMLEscapeString(domain))),
}
} }
// Only add separators between non-empty path segments lp.Domain = template.HTML(fmt.Sprintf(`<span class="result-domain">%s</span>`, template.HTMLEscapeString(domain)))
if path != "" {
pathDisplay := strings.ReplaceAll(path, "/", " ") pathDisplay := strings.ReplaceAll(path, "/", " ")
lp.Path = template.HTML(fmt.Sprintf(`<span class="result-path"> %s</span>`, template.HTMLEscapeString(pathDisplay)))
return LinkParts{
Domain: template.HTML(fmt.Sprintf(`<span class="result-domain">%s</span>`, template.HTMLEscapeString(domain))),
Path: template.HTML(fmt.Sprintf(`<span class="result-path"> %s</span>`, template.HTMLEscapeString(pathDisplay))),
} }
return lp
} }

View file

@ -68,8 +68,8 @@ func HandleTextSearch(w http.ResponseWriter, settings UserSettings, query string
// First format the link // First format the link
prettyLink := FormatLinkHTML(r.URL) prettyLink := FormatLinkHTML(r.URL)
faviconID := faviconIDFromURL(r.URL) faviconID := faviconIDFromURL(prettyLink.RootURL)
faviconURL := getFaviconProxyURL("", r.URL) //string(prettyLink.Domain) faviconURL := getFaviconProxyURL("", prettyLink.RootURL)
decoratedResults = append(decoratedResults, DecoratedResult{ decoratedResults = append(decoratedResults, DecoratedResult{
TextSearchResult: r, TextSearchResult: r,