@@ -12,6 +12,7 @@ import (
1212 "strings"
1313
1414 "code.gitea.io/gitea/models/db"
15+ "code.gitea.io/gitea/modules/cache"
1516 "code.gitea.io/gitea/modules/setting"
1617 "code.gitea.io/gitea/modules/timeutil"
1718
@@ -35,6 +36,10 @@ func (s *Setting) TableName() string {
3536}
3637
3738func (s * Setting ) GetValueBool () bool {
39+ if s == nil {
40+ return false
41+ }
42+
3843 b , _ := strconv .ParseBool (s .SettingValue )
3944 return b
4045}
@@ -75,8 +80,8 @@ func IsErrDataExpired(err error) bool {
7580 return ok
7681}
7782
78- // GetSetting returns specific setting
79- func GetSetting (key string ) (* Setting , error ) {
83+ // GetSettingNoCache returns specific setting without using the cache
84+ func GetSettingNoCache (key string ) (* Setting , error ) {
8085 v , err := GetSettings ([]string {key })
8186 if err != nil {
8287 return nil , err
@@ -87,6 +92,24 @@ func GetSetting(key string) (*Setting, error) {
8792 return v [key ], nil
8893}
8994
95+ // GetSetting returns the setting value via the key
96+ func GetSetting (key string ) (* Setting , error ) {
97+ return cache .Get (genSettingCacheKey (key ), func () (* Setting , error ) {
98+ res , err := GetSettingNoCache (key )
99+ if err != nil {
100+ return nil , err
101+ }
102+ return res , nil
103+ })
104+ }
105+
106+ // GetSettingBool return bool value of setting,
107+ // none existing keys and errors are ignored and result in false
108+ func GetSettingBool (key string ) bool {
109+ s , _ := GetSetting (key )
110+ return s .GetValueBool ()
111+ }
112+
90113// GetSettings returns specific settings
91114func GetSettings (keys []string ) (map [string ]* Setting , error ) {
92115 for i := 0 ; i < len (keys ); i ++ {
@@ -139,12 +162,13 @@ func GetAllSettings() (AllSettings, error) {
139162
140163// DeleteSetting deletes a specific setting for a user
141164func DeleteSetting (setting * Setting ) error {
165+ cache .Remove (genSettingCacheKey (setting .SettingKey ))
142166 _ , err := db .GetEngine (db .DefaultContext ).Delete (setting )
143167 return err
144168}
145169
146170func SetSettingNoVersion (key , value string ) error {
147- s , err := GetSetting (key )
171+ s , err := GetSettingNoCache (key )
148172 if IsErrSettingIsNotExist (err ) {
149173 return SetSetting (& Setting {
150174 SettingKey : key ,
@@ -160,9 +184,13 @@ func SetSettingNoVersion(key, value string) error {
160184
161185// SetSetting updates a users' setting for a specific key
162186func SetSetting (setting * Setting ) error {
163- if err := upsertSettingValue (strings .ToLower (setting .SettingKey ), setting .SettingValue , setting .Version ); err != nil {
187+ _ , err := cache .Set (genSettingCacheKey (setting .SettingKey ), func () (* Setting , error ) {
188+ return setting , upsertSettingValue (strings .ToLower (setting .SettingKey ), setting .SettingValue , setting .Version )
189+ })
190+ if err != nil {
164191 return err
165192 }
193+
166194 setting .Version ++
167195 return nil
168196}
@@ -213,7 +241,7 @@ var (
213241
214242func Init () error {
215243 var disableGravatar bool
216- disableGravatarSetting , err := GetSetting (KeyPictureDisableGravatar )
244+ disableGravatarSetting , err := GetSettingNoCache (KeyPictureDisableGravatar )
217245 if IsErrSettingIsNotExist (err ) {
218246 disableGravatar = setting .GetDefaultDisableGravatar ()
219247 disableGravatarSetting = & Setting {SettingValue : strconv .FormatBool (disableGravatar )}
@@ -224,7 +252,7 @@ func Init() error {
224252 }
225253
226254 var enableFederatedAvatar bool
227- enableFederatedAvatarSetting , err := GetSetting (KeyPictureEnableFederatedAvatar )
255+ enableFederatedAvatarSetting , err := GetSettingNoCache (KeyPictureEnableFederatedAvatar )
228256 if IsErrSettingIsNotExist (err ) {
229257 enableFederatedAvatar = setting .GetDefaultEnableFederatedAvatar (disableGravatar )
230258 enableFederatedAvatarSetting = & Setting {SettingValue : strconv .FormatBool (enableFederatedAvatar )}
0 commit comments