Adds support for PushScheduling (#3722)
* Add support for push scheduling Add a configuration flag on the server to handle the availability of push scheduling. * Update push controller to skip sending only if scheduling is configured Only skip push sending if scheduling is configured * Update bad conventions * Add CLI definitions for push scheduling * Adds tests for pushTime * Adds test for scheduling * nits * Test for not scheduled
This commit is contained in:
@@ -12,8 +12,9 @@ export class PushController {
|
||||
throw new Parse.Error(Parse.Error.PUSH_MISCONFIGURED,
|
||||
'Missing push configuration');
|
||||
}
|
||||
// Replace the expiration_time with a valid Unix epoch milliseconds time
|
||||
body['expiration_time'] = PushController.getExpirationTime(body);
|
||||
// Replace the expiration_time and push_time with a valid Unix epoch milliseconds time
|
||||
body.expiration_time = PushController.getExpirationTime(body);
|
||||
body.push_time = PushController.getPushTime(body);
|
||||
// TODO: If the req can pass the checking, we return immediately instead of waiting
|
||||
// pushes to be sent. We probably change this behaviour in the future.
|
||||
let badgeUpdate = () => {
|
||||
@@ -49,6 +50,9 @@ export class PushController {
|
||||
onPushStatusSaved(pushStatus.objectId);
|
||||
return badgeUpdate();
|
||||
}).then(() => {
|
||||
if (body.push_time && config.hasPushScheduledSupport) {
|
||||
return Promise.resolve();
|
||||
}
|
||||
return config.pushControllerQueue.enqueue(body, where, config, auth, pushStatus);
|
||||
}).catch((err) => {
|
||||
return pushStatus.fail(err).then(() => {
|
||||
@@ -63,7 +67,7 @@ export class PushController {
|
||||
* @returns {Number|undefined} The expiration time if it exists in the request
|
||||
*/
|
||||
static getExpirationTime(body = {}) {
|
||||
var hasExpirationTime = !!body['expiration_time'];
|
||||
var hasExpirationTime = body.hasOwnProperty('expiration_time');
|
||||
if (!hasExpirationTime) {
|
||||
return;
|
||||
}
|
||||
@@ -84,6 +88,34 @@ export class PushController {
|
||||
}
|
||||
return expirationTime.valueOf();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get push time from the request body.
|
||||
* @param {Object} request A request object
|
||||
* @returns {Number|undefined} The push time if it exists in the request
|
||||
*/
|
||||
static getPushTime(body = {}) {
|
||||
var hasPushTime = body.hasOwnProperty('push_time');
|
||||
if (!hasPushTime) {
|
||||
return;
|
||||
}
|
||||
var pushTimeParam = body['push_time'];
|
||||
var pushTime;
|
||||
if (typeof pushTimeParam === 'number') {
|
||||
pushTime = new Date(pushTimeParam * 1000);
|
||||
} else if (typeof pushTimeParam === 'string') {
|
||||
pushTime = new Date(pushTimeParam);
|
||||
} else {
|
||||
throw new Parse.Error(Parse.Error.PUSH_MISCONFIGURED,
|
||||
body['push_time'] + ' is not valid time.');
|
||||
}
|
||||
// Check pushTime is valid or not, if it is not valid, pushTime is NaN
|
||||
if (!isFinite(pushTime)) {
|
||||
throw new Parse.Error(Parse.Error.PUSH_MISCONFIGURED,
|
||||
body['push_time'] + ' is not valid time.');
|
||||
}
|
||||
return pushTime;
|
||||
}
|
||||
}
|
||||
|
||||
export default PushController;
|
||||
|
||||
Reference in New Issue
Block a user