fixed bug for irrelevant results (caused by showing only results in the user's language)

This commit is contained in:
partisan 2024-09-27 13:16:36 +02:00
parent 20890e8717
commit 088d92c1ea
8 changed files with 110 additions and 86 deletions

View file

@ -8,52 +8,52 @@ import (
)
type UserSettings struct {
Theme string
Language string
SafeSearch string
IsThemeDark bool
Theme string
SiteLanguage string
SearchLanguage string
SafeSearch string
IsThemeDark bool
}
func loadUserSettings(w http.ResponseWriter, r *http.Request) UserSettings {
var settings UserSettings
saveRequired := false // Track if we need to save settings back
saveRequired := false
// Load theme
if cookie, err := r.Cookie("theme"); err == nil {
settings.Theme = cookie.Value
} else {
settings.Theme = "dark" // Default theme
saveRequired = true // No cookie found, need to save this later
settings.Theme = "dark"
saveRequired = true
}
// Load language
if cookie, err := r.Cookie("language"); err == nil {
settings.Language = cookie.Value
// Load site language
if cookie, err := r.Cookie("site_language"); err == nil {
settings.SiteLanguage = cookie.Value
} else {
settings.Language = "" // Set language to empty, handled later
}
// If language is empty, get it from the Accept-Language header
if settings.Language == "" {
// If no site language is set, use Accept-Language or default to "en"
acceptLang := r.Header.Get("Accept-Language")
if acceptLang != "" {
// Get the first language from Accept-Language header and normalize
settings.Language = normalizeLangCode(strings.Split(acceptLang, ",")[0])
settings.SiteLanguage = normalizeLangCode(strings.Split(acceptLang, ",")[0])
} else {
settings.Language = "en" // Default language if Accept-Language is not present
settings.SiteLanguage = "en" // Default language
}
saveRequired = true // No language cookie found, need to save
saveRequired = true
}
// Load search language (can be empty)
if cookie, err := r.Cookie("search_language"); err == nil {
settings.SearchLanguage = cookie.Value
}
// Load safe search
if cookie, err := r.Cookie("safe"); err == nil {
settings.SafeSearch = cookie.Value
} else {
settings.SafeSearch = "" // Default safe search off
saveRequired = true // No safe search cookie found, need to save
settings.SafeSearch = ""
saveRequired = true
}
// Save settings if required (no cookie found for any of the settings)
if saveRequired {
saveUserSettings(w, settings)
}
@ -62,19 +62,27 @@ func loadUserSettings(w http.ResponseWriter, r *http.Request) UserSettings {
}
func saveUserSettings(w http.ResponseWriter, settings UserSettings) {
expiration := time.Now().Add(90 * 24 * time.Hour) // 90 days from now
expiration := time.Now().Add(90 * 24 * time.Hour)
http.SetCookie(w, &http.Cookie{
Name: "theme",
Value: settings.Theme,
Path: "/",
Expires: expiration, // Expiration time needs to be set otherwise it will expire immediately
Secure: true, // Ensure cookie is sent over HTTPS only
Expires: expiration,
Secure: true,
SameSite: http.SameSiteStrictMode,
})
http.SetCookie(w, &http.Cookie{
Name: "language",
Value: settings.Language,
Name: "site_language",
Value: settings.SiteLanguage,
Path: "/",
Expires: expiration,
Secure: true,
SameSite: http.SameSiteStrictMode,
})
http.SetCookie(w, &http.Cookie{
Name: "search_language",
Value: settings.SearchLanguage,
Path: "/",
Expires: expiration,
Secure: true,
@ -101,15 +109,24 @@ func handleSaveSettings(w http.ResponseWriter, r *http.Request) {
if theme := r.FormValue("theme"); theme != "" {
settings.Theme = theme
}
if lang := r.FormValue("lang"); lang != "" {
settings.Language = lang
// Update site language if provided
if siteLang := r.FormValue("site_lang"); siteLang != "" {
settings.SiteLanguage = siteLang
} else {
// If lang is empty, try to get from Accept-Language header
// If site_lang is empty, try to get from Accept-Language header
acceptLang := r.Header.Get("Accept-Language")
if acceptLang != "" {
settings.Language = strings.Split(acceptLang, ",")[0]
settings.SiteLanguage = strings.Split(acceptLang, ",")[0]
}
}
// Update search language if provided
if searchLang := r.FormValue("search_lang"); searchLang != "" {
settings.SearchLanguage = searchLang
}
// Update safe search if provided
if safe := r.FormValue("safe"); safe != "" {
settings.SafeSearch = safe
}
@ -127,17 +144,19 @@ func handleSettings(w http.ResponseWriter, r *http.Request) {
settings = loadUserSettings(w, r)
data := struct {
LanguageOptions []LanguageOption
CurrentLang string
Theme string
Safe string
IsThemeDark bool
LanguageOptions []LanguageOption
CurrentSiteLang string
CurrentSearchLang string
Theme string
Safe string
IsThemeDark bool
}{
LanguageOptions: languageOptions,
CurrentLang: settings.Language,
Theme: settings.Theme,
Safe: settings.SafeSearch,
IsThemeDark: settings.IsThemeDark,
LanguageOptions: languageOptions,
CurrentSiteLang: settings.SiteLanguage,
CurrentSearchLang: settings.SearchLanguage,
Theme: settings.Theme,
Safe: settings.SafeSearch,
IsThemeDark: settings.IsThemeDark,
}
printDebug("Rendering settings with data: %+v", data)