diff --git a/lib/client.js b/lib/client.js index fb64ea8fe..31f80c7e6 100644 --- a/lib/client.js +++ b/lib/client.js @@ -2238,7 +2238,7 @@ MatrixClient.prototype.setPushRuleEnabled = function(scope, kind, $ruleId: ruleId }); return this._http.authedRequest( - callback, "PUT", path, undefined, enabled ? 'true' : 'false' + callback, "PUT", path, undefined, {"enabled": enabled} ); }; @@ -2259,6 +2259,11 @@ MatrixClient.prototype.getRoomPushRule = function(scope, roomId) { } } } + else { + throw new Error( + "SyncApi.sync() must be done before accessing to push rules." + ); + } }; /** @@ -2283,7 +2288,7 @@ MatrixClient.prototype.setRoomMutePushRule = function(scope, roomId, mute) { } if (!mute) { - // Remove the rule only it is a muting rule + // Remove the rule only if it is a muting rule if (hasDontNotifyRule) { deferred = this.deletePushRule(scope, "room", roomPushRule.rule_id); } @@ -2296,45 +2301,46 @@ MatrixClient.prototype.setRoomMutePushRule = function(scope, roomId, mute) { } else if (!hasDontNotifyRule) { // Remove the existing one before setting the mute push rule - var deferred2 = q.defer(); + // This is a workaround to SYN-590 (Push rule update fails) + deferred = q.defer(); this.deletePushRule(scope, "room", roomPushRule.rule_id) .done(function() { self.addPushRule(scope, "room", roomId, { actions: ["dont_notify"] }).done(function() { - deferred2.resolve(); + deferred.resolve(); }, function(err) { - deferred2.reject(err); + deferred.reject(err); }); }, function(err) { - deferred2.reject(err); + deferred.reject(err); }); - deferred = deferred2.promise; + deferred = deferred.promise; } } if (deferred) { // Update this.pushRules when the operation completes - var deferred3 = q.defer(); + var ruleRefreshDeferred = q.defer(); deferred.done(function() { self.getPushRules().done(function(result) { self.pushRules = result; - deferred3.resolve(); + ruleRefreshDeferred.resolve(); }, function(err) { - deferred3.reject(err); + ruleRefreshDeferred.reject(err); }); }, function(err) { // Update it even if the previous operation fails. This can help the // app to recover when push settings has been modifed from another client self.getPushRules().done(function(result) { self.pushRules = result; - deferred3.reject(err); + ruleRefreshDeferred.reject(err); }, function(err2) { - deferred3.reject(err); + ruleRefreshDeferred.reject(err); }); }); - return deferred3.promise; + return ruleRefreshDeferred.promise; } };