diff --git a/kernel/api/router.go b/kernel/api/router.go index 13b809899..221e32a87 100644 --- a/kernel/api/router.go +++ b/kernel/api/router.go @@ -61,6 +61,7 @@ func ServeAPI(ginServer *gin.Engine) { ginServer.Handle("POST", "/api/storage/getLocalStorage", model.CheckAuth, getLocalStorage) ginServer.Handle("POST", "/api/storage/setLocalStorageVal", model.CheckAuth, setLocalStorageVal) ginServer.Handle("POST", "/api/storage/removeLocalStorageVal", model.CheckAuth, model.CheckReadonly, removeLocalStorageVal) + ginServer.Handle("POST", "/api/storage/removeLocalStorageVals", model.CheckAuth, model.CheckReadonly, removeLocalStorageVals) ginServer.Handle("POST", "/api/storage/setCriterion", model.CheckAuth, model.CheckReadonly, setCriterion) ginServer.Handle("POST", "/api/storage/getCriteria", model.CheckAuth, getCriteria) ginServer.Handle("POST", "/api/storage/removeCriterion", model.CheckAuth, model.CheckReadonly, removeCriterion) diff --git a/kernel/api/storage.go b/kernel/api/storage.go index eba738a41..8e47cda2a 100644 --- a/kernel/api/storage.go +++ b/kernel/api/storage.go @@ -95,6 +95,35 @@ func getCriteria(c *gin.Context) { ret.Data = data } +func removeLocalStorageVals(c *gin.Context) { + ret := gulu.Ret.NewResult() + defer c.JSON(http.StatusOK, ret) + + arg, ok := util.JsonArg(c, ret) + if !ok { + return + } + + var keys []string + keysArg := arg["keys"].([]interface{}) + for _, key := range keysArg { + keys = append(keys, key.(string)) + } + + err := model.RemoveLocalStorageVals(keys) + if nil != err { + ret.Code = -1 + ret.Msg = err.Error() + return + } + + app := arg["app"].(string) + evt := util.NewCmdResult("removeLocalStorageVal", 0, util.PushModeBroadcastMainExcludeSelfApp) + evt.AppId = app + evt.Data = map[string]interface{}{"keys": keys} + util.PushEvent(evt) +} + func removeLocalStorageVal(c *gin.Context) { ret := gulu.Ret.NewResult() defer c.JSON(http.StatusOK, ret) @@ -105,7 +134,7 @@ func removeLocalStorageVal(c *gin.Context) { } key := arg["key"].(string) - err := model.RemoveLocalStorageVal(key) + err := model.RemoveLocalStorageVals([]string{key}) if nil != err { ret.Code = -1 ret.Msg = err.Error() diff --git a/kernel/model/storage.go b/kernel/model/storage.go index 8b91f4c50..9371c9f8e 100644 --- a/kernel/model/storage.go +++ b/kernel/model/storage.go @@ -286,7 +286,7 @@ func getCriteria() (ret []*Criterion, err error) { var localStorageLock = sync.Mutex{} -func RemoveLocalStorageVal(key string) (err error) { +func RemoveLocalStorageVals(keys []string) (err error) { localStorageLock.Lock() defer localStorageLock.Unlock() @@ -295,7 +295,9 @@ func RemoveLocalStorageVal(key string) (err error) { return } - delete(localStorage, key) + for _, key := range keys { + delete(localStorage, key) + } return setLocalStorage(localStorage) }