Compare commits

..

No commits in common. "06970755470d24cbedbc9bcc26389fa52d2fe310" and "443fd27a901aceeda203b602d798792fa0927bb7" have entirely different histories.

6 changed files with 55 additions and 18 deletions

View File

@ -154,7 +154,8 @@ func generateEmailAvatarLink(email string, size int, final bool) string {
return DefaultAvatarLink() return DefaultAvatarLink()
} }
enableFederatedAvatar := system_model.GetSettingBool(system_model.KeyPictureEnableFederatedAvatar) enableFederatedAvatarSetting, _ := system_model.GetSetting(system_model.KeyPictureEnableFederatedAvatar)
enableFederatedAvatar := enableFederatedAvatarSetting.GetValueBool()
var err error var err error
if enableFederatedAvatar && system_model.LibravatarService != nil { if enableFederatedAvatar && system_model.LibravatarService != nil {
@ -175,7 +176,9 @@ func generateEmailAvatarLink(email string, size int, final bool) string {
return urlStr return urlStr
} }
disableGravatar := system_model.GetSettingBool(system_model.KeyPictureDisableGravatar) disableGravatarSetting, _ := system_model.GetSetting(system_model.KeyPictureDisableGravatar)
disableGravatar := disableGravatarSetting.GetValueBool()
if !disableGravatar { if !disableGravatar {
// copy GravatarSourceURL, because we will modify its Path. // copy GravatarSourceURL, because we will modify its Path.
avatarURLCopy := *system_model.GravatarSourceURL avatarURLCopy := *system_model.GravatarSourceURL

View File

@ -93,13 +93,13 @@ func GetSettingNoCache(key string) (*Setting, error) {
} }
// GetSetting returns the setting value via the key // GetSetting returns the setting value via the key
func GetSetting(key string) (string, error) { func GetSetting(key string) (*Setting, error) {
return cache.GetString(genSettingCacheKey(key), func() (string, error) { return cache.Get(genSettingCacheKey(key), func() (*Setting, error) {
res, err := GetSettingNoCache(key) res, err := GetSettingNoCache(key)
if err != nil { if err != nil {
return "", err return nil, err
} }
return res.SettingValue, nil return res, nil
}) })
} }
@ -107,8 +107,7 @@ func GetSetting(key string) (string, error) {
// none existing keys and errors are ignored and result in false // none existing keys and errors are ignored and result in false
func GetSettingBool(key string) bool { func GetSettingBool(key string) bool {
s, _ := GetSetting(key) s, _ := GetSetting(key)
v, _ := strconv.ParseBool(s) return s.GetValueBool()
return v
} }
// GetSettings returns specific settings // GetSettings returns specific settings
@ -185,8 +184,8 @@ func SetSettingNoVersion(key, value string) error {
// SetSetting updates a users' setting for a specific key // SetSetting updates a users' setting for a specific key
func SetSetting(setting *Setting) error { func SetSetting(setting *Setting) error {
_, err := cache.GetString(genSettingCacheKey(setting.SettingKey), func() (string, error) { _, err := cache.Set(genSettingCacheKey(setting.SettingKey), func() (*Setting, error) {
return setting.SettingValue, upsertSettingValue(strings.ToLower(setting.SettingKey), setting.SettingValue, setting.Version) return setting, upsertSettingValue(strings.ToLower(setting.SettingKey), setting.SettingValue, setting.Version)
}) })
if err != nil { if err != nil {
return err return err
@ -268,7 +267,7 @@ func Init() error {
enableFederatedAvatar = false enableFederatedAvatar = false
} }
if enableFederatedAvatar || !disableGravatar { if disableGravatar || !enableFederatedAvatar {
var err error var err error
GravatarSourceURL, err = url.Parse(setting.GravatarSource) GravatarSourceURL, err = url.Parse(setting.GravatarSource)
if err != nil { if err != nil {

View File

@ -68,7 +68,9 @@ func (u *User) AvatarLinkWithSize(size int) string {
useLocalAvatar := false useLocalAvatar := false
autoGenerateAvatar := false autoGenerateAvatar := false
disableGravatar := system_model.GetSettingBool(system_model.KeyPictureDisableGravatar) disableGravatarSetting, _ := system_model.GetSetting(system_model.KeyPictureDisableGravatar)
disableGravatar := disableGravatarSetting.GetValueBool()
switch { switch {
case u.UseCustomAvatar: case u.UseCustomAvatar:

View File

@ -54,13 +54,13 @@ func genSettingCacheKey(userID int64, key string) string {
} }
// GetSetting returns the setting value via the key // GetSetting returns the setting value via the key
func GetSetting(uid int64, key string) (string, error) { func GetSetting(uid int64, key string) (*Setting, error) {
return cache.GetString(genSettingCacheKey(uid, key), func() (string, error) { return cache.Get(genSettingCacheKey(uid, key), func() (*Setting, error) {
res, err := GetSettingNoCache(uid, key) res, err := GetSettingNoCache(uid, key)
if err != nil { if err != nil {
return "", err return nil, err
} }
return res.SettingValue, nil return res, nil
}) })
} }
@ -155,7 +155,7 @@ func SetUserSetting(userID int64, key, value string) error {
return err return err
} }
_, err := cache.GetString(genSettingCacheKey(userID, key), func() (string, error) { _, err := cache.Set(genSettingCacheKey(userID, key), func() (string, error) {
return value, upsertUserSettingValue(userID, key, value) return value, upsertUserSettingValue(userID, key, value)
}) })

View File

@ -46,6 +46,39 @@ func GetCache() mc.Cache {
return conn return conn
} }
// Get returns the key value from cache with callback when no key exists in cache
func Get[V interface{}](key string, getFunc func() (V, error)) (V, error) {
if conn == nil || setting.CacheService.TTL == 0 {
return getFunc()
}
cached := conn.Get(key)
if value, ok := cached.(V); ok {
return value, nil
}
value, err := getFunc()
if err != nil {
return value, err
}
return value, conn.Put(key, value, setting.CacheService.TTLSeconds())
}
// Set updates and returns the key value in the cache with callback. The old value is only removed if the updateFunc() is successful
func Set[V interface{}](key string, valueFunc func() (V, error)) (V, error) {
if conn == nil || setting.CacheService.TTL == 0 {
return valueFunc()
}
value, err := valueFunc()
if err != nil {
return value, err
}
return value, conn.Put(key, value, setting.CacheService.TTLSeconds())
}
// GetString returns the key value from cache with callback when no key exists in cache // GetString returns the key value from cache with callback when no key exists in cache
func GetString(key string, getFunc func() (string, error)) (string, error) { func GetString(key string, getFunc func() (string, error)) (string, error) {
if conn == nil || setting.CacheService.TTL == 0 { if conn == nil || setting.CacheService.TTL == 0 {

View File

@ -69,7 +69,7 @@ func newPictureService() {
} }
func GetDefaultDisableGravatar() bool { func GetDefaultDisableGravatar() bool {
return OfflineMode return !OfflineMode
} }
func GetDefaultEnableFederatedAvatar(disableGravatar bool) bool { func GetDefaultEnableFederatedAvatar(disableGravatar bool) bool {