MCPcopy Create free account
hub / github.com/daodst/chat / PutPushRuleAttrByRuleID

Function PutPushRuleAttrByRuleID

clientapi/routing/pushrules.go:219–267  ·  view source on GitHub ↗
(ctx context.Context, scope, kind, ruleID, attr string, body io.Reader, device *userapi.Device, userAPI userapi.ClientUserAPI)

Source from the content-addressed store, hash-verified

217}
218
219func PutPushRuleAttrByRuleID(ctx context.Context, scope, kind, ruleID, attr string, body io.Reader, device *userapi.Device, userAPI userapi.ClientUserAPI) util.JSONResponse {
220 var newPartialRule pushrules.Rule
221 if err := json.NewDecoder(body).Decode(&newPartialRule); err != nil {
222 return util.JSONResponse{
223 Code: http.StatusBadRequest,
224 JSON: jsonerror.BadJSON(err.Error()),
225 }
226 }
227 if newPartialRule.Actions == nil {
228 // This ensures json.Marshal encodes the empty list as [] rather than null.
229 newPartialRule.Actions = []*pushrules.Action{}
230 }
231
232 attrGet, err := pushRuleAttrGetter(attr)
233 if err != nil {
234 return errorResponse(ctx, err, "pushRuleAttrGetter failed")
235 }
236 attrSet, err := pushRuleAttrSetter(attr)
237 if err != nil {
238 return errorResponse(ctx, err, "pushRuleAttrSetter failed")
239 }
240
241 ruleSets, err := queryPushRules(ctx, device.UserID, userAPI)
242 if err != nil {
243 return errorResponse(ctx, err, "queryPushRules failed")
244 }
245 ruleSet := pushRuleSetByScope(ruleSets, pushrules.Scope(scope))
246 if ruleSet == nil {
247 return errorResponse(ctx, jsonerror.InvalidArgumentValue("invalid push rule set"), "pushRuleSetByScope failed")
248 }
249 rulesPtr := pushRuleSetKindPointer(ruleSet, pushrules.Kind(kind))
250 if rulesPtr == nil {
251 return errorResponse(ctx, jsonerror.InvalidArgumentValue("invalid push rules kind"), "pushRuleSetKindPointer failed")
252 }
253 i := pushRuleIndexByID(*rulesPtr, ruleID)
254 if i < 0 {
255 return errorResponse(ctx, jsonerror.NotFound("push rule ID not found"), "pushRuleIndexByID failed")
256 }
257
258 if !reflect.DeepEqual(attrGet((*rulesPtr)[i]), attrGet(&newPartialRule)) {
259 attrSet((*rulesPtr)[i], &newPartialRule)
260
261 if err := putPushRules(ctx, device.UserID, ruleSets, userAPI); err != nil {
262 return errorResponse(ctx, err, "putPushRules failed")
263 }
264 }
265
266 return util.JSONResponse{Code: http.StatusOK, JSON: struct{}{}}
267}
268
269func queryPushRules(ctx context.Context, userID string, userAPI userapi.ClientUserAPI) (*pushrules.AccountRuleSets, error) {
270 var res userapi.QueryPushRulesResponse

Callers 1

SetupFunction · 0.85

Calls 9

pushRuleAttrGetterFunction · 0.85
errorResponseFunction · 0.85
pushRuleAttrSetterFunction · 0.85
queryPushRulesFunction · 0.85
pushRuleSetByScopeFunction · 0.85
pushRuleSetKindPointerFunction · 0.85
pushRuleIndexByIDFunction · 0.85
putPushRulesFunction · 0.85
ErrorMethod · 0.45

Tested by

no test coverage detected