Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Switch riot-web to bluebird #4565

Merged
merged 8 commits into from Jul 13, 2017
@@ -54,6 +54,7 @@
"dependencies": {
"babel-polyfill": "^6.5.0",
"babel-runtime": "^6.11.6",
"bluebird": "^3.5.0",
"browser-request": "^0.3.3",
"classnames": "^2.1.2",
"draft-js": "^0.8.1",
@@ -69,7 +70,6 @@
"matrix-react-sdk": "0.9.7",
"modernizr": "^3.1.0",
"pako": "^1.0.5",
"q": "^1.4.1",
"react": "^15.4.0",
"react-dnd": "^2.1.4",
"react-dnd-html5-backend": "^2.1.2",
@@ -16,7 +16,7 @@ limitations under the License.

"use strict";

var q = require("q");
import Promise from 'bluebird';
var Matrix = require("matrix-js-sdk");
var Room = Matrix.Room;
var CallHandler = require('matrix-react-sdk/lib/CallHandler');
@@ -53,11 +53,11 @@ ConferenceCall.prototype._joinConferenceUser = function() {
// Make sure the conference user is in the group chat room
var groupRoom = this.client.getRoom(this.groupRoomId);
if (!groupRoom) {
return q.reject("Bad group room ID");
return Promise.reject("Bad group room ID");
}
var member = groupRoom.getMember(this.confUserId);
if (member && member.membership === "join") {
return q();
return Promise.resolve();
}
return this.client.invite(this.groupRoomId, this.confUserId);
};
@@ -75,7 +75,7 @@ ConferenceCall.prototype._getConferenceUserRoom = function() {
}
}
if (confRoom) {
return q(confRoom);
return Promise.resolve(confRoom);
}
return this.client.createRoom({
preset: "private_chat",
@@ -28,7 +28,7 @@ var linkify = require('linkifyjs');
var linkifyString = require('linkifyjs/string');
var linkifyMatrix = require('matrix-react-sdk/lib/linkify-matrix');
var sanitizeHtml = require('sanitize-html');
var q = require('q');
import Promise from 'bluebird';

import { _t } from 'matrix-react-sdk/lib/languageHandler';

@@ -117,7 +117,7 @@ module.exports = React.createClass({
},

getMoreRooms: function() {
if (!MatrixClientPeg.get()) return q();
if (!MatrixClientPeg.get()) return Promise.resolve();

const my_filter_string = this.state.filterString;
const my_server = this.state.roomServer;
@@ -266,7 +266,7 @@ module.exports = React.createClass({
},

onFillRequest: function(backwards) {
if (backwards || !this.nextBatch) return q(false);
if (backwards || !this.nextBatch) return Promise.resolve(false);

return this.getMoreRooms();
},
@@ -17,7 +17,7 @@ limitations under the License.

'use strict';

import q from 'q';
import Promise from 'bluebird';
import React from 'react';
import classNames from 'classnames';
import sdk from 'matrix-react-sdk';
@@ -61,7 +61,7 @@ module.exports = React.createClass({
const roomId = this.props.room.roomId;
var cli = MatrixClientPeg.get();
if (!cli.isGuest()) {
q.delay(500).then(function() {
Promise.delay(500).then(function() {
if (tagNameOff !== null && tagNameOff !== undefined) {
cli.deleteRoomTag(roomId, tagNameOff).finally(function() {
// Close the context menu
@@ -212,7 +212,7 @@ module.exports = React.createClass({
RoomNotifs.setRoomNotifsState(this.props.room.roomId, newState).done(() => {
// delay slightly so that the user can see their state change
// before closing the menu
return q.delay(500).then(() => {
return Promise.delay(500).then(() => {
if (this._unmounted) return;
// Close the context menu
if (this.props.onFinished) {
@@ -17,7 +17,7 @@ limitations under the License.
'use strict';
var React = require('react');
import { _t, _tJsx } from 'matrix-react-sdk/lib/languageHandler';
var q = require("q");
import Promise from 'bluebird';
var sdk = require('matrix-react-sdk');
var MatrixClientPeg = require('matrix-react-sdk/lib/MatrixClientPeg');
var UserSettingsStore = require('matrix-react-sdk/lib/UserSettingsStore');
@@ -236,7 +236,7 @@ module.exports = React.createClass({
}
}

q.all(deferreds).done(function() {
Promise.all(deferreds).done(function() {
self._refreshFromServer();
}, function(error) {
var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
@@ -306,7 +306,7 @@ module.exports = React.createClass({
}
}

q.all(deferreds).done(function(resps) {
Promise.all(deferreds).done(function(resps) {
self._refreshFromServer();
}, function(error) {
var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
@@ -361,7 +361,7 @@ module.exports = React.createClass({
}

// Then, add the new ones
q.all(removeDeferreds).done(function(resps) {
Promise.all(removeDeferreds).done(function(resps) {
var deferreds = [];

var pushRuleVectorStateKind = self.state.vectorContentRules.vectorState;
@@ -399,7 +399,7 @@ module.exports = React.createClass({
}
}

q.all(deferreds).done(function(resps) {
Promise.all(deferreds).done(function(resps) {
self._refreshFromServer();
}, onError);
}, onError);
@@ -431,7 +431,9 @@ module.exports = React.createClass({
'global', kind, LEGACY_RULES[rule.rule_id], portLegacyActions(rule.actions)
).then( function() {
return cli.deletePushRule('global', kind, rule.rule_id);
})
}).catch( (e) => {
console.warn(`Error when porting legacy rule: ${e}`);
});
}(kind, rule));
}
}
@@ -440,7 +442,7 @@ module.exports = React.createClass({
if (needsUpdate.length > 0) {
// If some of the rules need to be ported then wait for the porting
// to happen and then fetch the rules again.
return q.allSettled(needsUpdate).then( function() {
return q.all(needsUpdate).then( function() {

This comment has been minimized.

Copy link
@dbkr

dbkr Jul 13, 2017

Member

You missed a 'q'. Also surely allSettled != all? Looks like you want reflect (which used to be settle)

This comment has been minimized.

Copy link
@richvdh

richvdh Jul 13, 2017

Author Member

You missed a 'q'.

Oops.

Also surely allSettled != all? Looks like you want reflect (which used to be settle)

the reflect stuff looks confusing to me, so I tried to avoid it, and instead added the catch handler at 1d2d086#diff-beb48c1c7c8677b581a5b4177c817f28R434 to make the promises all succeed.

This comment has been minimized.

Copy link
@dbkr

dbkr Jul 13, 2017

Member

ah, I see

return cli.getPushRules();
});
} else {
@@ -594,7 +596,7 @@ module.exports = React.createClass({
self.setState({pushers: resp.pushers});
});

q.all([pushRulesPromise, pushersPromise]).then(function() {
Promise.all([pushRulesPromise, pushersPromise]).then(function() {
self.setState({
phase: self.phases.DISPLAY
});
@@ -65,7 +65,7 @@ var sdk = require("matrix-react-sdk");
const PlatformPeg = require("matrix-react-sdk/lib/PlatformPeg");
sdk.loadSkin(require('../component-index'));
var VectorConferenceHandler = require('../VectorConferenceHandler');
var q = require('q');
import Promise from 'bluebird';
var request = require('browser-request');
import * as UserSettingsStore from 'matrix-react-sdk/lib/UserSettingsStore';
import * as languageHandler from 'matrix-react-sdk/lib/languageHandler';
@@ -188,7 +188,7 @@ var makeRegistrationUrl = function(params) {
window.addEventListener('hashchange', onHashChange);

function getConfig() {
let deferred = q.defer();
let deferred = Promise.defer();

request(
{ method: "GET", url: "config.json" },
@@ -20,7 +20,7 @@ limitations under the License.
import VectorBasePlatform, {updateCheckStatusEnum} from './VectorBasePlatform';
import dis from 'matrix-react-sdk/lib/dispatcher';
import { _t } from 'matrix-react-sdk/lib/languageHandler';
import q from 'q';
import Promise from 'bluebird';
import {remote, ipcRenderer} from 'electron';
import rageshake from '../rageshake';

@@ -173,7 +173,7 @@ export default class ElectronPlatform extends VectorBasePlatform {
}

getAppVersion(): Promise<string> {
return q(remote.app.getVersion());
return Promise.resolve(remote.app.getVersion());
}

startUpdateCheck() {
@@ -201,7 +201,7 @@ export default class ElectronPlatform extends VectorBasePlatform {
isElectron(): boolean { return true; }

requestNotificationPermission(): Promise<string> {
return q('granted');
return Promise.resolve('granted');
}

reload() {
@@ -21,7 +21,7 @@ import VectorBasePlatform, {updateCheckStatusEnum} from './VectorBasePlatform';
import request from 'browser-request';
import dis from 'matrix-react-sdk/lib/dispatcher.js';
import { _t } from 'matrix-react-sdk/lib/languageHandler';
import q from 'q';
import Promise from 'bluebird';

import url from 'url';
import UAParser from 'ua-parser-js';
@@ -68,7 +68,7 @@ export default class WebPlatform extends VectorBasePlatform {
// annoyingly, the latest spec says this returns a
// promise, but this is only supported in Chrome 46
// and Firefox 47, so adapt the callback API.
const defer = q.defer();
const defer = Promise.defer();
global.Notification.requestPermission((result) => {
defer.resolve(result);
});
@@ -103,7 +103,7 @@ export default class WebPlatform extends VectorBasePlatform {
}

_getVersion(): Promise<string> {
const deferred = q.defer();
const deferred = Promise.defer();

// We add a cachebuster to the request to make sure that we know about
// the most recent version on the origin server. That might not
@@ -132,7 +132,7 @@ export default class WebPlatform extends VectorBasePlatform {

getAppVersion(): Promise<string> {
if (this.runningVersion !== null) {
return q(this.runningVersion);
return Promise.resolve(this.runningVersion);
}
return this._getVersion();
}
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/

import q from "q";
import Promise from 'bluebird';

// This module contains all the code needed to log the console, persist it to
// disk and submit bug reports. Rationale is as follows:
@@ -116,7 +116,7 @@ class IndexedDBLogStore {
*/
connect() {
let req = this.indexedDB.open("logs");
return q.Promise((resolve, reject) => {
return new Promise((resolve, reject) => {
req.onsuccess = (event) => {
this.db = event.target.result;
// Periodically flush logs to local storage / indexeddb
@@ -193,7 +193,7 @@ class IndexedDBLogStore {
}
// there is no flush promise or there was but it has finished, so do
// a brand new one, destroying the chain which may have been built up.
this.flushPromise = q.Promise((resolve, reject) => {
this.flushPromise = new Promise((resolve, reject) => {
if (!this.db) {
// not connected yet or user rejected access for us to r/w to
// the db.
@@ -277,7 +277,7 @@ class IndexedDBLogStore {
}

function deleteLogs(id) {
return q.Promise((resolve, reject) => {
return new Promise((resolve, reject) => {
const txn = db.transaction(
["logs", "logslastmod"], "readwrite"
);
@@ -375,7 +375,7 @@ class IndexedDBLogStore {
*/
function selectQuery(store, keyRange, resultMapper) {
const query = store.openCursor(keyRange);
return q.Promise((resolve, reject) => {
return new Promise((resolve, reject) => {
let results = [];
query.onerror = (event) => {
reject(new Error("Query failed: " + event.target.errorCode));
@@ -15,7 +15,7 @@ limitations under the License.
*/

import pako from 'pako';
import q from "q";
import Promise from 'bluebird';

import MatrixClientPeg from 'matrix-react-sdk/lib/MatrixClientPeg';
import PlatformPeg from 'matrix-react-sdk/lib/PlatformPeg';
@@ -100,7 +100,7 @@ export default async function sendBugReport(bugReportEndpoint, opts) {
}

function _submitReport(endpoint, body, progressCallback) {
const deferred = q.defer();
const deferred = Promise.defer();

const req = new XMLHttpRequest();
req.open("POST", endpoint);
@@ -33,7 +33,7 @@ var React = require('react');
var ReactDOM = require('react-dom');
var ReactTestUtils = require('react-addons-test-utils');
var expect = require('expect');
var q = require('q');
import Promise from 'bluebird';

var test_utils = require('../test-utils');
var MockHttpBackend = require('matrix-mock-request');
@@ -106,7 +106,7 @@ describe('joining a room', function () {
.respond(200, {});
function awaitSync(attempts) {
if (syncDone) {
return q();
return Promise.resolve();
}
if (!attempts) {
throw new Error("Gave up waiting for /sync")
@@ -118,7 +118,7 @@ describe('joining a room', function () {
// wait for the directory requests
httpBackend.when('POST', '/publicRooms').respond(200, {chunk: []});
httpBackend.when('GET', '/thirdparty/protocols').respond(200, {});
return q.all([
return Promise.all([
httpBackend.flush('/thirdparty/protocols'),
httpBackend.flush('/publicRooms'),
]);
@@ -139,14 +139,14 @@ describe('joining a room', function () {
httpBackend.when('GET', '/rooms/'+encodeURIComponent(ROOM_ID)+"/initialSync")
.respond(401, {errcode: 'M_GUEST_ACCESS_FORBIDDEN'});

return q.all([
return Promise.all([
httpBackend.flush('/directory/room/'+encodeURIComponent(ROOM_ALIAS), 1, 200),
httpBackend.flush('/rooms/'+encodeURIComponent(ROOM_ID)+"/initialSync", 1, 200),
]);
}).then(() => {
httpBackend.verifyNoOutstandingExpectation();

return q.delay(1);
return Promise.delay(1);
}).then(() => {
// we should now have a roomview, with a preview bar
roomView = ReactTestUtils.findRenderedComponentWithType(
@@ -164,14 +164,14 @@ describe('joining a room', function () {
.respond(200, {room_id: ROOM_ID});
}).then(() => {
// wait for the join request to be made
return q.delay(1);
return Promise.delay(1);
}).then(() => {
// and again, because the state update has to go to the store and
// then one dispatch within the store, then to the view
// XXX: This is *super flaky*: a better way would be to declare
// that we expect a certain state transition to happen, then wait
// for that transition to occur.
return q.delay(1);
return Promise.delay(1);
}).then(() => {
// the roomview should now be loading
expect(roomView.state.room).toBe(null);
@@ -186,7 +186,7 @@ describe('joining a room', function () {
}).then(() => {
httpBackend.verifyNoOutstandingExpectation();

return q.delay(1);
return Promise.delay(1);
}).then(() => {
// We've joined, expect this to false
expect(roomView.state.joining).toBe(false);
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.