@@ -12,6 +12,7 @@ import (
12
12
"strings"
13
13
14
14
"code.gitea.io/gitea/models/db"
15
+ "code.gitea.io/gitea/modules/cache"
15
16
"code.gitea.io/gitea/modules/setting"
16
17
"code.gitea.io/gitea/modules/timeutil"
17
18
@@ -35,6 +36,10 @@ func (s *Setting) TableName() string {
35
36
}
36
37
37
38
func (s * Setting ) GetValueBool () bool {
39
+ if s == nil {
40
+ return false
41
+ }
42
+
38
43
b , _ := strconv .ParseBool (s .SettingValue )
39
44
return b
40
45
}
@@ -75,8 +80,8 @@ func IsErrDataExpired(err error) bool {
75
80
return ok
76
81
}
77
82
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 ) {
80
85
v , err := GetSettings ([]string {key })
81
86
if err != nil {
82
87
return nil , err
@@ -87,6 +92,24 @@ func GetSetting(key string) (*Setting, error) {
87
92
return v [key ], nil
88
93
}
89
94
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
+
90
113
// GetSettings returns specific settings
91
114
func GetSettings (keys []string ) (map [string ]* Setting , error ) {
92
115
for i := 0 ; i < len (keys ); i ++ {
@@ -139,12 +162,13 @@ func GetAllSettings() (AllSettings, error) {
139
162
140
163
// DeleteSetting deletes a specific setting for a user
141
164
func DeleteSetting (setting * Setting ) error {
165
+ cache .Remove (genSettingCacheKey (setting .SettingKey ))
142
166
_ , err := db .GetEngine (db .DefaultContext ).Delete (setting )
143
167
return err
144
168
}
145
169
146
170
func SetSettingNoVersion (key , value string ) error {
147
- s , err := GetSetting (key )
171
+ s , err := GetSettingNoCache (key )
148
172
if IsErrSettingIsNotExist (err ) {
149
173
return SetSetting (& Setting {
150
174
SettingKey : key ,
@@ -160,9 +184,13 @@ func SetSettingNoVersion(key, value string) error {
160
184
161
185
// SetSetting updates a users' setting for a specific key
162
186
func 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 {
164
191
return err
165
192
}
193
+
166
194
setting .Version ++
167
195
return nil
168
196
}
@@ -213,7 +241,7 @@ var (
213
241
214
242
func Init () error {
215
243
var disableGravatar bool
216
- disableGravatarSetting , err := GetSetting (KeyPictureDisableGravatar )
244
+ disableGravatarSetting , err := GetSettingNoCache (KeyPictureDisableGravatar )
217
245
if IsErrSettingIsNotExist (err ) {
218
246
disableGravatar = setting .GetDefaultDisableGravatar ()
219
247
disableGravatarSetting = & Setting {SettingValue : strconv .FormatBool (disableGravatar )}
@@ -224,7 +252,7 @@ func Init() error {
224
252
}
225
253
226
254
var enableFederatedAvatar bool
227
- enableFederatedAvatarSetting , err := GetSetting (KeyPictureEnableFederatedAvatar )
255
+ enableFederatedAvatarSetting , err := GetSettingNoCache (KeyPictureEnableFederatedAvatar )
228
256
if IsErrSettingIsNotExist (err ) {
229
257
enableFederatedAvatar = setting .GetDefaultEnableFederatedAvatar (disableGravatar )
230
258
enableFederatedAvatarSetting = & Setting {SettingValue : strconv .FormatBool (enableFederatedAvatar )}
0 commit comments