fixed bug for irrelevant results (caused by showing only results in the user's language)
This commit is contained in:
parent
20890e8717
commit
088d92c1ea
8 changed files with 110 additions and 86 deletions
101
user-settings.go
101
user-settings.go
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue